【发布时间】:2013-05-03 15:41:04
【问题描述】:
我想从 C 向汇编函数传递一个参数。
在类 UNIX 系统上,前六个参数分别位于 rdi、rsi、rdx、rcx、r8 和 r9。
在 Windows 上,前四个参数进入 rcx、rdx、r8 和 r9。
现在,我的问题是:在 BIOS 或 DOS 编程级别,哪些寄存器接收这些参数?如果参数个数超过6个,如何编写程序集来处理这些参数?
【问题讨论】:
-
如果您需要控制参数从 C 到哪里(在哪个寄存器中)以与“自定义”函数(符合其自己的调用约定)正确接口,您可能需要使用编译器的一些特殊功能。当寄存器不够用时,您可能需要堆栈(或一个指向参数“数组”的寄存器)(参见例如en.wikipedia.org/wiki/X86_calling_conventions)
-
也许,使用 asmlinkage 并通过堆栈传递 arg。
标签: c assembly x86-64 calling-convention