鱼C论坛

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

call 函数出现了问题

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

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

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

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

之前编写了一个汇编程序,由于ret一直返回不到正确的地址,所以想试下call   ret 函数
结果出现了一个意料之外的问题
执行到call函数时 程序退出了.表示不理解
2.png
小甲鱼最新课程 -> https://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为俩字节)
谢谢你之前回答我这么蛋疼的问题,加个好友行吗?@黑龍
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-19 18:35:40 | 显示全部楼层
程序没有任何功能就是想试试call、ret函数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-19 19:22:59 | 显示全部楼层
代码不全啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-19 21:03:49 | 显示全部楼层
1.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

  2. codesg segment

  3. start:        mov ax,1
  4.         mov bx,2
  5.         mov dx,0
  6.         mov cx,3
  7. s:        mov ss,ax
  8.         mov sp,bx
  9.         call t               
  10.         inc dx
  11.         loop s

  12.         mov ax,4c00h
  13.         int 21h


  14. t:        push ax
  15.         push bx
  16.         push dx
  17.         mov ax,3
  18.         mov bx,4
  19.         mov dx,0
  20.         pop dx
  21.         pop ax
  22.         pop bx
  23.         ret


  24. codesg ends

  25. end start
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-19 21:08:39 | 显示全部楼层
新手见谅见谅
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-19 21:42:01 | 显示全部楼层
你跟进call看看
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2016-8-19 23:33:46 | 显示全部楼层
另外问一下什么叫跟进
小甲鱼最新课程 -> https://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
小甲鱼最新课程 -> https://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这些地址是最好不要使用的,好像是中断向量表来的,只是猜测,我也是新手,猜错莫怪
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-2 22:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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