|
文/Agemo last updated at 2004-03-13 ===========================
lui v0, $2aaa ori v0, v0, $aaab mult a0, v0 mfhi t1 看上去是乘法,实际是除法。写出来公式就明白了。 t1 = ($2aaaaaab * a0) 取高位 = ($2aaaaaab * a0)/$100000000 = a0 / 5; 注:Compiler优化指令的技巧,这几乎是所有PS游戏的除法编译结果。 虽然R3000也有除法指令,但是实际很少使用。 ———————————————————————— 在80x86平台下也是类似的。引用其他网站上文(作者:zzppallas) xor edx, edx mov eax, 51EB851Eh imul ecx shr edx, 5 mov eax, edx imul 的结果保存在 edx:eax中,edx 右移 5尾,相当于结果/0x20,00000000 其原始数据为 edx:eax = 0:xxxx 最后 edx 结果就是 ecx * 51EB851Eh / 2000000000h 后面的数据就是分母了 用个计算器就可以算出来分母为 100, 也就是说 最后 edx = ecx /100(十进制) |