汇编代码,错误C2443:操作数大小冲突

时间:2014-12-05 08:54:10

标签: c++ inline-assembly

我正在尝试编写一些简单的asm代码,但是我收到此错误: 错误C2443:操作数大小冲突

我想将2个数字相乘,然后将结果移动到另一个变量......

我的老师写了这段代码:

int main()
{unsigned char x,y;

_asm{
    mov ax,3
    mov bx,5
    mul bx
    mov y,ax

}
cout<<y<<"\n";
}

根据我的理解,ax只使用16位...... 但是unsigned char的大小是8位?如果我使用啊或al(8bit)它根本不会做3 * 5但我没有错误。我很困惑......我如何使用ax和bx并将结果移动到y而不会出错?

2 个答案:

答案 0 :(得分:1)

你是对的。声明应该是:

unsigned short x,y;

cout会将unsigned short转换为十进制数字(ASCII),而unsigned char将被解释为ASCII字符并保持未转换状态(至少在我的系统上)。

答案 1 :(得分:0)

您也可以使用8位寄存器 mov al, '3' sub al, '0' mov bl, '5' sub bl, '0' mul bl

&#39; 3&#39;如果您使用&#39; 0&#39;是3的ASCII码ASCII码您的注册表中有3个(与#39; 5&#39;相同)。 否则,您可以使用short变量。