关于SS和SP的问题....
本帖最后由 loop 于 2011-5-19 16:19 编辑就是我在SS中声明
dw16dup (0)
然后sp = 20H..这里应该是可以有32字节...也就是16个字....理应上面的16个0全部在ss中....但却只有12个...
如果sp设其他值或者改dw....每次的差值都正好是四.........
但是它每次都只是在ss中显示12个零......不关我怎么写都会有四个dw是不能清零的.....请问这是为什么?谢谢.... 好奇怪!ds中声明 dw16 dup (0)就没有问题!在ss中就不行。期待高手来解答!
本帖最后由 超越自我 于 2011-5-16 23:42 编辑
确实有这么一个问题,我也不理解为什么,针对这个问题我写了一段代码调试了一下:
代码:assume cs:code,ds:data,ss:stack
data segment
dw 16 dup(0)
data ends
stack segment
dw 16 dup(0)
stack ends
code segment
start:mov ax,stack
mov ss,ax
mov sp,20h
mov ax,data
mov ds,ax
mov bx,0
mov cx,16 ; 下面的截图是执行到此处的结果
s: push ds:
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end start
这是debug截图:
求高手解释!! 本帖最后由 lxbwyr 于 2011-5-17 16:20 编辑
回答有误,也在寻找中。 DEBUG自己用了
把栈段直接用程序在屏幕上打印出来
应该就可以得到想要的结果了 本帖最后由 weixianlang 于 2011-5-19 00:32 编辑
不是压入标志寄存器吧,所谓保护现场,和中断执行程序一样的.
还有就是,它不到20h,只到1Eh! weixianlang 发表于 2011-5-19 00:22 static/image/common/back.gif
不是压入标志寄存器吧,所谓保护现场,和中断执行程序一样的.
还有就是,它不到20h,只到1Eh!
我也有想过...但他的SP值还是从你设置那里算起的...而不是清零的最后一位.....
页:
[1]