+ -
当前位置:首页 → 问答吧 → 初学汇编的问题illegal number of operands

初学汇编的问题illegal number of operands

时间:2011-05-26

来源:互联网

Assembly code
// Assembly.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
using namespace std;

void SwapRegisters(int a, int b)
{
    _asm
    {
        PUSH EAX, a ;这两行代码编译出错
        PUSH EBX, b

        MOV ECX, EAX
        MOV EAX, EBX
        MOV EBX, ECX
    }
}
int _tmain(int argc, _TCHAR* argv[])
{
    int a = 1;
    int b = 2;
    SwapRegisters(a, b);
    cout << "a:" << a << endl;
    cout << "b:" << b << endl;
    return 0;
}




编译器 Visual Studio 2005, 项目类型 Win32

编译的时候出错

错误 1 error C2414: illegal number of operands
错误 2 error C2414: illegal number of operands

我想在C++中嵌入汇编,上面的代码主要想用汇编写个函数,交换两个变量的值.
应该如何写呢,请指教,谢谢!

作者: cpp_yangzuoshi   发布时间: 2011-05-26

push a
push b
pop a
pop b

作者: Areslee   发布时间: 2011-05-26

我这样试了,但是运行后弹出一个错误提示框.能不能给个完整的能够运行的例子?谢谢

作者: cpp_yangzuoshi   发布时间: 2011-05-26

搞定了,不过不太明白为何.

// Assembly.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
using namespace std;

void SwapRegisters(int a, int b)
{
_asm
{
PUSH a
PUSH b
PUSH a
PUSH b

//PUSH a
//PUSH b

//MOV ECX, EAX
//MOV EAX, EBX
//MOV EBX, ECX
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int a = 1;
int b = 2;
//SwapRegisters(a, b);//把汇编代码放在这里就可以了,通过函数调用就会出错.
_asm
{
push a
push b
pop a
pop b
}

cout << "a:" << a << endl;
cout << "b:" << b << endl;
return 0;
}

作者: cpp_yangzuoshi   发布时间: 2011-05-26