4

gcc 内联汇编中 %esp 和 %ebp 的字母是什么?我明白那个:

a = eax 
b =ebx 
c = ecx 
d = edx 
S = esi 
D = edi 
I = constant value (0 to 31). 
4

1 回答 1

6

手册中有一个gcc 机器约束列表(参见:Intel 386部分)。在i386/constraints.md文件 中可以找到血淋淋的细节(通常比手册更新) 。

但是- 有充分的理由,即堆栈一致性,%ebp不能%esp用作约束。它们不能被指定为扩展 asm 语法中的输入或输出。在某些情况下,这也可能扩展到%ebx- 特别是在生成与位置无关的代码时,例如,使用 (i386 SysV) ELF ABI。

当然,您仍然可以在 asm 块中显式操作这些寄存器。

于 2013-02-13T14:51:01.963 回答