ARM程序集附加多个位

问题描述 投票:0回答:2

我的程序的目的是获取寄存器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
assembly raspberry-pi arm cpu-registers
2个回答
0
投票

你意识到一个简单的mov R1, R0给你你想要的东西吗?

至于你的例子,毫不奇怪它没有做你想要的 - AND操作码每次都会破坏R1的先前内容。尝试使用笔和纸,然后在每个步骤中记下寄存器的值。


0
投票

我参与使用寄存器mov R4,#1作为位掩码的解决方案,使用and R1,R4,lsr R5检查是否存在1,最后orr R0,R1,lsl #4,左侧逻辑移位每次递减。

© www.soinside.com 2019 - 2024. All rights reserved.