我正在尝试学习mips装配。为此,我写了一个非常简单的c程序......
int main(){}
...并使用gcc的-S选项在mips机器上编译它以生成汇编代码。以下是main函数的开头:
.ent main main: .frame $fp,8,$31 .mask 0x40000000,-8 .fmask 0x00000000,0
然后我试着通过查看documentation for gas来弄清楚这一切意味着什么,但我找不到任何这些指令。那他们是什么意思?我在哪里可以找到更多信息?
答案 0 :(得分:4)
我知道我的答案有点迟了。迟到总比没有好。
编译汇编文件时,代码中可能会显示两种指令。
一种是汇编程序支持的指令,在您的情况下,它是GNU as
指令。
另一种取决于你的汇编语言,因为你显然在这里使用mips程序集,.ent
实际上是一个mips assembly
指令。
以下是guide,您可以在其中找到.ent .frame .fmask .mask
指令:它们都是mips程序集指令。或者你可以Google MIPS Assembly Language Programmer’s Guide
。导航到chapter 8, Pseudo Op-Codes
,您将获得所需的一切。
您可能想知道GNU as
如何支持mips directives
?输入Info as
,导航到章节Machine Dependent Features
,然后导航到子章MIPS-Dependent
。但是,你仍然无法在这里找到.ent
指令,也找不到.frame .fmask .mask
。这是因为info as
不是mips装配指南,并且不能那么全面。
顺便说一下,许多程序员熟悉的汇编程序nasm
有自己的指令和语法(英特尔风格),它们与GNU as
(源自古代AT& T)不同。样式)。类似地,不同的汇编语言可能有自己独特的指令(但不是语法),汇编程序也可以组装它们。这就是为什么两个指令源可能出现在汇编文件中的原因。现在,GNU as
汇编程序甚至可以支持Intel语法。此外,还有工具可以在AT& T和Intel语法之间进行转换。但是,您应该记住,指令与语法不同。坦率地说,我也对此感到困惑。