【发布时间】:2016-02-17 21:30:24
【问题描述】:
下面的代码是一个家庭作业,我理解的实际汇编命令。但是我不确定(并且一直在寻找)如何确定函数的返回类型以及函数需要多少参数。教授真的没过好这个(单调终身公主) 任务是读取汇编代码,然后根据汇编代码编写c代码。我再次理解了说明,只是无法弄清楚返回类型是什么或代码需要多少个参数
.file "hw5.c"
.text
.p2align 4,,15
.globl p1
.type p1, @function
p1:
.LFB0:
.cfi_startproc
addq %rsi, %rdi
addq %rdi, %rdx
movq %rdx, %rax
ret
.cfi_endproc
【问题讨论】:
-
'单调终身公主'哈哈,为此点个赞吧:)
-
Assembly 没有“返回类型”的概念,也没有“参数”。
-
你能进一步解释一下@immibis 吗?如果是这种情况,我发现很难理解如何基于程序集编写有意义的函数。我现在从这个问题中知道,stackoverflow.com/questions/6171172/… 用于返回的寄存器可以帮助确定返回类型,我仍在处理参数。
-
汇编语言有一个调用约定,您可以使用它来确定上面传递的内容。您会看到使用了
rdi、rsi和rdx。碰巧的是,64 位调用约定使用前六个整数参数(从左起),它们按 RDI、RSI、RDX、RCX、R8 和 R9 的顺序传递。因此,在 RDI、RSI 和 RDX 中有 3 个参数传递给您的函数。 -
@immibis 这是我知道的,谢谢你的洞察力。我应该改写我的问题。我想说的是如何翻译 C 返回语句和从程序集传递的参数。我现在看到它在调用约定和返回寄存器中。
标签: c assembly return-type