daniel_c 发表于 2011-5-11 11:43:53

关于SS和SP的问题....

本帖最后由 loop 于 2011-5-19 16:19 编辑

就是我在SS中声明
dw16dup (0)

然后sp = 20H..这里应该是可以有32字节...也就是16个字....理应上面的16个0全部在ss中....但却只有12个...
如果sp设其他值或者改dw....每次的差值都正好是四.........

但是它每次都只是在ss中显示12个零......不关我怎么写都会有四个dw是不能清零的.....请问这是为什么?谢谢....

sunhopp 发表于 2011-5-16 21:52:36

好奇怪!ds中声明 dw16 dup (0)就没有问题!在ss中就不行。期待高手来解答!

超越自我 发表于 2011-5-16 23:29:43

本帖最后由 超越自我 于 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 14:46:08

本帖最后由 lxbwyr 于 2011-5-17 16:20 编辑

回答有误,也在寻找中。

winddyj 发表于 2011-5-17 16:08:58

DEBUG自己用了
把栈段直接用程序在屏幕上打印出来
应该就可以得到想要的结果了

x8888k 发表于 2011-5-17 18:33:25

weixianlang 发表于 2011-5-19 00:22:42

本帖最后由 weixianlang 于 2011-5-19 00:32 编辑

不是压入标志寄存器吧,所谓保护现场,和中断执行程序一样的.
还有就是,它不到20h,只到1Eh!

daniel_c 发表于 2011-5-19 16:28:39

weixianlang 发表于 2011-5-19 00:22 static/image/common/back.gif
不是压入标志寄存器吧,所谓保护现场,和中断执行程序一样的.
还有就是,它不到20h,只到1Eh!

我也有想过...但他的SP值还是从你设置那里算起的...而不是清零的最后一位.....
页: [1]
查看完整版本: 关于SS和SP的问题....