easyarm2200整个光盘内容

源代码在线查看: div.s

软件大小: 17331 K
上传用户: qqpp2q
关键词: easyarm 2200 光盘
下载地址: 免注册下载 普通下载 VIP

相关代码

				;/****************************************Copyright (c)****************************************
				;** 文件名:DIV.S
				;** 描述:替换ADS1.2的整数除法库。当用户程序使用了除法时,把这个文件与用户程序一齐编译即可
				;*******************************************************************************************/
				
				;引入的外部标号在这声明
				    
				;给外部使用的标号在这声明
				    EXPORT  __rt_udiv
				    EXPORT  __rt_sdiv
				
				;段声明
				    IF {CONFIG} = 16
				    CODE16
				    ELSE   
				    CODE32
				    ENDIF
				
				    AREA    Init,CODE,READONLY
				
				;/*********************************************************************************************************
				;** 函数名称: Myclz
				;** 功能描述: 仿真clz指令
				;** 输 入: R0  : 需要计算前导零的数
				;** 输 出: R0  :计算结果
				;** 全局变量:
				;** 调用模块: 
				;**
				;** 作 者: 陈明计
				;** 日 期: 2003年6月30日
				;**-------------------------------------------------------------------------------------------------------
				;** 修改人: 
				;** 日 期: 
				;**------------------------------------------------------------------------------------------------------
				;********************************************************************************************************/
				Myclz
				        MOV     R1, #32
				MyclzSTR
				        CMP     R0, #0
				        BMI     MyclzRET
				        ADD     R0, R0, R0
				
				    IF {CONFIG} = 16
				        SUB     R1, R1, #1
				    ELSE   
				        SUBS    R1, R1, #1
				    ENDIF
				
				        BNE     MyclzSTR
				MyclzRET
				
				    IF {CONFIG} = 16
				        MOV     R0, #32 
				        SUB     R0, R0, R1
				    ELSE   
				        RSB     R0, R1, #32
				    ENDIF
				
				        MOV     PC, LR
				
				;/*********************************************************************************************************
				;** 函数名称: __rt_sdiv
				;** 功能描述: 无符号数除以无符号数
				;** 输 入: R0  : 除数
				;           R1  :被除数     
				;** 输 出: R0  :R1 / R0
				;           R1  : R1 % R0
				;** 全局变量:
				;** 调用模块: 
				;**
				;** 作 者: 陈明计
				;** 日 期: 2003年6月30日
				;**-------------------------------------------------------------------------------------------------------
				;** 修改人: 
				;** 日 期: 
				;**------------------------------------------------------------------------------------------------------
				;********************************************************************************************************/
				
				
				__rt_udiv
				        CMP     R0, #0
				        
				        IMPORT  __rt_div0
				        
				    IF {CONFIG} = 16
				        BNE     __rt_udiv_1
				        LDR     R0, =__rt_div0
				        BX      R0
				    ELSE
				        BEQ      __rt_div0
				    ENDIF
				
				__rt_udiv_1
				        CMP     R0, R1
				        
				    IF {CONFIG} = 16
				        BLS     __rt_udiv_2
				        MOV     R0, #0
				        MOV     PC, LR
				__rt_udiv_2
				        PUSH    {R4-R7, LR}
				    ELSE   
				        MOVHI   R0, #0
				        MOVHI   PC, LR
				        STMFD   SP!, {R4-R7, LR}
				    ENDIF
				
				        MOV     R4, R1
				        MOV     R5, R0
				        BL      Myclz
				        MOV     R7, R0
				        MOV     R0, R4
				        BL      Myclz
				        SUB     R7, R7, R0
				
				    IF {CONFIG} = 16
				        LSL     R5, R7
				    ELSE   
				        MOV     R5, R5, LSL R7
				    ENDIF
				
				        MOV     R0, #0
				__rt_udiv_3
				        ADD     R0, R0, R0
				
				    IF {CONFIG} = 16
				        SUB     R1, R4, R5
				        BLO     __rt_udiv_4
				        MOV     R4, R1
				        ADD     R0, R0, #1
				__rt_udiv_4
				        LSR     R5, R5, #1
				        SUB     R7, R7, #1
				    ELSE   
				        SUBS    R1, R4, R5
				        MOVHS   R4, R1
				        ADDHS   R0, R0, #1
				        MOV     R5, R5 ,LSR #1
				        SUBS    R7, R7, #1
				    ENDIF
				
				        BCS     __rt_udiv_3
				        MOV     R1, R4
				
				    IF {CONFIG} = 16
				        POP     {R4-R7, PC}
				    ELSE   
				        LDMFD   SP!, {R4-R7, PC}
				    ENDIF
				
				;/*********************************************************************************************************
				;** 函数名称: __rt_sdiv
				;** 功能描述: 有符号数除以有符号数
				;** 输 入: R0  : 除数
				;           R1  :被除数     
				;** 输 出: R0  :R1 / R0
				;           R1  : R1 % R0
				;** 全局变量:
				;** 调用模块: 
				;**
				;** 作 者: 陈明计
				;** 日 期: 2003年6月30日
				;**-------------------------------------------------------------------------------------------------------
				;** 修改人: 
				;** 日 期: 
				;**------------------------------------------------------------------------------------------------------
				;********************************************************************************************************/
				
				__rt_sdiv
				        MOV     R2, #0
				        CMP     R0, #0
				
				    IF {CONFIG} = 16
				        BGE     __rt_sdiv_1
				        SUB     R0, R2, R0
				        ADD     R2, R2, #1
				    ELSE
				        ADDLT   R2, R2, #1
				        RSBLT   R0, R0, #0
				    ENDIF
				                  
				__rt_sdiv_1
				        CMP     R1, #0
				
				    IF {CONFIG} = 16
				        BGE     __rt_sdiv_2
				        MOV     R3, #0
				        SUB     R1, R3, R1
				        ADD     R2, R2, #2
				    ELSE   
				        ADDLT   R2, R2, #2
				        RSBLT   R1, R1, #0
				    ENDIF
				        
				__rt_sdiv_2
				        CMP     R2, #0
				        BEQ     __rt_udiv
				
				    IF {CONFIG} = 16
				        PUSH    {R2, LR}
				        BL      __rt_udiv
				        POP     {R2}
				        MOV     R3, #0
				    ELSE   
				        STMFD   SP!, {R2, LR}
				        BL      __rt_udiv
				        LDMFD   SP!, {R2}
				    ENDIF
				        
				        CMP     R2, #2
				
				    IF {CONFIG} = 16
				        BLE     __rt_sdiv_3
				        BGE     __rt_sdiv_4
				        POP     {PC}
				    ELSE   
				        RSBLE   R0, R0, #0
				        RSBGE   R1, R1, #0
				        LDMFD   SP!, {PC}
				    ENDIF
				
				__rt_sdiv_3
				
				    IF {CONFIG} = 16
				        SUB     R0, R3, R0
				        CMP     R2, #2
				        BGE    __rt_sdiv_4
				        POP     {PC}
				    ENDIF
				
				__rt_sdiv_4
				
				    IF {CONFIG} = 16
				        SUB     R1, R3, R1
				        POP     {PC}
				    ENDIF
				
				    END
				;/*********************************************************************************************************
				;**                            End Of File
				;********************************************************************************************************/
							

相关资源