x86汇编语言ret的使用疑问??

wbcuc 2010-09-07 08:16:15
CPU执行ret指令时,相当于进行:pop IP,但是当C语言调用一个只有ret的汇编子程序时该如何理解呢?

C文件中:
void TestC(int P1, int P2)
{
int Test;

Test = CallAsm();

printf("Test=%d\n", Test);
}

asm文件中:
_CallAsm PROC NEAR PUBLIC
ret
_CallAsm ENDP

大家知道此时CallAsm()汇编子程序返回的值是什么吗??

...全文
303 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wbcuc 2010-09-07
  • 打赏
  • 举报
回复
谢谢zara的回复,你的回答已经解决了我的疑问,在调用TestC之前,确实已经有函数做了mov eax的操作,那么在这里调用CallAsm() 的作用就是要得到之前eax的值。
这应该是一种传递参数的非常手段了(个人猜的)。
pandazhong 2010-09-07
  • 打赏
  • 举报
回复
内置类型的返回值放到eax寄存器中,自定义的类型放到栈中。
zara 2010-09-07
  • 打赏
  • 举报
回复
不确定。函数的返回值,通常的约定是 eax 。CallAsm() 函数里,没有对 eax 进行任何的设置,所以它将保持调用前的内容;而从 TestC() 函数的这些代码来看,应该也没有动过 eax ;这就要看再前面了。不过,这样的分析没有意义;还是有明确的置值才是。

21,497

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧