ARM指令尋址方式之: 數(shù)據(jù)處理指令的尋址方式
10.Rm>, ROR Rs>
(1)編碼格式
指令的編碼格式如圖4.11所示。
圖4.11 數(shù)據(jù)處理指令——寄存器循環(huán)右移尋址編碼格式
指令的操作數(shù)由寄存器Rm的數(shù)值循環(huán)右移一定的位數(shù)。移位的位數(shù)由Rs的最低8位bits[7∶0]決定。當(dāng)Rs[7∶0]=0時(shí),指令的操作數(shù)為寄存器Rm的值,循環(huán)器的進(jìn)位值為CPSR中的C條件標(biāo)志位;否則,循環(huán)器的進(jìn)位值為Rm最后被移出的位。
(2)語(yǔ)法格式
opcode> {cond>} {S} Rd>,Rn>,Rm>,ROR Rs>
其中:
· Rm>為指令被移位的寄存器;
· ROR為循環(huán)右移操作標(biāo)識(shí);
· Rs>為包含循環(huán)右移位數(shù)的寄存器。
(3)操作偽代碼
if Rs[7:0] = = 0 then
shifter_operand = Rm
shifter_carry_out = C flag
else if Rs[4:0] == 0 then
shifter_operand = Rm
shifter_carry_out = Rm[31]
else
shifter_operand = Rm Rotate_Right Rs[4:0]
shifter_carry_out = Rm[Rs[4:0] - 1]
(4)說(shuō)明
如果程序計(jì)數(shù)器r15被用作Rd、Rm、Rn或Rs中的任意一個(gè),則指令的執(zhí)行結(jié)果不可預(yù)知。
11.Rm>, RRX
(1)編碼格式
指令的編碼格式如圖4.12所示。
圖4.12 數(shù)據(jù)處理指令——擴(kuò)展右移尋址編碼格式
指令的操作數(shù)為寄存器Rm的數(shù)值右移一位,并用CPSR中的C條件標(biāo)志位填補(bǔ)空出的位。CPSR中的C條件標(biāo)志位則用移出的位代替。
(2)語(yǔ)法格式
opcode> {cond>} {S} Rd>,Rn>,Rm>,RRX
其中:
· Rm>為指令被移位的寄存器;
· RRX為擴(kuò)展的循環(huán)右移操作。
(3)操作偽代碼
shifter_operand = (C flag logical_shift_left 31) OR (Rm logical_shift_Right 1)
shifter_carry_out = Rm[0]
(4)說(shuō)明
① 此種尋址方式的編碼形式和“ROR #0”一致。
② 如果程序計(jì)數(shù)器r15被用作Rd、Rm、Rn或Rs中的任意一個(gè),則指令的執(zhí)行結(jié)果不可預(yù)知。
③ 可以實(shí)現(xiàn)ADC指令的功能。
評(píng)論