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

Assembler code, error C2443: operand size conflict

本文关键字:操作数 小冲突 C2443 代码 错误 汇编程序      更新时间:2023-10-16

我正在尝试编写一些简单的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 位...但是无符号字符的大小是 8 位?如果我使用 ah 或 al(8 位(,它根本不会做 3*5,但我没有错误。我很困惑...如何使用 ax 和 bx 并将结果移动到 y 而不会出错?

你是对的。声明应为:

unsigned short x,y;

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

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

"3"是 3 的 ASCII 代码,

如果您低于"0"ASCII 代码,则您的寄存器中将有 3(与"5"相同(。否则,您可以使用short变量。