我正在尝试找到如何在 ARM 中进行除法,因为没有DIV
命令。如果可以通过浮点数相乘来完成[/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。所以我的结果不太准确。
如果您只想将一个整数值除以r0
乘以 9,您可以近似为:
ldr r3,=0x1C71C71D # 1C71C71D == (2^32 / 9) + 1
umull r9,r3,r0,r3
r3
现在包含商的整数部分,并且r9
包含按 2^32 缩放的小数部分。要得到余数,只需将商的整数部分乘以 9,然后从原始值中减去结果即可。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)