0
A
回答
0
这里没有真正的答案。一些处理器的指令给出了一些设置位(这对于通用编程来说是一个非常无用的指令,但对错误检测很有用)。假设你没有这样的指令,通常零是寄存器最有可能的价值,你应该专门测试。那么你不得不求助于数位。基本算法是与AND相加,将结果添加到累加器,右移,并与一个,并重复,直到你有所有的位。或者因为你想要零位,XOR与1.但是我们可能会加快速度。你可以采取8位并做一个查询。但是比8点钟更快还是更慢呢?它只取决于特定的指令集,内存缓存等。如果我们有一个“寄存器文件”,通过索引号识别寄存器,我们可以设置寄存器0为4,寄存器1为3,寄存器2为3,寄存器3为2等等(16个寄存器的计数为零位),输出4位,然后使用结果来索引寄存器文件。你需要做几个来证明这个开销。
另一个问题是循环或展开会更快。这又是高度依赖于架构的。
然后另一个可能的窍门是,如果MSB被设置,则该数字为负数。对于负数的测试是否比AND更快?很有可能。另一种情况是,乘以2或加上它本身可能会设置进位标志,并且加进零可能会比加进寄存器更快。
有很多可能的小策略。
相关问题
- 1. 如何将NumberFormat设置为小数点后0位的数字
- 2. NASM - 将8位数据放在32位寄存器的特定位置
- 3. 32位寄存器作为8位寄存器
- 4. PHP力复位计数器为0
- 5. 高效地将YMM寄存器的最低64位设置为常量
- 6. 将两个x86 32位寄存器存储到128位xmm寄存器中
- 7. 移位寄存器为std_logic_vector
- 8. 如何将Elastic Beanstalk环境的实例计数设置为0?
- 9. MIPS中的浮点寄存器是哪些数字寄存器?
- 10. MySQL将索引计数重置为0
- 11. 32位寄存器将64位分成两个32位寄存器
- 12. 如何设置数据断点,当EAX寄存器设置为特定值
- 13. cuda寄存器的单位
- 14. 64位的dll寄存器
- 15. 将q寄存器中的128位数据转换(总和)为16位数据的高效算法
- 16. 载入小的数字为64位x86寄存器
- 17. 如何将计数器再次设置为30,并将其停止在0?
- 18. 寄存器中的数据表的MySQL
- 19. 位屏蔽位寄存器
- 20. 在Ride7 IDE的寄存器窗口的每行设置默认寄存器
- 21. 数值为0的数组中计数
- 22. 展位乘法器在64位寄存器的高32位中放置1
- 23. EIP等寄存器的86过程中的位置
- 24. 将WPF中Combobox的SelectedIndex设置为0
- 25. 未将数据复制到寄存器
- 26. 基本铛:sprintf的复位诠释计数器为0
- 27. 为什么24位寄存器?
- 28. Java程序的程序计数器寄存器值
- 29. 阵列bidimensional上的位置0 0不保存整数
- 30. 如何将32位寄存器的内容放入字节数组中?
可能的重复[在寄存器,ARM程序中计数为1的最快方法](http://stackoverflow.com/questions/15736602/fastest-way-to-count-number-of-1s-in-一个寄存器-臂组件) – Notlikethat