新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > ARM指令尋址方式之: 數(shù)據(jù)處理指令的尋址方式

ARM指令尋址方式之: 數(shù)據(jù)處理指令的尋址方式

作者: 時間:2013-09-13 來源:網(wǎng)絡 收藏

本文引用地址:http://butianyuan.cn/article/257084.htm

2.寄存器方式

寄存器的值可以被直接用于數(shù)據(jù)操作指令,如:

MOV r2,r0 ;r0的值送r2

ADD r4,r3,r2 ;r2加r3,結果送r4

CMP r7,r8 ;比較r7和r8的值

3.寄存器移位方式

寄存器的值在被送到ALU之前,可以事先經(jīng)過桶形移位寄存器的處理。預處理和移位發(fā)生在同一周期內,所以有效的使用移位寄存器,可以增加代碼的執(zhí)行效率。

具體的移位(或者循環(huán)移位)方式有下面幾種。

· ASR:算術右移。

· LSL:邏輯左移。

· LSR:邏輯右移。

· ROR:循環(huán)右移。

· RRX:擴展的循環(huán)右移。

以上5種移位方式,移位值均可以由立即數(shù)或寄存器指定。下面是一些在指令中使用了移位操作的例子。

ADD r2,r0,r1,LSR #5

MOV r1,r0,LSL #2

RSB r9,r5,r5,LSL #1

SUB r1,r2,r0,LSR #4

MOV r2,r4,ROR r0

4.1.4 尋址方式分類詳解

的尋址方式根據(jù)shifter_operand>的不同,相應的分為11種。詳見表4.1。下面對各類尋址方式進行詳細說明。

1.#immediate>

(1)編碼格式

指令的編碼格式如圖4.2所示。

圖4.2 ——立即數(shù)尋址編碼格式

立即數(shù)尋址為提供了一個可直接操作的立即數(shù)。立即數(shù)的生成方法見前面章節(jié)介紹。如果移位值為0,則移位進位值為程序狀態(tài)寄存器CPSR的C標志位;否則,為32-bit立即數(shù)的bit[31]。

(2)操作偽代碼

Shifter_operand = immed_8 Rotate_Right (rotate_imm*2)

if rotate_imm == 0 then

shifter_carry_out = C flag

else /* rotate_imm != 0*/

shifter_carry_out = shifter_operand[31]

(3)說明

① 并不是所有的32-bit立即數(shù)都是可以使用的合法立即數(shù)。只有那些通過將一個8-bit的立即數(shù)循環(huán)右移偶數(shù)位可以得到的立即數(shù)才可以在指令中使用。

② 有些立即數(shù)可以通過不止一種方法得到。由于立即數(shù)的構造方法中移位包含了循環(huán)操作,而循環(huán)移位操作會影響CPSR的條件標志位C。因此,同一個合法的立即數(shù)由于采用了不同的編碼方式,將使這些指令的執(zhí)行產(chǎn)生不同的結果,這是不能允許的。匯編器按照下面的規(guī)則來生成立即數(shù)的編碼。

· 當立即數(shù)數(shù)值在0和0xFF范圍時,令immed_8=immediate>,immed_4=0。

· 其他情況下,匯編編譯器選擇使用immed_4數(shù)值最小的編碼方式。

③ 為了更精確地控制立即數(shù)的生成,可以使用下面的語法格式控制立即數(shù)的生成。

#immed_8>,rotate_amout>

其中,rotate_amout> = 2*rotate_imm

(4)舉例

SUBS r0,r0,#1 ;寄存器r0中的數(shù)值減1,結果保存到r0

MOV r0,#0xff00 ; 0xff00 → r0 ;將立即數(shù)0xff00放入r0保存



評論


相關推薦

技術專區(qū)

關閉