专栏中心

EEPW首页 > 专栏 > 基于ARM的除法运算初探

基于ARM的除法运算初探

发布人:lionwq 时间:2008-01-22 来源:工程师 发布文章
ARM每有除法指令,若程序中涉及到了“/”或“%”运算时,编译器将自动的调用库函数“__rt_udiv”和“__rt_sdiv”来实现该运算。但直接利用C库函数中的标准整数除法程序,根据执行情况和输入操作数的范围,要花费20~100个周期,消耗较多的软件运行时间。对于实时性要求很高的嵌入式系统而言,这是没法忍受了。笔者根据标准的库函数,用ARM的汇编程序实现了“__rt_udiv”和“__rt_sdiv”的功能。
 
  AREA    Divarth, CODE, READONLY
      
        EXPORT __rt_udiv
        EXPORT __rt_sdiv
;/***************************************************************/
;求除数需要移位的次数,为简化除法
;/***************************************************************/
Myclz
        mov r1,#32
Myclzstr
        cmp r0,#0
        bmi Myclzret
        add r0,r0,r0
        subs r1,r1,#1
        bne Myclzstr
Myclzret
        rsb r0,r1,#32
        mov pc,lr
;/***************************************************************/
; name : __rt_udiv
 
; in : r0 除数
;      r1 被除数
; out:r0  = r1/r0
;      r1  = r1%r0
;/***************************************************************/
__rt_udiv
          cmp  r0, #0
          IMPORT  __rt_div0  ;除数为零函数由c语言编写
          beq  __rt_div0
          cmp  r0, r1
          movhi r0, #0
          movhi pc,lr
          stmfd sp!, { r4-r7,lr}
          mov  r4, r1
          mov  r5, r0
          bl Myclz
          mov r7, r0
          mov r0,r4
          bl Myclz
          sub r7,r7,r0
          mov r5,r5,lsl r7
          mov  r0,#0
__rt_udiv_1
          add r0,r0,r0
          subs r1,r4,r5
          movhs r4,r1
          addhs r0,r0, #1
          mov   r5,r5,lsr #1
          subs  r7,r7,#1
          bcs  __rt_udiv_1
          mov r1,r4
          ldmfd sp!,{r4-r7,pc}
;/***************************************************************/
; name : __rt_sdiv
 
; in : r0 除数
;      r1 被除数
; out:r0  = r1/r0
;      r1  = r1%r0
;/***************************************************************/
__rt_sdiv 
          mov r2,#0
          cmp r0,#0
          addlt r2,r2,#1
          rsblt r0,r0,#0
          cmp  r1,#0
          addlt r2,r2,#2
          rsblt r1,r1,#0
          cmp r2,#0
          beq __rt_udiv
          stmfd sp!,{r2,lr}
          bl __rt_udiv
          ldmfd sp!,{r2}
          cmp r2,#2
          rsble r0,r0,#0
          rsbge r1,r1,#0
          ldmfd sp!, {pc}
        END

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

无外围器件FSK无线收发芯片 IA4420

助您快速开发机器视觉应用视频

视频 2009-03-25

AMD 锐龙嵌入式 7000 系列助力研华科技 Micro-ATX 主板

神经技术的潜能:贸泽EIT系列探索技术与思维交会点的脑机接口

用at90s2313做的usb转串口方案

无线数传产品PTR3000系列

寻找兼职

lxy001 2005-05-18

基于CompactRIO的振动台控制

视频 2009-03-25

以第二代 AMD Versal Premium 系列打造 MIPI C-PHY/D-PHY 测试方案

测试测量 2025-04-11

TE Connectivity在推动长期可持续发展目标方面取得显著进展

学子专区论坛—ADALM2000实验:脉宽调制

TITAN Haptics助力中国健康产业的革新

英飞凌与科士达深入合作,全栈方案树立UPS高效可靠新标杆

用MC145026/27实现多机并口无线通信

实时的噪声源定位系统

视频 2009-03-25

使用R系列Intelligent DAQ进行高级定时和出发

视频 2009-03-25

IGBT 7 EconoDUAL™ 3系列拓展带焊接针产品

嵌入式系统 2025-04-11

Nordic Semiconductor联同Qorvo提供面向Aliro和Matter的参考应用,加快门禁和智能锁应用的上市时间

Diodes公司推出先进的锑化铟霍尔器件传感器

感谢工程师——无线电话听筒

视频 2009-03-26
更多 培训课堂
更多 焦点
更多 视频

技术专区