gcc 内联汇编中 %esp 和 %ebp 的字母是什么?我明白那个:
a = eax
b =ebx
c = ecx
d = edx
S = esi
D = edi
I = constant value (0 to 31).
手册中有一个gcc 机器约束列表(参见:Intel 386部分)。在i386/constraints.md文件 中可以找到血淋淋的细节(通常比手册更新) 。
但是- 有充分的理由,即堆栈一致性,%ebp
不能%esp
用作约束。它们不能被指定为扩展 asm 语法中的输入或输出。在某些情况下,这也可能扩展到%ebx
- 特别是在生成与位置无关的代码时,例如,使用 (i386 SysV) ELF ABI。
当然,您仍然可以在 asm 块中显式操作这些寄存器。