【问题标题】:What is the AT&T syntax postfix for opcodes?操作码的 AT&T 语法后缀是什么?
【发布时间】:2012-03-27 00:55:20
【问题描述】:

注意:我使用的是基于 BSD 的系统,所以如果我没记错的话,这意味着被调用的子例程/函数的 args 被推入堆栈,而不是放在寄存器中

我一直在尝试汇编,我想尝试我的简单内核退出程序:

.globl _start

_start:
    movl $0x20, %eax
    pushl %eax
    movl $0x1, %eax
    subl $0x4, %esp
    int $0x80

在 64 位汇编中。

我记得读过一个很大的区别是寄存器现在重命名为 r 前缀,而不是 e 前缀的 32 位标准。

但是,如果l 已经意味着 32 位的长,那么 64 位操作码的新后缀是什么?

出于好奇,为什么它是新寄存器的 r 前缀?

如果有任何好的资源可以找到更多信息。或者教程,教程总是很有趣。

【问题讨论】:

  • 64 位应用程序的调用约定不同于 32 位应用程序,因此您将使用寄存器,而不是堆栈。有关详细信息,请参阅this answer。 64 位后缀是 q 表示四字。 r 前缀可能是因为 AMD 先创建了 64 位扩展,所以 Intel 没有机会添加其他表示“扩展”的字母。

标签: macos assembly 64-bit freebsd att


【解决方案1】:

后缀是q 代表qwordr 应该代表registerHere's AT&T 语法介绍。

【讨论】:

  • 知道为什么 l 不是 dword 的 d 吗?或者它只是为 C 编译而制作的 GAS 的残余物?想想看,为什么 C 不用worddword 而不是分别使用shortlong
  • 至于 AT&T 语法中的设计决策,我只能推测它与 C 密切相关。至于 C 中的设计决策,我不能说:P
猜你喜欢
  • 2011-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-03
  • 1970-01-01
  • 2013-01-31
相关资源
最近更新 更多