鱼C论坛

 找回密码
 立即注册
查看: 2801|回复: 2

第六章开始就晕了

[复制链接]
发表于 2011-7-26 08:41:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 哮月苍狼 于 2011-7-28 11:24 编辑

书上第128页,程序6.3
  1. assume cs:codesg
  2. codesg segment
  3. dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h ;(0~f)
  4. dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;(10-2f)
  5. start:mov ax,cs
  6. mov ss,ax
  7. mov sp,30h ;这里的SP是因为把10~2f的内存空间当作栈使用,初始栈为空,所以SP=2e+2=30H,我这么分析没问题吧?

  8. 令我不解的是书上130页,程序6.4,内存空间同样都是(10-2f)这段空间当成栈空间使用,为什么程序6.3,SP=30H,而下面的程序6.4,sp=20H????
  9. assume cs:code,ds:data,ss:stack
  10. data segment
  11. dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h ;(0~f)
  12. data ends
  13. stack segment
  14. dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;(10-2f)
  15. stack ends
  16. start:mov ax,stack
  17. mov ss,ax
  18. mov sp,20h
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-7-26 11:21:32 | 显示全部楼层
呵呵,我给说一说:6。3程序中数据段和栈段还有代码段是在同一段,三者起始地址相同,起如地址都是:codesg.所以偏移地址也就是sp=30H。而6.4程序中栈是单独定义的,是在数据段结束之后,才是栈的起始地址。stack segment
       dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0                                                                     ;(10-2f)
stack ends
这几行代码可以看出整个栈有16个字,即32个字节。那空栈的sp当然是指向32,即20H了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-7-27 16:32:34 | 显示全部楼层
sp=20H是因为stack段的底部漂移是。。。16字=32B=20h
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 05:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表