【问题标题】:GNU 64-bit assembly adding functin [duplicate]GNU 64位程序集添加功能[重复]
【发布时间】:2018-05-02 06:16:34
【问题描述】:

当我们有

add %rbx, %rax

这是把rbx的值加到rax还是把rax的值加到rbx?

如果例如 rbx=3 和 rax=6,在添加 %rbx、%rax 之后,%rax 和 %rbx 的值是多少?

请使用 GNU x64 汇编语法!

【问题讨论】:

  • 我更新了AT&T tag wiki,提供了有关 AT&T 语法的此类信息,以及指向良好规范副本的链接。

标签: assembly x86-64 att


【解决方案1】:

x86 程序集有两种主要的“风格”:Intel 语法和 AT&T 语法(主要由 GNU 工具默认使用)。

您的 sn-p 采用 AT&T 语法(其中寄存器名称以 % 为前缀); AT&T 语法中操作数的顺序一般是source,destination,所以

add %rbx, %rax

表示“将 rbx 添加到 rax”(即,在 C 语言中为 rax += rbx)。

这与 Intel 语法相反,所以如果你在 Intel 语法中看到一些 sn-p,比如

add rbx, rax

(注意没有%)这意味着“将rax添加到rbx”(即rbx += rax)。

您可以找到一份很好的 AT&T 与 Intel 语法差异列表here。

【讨论】:

  • 从技术上讲,您可以将% 前缀与风味分开切换。
  • @Jester: ...但是任何人这样做然后在网上发布这样的代码通常会被视为犯罪。
猜你喜欢
  • 2012-03-11
  • 2011-08-13
  • 1970-01-01
  • 2014-04-03
  • 2018-05-02
  • 1970-01-01
  • 1970-01-01
  • 2019-01-10
  • 2011-02-01
相关资源
最近更新 更多