【发布时间】:2017-01-31 04:19:12
【问题描述】:
在 C 或 C++ 中,您可以通过执行以下操作来实现内联汇编指令:
asm("assembly code");
或
__asm__ ("assembly code");
例子:
asm("movl %ebx, %eax"); /* moves the contents of ebx register to eax */
__asm__("movb %ch, (%ebx)"); /* moves the byte from ch to the memory pointed by ebx */
然后您可以生成交互以在您的汇编代码和您的 C/C++ 变量之间交换值:更多关于 here。
我的问题是:编译器是否将每条内联汇编指令直接翻译成二进制对应的指令?或者这只是一种“模拟”?这就是说,我想知道您是否真的在访问处理器的寄存器,或者代码中处理的所有数据都存储在堆栈中,模拟汇编指令。对不起,如果这个问题很愚蠢。
【问题讨论】:
-
GCC 的内联汇编器执行简单的替换(如果使用扩展的汇编器模板),但将指令在单个 ASM 语句中按原样输出到代码中。所以是的,一旦编译成代码,它将使用真正的寄存器。这当然是假设程序没有在模拟器中运行。
-
谢谢,只是有疑问
标签: gcc assembly compilation