. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->第一个程序
主题 : :  实验3的问题,第一版书中的add sp,4,请会的人解答  [待解决] 回复[ 30次 ]   点击[ 1562次 ]  
linwangfeng
[帖 主] [ 发表时间:2009-05-02 12:08 ] 
荣誉值:0
信誉值:0
注册日期:2009-04-15 18:50
1.就书上的代码
code 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
code ends
end
这里运行到pop ax时会出现错误,大家可能都遇到过。而当我把代码换成

2
code segment
        mov ax,2000h
        mov ss,ax
        mov sp,4
        ;add sp,4
        pop ax
        pop bx
        push ax
        push bx
        pop ax
        pop bx
        mov ax,4c00h
        int 21h
code ends
end
时,代码执行到pop ax时,没有报错误,而是直接退出
Program terminated normally
麻烦会的同志解释这是为什么?
acool
[第1楼] [ 回复时间:2009-05-04 15:42 ] 
荣誉值:49
信誉值:0
注册日期:2008-10-15 16:15
第二版把这个地方改成add sp,10就是为了屏蔽这个问题,原因是实dos下调试那个程序都没问题,但是保护模式下的虚拟dos就会出问题(可以看看你附注一)

原因是当debug用t命令执行执行时,会往栈中压入几个数据保存当前的状态,以便于后面正确执行,而当sp过小时压入数据sp值就会发生环绕,而这样保护模式会认为程序有问题进而杀死它。即上面提示的错误。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved