gnu汇编程序指令的文档

时间:2009-04-08 15:42:29

标签: assembly gas directive

我正在尝试学习mips装配。为此,我写了一个非常简单的c程序......

int main(){}

...并使用gcc的-S选项在mips机器上编译它以生成汇编代码。以下是main函数的开头:

    .ent   main
main:
    .frame $fp,8,$31
    .mask  0x40000000,-8
    .fmask 0x00000000,0

然后我试着通过查看documentation for gas来弄清楚这一切意味着什么,但我找不到任何这些指令。那他们是什么意思?我在哪里可以找到更多信息?

1 个答案:

答案 0 :(得分:4)

我知道我的答案有点迟了。迟到总比没有好。

编译汇编文件时,代码中可能会显示两种指令。

  1. 一种是汇编程序支持的指令,在您的情况下,它是GNU as指令。

  2. 另一种取决于你的汇编语言,因为你显然在这里使用mips程序集,.ent实际上是一个mips assembly指令。

  3. 以下是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语法之间进行转换。但是,您应该记住,指令与语法不同。坦率地说,我也对此感到困惑。