红玫瑰 发表于 2013-4-17 10:23:30

请教16位汇编语言,栈的问题。

assume cs:code
code segment
    dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
    dw 0,0,0,0,0,0,0,0

start: mov ax,cs
         mov ss,ax
         mov sp,32
         mov bx,0

         mov cx,8
    s:   push cs:
         add bx,2
         loop s

   mov bx,0
   mov cx,8
   so: pop cs:
       add bx,2
      loop so

   mov ax,4c00h
   int 21h
code ends
end start

如上指令,为什么我用T指令单步跟踪的时候结果会是错误的,而用P指令和G指令直接跳过去,结果是正确的。

az4121 发表于 2013-4-17 21:05:35

经本菜鸟测试:程序会在循环过程中自动修改dw,0……0之外的内容,导致入栈的数据发生变化。
犯罪嫌疑人:push、add、loop

红玫瑰 发表于 2013-4-17 21:09:14

az4121 发表于 2013-4-17 21:05 static/image/common/back.gif
经本菜鸟测试:程序会在循环过程中自动修改dw,0……0之外的内容,导致入栈的数据发生变化。
犯罪嫌疑人: ...

我也发现了,程序应该没有什么错误,直接执行是正确的,但是单步不行,谢谢你的意见

1971827035 发表于 2013-4-18 12:10:00

用debug进行t命令单步调试的话,会影响ss里的值的。因为在执行过t命令后,程序就停止了。相当于在那条指令之后加了一个断点,而如果有断点存在的话,程序会在执行断点之前保存现场,将一些数据,代码压入栈中,所以栈里的值会发生变化

红玫瑰 发表于 2013-4-18 16:30:05

1971827035 发表于 2013-4-18 12:10 static/image/common/back.gif
用debug进行t命令单步调试的话,会影响ss里的值的。因为在执行过t命令后,程序就停止了。相当于在那条指令之 ...

强烈支持楼主ing……谢谢兄弟,问题解决了
页: [1]
查看完整版本: 请教16位汇编语言,栈的问题。