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的標誌位
0000 EQ Z=1 相等或等於0
0001 NE Z=0 不相等
0010 CS C=1 大於或等於(無符號比較)
0011 CC C=0 小於(無符號比較)
0100 MI N=1 負數
0101 PL N=0 正數或0
0110 VS V=1 溢出
0111 VC V=0 未溢出
1000 HI C=1 & Z=0 大於無符號比較
1001 LS C=0 & Z=1 小於或等於(無符號比較)
1010 GE N=V 大於或等於(有符號比較)
1011 LT N!=V 小於(有符號比較)
1100 GT Z=0 & N=V 大於(有符號比較)
1101 LE Z=1 & N!=V 小於或等於(有符號比較)
1110 AL 保留,未使用 任意值
1111 保留,未使用 保留,未使用 保留,未使用



     比較兩個數的大小,並將較大的數加1

ARM條件碼的使用
C語言描述 ARM彙編語言描述
if(a>b)
     a++;
else
     b++;
CMP  R0,R1
ADDHI  R0,R0,#1
ADDLS  R1,R1,#1


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章