我想将参数从 C 传递给汇编函数。
在类 UNIX 系统上,前六个参数进入 rdi、rsi、rdx、rcx、r8 和 r9。
在 Windows 上,前四个参数进入 rcx、rdx、r8 和 r9。
现在,我的问题是:在 BIOS 或 DOS 编程级别,哪些寄存器接收这些参数?如果参数个数超过 6 个,如何编写程序集来处理这些参数?
我想将参数从 C 传递给汇编函数。
在类 UNIX 系统上,前六个参数进入 rdi、rsi、rdx、rcx、r8 和 r9。
在 Windows 上,前四个参数进入 rcx、rdx、r8 和 r9。
现在,我的问题是:在 BIOS 或 DOS 编程级别,哪些寄存器接收这些参数?如果参数个数超过 6 个,如何编写程序集来处理这些参数?
如果我理解您问题的第一部分,则实际上并不支持在 16 位模式下使用 C(因为 16 位模式使用分段来获得超过 16 位的寻址)。
参考第二部分,这取决于编译器,但 Windows 和 Unix 的 IIRC 都会在堆栈上传递额外的参数(有关参数传递的更多信息,请参见http://en.wikipedia.org/wiki/X86_calling_conventions)。
64 位 UEFI 使用 Windows 约定。
BIOS 和 DOS API 是用汇编语言定义的。
传统上,在 16 位和 32 位 x86 中,所有参数都存储在堆栈中。