15_ARM彙編自學筆記指令系統之移位指令(操作)

移位指令(操作)

ARM微處理器內嵌的桶型移位器(Barrel Shi f t er),支持數據的各種移位操作,移位操作在ARM指令集中不作爲單獨的指令使用,它只能作爲指令格式中是一個字段,在彙編語言中表示爲指令中的選項。例如,數據處理指令的第二個操作數爲寄存器時,就可以加入移位操作選項對它進行各種移位操作。移位操作包括如下 6種類型,ASL 和 LSL 是等價的,可以自由互換:

— LSL 邏輯左移

— ASL 算術左移

— LSR 邏輯右移

— ASR 算術右移

— ROR 循環右移

— RRX 帶擴展的循環右移

1、LSL(或 ASL)操作

LSL(或 ASL)操作的格式爲:通用寄存器,LSL(或 ASL)操作數

LSL(或 ASL)可完成對通用寄存器中的內容進行邏輯(或算術)的左移操作,按操作數所指定的數量向左移位,低位用零來填充。其中,操作數可以是通用寄存器,也可以是立即數(0~31)。操作示例:

MOV R0, R1, LSL#2 ;將 R1 中的內容左移兩位後傳送到 R0 中。

2、LSR操作

LSR操作的格式爲:通用寄存器,LSR 操作數

LSR可完成對通用寄存器中的內容進行右移的操作,按操作數所指定的數量向右移位,左端用零來填充。其中,操作數可以是通用寄存器,也可以是立即數(0~31)。操作示例:

MOV R0, R1, LSR#2 ;將 R1 中的內容右移兩位後傳送到 R0 中,左端用零來填充。

3、ASR操作

ASR操作的格式爲:通用寄存器,ASR 操作數

ASR可完成對通用寄存器中的內容進行右移的操作,按操作數所指定的數量向右移位,左端用第31 位的值來填充。其中,操作數可以是通用寄存器,也可以是立即數(0~31)。操作示例:

MOV R0, R1, ASR#2 ;將 R1 中的內容右移兩位後傳送到 R0 中,左端用第 31 位的值來填充。

4、ROR操作

ROR操作的格式爲:通用寄存器,ROR 操作數

ROR可完成對通用寄存器中的內容進行循環右移的操作,按操作數所指定的數量向右循環移位,左端用右端移出的位來填充。其中,操作數可以是通用寄存器,也可以是立即數(0~31)。顯然,當進行 32 位的循環右移操作時,通用寄存器中的值不改變。操作示例:

MOV R0, R1, ROR#2 ;將 R1 中的內容循環右移兩位後傳送到 R0 中。

5、RRX操作

RRX操作的格式爲:通用寄存器,RRX 操作數

RRX可完成對通用寄存器中的內容進行帶擴展的循環右移的操作,按操作數所指定的數量向右循環移位,左端用進位標誌位 C 來填充。其中,操作數可以是通用寄存器,也可以是立即數(0~31)。操作示例:

MOV R0, R1, RRX#2 ;將 R1 中的內容進行帶擴展的循環右移兩位後傳送到 R0 中。

 

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