algorithm - 如何在 SPARC 汇编中计算除法余数?

标签 algorithm assembly division integer-division sparc

这是计算两个正整数相除的伪代码。
HR寄存器保存余数,LR寄存器保存被除数。 (并最终保 stub )

但是我认为这个算法有一些问题。
因为这个算法有时不能恢复减法。(除法是减法的延续。)

例如6/3 (0110/011)
该算法再减去-3一次。 (当我们手工计算这个除法时,不会出现这种情况)
所以我认为这个算法有一些问题。
你不同意我的观点吗? 如何在汇编中计算除法余数?

for i = 1 to num_of_bits do
(HR LR) << 1
if (HR >= 0) then
   HR = HR - DIVISOR
else
   HR = HR + DIVISOR
endif
if (HR > 0) then LR(lsb) = 1 endif
endfor

最佳答案

除法算法(也计算余数)的几种实现可以在 SPARC architecture manual 的附录 E 中找到。 .

较新版本的 SPARC 架构包括除法运算符 UDIV 和 SDIV。

可以找到进一步的实现 here .

关于algorithm - 如何在 SPARC 汇编中计算除法余数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7708444/

相关文章:

algorithm - 评估递归函数

c++ - 如何选择一个总和为目标数字的数字序列(从固定列表中)?

assembly - 如何清理格式错误的 x86_64 程序集?

c - 如何在 C 中显示浮点除法的实际结果?

c++ - 利用二分查找误差的插入排序算法

c++ - 在 C++ 中使用 std::algorithm 输出 `std::multiset` 的唯一元素及其频率(无循环)

c - 内联 C 汇编破坏了它自己的变量

assembly - 这段汇编代码有什么作用? (测试、异或、JNZ)

java - 整数除法浮点结果

css - Div 未正确对齐