我正在尝试编写一些简单的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而不会出错?
答案 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
变量。