hhhhyiuxiu 2019-06-07 16:36 采纳率: 0%
浏览 444
已采纳

在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,结果显然不对。。。有没有大佬帮忙解答一下。

  • 写回答

1条回答 默认 最新

  • threenewbee 2019-06-07 21:12
    关注

    你这代码真是见鬼,搞了半天,才搞清楚原因。
    有一个寄存器叫做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);
    }
    
    

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题
  • ¥20 yolov5自定义Prune报错,如何解决?