关于汇编方面的问题
assume cs:codedata segment
db'word',0
db'unix',0
db'wind',0
db'good',0
data ends
code segment
start: mov ax,data
mov ds,ax
mov bx,0
mov cx,4
s: mov si,bx
call s1
add bx,5
loop s
mov ax,4c00h
int 21h
s1: push cx
push si
mov cl,
mov ch,0
jcxz ok
and byte ptr ,11011111b
inc si
jmp short s1
ok: pop si
pop cx
ret
code ends
end start
这个程序编译连接后,用debug调试时,如果用g命令程序会直接退出。用t命令单步调试发现,程序执行ret指令后,没有返回到call后面的ip继续执行,而是返回到了第二条指令,mov ds,ax 想了很久,不明白。请高手能够给指点一下,不胜感激。
本帖最后由 avatar10010 于 2014-10-27 17:44 编辑
jmp short s1 这一句有问题,导致了入栈与出栈不平衡,ret找不到初始压入栈中的ip值,所以不能正常返回了 很明显,栈已不平衡。
pop与push最好成对使用。
页:
[1]