这是我的代码。我们必须找到两个数字中最大的一个。我觉得我把某个地方搞砸了,或者代码不完整。
A: .word 12
B: .word 24
load r1, [A]
load r1, [r1]
load r2, [B]
load r2, [r2]
blt r1, r2, end
mov r1, r2
load r1
end:
bra +0
将鼓励任何帮助
将值加载到寄存器分两步完成,首先制作一个指向变量的指针,然后从其地址加载数据。类似这样的东西:
ldr R0, =A //R0 is pointing to A
ldr R1, [R0] //load a word from the address pointed to by R0 into R1
注意:你可以做ldr R0,[R0]
不能在同一指令中进行比较和分支。blt,r1,r2,end是无效指令。您可以进行比较,然后根据比较结果进行分支。
有几种方法可以进行比较,但最简单的可能是使用比较两个值的CMP指令。比较保存A和B值的两个寄存器(例如寄存器R1和R2(中的值。
CMP R1, R2
最后,您可以使用带有目标标签的条件(如BLT或BEQ(的分支指令
BLT end
伪代码看起来像这样:
set up pointers
load values
compare values
branch to the end if A<B