基于ARMv5TE架构的软件除法

近来有点悠闲,所以无聊中做了一个基于二进制试商法的无符号整型除法实现。

以下函数仅对于ARMv5T架构或更高版本架构的处理器有效。汇编用的是RVCT3.1或更高版本

算法汇编文件:

 AREA    MY_TEST, CODE, READONLYPRESERVE8 {TRUE}export my_udivCODE32my_udiv     mov        r12, r0  mov        r0, #0  cmp        r12, #0  bxeq       lr  cmp        r1, #0  bxeq       lr  cmp        r12, r1  bxlo       lr     MY_UDIV_LOOP  clz        r2, r12  clz        r3, r1  sub        r2, r3, r2  mov        r3, r1, LSL r2  cmp        r12, r3  sublo      r2, r2, #1  movlo      r3, r3, LSR #1  sub        r12, r12, r3  mov        r3, #1  orr        r0, r0, r3, LSL r2cmp        r12, r1  bhs        MY_UDIV_LOOP  bxlo       lr  END

主机端的测试程序:

#include extern unsigned my_udiv(unsigned dividend, unsigned divisor);static int g1 =12345678, g2 =3;int main(void)
{  int a = my_udiv(g1, g2);     printf("The value is: %d\r\n", a);     int b = g1 / g2;printf("The value is: %d\r\n", b);  
}

有条件的朋友可以尝试执行一下~


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部