|
发表于 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:以后遇到有代码的这个问题,最好是把代码贴出来,不要用图片的形式,不方便回答问题的。因为有时候直接看代码也看不出来是什么。 |
|