【问题标题】:ASM - What is "%" used for?ASM——“%”是干什么用的?
【发布时间】:2012-02-11 06:38:24
【问题描述】:

汇编中的“%”有什么用?例如,有时一条指令写成:

movl %eax, %ebx

其他时候写成:

movl eax, ebx

(不带百分号)有什么区别?

【问题讨论】:

  • 请注意,movl eax, ebx 在 x86 的任何正常语法中均无效。 Intel-syntax 不在助记符上使用大小后缀。可能你的意思是mov eax, ebx。 (技术上可能对带有.att_syntax noprefix 的 GAS 有效,但不要那样做,AT&T 和 Intel 语法的突变混合体让每个人都感到困惑。即使 GAS 在.intel_syntax noprefix 模式下也将其视为无效指令助记符而拒绝。)

标签: assembly x86 att


【解决方案1】:

对于所有汇编程序,当您需要引用恰好与寄存器同名的符号时,就会出现问题。例如,如果你有一些包含函数“int eax()”的 C 代码,并且你将它与一些执行“mov ebx,eax”的汇编代码链接,那么汇编器需要知道“eax”是否是寄存器还是函数。

为了避免不同的汇编器做不同的事情。一些(例如 NASM)会假设“eax”是寄存器,并且需要某种前缀用于模棱两可的符号(例如“$eax”来指代符号而不是寄存器)。其他人(例如 GAS)则相反,并在寄存器名称中添加前缀;有时即使完全没有歧义(例如,“%eax”指代寄存器,“eax”指代符号)。

【讨论】:

    【解决方案2】:

    X86 assembly syntax 有不同的风格。带有 % 的那个叫做 AT&T。另一个叫英特尔。不同的汇编器使用不同的语法。有些(气体)可以同时使用。

    【讨论】:

      猜你喜欢
      • 2016-04-22
      • 1970-01-01
      • 2016-10-30
      • 2017-11-03
      • 2014-12-20
      • 2021-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多