纯ARM编程 算一个数的二进制有几个1

题目:

仅用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)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值