两个数相乘,有下面两种实现办法:
实现1: MMOVF32 MR0, #100.002
MMPYF32 MR1, MR0, #18000.0
MMOV32 @_Test1, MR1
实现2: MMOVF32 MR2, #18000.0
MMPYF32 MR3, MR0, MR2
MMOV32 @_Test2, MR3
通过观察Test1、Test2,发现实现2得到的结果更加精确。究其原因可以从MMPYF32 这条指令的描述看出来:
即#16FHi是32位浮点数的高16位,即一个立即数,在CAL中以被以符号(正或负)、指数和尾数的科学表示法表示了。这个乘法指令取走时,是以 忽略了低16位的,只去高16位,而低16位表示的是该数立即数的一部分小数,所以,这种乘法会损失不少精度。
所以实现1精度差点,但是速度快,省一个赋值操作,就省出了一个时钟。
实现2精度好,但是多费一个时钟。