gpt4 book ai didi

c++ - 使用 SSE 将浮点值从汇编程序 DLL 返回到 C++

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:11:21 24 4
gpt4 key购买 nike

我在将浮点值从 DLL 汇编程序返回到 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:\masm32\include\windows.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 编译器。

在这种情况下,由于您已将函数定义为返回一个 float ,因此您需要将结果放在浮点堆栈的顶部。

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

关于c++ - 使用 SSE 将浮点值从汇编程序 DLL 返回到 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40958017/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com