我的程序的目的是获取寄存器0中的值并将其以“1011”的形式复制到寄存器1中。
编辑我最初没有说清楚,没有用简单的mov
实现,目标是隔离每个位并从那一点重建
我正在使用逻辑移位来将每个位与寄存器4内的AND掩码组合以检测天气或不存在1。
因为它代码正常退出,但问题是我每次循环执行一个新的,并且前一个的值被推出寄存器1。
在调试器中,R1的值为1,0,1,1
我想要的时候是:1,10,101,1011
这是.s文件
.global _start
_start:
mov R0,#0b1011
mov R4,#1 @Will act as a mask
mov R5,#3 @Shifter
bl movregs
mov R7,#1
svc 0
movregs:
and R1,R4,R0,lsr R5 @Isolates each bit for moving
subs R5,#1 @Decrements the shifter
bge movregs
bx LR
你意识到一个简单的mov R1, R0
给你你想要的东西吗?
至于你的例子,毫不奇怪它没有做你想要的 - AND操作码每次都会破坏R1的先前内容。尝试使用笔和纸,然后在每个步骤中记下寄存器的值。
我参与使用寄存器mov R4,#1
作为位掩码的解决方案,使用and R1,R4,lsr R5
检查是否存在1,最后orr R0,R1,lsl #4
,左侧逻辑移位每次递减。