请教16位汇编语言,栈的问题。
assume cs:codecode 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指令直接跳过去,结果是正确的。 经本菜鸟测试:程序会在循环过程中自动修改dw,0……0之外的内容,导致入栈的数据发生变化。
犯罪嫌疑人:push、add、loop
az4121 发表于 2013-4-17 21:05 static/image/common/back.gif
经本菜鸟测试:程序会在循环过程中自动修改dw,0……0之外的内容,导致入栈的数据发生变化。
犯罪嫌疑人: ...
我也发现了,程序应该没有什么错误,直接执行是正确的,但是单步不行,谢谢你的意见 用debug进行t命令单步调试的话,会影响ss里的值的。因为在执行过t命令后,程序就停止了。相当于在那条指令之后加了一个断点,而如果有断点存在的话,程序会在执行断点之前保存现场,将一些数据,代码压入栈中,所以栈里的值会发生变化 1971827035 发表于 2013-4-18 12:10 static/image/common/back.gif
用debug进行t命令单步调试的话,会影响ss里的值的。因为在执行过t命令后,程序就停止了。相当于在那条指令之 ...
强烈支持楼主ing……谢谢兄弟,问题解决了
页:
[1]