鱼C论坛

 找回密码
 立即注册
查看: 2724|回复: 11

call 函数出现了问题

[复制链接]
发表于 2016-8-19 18:33:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 qwe1231069 于 2016-9-7 15:46 编辑

之前编写了一个汇编程序,由于ret一直返回不到正确的地址,所以想试下call   ret 函数
结果出现了一个意料之外的问题
执行到call函数时 程序退出了.表示不理解
2.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-9-21 23:47:48 | 显示全部楼层
本帖最后由 qwe1231069 于 2016-9-21 23:50 编辑

我现在学到第十章了(我先看的视频,现在才开始一步步练习)
我的什么都没用的程序之所以错误就是在call函数之前动了堆栈的ss和sp
因为call函数原理就是push ip,jmp t而我赋值sp为2所以直接完蛋(ip为俩字节)
谢谢你之前回答我这么蛋疼的问题,加个好友行吗?@黑龍
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-19 18:35:40 | 显示全部楼层
程序没有任何功能就是想试试call、ret函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-19 19:22:59 | 显示全部楼层
代码不全啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-19 21:03:49 | 显示全部楼层
1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-19 21:07:59 | 显示全部楼层

我已经把我的无意义的代码全都发来了
assume cs:codesg

codesg segment

start:        mov ax,1
        mov bx,2
        mov dx,0
        mov cx,3
s:        mov ss,ax
        mov sp,bx
        call t                
        inc dx
        loop s

        mov ax,4c00h
        int 21h


t:        push ax
        push bx
        push dx
        mov ax,3
        mov bx,4
        mov dx,0
        pop dx
        pop ax
        pop bx
        ret


codesg ends

end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-19 21:08:39 | 显示全部楼层
新手见谅见谅
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-19 21:42:01 | 显示全部楼层
你跟进call看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-19 23:32:26 | 显示全部楼层
我又试了一遍,这次执行到mov ss,ax  时错误,可能是占用了其他软件的内存(我的cs明明是13f8怎么成0000了)
把它删除后,程序正常运行没问题了!!(没有再一次退出)这是什么情况,为啥我会遇到这种奇怪的问题 2.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-19 23:33:46 | 显示全部楼层
另外问一下什么叫跟进
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-21 23:16:30 | 显示全部楼层
t:        push ax
        push bx
        push dx
        mov ax,3
        mov bx,4
        mov dx,0
        pop dx
        pop ax
        pop bx
        ret

你 push 和 pop 的顺序有问题啊 ax 应该最后 pop
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-22 00:26:03 | 显示全部楼层
本帖最后由 donkkong 于 2016-8-22 00:33 编辑

跟进就是看着cpu一步一步地走呗,像你上面按“T”,这个程序上面写了pop的位置次序错了,需要修正,还有sp应该设多些,例如改成
mov bx,10h
mov sp, bx
程序用了四次栈,导致栈溢出了。猜测可能是这个原因,另外0001:0002这些地址是最好不要使用的,好像是中断向量表来的,只是猜测,我也是新手,猜错莫怪
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-6 16:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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