在代码段中使用栈的例题问题
老师你好:在代码段中使用栈这一课的开始例子中如下:
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
s0: pop cs:
add bx,2
loop s0
mov ax,4c00h
int 21h
code ends
end start
我在debug中单步执行到push循环的第四次时,有时是第五次,代码段定义的dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h,这8个数用-D命令查看时,后面的几个数总是被替换成别的数了,导致后面的push没有把正确的数压栈,不知道为什么。
虽然数字变了 但是仍然可以正确压栈的 但是我的在压栈的时候后面的数就变了,我是一个t一个t的执行的8次数就变了,你的是直接执行了P不知道有什么区别,再有就是为什么原来的数会变呢。 是因为执行mov ss,ax mov sp,32这两句后栈出现了变化 多出了数据,数据压栈的时候数据也前移了。这个程序不会得到想要的结果。 在Debug中:
1、中断调试时(比如:用 t 命令单步调试),会把一些“有用”的数据先行保存起来(压栈);
2、等你再执行下一个命令前,再把这些“有用”的数据取出来(出栈)然后再执行你输入的命令;
3、不断重复(1、2)的步骤,或者结束程序 似乎有些懂了,请看一下“dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
”这是原数据,“dw 0,0,0,0,0,0,0,0”这是建立的栈的地方,我在单步执行压栈循环的时候,比如执行完第四个循环的时候,假设栈数据是这样的“0,0,0,0,0abc,0789,0456,0123”(正常状态),这个时候恰巧系统有要保存的数据入栈,就把栈第五个数据位置(本来是0的)变成了系统数据“0,0,0,AAAA,0abc,0789,0456,0123”,随着单步执行,系统数据也不断的压站出站,最终导致了,栈顶指针都延伸到了我的原数据“0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
”所在的位置,所以看到的现象是我的原数据后部分有些数据都改变了,0123h,0456h,0789h,0abch,0defh,0fedh,142ch,fefeh,是这样的吗,望高手赐教,还有就是p指令就不会产生系统的压站出站数据吗
页:
[1]