首页 > 解决方案 > 附加多个位的 ARM 程序集

问题描述

我的程序的目的是获取寄存器 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

标签: assemblyraspberry-piarmcpu-registers

解决方案


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

至于你的例子,毫不奇怪它没有做你想做的事 - AND 操作码每次都会破坏 R1 的先前内容。试着拿笔和纸,然后在你的循环中写下每一步的寄存器值。


推荐阅读