x64 安卓 arm 汇编中 FMOV S1, #0x3E000000后,我需要除9怎么做
时间: 2024-10-13 14:04:57 浏览: 27
aarch64-extensions:Binary Ninja AArch64 IL升降器扩展
在x64或arm汇编语言中,对整数做除法通常不是通过直接的`FMov`指令完成的,因为`FMov`主要用于浮点数之间的操作。对于整数除法,你需要使用算术运算指令,比如arm上可以使用`Sdiv`(ARMv7及更高版本)或`Smulhi`配合`Smull`(ARMv6及更低版本)等。
对于`Fmov`之后处理整数9的除法,如果你想要的结果是单精度浮点数(即`S1`是单精度浮点寄存器),那么首先需要将整数转换成单精度浮点数。这需要先将9乘以10(因为0.001是9的倒数),然后用`FMov`把结果放回`S1`。但是请注意,这并不是常规做法,通常会先进行整数运算,然后用`VCVT`(vector convert to float)指令转换结果。
例如,在arm64汇编中(使用`VMOV.F32`类似`FMov`,`SQRT`是开平方根指令,这里仅示例,未考虑溢出情况):
```assembly
// 将9转换为单精度浮点
VMOV.F32 s1, #9.0
VMOV.F32 t1, #0.1
// 计算乘积
VSQRT.F32 s2, s1 // s1 = 9 -> s2 = √9 = 3
VMUL.F32 s2, s2, t1 // s2 *= 0.1
// 现在s2约等于单精度的0.001,但为了得到精确的除法结果,可能还需要额外步骤
```
至于直接对`S1`进行除法运算,ARM64有专门的指令如`VDIV`(对两个浮点数做除法)或者`UDIV`(对无符号整数做除法),但这通常不会在单个`FMov`之后进行,因为它们不支持直接的除法操作。
阅读全文