如何从内联汇编程序读取和写入在 C++ 上创建的双精度数组?
How to read and write a double array created on C++ from Inline Assembler?
我想通过内联汇编器操作在 C++ 上创建的数组,当我尝试使用一维数组时它有效 O.K,但是当我使用多维数组时我总是得到零。
我正在使用 Visual Studio 2019.
#include <iostream>
using namespace std;
int main()
{
double matrix[2][2] = { {10, 20},{30, 40} };//I always get a Zero
//double matrix[2] = { 50, 60 };//It works
double temp = 987;
_asm {
mov esi, 0
finit
; fld[matrix]
fld matrix[esi]
fstp temp
fwait
}
cout << "temp: " << temp << endl;
return 0;
}
我应该怎么做才能获得 30?
非常感谢您!!
根据@michael-petch 的评论,解决方案是:
#include <iostream>
using namespace std;
int main()
{
double matrix[2][2] = { {10, 20},{30, 40} };
double temp[2][2];
double val = 5;
_asm {
mov esi, 0
mov ecx, 4
finit
for1:
fld val
fld qword ptr matrix[esi]
fadd
fstp qword ptr temp[esi]
add esi,8
loop for1
fwait
}
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
cout << temp[i][j]<<" ";
}
cout << endl;
}
return 0;
}
我想通过内联汇编器操作在 C++ 上创建的数组,当我尝试使用一维数组时它有效 O.K,但是当我使用多维数组时我总是得到零。
我正在使用 Visual Studio 2019.
#include <iostream>
using namespace std;
int main()
{
double matrix[2][2] = { {10, 20},{30, 40} };//I always get a Zero
//double matrix[2] = { 50, 60 };//It works
double temp = 987;
_asm {
mov esi, 0
finit
; fld[matrix]
fld matrix[esi]
fstp temp
fwait
}
cout << "temp: " << temp << endl;
return 0;
}
我应该怎么做才能获得 30?
非常感谢您!!
根据@michael-petch 的评论,解决方案是:
#include <iostream>
using namespace std;
int main()
{
double matrix[2][2] = { {10, 20},{30, 40} };
double temp[2][2];
double val = 5;
_asm {
mov esi, 0
mov ecx, 4
finit
for1:
fld val
fld qword ptr matrix[esi]
fadd
fstp qword ptr temp[esi]
add esi,8
loop for1
fwait
}
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
cout << temp[i][j]<<" ";
}
cout << endl;
}
return 0;
}