|  | 
 
 发表于 2015-10-23 01:43:49
|
显示全部楼层
   本楼为最佳答案 
| 本帖最后由 康小泡 于 2015-10-23 13:32 编辑 
 当用T命令调试的时候,实际上触发了单步中断,而单步中断的时候,也会往栈里存东西,比如CS、IP、标志位之类的。程序的压栈操作,把单步中断保存的CS或IP覆盖掉了,所以使用T命令之后,就无法正确返回。
 解决办法:把栈的大小设大点
 
 附上我修改了一点点后的
 
 复制代码assume cs:codesg,ss:stack,ds:data
data segment
        dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0eh,0fh,0ffh
data ends
stack segment
        dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
stack ends
codesg segment
start:
                mov ax,data
                mov ds,ax
                
                mov ax,stack
                mov ss,ax
                mov sp,20h
                
                mov bx,0
                mov cx,8
                
         s: push [bx]
                add bx,2
                loop s 
                
                mov cx,8
                mov bx,0
        s0:        pop [bx]
                add bx,2
                loop s0
                
                mov ax,4c00h
                int 21h
codesg ends
end start
 
 ps:以后遇到有代码的这个问题,最好是把代码贴出来,不要用图片的形式,不方便回答问题的。因为有时候直接看代码也看不出来是什么。
 | 
 |