附加多个位的 ARM 程序集

ARM assembly appending multiple bits

我的程序的目的是获取寄存器 0 中的值并将其复制到表单中 “1011”进入寄存器 1。

编辑我最初并没有说清楚,不是通过简单的 mov 来实现的,目标是隔离每一位并从该点重建

我正在使用逻辑移位结合 AND 来隔离每个位 寄存器 4 中用于检测天气的掩码是否存在 1。

就目前而言,代码正常退出,但问题是每次我循环执行新的 and,前一个 and 的值被推出寄存器 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 ,每次都递减左逻辑移位。