在C里面嵌套汇编完成两个16进制数的相加为什么结果不对啊?

代码如下:

#include <stdio.h>

void main()
{
    unsigned char ch,ch1,ch2;
    //BYTE ch,ch1,ch2;
    ch=0x20;
    ch1=0x10;
    _asm mov al,ch
    _asm mov bl,ch1
    _asm add al,bl
    _asm mov ch2,al

    printf("%x",ch2);
}

最后的输出是10,结果显然不对。。。有没有大佬帮忙解答一下。

你这代码真是见鬼,搞了半天,才搞清楚原因。
有一个寄存器叫做ch,正好和你的变量ch重名。
所以asm mov al, ch,移动的不是ch变量,而是ch寄存器

// Q764949.cpp : This file contains the 'main' function. Program execution begins and ends there.
//

#include <stdio.h>

void main()
{
    unsigned char ch0, ch1, ch2;
    //BYTE ch,ch1,ch2;
    ch0 = 0x20;
    ch1 = 0x10;
    _asm mov al, ch0
    _asm mov bl, ch1
    _asm add al, bl
    _asm mov ch2, al

    printf("%x", ch2);
}

如果问题得到解决,请点我回答左上角的采纳和向上的箭头