ARM汇编指令的书写格式

      STM32系列处理器中的编译器可以支持Thumb-2指令以实现处理器在ARM模式和Thumb模式之间的自由转换。因此STM32系列处理器中的编译器引入了"统一汇编语言"(UAL)语法机制。

       在UAL机制下,用户可以使用统一的32位Thumb-2指令的语法格式书协这些指令,并且有编译器来决定是使用16位的Thumb指令,还是使用32位的ARM指令。

 ADD R0,  R1  ;使用Thumb指令集,实现寄存器R0与R1中的数值累加

  ADD R0,  R0,  R1  ;使用UAL语法实现同样的功能,R0=R0+R1


        在传统Thumb指令集中,部分指令默认在完成相应的指令操作后,无论指令是否有S后缀,都会自动更新寄存器APSR中的内容。相比UAL语法格式,用户必须指定S后缀才能更新APSR中的内容。


AND  R0,R1 ;使用Thumb语法实现寄存器R0,R1中数值的与操作

ANDS  R0,R0,R1 ;UAL语法实现R0 = R0&R1


需要用户注意的是,绝大部分16位Thumb指令只能访问R0~R7寄存器;而32位的Thumb指令可以自由访问R0~R15寄存器。


ADDS   R0,#1     ;为节省代码空间,编译器自动选择使用16位Thumb指令

ADDS.N    R0,#1    ;用户通过.N(Narrow)后缀指定编译器使用16位Thumb指令

ADDS.W   R0,#1     ;用户通过.W(Wide)后缀指定编译器使用32位ARM指令


   在ARM汇编语言中,数据传送指令MOV后面加上条件后缀EQ,即MOVEQ,可以用来表示"如果相等,则传送数据"

ARM汇编指令中的条件码
条件码[31:28]助记符判决条件CPSR的标志位
0000EQZ=1相等或等于0
0001NEZ=0不相等
0010CSC=1大于或等于(无符号比较)
0011CCC=0小于(无符号比较)
0100MIN=1负数
0101PLN=0正数或0
0110VSV=1溢出
0111VCV=0未溢出
1000HIC=1 & Z=0大于无符号比较
1001LSC=0 & Z=1小于或等于(无符号比较)
1010GEN=V大于或等于(有符号比较)
1011LTN!=V小于(有符号比较)
1100GTZ=0 & N=V大于(有符号比较)
1101LEZ=1 & N!=V小于或等于(有符号比较)
1110AL保留,未使用任意值
1111保留,未使用保留,未使用保留,未使用



     比较两个数的大小,并将较大的数加1

ARM条件码的使用
C语言描述ARM汇编语言描述
if(a>b)
     a++;
else
     b++;
CMP  R0,R1
ADDHI  R0,R0,#1
ADDLS  R1,R1,#1


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值