这是我第一次问,所以我要在这里尽我所能,但是我在汇编任务中遇到了麻烦,在这个汇编任务中我给了一个.cpp文件(下面),并且必须创建一个包含乘法,方形和除法函数的.asm文件。我遇到的问题是Square和Multiply函数完成后,我必须调用PrintResult来显示答案。对于分区,成功的分隔返回1,不成功的分隔返回0并调用PrintResult显示失败消息。我不允许编辑他的.cpp文件,但我不知道如何成功调用PrintResult。我不断收到一个错误,说有一个未定义的符号。在汇编文件中调用C++函数
这里给出的.cpp:
#include <iostream>
using namespace std;
enum ResultCode { ShowSquare, ShowMultiply, ShowDivide, ShowRemainder, ShowDivideFailure };
enum SuccessCode { Failure, Success };
extern "C" SuccessCode Divide(long, long, long &, long &);
extern "C" long Multiply(long, long);
extern "C" void PrintResult(ResultCode, long);
extern "C" long Square(long);
void main()
{
long Num1;
long Num2;
long Result;
long Remainder;
do
{
cout << "Enter Number to Square" << endl;
cin >> Num1;
Result = Square(Num1);
cout << "Square is: " << Result << endl;
cout << "Enter two numbers to multiply" << endl;
cin >> Num1 >> Num2;
Result = Multiply(Num1, Num2);
cout << "Result of multiply is: " << Result << endl;
cout << "Enter mumber to divide into then number to divide by" << endl;
cin >> Num1 >> Num2;
if (Divide(Num1, Num2, Result, Remainder) == Success)
cout << "Result is " << Result << " and remainder is " << Remainder << endl;
else
cout << "Attempted division by zero";
} while (Result > 0);
}
void PrintResult(ResultCode PrintCode, long Value)
{
switch (PrintCode)
{
case ShowSquare:
cout << "Display of square is: " << Value << endl;
break;
case ShowMultiply:
cout << "Display of multiply is: " << Value << endl;
break;
case ShowDivide:
cout << "Display of divide is " << Value << endl;
break;
case ShowRemainder:
cout << "Display of remainder is " << Value << endl;
break;
case ShowDivideFailure:
cout << "Display of Division by zero" << endl;
break;
default:
cout << "Error in assembly routines" << endl;
}
}
,这里是我迄今为止为.ASM文件:
.386
.model flat
.code
public _Square
public _Multiply
public _Divide
_Square proc
mov eax, [esp + 4]
imul eax, eax
push eax
push eax
push 0
call _PrintResult
add esp, 8
pop eax
ret
_Square endp
_Multiply proc
mov eax, [esp + 8]
mov ebx, [esp + 4]
imul eax, ebx
ret
_Multiply endp
_Divide proc
ret
_Divide endp
end
目前我_Square功能有什么,我从另外一个答案拉在这里,但不起作用。它告诉我PrintResult是未定义的。我有我的_Multiply写出来,但它没有当然的呼吁,我可以写在_Divide一旦我知道如何格式化这样的东西会看起来..
任何帮助超过赞赏!
注会更好:JavaScript的选手不要做C++。 – user4581301
非常感谢您,我无法弄清楚如何正确格式化。这种方式似乎是最容易分开而不是切割线。 – Arcadiaen
你必须告诉你的MASM代码'_PrintResult'是一个外部标签。将此添加到汇编代码的顶部'extern _PrintResult:接近' –