标签和汇编中的功能有什么区别

use*_*363 6 assembly gnu-assembler att

一直通过AT&T语法关注youtube上的汇编教程。我刚刚学习了使用.type指令声明(如果在这里是正确的术语)函数,例如:

.type MyFunction, @function
Run Code Online (Sandbox Code Playgroud)

现在,我可以像下面这样定义我的函数:

MyFunction:
    <code here>
Run Code Online (Sandbox Code Playgroud)

然后在任何时候调用它:

call MyFunction
Run Code Online (Sandbox Code Playgroud)

我知道在教程之前,我们只是在创建一个附加到一些代码的标签:

MyLabel:
    <code here>
Run Code Online (Sandbox Code Playgroud)

然后可以这样称呼它:

call MyLabel
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:

用.type声明的函数和仅用标签声明的'function'到底有什么区别?什么时候应该使用另一个,或者这有关系吗?

小智 -1

我认为无论你使用什么程序集,要点都是返回命令。无论您的汇编程序中的“return”名称是什么,都可以使用。调用函数与分支的不同之处在于,一些上下文数据(具有 N、C、V 位的状态寄存器、程序计数器)被推入/存储到堆栈中。当执行返回命令时,堆栈中的数据被恢复。它需要能够在函数调用之后的地址上保持程序执行。

  • 正常的函数调用不保存标志,只保存返回值。我相信您正在考虑 IRQ。 (2认同)