王爽《汇编语言》 ,实验3有点问题不清楚
首先是汇编代码,很简单的一段:assume cs:abc
abc segment
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
abc ends
end
然后编译连接都没有问题,接下来用debug单步跟踪的时候,执行完第一个pop ax的时候,发现 cs:ip的地址被改了,接下来本应该执行pop bx的,却被指向了另外一段奇怪的代码。如图:
从开始执行 mov ax,2000mov ss,ax add sp,+04 pop ax 都是正常的。
pop ax之后,cs的地址变成了0000,ip的地址变成了0014。请问这是怎么回事呢
你的代码我调试了一下,就像你到说的那步被T出来了,我个人考虑B到14 是8字POP是出栈的意思IP自动加2 也就是IP+16+2 我也是才学的,说的可能不对, 个人觉得是栈那里出老问题我也是才学 你的栈太小老存东西存满老sp大一点就不会有这种情况int 3是一个断点 你没把栈的概念弄清楚 应该先push 入栈再pop出栈 sp是指向栈顶的 定义sp=4 该栈空间为 2000:0 3 四个字节的内存空间
pop执行是先输出栈 然后sp自动执行sp=sp+2 此时sp指向 2000:6 下方溢出 debug遇到未知错误 程序意外结束 不一定准确 参考一下 是栈的问题因为 sp出事值为4pop ax之后就为0栈实际上已经空了 再执行出栈会出现错误
于是调用3号中断处理。你把sp设置的大一点就会避免这种情况! 1. 本机调试未出现该问题。
2. 看不出该问题原因。
页:
[1]