ARM程序集附加多个位

时间:2019-03-21 11:34:00

标签: assembly raspberry-pi arm cpu-registers

我的程序的目的是获取寄存器0中的值并将其复制为以下形式 “ 1011”进入寄存器1。

编辑我最初并没有说清楚这一点,这不是一个简单的mov可以实现的,目标是隔离每一位并从该点重构

我正在使用逻辑移位与AND相结合来隔离每个位 寄存器4中的掩码以检测天气是否为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

2 个答案:

答案 0 :(得分:0)

您是否意识到简单 mov R1, R0 给你你想要的?

对于您的示例,不足为奇的是它没有做您想要的事情-AND操作码每次都会破坏R1的先前内容。尝试笔和纸,然后遍历循环,在每个步骤中写下寄存器的值。

答案 1 :(得分:0)

我涉及的解决方案是使用寄存器class Node: def __init__(self, key=None, data=None): self.key = key self.data = data self.left = None self.right = None class BST: def __init__(self): self.root = None self.size = 0 def remove(self, key): self.root = self._remove(key, self.root) def insert(self, key, data): self.root = self._insert(self.root, key, data) def _insert(self, root, key, data): if root == None: self.size += 1 return Node(key, data) if root.key == key: return root elif root.key > key: root.left = self._insert(root.left, key, data) else: root.right = self._insert(root.right, key, data) return root def _remove(self, key, node): if node == None: return None if key == node.key: if node.left != None and node.right == None: # if trying to remove root and right side is empty return node.left elif node.left == None and node.right != None: # if trying to remove root and left side is empty return node.right elif node.left == None and node.right == None: # if trying to remove leaf return node # two more cases to check when it has siblings # iterates recursively in the bst elif key <= node.key: node.left = self._remove(key, node.left) else: node.right = self._remove(key, node.right) return node 作为位掩码, 最终mov R4,#1and R1,R4,lsr R5检查1的存在,并且每次左移逻辑位移都会递减。