• 中英航母大战谁能赢歼151枚炸弹就能炸瘫女王 2019-03-22
  • 独特“光捕捉器”可控制分子生化性质 2019-03-22
  • 女性之声——全国妇联 2019-03-19
  • 【理上网来·辉煌十九大】德国北威州经济部长:十九大报告表明中国有能力为世界做出更多贡献 2019-03-11
  • 全国小麦收获进度过八成 2019-03-07
  • 【人事】中共临汾市委组织部公示3名拟任职干部 2019-03-07
  • 这泼猴,物理。古文,哲学,基础语文,那一项没出丑?看着就想笑 2019-02-20
  • 云南理发店老板涉嫌杀害女演员因办卡纠纷起杀心 2019-02-20
  • 1至5月我区为企业和社会减负4200余万元 2019-02-09
  • 【学习时刻】参会专家盛小云:坚定文化自信,用高尚的作品引领社会风尚 2019-01-28
  • 绘就生态文明新画卷—甘南州造林绿化工作纪实 2019-01-28
  • 某些人总是用“客观事实”来为自己壮胆,实际上根本不懂什么是“客观事实。 2019-01-12
  • 圣洁的雪山文章中国国家地理网 2018-11-22
  • 崇尚英雄 精忠报国——我们家的报国故事 2018-11-22
  • 618史上最壕“买家”现身 Google以 5.5亿美元投资京东 2018-11-21
  • 广东11选5历史开奖记录: [8/16位单片机] XC16 意外的编译输出

    [复制链接]
    286|4
     楼主 | 2018-11-12 09:34 | 显示全部楼层 |阅读模式
    本帖最后由 无善无恶心之体 于 2018-11-12 09:38 编辑

    128:               unsigned int iX=0x1234,iY=0x5678;
      0360  212342     mov.w #0x1234,0x0004
    129:               unsigned long lZ;
    130:               
    131:                          while(1)
    132:                  {        cAmpInv=lZ>>24;
      0364  DE0848     lsr 0x0002,#8,0x0000
      0366  B7E804     mov.b 0x0000,0x0804
    133:                          ++iX,
      0368  E80102     inc.w 0x0004,0x0004
    134:                          lZ=iX*iY;
      0362  256783     mov.w #0x5678,0x0006
      036A  B99003     mul.ss 0x0004,0x0006,0x0000
      036C  200001     mov.w #0x0,0x0002
      036E  37FFFA     bra 0x000364
    申请了两个uint iX, iY. 将两个相乘后的结果存入 ulong变量lZ。
    有两处疑问:
    1. 为何用mul.ss 而不用 mul.uu
    2. 为何将积的高16位清零
    | 2018-11-14 13:31 | 显示全部楼层
    你倒是说说mul.ss和 mul.uu有什么区别,另没看出高16位清零
     楼主 | 2018-11-15 22:29 | 显示全部楼层
    mul.ss和 mul.uu 分别用于有符号和无符号数相乘。

    036C  200001     mov.w #0x0,0x0002  积低16位存放在0x0000, 高16位放0x0002. 用立即数#0x0填充0x0002是什么意思?
    | 2018-12-14 13:51 | 显示全部楼层
    本帖最后由 bellstudio 于 2018-12-14 15:22 编辑

    哈哈,我也不是很理解。
    不过这个你大概要手动提升类型才会得到想要的结果。
    例如:
    1. lZ=(unsigned long)iX*iY;
    复制代码


    回完你的帖子我想明白了,这就是一个类型提升的问题。 XC16认为等号的右边手动提升类型,所以计算结果的高字是没有用的,虽然最后结果赋值给了一个更高级别类型,但是不影响编译器对于右边部分的理解。 这个在编译器的处理上是合理的,编译器要求用户做显式类型提升,而不是由编译器来做自动提升。C规范应该是没有强制要求提升,不过自动提升也许对用户更好些

    评论

    bellstudio 2018-12-14 15:19 回复TA
    回完你的帖子我想明白了,这就是一个类型提升的问题。 XC16认为等号的右边没有提升类型,所以计算结果的高字是没有用的,虽然最后结果赋值给了一个更高级别类型,但是不影响编译器对于右边部分的理解。 这个在编译器的处理上是合理的,编译器要求用户做显式类型提升,而不是由编译器来做自动提升。C规范应该是没有强制要求提升,不过自动提升也许对用户更好些 
    扫描二维码,随时随地手机跟帖
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    我要发帖 投诉建议 创建版块 申请版主

    快速回复

    您需要登录后才可以回帖
    登录 | 注册
    高级模式

    论坛热帖

    快速回复 广东快乐十分走势图 返回列表
  • 中英航母大战谁能赢歼151枚炸弹就能炸瘫女王 2019-03-22
  • 独特“光捕捉器”可控制分子生化性质 2019-03-22
  • 女性之声——全国妇联 2019-03-19
  • 【理上网来·辉煌十九大】德国北威州经济部长:十九大报告表明中国有能力为世界做出更多贡献 2019-03-11
  • 全国小麦收获进度过八成 2019-03-07
  • 【人事】中共临汾市委组织部公示3名拟任职干部 2019-03-07
  • 这泼猴,物理。古文,哲学,基础语文,那一项没出丑?看着就想笑 2019-02-20
  • 云南理发店老板涉嫌杀害女演员因办卡纠纷起杀心 2019-02-20
  • 1至5月我区为企业和社会减负4200余万元 2019-02-09
  • 【学习时刻】参会专家盛小云:坚定文化自信,用高尚的作品引领社会风尚 2019-01-28
  • 绘就生态文明新画卷—甘南州造林绿化工作纪实 2019-01-28
  • 某些人总是用“客观事实”来为自己壮胆,实际上根本不懂什么是“客观事实。 2019-01-12
  • 圣洁的雪山文章中国国家地理网 2018-11-22
  • 崇尚英雄 精忠报国——我们家的报国故事 2018-11-22
  • 618史上最壕“买家”现身 Google以 5.5亿美元投资京东 2018-11-21