754774889 发表于 2011-11-29 18:50:01

第六章的诡异问题,实在是搞不懂啊!请教高手

本帖最后由 754774889 于 2011-11-29 19:03 编辑

assume cs:code
code segment
   dw 0123h,0456h,0789h,0abch
         dw 0,0,0,0,0
start:mov ax,cs
   mov ss,ax
         mov sp,12h
   mov bx,0
         mov cx,4h
   s:push cs:
   add bx,2h
         loop s
         mov bx,0
         mov cx,4h
   x:pop cs:
   add bx,2h
         loop x
         mov ax,4c00h
         int 21h
code ends
end start





上面试我写的代码,为什么执行以后就是不成功呢?可是在定义栈段的那里改成dw 0,0,0,0,0,0,0,0程序的结果就是正确的。我想问下,就是我定义的栈的空间明明已经够存放那些数据了,不会发生栈顶超界问题,为什么结果还是不正确呢?
还有,我再问下,在debug调试中用什么命令可以一步执行完循环指令,不用一步一步的执行?!谢谢

Mr.C 发表于 2011-11-29 19:04:30

最近刚好在复习汇编这两个问题撞枪口了哈。{:5_109:}
一,理论上转移多少数据,开僻多大的栈空间。
实际上,执行程序时,栈顶位置总是被系统存放一些CS,IP等数据。这些数据跟程序无关,但不留空间还不行。
好像说最少得留X+3个内存单元。所以课本里留的是X*2的栈空间。
二,P 可以一步完成循环;G可以一步到达指定位置。

754774889 发表于 2011-11-29 19:08:07

Mr.C 发表于 2011-11-29 19:04 static/image/common/back.gif
最近刚好在复习汇编这两个问题撞枪口了哈。
一,理论上转移多少数据,开僻多大的栈空间。
实际上 ...

非常感谢你的答案,谢谢!!!!
请允许我再问个问题
我们应该留多少空间才会够呢?

754774889 发表于 2011-11-29 19:10:05

754774889 发表于 2011-11-29 19:08 static/image/common/back.gif
非常感谢你的答案,谢谢!!!!
请允许我再问个问题
我们应该留多少空间才会够呢?

哦,不好意思,我没注意看你的答案!我懂啦!谢谢你!

Mr.C 发表于 2011-11-29 19:11:07

经有关人士测试最少db 13 dup (0) 你用dw就 dw 7 dup (0)就够了。
页: [1]
查看完整版本: 第六章的诡异问题,实在是搞不懂啊!请教高手