這是我第一次問,所以我要在這裏盡我所能,但是我在彙編任務中遇到了麻煩,在這個彙編任務中我給了一個.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:接近' –