当我从另一个函数调用汇编函数时,我应该保存哪些寄存器(8086)
例如:在手臂汇编编码中,我正在保存 r4-r12 寄存器。
我还应该保存 BX、CX、DX、SI、DI @Multimedia Mike
您应该保存您打算使用的任何寄存器,并在函数内部进行,而不是从函数外部进行。在 8086 域中习惯保存 BP 寄存器,然后使用它来引用压入堆栈的参数,在退出时恢复 BP 寄存器。此外,如果您需要返回一个值,则按照惯例使用 AX 寄存器。
更新:针对您更新的问题,如果您的 ASM 功能使用这些寄存器,您应该保存它们。如果您不想手动管理它,您可以随时使用 pusha/popa,它将推送/弹出所有 x86 寄存器。
[e]ax, [e]cx, [e]dx 是调用者保存的寄存器,[e]bx, [e]si, [e]di, [e]bp 是被调用者保存的寄存器,这意味着任何函数都可以丢弃 eax , ecx 和 edx。
习惯上在 8086 域中的 dx:ax 对中返回“结构”或 32 位值。