我现在正在尝试学习 mips 汇编。为此,我编写了一个非常简单的 C 程序...
int main(){}
...并使用 gcc 的 -S 选项在 mips 机器上编译它以生成汇编代码。主函数的开头如下所示:
.ent main main: .frame $fp,8,$31 .mask 0x40000000,-8 .fmask 0x00000000,0
然后我试图通过查看 documentation for gas 来弄清楚这一切意味着什么。 ,但我在那里找不到任何这些指令。那么它们是什么意思呢?在哪里可以找到更多信息?
最佳答案
我知道我的回答有点晚了。迟到总比不到好。
当您编译汇编文件时,代码中可能会出现两种指令。
一种是您的汇编器支持的指令,在您的情况下,它是
GNU as
指令。另一种取决于您的汇编语言,并且因为您显然在这里使用 mips 汇编,所以
.ent
实际上是一个mips 汇编
指令。
这是guide您可以在其中找到 .ent .frame .fmask .mask
指令:它们都是 mips 汇编指令。或者您也可以直接Google MIPS 汇编语言程序员指南
。导航到第 8 章,伪操作码
,您将获得所需的一切。
您可能想知道GNU as
如何支持mips指令
?输入 Info as
,导航至Machine Dependent Features
章节,然后导航至MIPS-Dependent
子章节。但是,您仍然无法在这里找到 .ent
指令,也找不到 .frame .fmask .mask
。这是因为 info as
不是 mips 汇编指南,不可能那么全面。
顺便说一下,许多程序员都熟悉的汇编器nasm
有自己的指令和语法(Intel风格),与GNU as
不同(源自古老的 AT&T 风格)。类似地,不同的汇编语言可能有自己独特的指令(但不是语法),也可以由汇编器支持,也可以汇编它们。这就是为什么两个指令源可能出现在一个汇编文件中的原因。现在,GNU as
汇编器甚至可以支持 Intel 语法。此外,还有一些工具可以在 AT&T 和 Intel 语法之间进行转换。但是,您应该记住指令与语法不同。说实话,我对此也很困惑。
关于gcc - GNU 汇编程序指令的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/730587/