永远健康 发表于 2014-10-27 08:25:12

关于汇编方面的问题

assume cs:code
data 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 08:25:13

本帖最后由 avatar10010 于 2014-10-27 17:44 编辑

jmp short s1 这一句有问题,导致了入栈与出栈不平衡,ret找不到初始压入栈中的ip值,所以不能正常返回了

zhihuzheye 发表于 2014-10-27 17:12:15

很明显,栈已不平衡。
pop与push最好成对使用。
页: [1]
查看完整版本: 关于汇编方面的问题