|
|
BASCOM-AVR mcs.lib的_FLIPBYTE代碼
asm
;翻轉(zhuǎn)寄存器R24中的位序
;1001_0000 變?yōu)?0000_1001
[_FLIPBYTE]
_FLIPBYTE:
push r16 ; 保存寄存器
push r17
ldi r16,8 ; 位數(shù)計(jì)數(shù)
_FLIPBYTE2:
rol r24 ; 通過(guò)進(jìn)位循環(huán)左移
ror r17 ; 循環(huán)右移至r17
dec r16 ; 處理下一位
brne _FLIPBYTE2
mov r24, r17
pop r17
pop r16
ret
[END]
二進(jìn)制形式一步步演示這個(gè)位翻轉(zhuǎn)程序的執(zhí)行過(guò)程。
初始狀態(tài):
R24 = 1001 0000 (要翻轉(zhuǎn)的字節(jié))
R17 = 0000 0000 (用于構(gòu)建結(jié)果)
R16 = 0000 1000 (計(jì)數(shù)器=8)
循環(huán)執(zhí)行過(guò)程:
第1次循環(huán):
ROL R24: R24 = 0010 0000, 進(jìn)位C=1
ROR R17: R17 = 1000 0000 (C=1移入最高位)
R16 = 0000 0111
第2次循環(huán):
ROL R24: R24 = 0100 0000, 進(jìn)位C=0
ROR R17: R17 = 0100 0000 (C=0移入最高位)
R16 = 0000 0110
第3次循環(huán):
ROL R24: R24 = 1000 0000, 進(jìn)位C=0
ROR R17: R17 = 0010 0000 (C=0移入最高位)
R16 = 0000 0101
第4次循環(huán):
ROL R24: R24 = 0000 0000, 進(jìn)位C=1
ROR R17: R17 = 1001 0000 (C=1移入最高位)
R16 = 0000 0100
第5次循環(huán):
ROL R24: R24 = 0000 0000, 進(jìn)位C=0
ROR R17: R17 = 0100 1000 (C=0移入最高位)
R16 = 0000 0011
第6次循環(huán):
ROL R24: R24 = 0000 0000, 進(jìn)位C=0
ROR R17: R17 = 0010 0100 (C=0移入最高位)
R16 = 0000 0010
第7次循環(huán):
ROL R24: R24 = 0000 0000, 進(jìn)位C=0
ROR R17: R17 = 0001 0010 (C=0移入最高位)
R16 = 0000 0001
第8次循環(huán):
ROL R24: R24 = 0000 0000, 進(jìn)位C=0
ROR R17: R17 = 0000 1001 (C=0移入最高位)
R16 = 0000 0000
循環(huán)結(jié)束:
R17 = 0000 1001 (翻轉(zhuǎn)完成的結(jié)果)
MOV R24, R17 → R24 = 0000 1001
最終結(jié)果:
1001 0000 → 0000 1001
這個(gè)算法巧妙地利用ROL和ROR指令,通過(guò)進(jìn)位標(biāo)志位C作為橋梁,將R24的高位逐個(gè)轉(zhuǎn)移到R17的低位,實(shí)現(xiàn)了位序的完美翻轉(zhuǎn)。 |
評(píng)分
-
查看全部評(píng)分
|