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 cgictest.cgi文件无法访问
  • ¥20 删除和修改功能无法调用
  • ¥15 kafka topic 所有分副本数修改
  • ¥15 小程序中fit格式等运动数据文件怎样实现可视化?(包含心率信息))
  • ¥15 如何利用mmdetection3d中的get_flops.py文件计算fcos3d方法的flops?
  • ¥40 串口调试助手打开串口后,keil5的代码就停止了
  • ¥15 电脑最近经常蓝屏,求大家看看哪的问题
  • ¥60 高价有偿求java辅导。工程量较大,价格你定,联系确定辅导后将采纳你的答案。希望能给出完整详细代码,并能解释回答我关于代码的疑问疑问,代码要求如下,联系我会发文档
  • ¥50 C++五子棋AI程序编写
  • ¥30 求安卓设备利用一个typeC接口,同时实现向pc一边投屏一边上传数据的解决方案。