首页 > 解决方案 > 如何使用 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:

标签: assemblyarmpalindrome

解决方案


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

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


推荐阅读