【发布时间】:2020-07-14 09:28:04
【问题描述】:
环境:i386 32 位 组装:AT&T 操作系统:Linux
我只是想问一下%eax, %edx, %ecx寄存器在同一个函数框架中的使用顺序有什么规定吗?
据我观察,它们经常以%ecx、%edx 和%eax 的顺序出现在我的环境中,用于存储局部变量或其他临时变量。
谢谢大家。
【问题讨论】:
-
没有这样的规则。但是,请记住,某些寄存器是 callee-saved 并且必须在退出函数时恢复到它们的原始值。在 i386 Linux 上,这些是
rbx、rsi、rdi、rsp和rbp;浮点堆栈也必须为空(除非您返回一个浮点数)。 -
知道了,谢谢。
-
参考 i386 SysV ABI 以进一步阅读。该文档指定了为 Linux 编写 i386 汇编函数时需要遵守的所有规则。
-
@fuz 你的意思是
ebx、esi、edi、esp和rbp?我认为 80386 上没有 64 位寄存器。 -
@fcdt 你的意思是
ebp?我认为 80386 上没有 64 位寄存器。;-)
标签: assembly x86 calling-convention att i386