| |
使用ARM汇编程序实现寄存器的高位和低位的互换,例如第31位和第0位互换,第30位和第1位互换,以此类推。
由于ARM中没有支持位操作的指令,所以要实现单个寄存器内的位互换操作比较困难,必须要通过多次的循环才可以完成。
.global _start
.text
_start :
MOV r4,#0x18000001 测试用数据
MOV r3,#0 操作后的结果,初始化为0
MOV r1,#0x80000000 要进行操作的起始位
MOV R2,#32 循环次数
Loop:
MOVS r4,r4,rrx 将最低位移到C标志位中
EORCS R3,R3,R1 如果C=1,就将R3中R1所对应的位置1
MOV R1,R1,LSR #1 改变操作位,每次向右移动1位
SUBS r2,r2,#1
BNE Loop
MOV r4,r3
stop :
B stop
.end
思想:ARM中的rrx是一个很有用的操作,我们可以将数据的最低位移入到C标志位中,我们现在要实现的是高低位的互换,有了rrx,我们就可以根据C的值来确定新数值的对应位的内容了,由于寄存器中只有01俩个值,我们可以直接把为0的位忽略,把为1的位置1就可以了。