【发布时间】:2013-11-07 19:10:08
【问题描述】:
由于没有DIV 命令,我正在尝试查找如何在 ARM 中进行除法。如果这可以通过乘以浮点数[/9 = *0.09]、减法或使用库来完成。任何方式都可以。
目前我正在使用这样的循环使用减法进行除法,但我丢失了小数:
MOV R0,#70 ;Fahrenheit Temperature
SUB R1,R0,#32 ; Subtracting 32
MOV R4,#0 ;Counter
LOOP
ADD R4,R4,#1; Counter+1 ->Is the answer of the division without decimals
SUB R1,#9
CMP R1,#0
BPL LOOP
MOV R1,R4
所以基本上我所做的是我的温度为 70,我减去 32,我得到 38。然后在循环中我每次取 9,直到提醒小于 9。使用正常除法的答案是 4.22222。这里我得到 5。所以我的结果并不准确。
【问题讨论】:
-
Fast Division on GCC/ARM 的可能重复项
-
最好乘以 (2^16/9~=7282) 之类的值,然后在结果上移动 2^16。您必须知道值的范围,这仅适用于 固定 部门。
-
其他相关问题:Integer division on ARM,Assembly mod algorithm;查看问题旁边的相关列表。
-
我的 ARM 有除法指令...为什么你的没有?您能否提供更多信息?
-
homepage.cs.uiowa.edu/~jones/bcd/divide.html 并为任何其他号码执行此操作。是的,例如,您可以使用固定或浮点数乘以 1/9。