使用SSE将float值从汇编器DLL返回到C

Returning float value from Assembler DLL to C++ using SSE

本文关键字:DLL 返回 汇编器 SSE float 使用      更新时间:2023-10-16

我遇到了从dll汇编器返回float值为c 程序的问题。我想应该在XMM0寄存器中处理它,我错了吗?这是主文件:

#include "stdafx.h"
#include<windows.h>
#include<iostream>
#include <cstdio>
#include <thread>
#include <vector>
using namespace std;
extern "C" float _stdcall MyProc1(float begin, float end, float x2 ,float x1, float x0);    //dll assembler
int main(int argc, _TCHAR* argv[])
{
    float suma=0;
    suma = MyProc1(12.75,9.3,0,0,1);
    cout << std::hex<< suma << endl;
    getchar();
    return 0;
}

这是我的汇编器DLL:

.686p
.MODEL FLAT, STDCALL
OPTION CASEMAP:NONE
INCLUDE C:masm32includewindows.inc
.mmx
.xmm
.DATA
    pi dd 3.14159265358979 ; constant
.CODE
DllEntry PROC hInstDLL:HINSTANCE, reason:DWORD, reserved1:DWORD
    mov eax, TRUE 
    ret 
DllEntry ENDP

MyProc1 proc b:DWORD, e:DWORD, x2: DWORD, x1: DWORD, x0:DWORD 
    movss xmm0,[b]  
    ret
MyProc1 endp    
END DllEntry 

返回值是-1。#ind,为什么?

这是非常具体的编译器,但是我想您使用的是32位Microsoft编译器。

在这种情况下,当您定义了函数以返回浮点时,您需要将结果放在浮点堆栈的顶部。

检查您的C 代码的组件输出以确定 - 您应该在函数调用后查看fstfstp指令。