gnu汇编程序指令的文档

Kim*_*bel 5 assembly directive gnu-assembler

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

int main(){}
Run Code Online (Sandbox Code Playgroud)

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

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

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

Han*_*IAO 7

我知道我的回答有点晚了。迟到总比不到好。

编译程序集文件时,代码中可能会出现两种指令。

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

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

这是您可以找到指令的指南.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许多程序员都熟悉的汇编程序有自己的指令和语法(Intel 风格),它们不同于GNU as(源自古老的 AT&T 风格)。类似地,不同的汇编语言可能有自己独特的指令(但不是语法),这些指令也可以被汇编器支持。这就是为什么在程序集文件中可能会出现两个指令源的原因。现在,GNU as汇编器甚至可以支持 Intel 语法。此外,还有一些工具可以在 AT&T 和 Intel 语法之间进行转换。但是,您应该记住指令与语法不同。坦率地说,我对此也很困惑。