岁月、匆匆 发表于 2012-2-6 06:47:19

实验三,执行到POP AX

assume cs:codesg
codesg segment
start: mov ax,2000H
mov ss,ax
mov sp,0
add sp,4
pop ax
pop bx
push ax
push bx
pop ax
pop bx
mov ax,4c00H
int 21H
codesg ends
end start
执行到 POP AX后 ,就不继续执行

http://p13.freep.cn/p.aspx?u=v20_p13_photo_1202060647315254_0.jpg

小马过河 发表于 2012-2-6 10:13:54

你先 的一下内存2000h处有没有数据,最好用200h~3ffh处的内存 应该是触碰到了不该触碰的东西

Seely 发表于 2012-2-6 11:45:29

和代码本身没有关系,是debug的问题,最近问这个的比较多。
原因在debug的T命令上。
debug中的t命令

书上说是用了单步中断的原理

1.取得中断码
2.tf if入栈
3.cs ip入栈
4.响应中断
由于执行T命令时要压栈数据,你堆栈只有4,所以会这样。
下面是我用其他程序调试的,可以正常执行。





不过由于你未压栈就直接pop ax 和 bx,而此时2000:4指向的内存空间全部是0。
ax=bx=0,你后面的操作依然没有改变它们的值。

16511232 发表于 2013-1-27 16:05:30


你看的书应该是第一版
在第二版中是
add sp,10

shansongh 发表于 2013-1-28 13:46:06

似乎,和我的问题差不多
页: [1]
查看完整版本: 实验三,执行到POP AX