在线时间0 小时
UID377681
注册时间2012-8-6
NXP金币0
该用户从未签到
注册会员

- 积分
- 99
- 最后登录
- 1970-1-1
|
移植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位指令
|
|