Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 调用C++;程序集文件中的函数_C++_Assembly_Visual C++_X86_Masm - Fatal编程技术网

C++ 调用C++;程序集文件中的函数

C++ 调用C++;程序集文件中的函数,c++,assembly,visual-c++,x86,masm,C++,Assembly,Visual C++,X86,Masm,这是我第一次问,所以我要在这里尽我最大的努力,但是我在一个汇编任务中遇到了问题,在这个任务中,我得到了一个.cpp文件(如下),并且必须生成一个包含乘法、平方和除法函数的.asm文件。我遇到的问题是,在平方和乘法函数完成后,我必须调用PrintResult来显示答案。对于除法,成功的除法返回1,不成功的除法返回0,并调用PrintResult显示失败消息。我不允许编辑他的.cpp文件,但我不知道如何成功调用PrintResult。我一直收到一个错误,说有一个未定义的符号 以下是给出的.cpp:

这是我第一次问,所以我要在这里尽我最大的努力,但是我在一个汇编任务中遇到了问题,在这个任务中,我得到了一个.cpp文件(如下),并且必须生成一个包含乘法、平方和除法函数的.asm文件。我遇到的问题是,在平方和乘法函数完成后,我必须调用PrintResult来显示答案。对于除法,成功的除法返回1,不成功的除法返回0,并调用PrintResult显示失败消息。我不允许编辑他的.cpp文件,但我不知道如何成功调用PrintResult。我一直收到一个错误,说有一个未定义的符号

以下是给出的.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;
    }
}
目前,我的Square函数有我从另一个答案中得到的结果,但不起作用。它告诉我PrintResult是未定义的。我写了我的_乘法,但它没有调用,当然,我可以在知道像那样的格式是什么样的情况下,马上写上_除法


非常感谢您的帮助

您可以使用
EXTERN
告诉汇编程序有关外部事物的信息

EXTERN _PrintResult
在这种情况下,最好使用
PROTO
INVOKE

 INVOKE PrintDisplay 0, eax

注意:JavaScript跑步者不做C++。非常感谢,我无法确定如何正确地格式化。这种方法似乎最容易将所有内容分开,而不是切线。你必须告诉你的MASM代码,
\u PrintResult
是一个外部标签。将此添加到汇编代码的顶部
extern\u PrintResult:near
我很快就把它打出来了。由于这是一个过程,您可能希望这样做
extern\u PrintResult:proc
因此对于square,如果我输入3,那么输出“square的显示是:9\t square是:9”?在MASM中需要一个冒号
和一个类型,因此我不相信
extern\u PrintResult
会正确地组装而没有错误。
 PrintDisplay PROTO C arg1:SWORD, arg2:SWORD
 INVOKE PrintDisplay 0, eax