如何使用 ARM 程序集准确找到 32 位数字的回文?



我试图找到一个汇编代码来查找给定的数字是否是回文。我在网上得到了一个代码。但是我无法理解"movu"命令。谁能解释一下?

mov R0,1044480
mov R3,0
mov R4,31
movu R2,0x0001
mov R5,0
andu R1,R0,0xffff
.loop:
and R3,R2,R1
lsl R2,R2,1
lsl R3,R3,R4
add R5,R5,R3
sub R4,R4,2
cmp R4,0
bgt .loop
lsr R0,R0,16
lsr R5,R5,16
sub R0,R5,R0
cmp R0,0
beq .palin
mov R0,0
b .exit
.palin:
mov R0,1
.exit:

这里有几个问题。 当你似乎不太熟悉指令集时,为什么要在汇编中这样做? 您为什么设备编写此汇编代码? 当然,如果你正在做汇编,你至少应该有处理器的指令集文档?

现在让我们处理问题本身。 movu 是 MOV Unsigned 的助记符。 这与 MOV 指令的工作方式基本相同,区别在于它不会改变状态寄存器,这与 MOV 不同。 这样,您可以将寄存器移动到目标,而无需更改 Z、C 或 N 标志。

最新更新