assembly - 如何计算十进制数中有多少位是1?
问题描述
我在 RISC-V RARS 1.3 应用程序中创建的这个程序旨在获取一个十进制数并计算该数字中有多少位。我正在测试的是十进制数 5,这个程序应该适用于我放在 t1 上的任何正数。这是我创建的代码。该程序旨在每当 AND 函数的结果不为 0 时添加一个计数器,但我遇到的问题是程序没有停止。这个问题有解决方案吗?
_start:
li t1,2 # start with decimal 5, binary 101
li t2,1 # adding counter for AND function
li t3,0 # bit counter count
li t4,0 # to compare 0
and t5,t1,t2 # t1 & t2 = t5
bne t5,t4,label # go to label if t5 != 0
beqz t5,label2 # go to label if t5 == 0
label:
addi t3,t3,1 # add one to bit count
slli t2,t2,1 # shift left
and t5,t1,t2 # t1 & new t2 = t5
bne t5,t4,label # go to label if t5 != 0
beqz t5,label2 # go to label if t5 == 0
label2:
slli t2,t2,1 # shift left
and t5,t1,t2 # t1 & new t2 = t5
.data
解决方案
由于您在每次迭代中开始t2 = 1
并乘以它,2
因此一旦 的值t2
变得大于,您应该停止计算t1
。
另外,在您的代码中,我看到您可能打算处理两种情况:
label:
- 此块处理当前测试位为 1 的情况,它增加位数,然后跳转到label
或label2
。在这里,您只需要添加上面提到的退出条件label2:
- 此块处理当前测试位为 0 的情况,它不会更改位数,但似乎也不会继续使用label
orlabel2
。我认为应该继续查看是否有更高的 1 位,直到t2>t1
达到退出条件。
推荐阅读
- python - 将 python 中的日志记录配置文件作为命令行参数传递
- java - 在本地获取 ERROR: org.apache.hadoop.hbase.PleaseHoldException: org.apache.hadoop.hbase.PleaseHoldException: Master is initializing
- python - 通过 Python 从和向蓝牙设备获取实时音频数据
- spring-boot - SessionId 在 Spring Boot Application 中的每个 curl 请求中不断变化
- python - 来自 Python 的 HTTP 请求不工作,在其他软件中工作
- angular - 在 Angular 动态表单创建中使用常量文件中的服务加载选择选项
- javascript - 如何在电子应用程序中使用 Vue 计算、数据、.. 属性?
- jenkins - 在 Jenkins Pipeline 中导入具有常量的类时出错
- trace - 使用 dd-trace-go 获取工作进程跨度 ID
- c# - 如何比较两个列表
并列出 在c#中