Andmiou 发表于 2013-9-10 16:46:31

王爽《汇编语言》 ,实验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。请问这是怎么回事呢

欠你的幸福 发表于 2013-9-10 22:35:28

你的代码我调试了一下,就像你到说的那步被T出来了,我个人考虑B到14 是8字POP是出栈的意思IP自动加2   也就是IP+16+2      我也是才学的,说的可能不对,

康小泡 发表于 2013-11-11 11:33:47

个人觉得是栈那里出老问题我也是才学   你的栈太小老存东西存满老sp大一点就不会有这种情况int 3是一个断点

搓搓 发表于 2013-11-12 22:13:41

你没把栈的概念弄清楚 应该先push 入栈再pop出栈 sp是指向栈顶的 定义sp=4 该栈空间为 2000:0 3 四个字节的内存空间
pop执行是先输出栈 然后sp自动执行sp=sp+2 此时sp指向 2000:6 下方溢出 debug遇到未知错误 程序意外结束      不一定准确 参考一下

狼性刀锋 发表于 2013-11-12 22:55:10

是栈的问题因为 sp出事值为4pop ax之后就为0栈实际上已经空了 再执行出栈会出现错误
于是调用3号中断处理。你把sp设置的大一点就会避免这种情况!

trump 发表于 2014-6-30 20:20:26

1. 本机调试未出现该问题。
2. 看不出该问题原因。
页: [1]
查看完整版本: 王爽《汇编语言》 ,实验3有点问题不清楚