This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

C6678汇编如何对32位定点任意数进行求除数和求余数



我想用最快的时间求
x = a % b;
y = a / b;
其中a,b为32位定点的任意数。
因为C6000汇编指令没有特定的指令,调用_divi()函数很耗费时间,我只想得到a对b的除数和余数。
我现在用的是这种方法,先把用intsp指令把a,b转化为单精度浮点,然后用rcpsp求b的倒数,然后用a乘以b的倒数,然后用sptrunc将结果再转化为定点数。具体代码:
intsp a, a_sp
intsp b, b_sp
rcpsp b_sp, b_sp_1
mpysp a_sp, b_sp_1, resu_sp
sptrunc resu_sp,int_part;得到除数部分,使用浮点转定点的截断指令
mpy32 int_part,b,resu
sub a,resu,rem_part
mv rem_part,x
mv int_part,y
这样对大多数定点数是没有问题的,但是当a是b的整数倍时就会出现问题,比如a=200,b=100,用上述代码得到的不是x=0,y=2,而是x=100,y=1;
另外,当a很大的时候也会出现问题,比如a=6001,b=120,用上述代码得到的不是x=1,y=50,而是x=120,y=49;我感觉是在用intsp指令时,定点数转浮点数有精度的损失造成的,但是我给a加上0.001后,结果还是不对,而且会出现更多的情况出错。求高人分析指点,有没有更好的对32位定点任意数进行求除数和求余数的方法。