stdcall asm 浮点参数
stdcall asm floating point parameters
我正在尝试使用 D 内联汇编实现动态调用 stdcall 函数(使用动态参数)
我有以下程序集
args 是指向 32 位整数数组的空指针 argc 是参数的数量 ret 是空指针,address 是函数地址
MOV EBX, 0;
iterator:
MOV EAX, DWORD PTR [args];
PUSH EAX;
ADD EBX, 1;
ADD EAX, 4;
CMP EBX, DWORD PTR argc;
JNE iterator;
MOV EAX, ADDress;
CALL EAX;
MOV [ret], EAX;
RET 0;
如何传递浮点参数?
微软在这个问题上非常沉默。
这是因为 stdcall
仅用于 WinAPI 调用。
据我所知,没有 WinAPI 调用接受浮点参数。
According to all the documentation 我可以发现所有参数都被压入堆栈。
这包括浮点参数。
如果我在我的编译器中编译以下代码片段,它会证实这一点:
void __stdcall test3(double a, double b, double c) {
};
.....
test3(a,b,c);
.....
//This produces the following code as per the stdcall convention.
004182B4 55 push ebp
004182B5 8BEC mov ebp,esp
004182B7 83C4E8 add esp,-
004182BA FF75EC push dword ptr [ebp-]
004182BD FF75E8 push dword ptr [ebp-]
004182C0 FF75F4 push dword ptr [ebp-[=10=]c]
004182C3 FF75F0 push dword ptr [ebp-]
004182C6 FF75FC push dword ptr [ebp-]
004182C9 FF75F8 push dword ptr [ebp-]
004182CC E8ABFFFFFF call Test3
请注意,浮点 return 值在 ST(0)
中得到 returned。
我正在尝试使用 D 内联汇编实现动态调用 stdcall 函数(使用动态参数)
我有以下程序集 args 是指向 32 位整数数组的空指针 argc 是参数的数量 ret 是空指针,address 是函数地址
MOV EBX, 0;
iterator:
MOV EAX, DWORD PTR [args];
PUSH EAX;
ADD EBX, 1;
ADD EAX, 4;
CMP EBX, DWORD PTR argc;
JNE iterator;
MOV EAX, ADDress;
CALL EAX;
MOV [ret], EAX;
RET 0;
如何传递浮点参数?
微软在这个问题上非常沉默。
这是因为 stdcall
仅用于 WinAPI 调用。
据我所知,没有 WinAPI 调用接受浮点参数。
According to all the documentation 我可以发现所有参数都被压入堆栈。
这包括浮点参数。
如果我在我的编译器中编译以下代码片段,它会证实这一点:
void __stdcall test3(double a, double b, double c) {
};
.....
test3(a,b,c);
.....
//This produces the following code as per the stdcall convention.
004182B4 55 push ebp
004182B5 8BEC mov ebp,esp
004182B7 83C4E8 add esp,-
004182BA FF75EC push dword ptr [ebp-]
004182BD FF75E8 push dword ptr [ebp-]
004182C0 FF75F4 push dword ptr [ebp-[=10=]c]
004182C3 FF75F0 push dword ptr [ebp-]
004182C6 FF75FC push dword ptr [ebp-]
004182C9 FF75F8 push dword ptr [ebp-]
004182CC E8ABFFFFFF call Test3
请注意,浮点 return 值在 ST(0)
中得到 returned。