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 位的状态寄存器、程序计数器)被推入/存储到堆栈中。当执行返回命令时,堆栈中的数据被恢复。它需要能够在函数调用之后的地址上保持程序执行。