我的程序的目的是获取寄存器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
答案 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,#1
用and R1,R4,lsr R5
检查1的存在,并且每次左移逻辑位移都会递减。