stdcall asm浮点参数

时间:2015-05-05 13:24:44

标签: assembly x86 d

使用D内联汇编我试图动态地实现调用stdcall函数(使用动态参数)

我有以下装配 args是一个指向32位整数数组的void指针argc是参数count的数量ret是一个void指针,地址是函数地址

 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;

如何传递浮点参数?

1 个答案:

答案 0 :(得分:2)

微软在这个问题上非常沉默 这是因为stdcall仅用于WinAPI调用 并且我所知道的WinAPI调用都不接受浮点参数。

Accordingall 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,-$18
004182BA FF75EC           push dword ptr [ebp-$14]
004182BD FF75E8           push dword ptr [ebp-$18]
004182C0 FF75F4           push dword ptr [ebp-$0c]
004182C3 FF75F0           push dword ptr [ebp-$10]
004182C6 FF75FC           push dword ptr [ebp-$04]
004182C9 FF75F8           push dword ptr [ebp-$08]
004182CC E8ABFFFFFF       call Test3

请注意,ST(0)中会返回浮点返回值。