6

我想将参数从 C 传递给汇编函数。

在类 UNIX 系统上,前六个参数进入 rdi、rsi、rdx、rcx、r8 和 r9。

在 Windows 上,前四个参数进入 rcx、rdx、r8 和 r9。

现在,我的问题是:在 BIOS 或 DOS 编程级别,哪些寄存器接收这些参数?如果参数个数超过 6 个,如何编写程序集来处理这些参数?

4

2 回答 2

2

如果我理解您问题的第一部分,则实际上并不支持在 16 位模式下使用 C(因为 16 位模式使用分段来获得超过 16 位的寻址)。

参考第二部分,这取决于编译器,但 Windows 和 Unix 的 IIRC 都会在堆栈上传递额外的参数(有关参数传递的更多信息,请参见http://en.wikipedia.org/wiki/X86_calling_conventions)。

于 2013-06-27T15:15:30.393 回答
2

64 位 UEFI 使用 Windows 约定。

BIOS 和 DOS API 是用汇编语言定义的。

传统上,在 16 位和 32 位 x86 中,所有参数都存储在堆栈中。

于 2019-06-01T16:39:27.953 回答