鱼C论坛

 找回密码
 立即注册
查看: 1821|回复: 2

关于汇编方面的问题

[复制链接]
发表于 2014-10-27 08:25:12 | 显示全部楼层 |阅读模式
3鱼币
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,[si]
                        mov ch,0
                        jcxz ok
                        and byte ptr [si],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      想了很久,不明白。请高手能够给指点一下,不胜感激。

最佳答案

查看完整内容

jmp short s1 这一句有问题,导致了入栈与出栈不平衡,ret找不到初始压入栈中的ip值,所以不能正常返回了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-10-27 08:25:13 | 显示全部楼层
本帖最后由 avatar10010 于 2014-10-27 17:44 编辑

jmp short s1 这一句有问题,导致了入栈与出栈不平衡,ret找不到初始压入栈中的ip值,所以不能正常返回了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-10-27 17:12:15 | 显示全部楼层
很明显,栈已不平衡。
pop与push最好成对使用。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 02:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表