gcc - %ebp 和 %esp 的 gcc 内联汇编中的字母是什么?

标签 gcc assembly x86

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

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

最佳答案

手册中有关于 gcc machine constraints 的列表。 (参见:Intel 386 部分)。血腥的细节(通常比手册更新)可以在 i386/constraints.md 中找到。文件。

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

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

关于gcc - %ebp 和 %esp 的 gcc 内联汇编中的字母是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14855127/

相关文章:

c++ - 什么是 gcc Wmaybe-未初始化警告

c++ - Foo f = Foo();//没有调用 'Foo::Foo(Foo)' 的匹配函数……嗯?

c - GCC 编译 (ld) 问题的最后一步

assembly - 无法弄清楚程序集 x86 中的 printf 函数以及使用操作数

assembly - x86 上有偏移写回吗?

x86 - DY 和 DZ 伪指令在 NASM 中如何工作?

c - 这个 C 宏主体中的三重点是如何工作的?

c - 有没有办法将汇编代码插入到 C 中?

assembly - 当前指令旁边的 RIP 相关加载会发生什么情况?缓存命中?

assembly - 我可以通过保存和修改指令指针来执行相当于跳转到标签的操作吗?