题目:
仅用ARM汇编编程实现:求R1中的数在二进制里“1”的个数,结果存放于
R6中。
思路
减一求与,直到为0
上图中是7的二进制0111,有三个一,故进行三次减一求与后为0
代码
area numberofOne,code,readonly
entry
start
mov r6,#0 ;记录‘1’的个数
mov r1,#7 ;要找‘1’的十进制数
n
sub r2,r1,#1 ;对r1减1,给r2
and r1,r1,r2 ;对原数和减一后的数做与运算,结果给r1
add r6,r6,#1 ;‘1’的个数加1
cmp r1,#0 ;结束条件
bne n ;若r1不等于0则跳转n,继续减1求与
end ;r1等于0,完成查找
观察
打开AXD,在简单配置之后(网上找教程)打开寄存器
打开current观察
说明
测试数据为7,放入r1,二进制为0111,有三个1
r2存放r1减1的数
r6是记录当前1的个数
(1)r1存放数据为7,r2=r1-1为6,r6(目前记录1的个数为0)
(2)r1存放数据为6,r2=6,r6(目前记录1的个数为1)
(3)r1存放数据为6,r2=r1-1为5,r6(目前记录1的个数为1)
(4)r1存放数据为4,r2为5,r6(目前记录1的个数为2)
(5)r1存放数据为4,r2=r1-1为3,r6(目前记录1的个数为2)
(6)r1存放数据为0,r2为3,r6(目前记录1的个数为3)