查看: 4710|回复: 0

[其他] IAR和GCC在编译Cortex M汇编指令时的差异

[复制链接]

该用户从未签到

11

主题

18

帖子

0

注册会员

Rank: 2

积分
99
最后登录
1970-1-1
发表于 2013-3-1 10:22:29 | 显示全部楼层 |阅读模式
  移植uTenux V1.5的启动文件时,发现一个有趣的现象,就是Cortex M的汇编指令,居然在IAR和GCC编译器中支持有差异。
    GCC支持的指令:
         subs    r2, r1           ;生成16位指令
         subs    r2, r2, r1     ;生成32位指令
    IAR支持的指令:
         subs    r2, r2, r1     ;生成32位指令
    一般说来,第一种短格式是UAL出现前老的THUMB格式,第二种长格式是UAL标准的格式。
    查询了Cortex M3内核ARM公司的官方手册,显示两种指令都是可以的。

        subs  r2,  r1  ;这种写法属于传统的Thumb语法,生成16位指令给代码瘦身
        sub   r2,  r1  ;与前一种效果相同,这是因为自动更新APSR寄存器

   但是如果使用UAL语法,则必须指定s后缀才会更新。例如:
       sub   r2, r2, r1  ; 不更新APSR
       subs  r2, r2, r1  ;更新APSR

      个人认为采用UAL标准格式写汇编代码,这样可以在GCC、IAR环境中兼容!不过有一个缺点就是代码量会变大!不过代码可以重复使用,只要程序能烧写到芯片中,还是可以容忍的!

     如果编程人员想遵从UAL标准,又想降低代码密度,可以采用下面的写法:

       subs.n   r2, r2, r1   ;指定使用16位指令
       subs.w  r2, r2, r1   ;指定使用32位指令
我知道答案 目前已有0人回答
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-9-6 18:37 , Processed in 0.081274 second(s), 21 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表