⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dsdiv.asm

📁 PIC单片机的汇编源码合集,应用比较广泛,设计程序时可做子程序来用
💻 ASM
字号:
;********************DSDIV********************
;本程序实现双字节有符号数除法。
;入口参数:被除数在SOUH:SOU中,除数在RLTH:RLT中。
;出口参数:商在SOUH:SOU中,余数在RLTH:RLT中.
;占用资源:W,STATUS,021H,023H~02BH,一重堆栈。
;说    明: 1.用户在调用该子程序之前必须确定除数不为零,否则得不到正确结果.
;          2.余数一定为正数.
;          3.被除数绝对值一定要大于除数的绝对值,否则将出错.

           IFNDEF       DSDIV1
            #DEFINE     DSDIV1
                        
DSDIV       MOVLW       .16         ;循环16次
            MOVWF       CNT
            MOVF        RLTH,W
            XORWF       SOUH,W
            MOVWF       SADRH       ;SADRH暂存相除后的符号位
            BTFSS       SOUH,7
            GOTO        NEXT45
            COMF        SOU,F
            COMF        SOUH,F
            INCF        SOU,F
            BTFSC       STATUS,Z
            INCF        SOUH,F      ;负数取相反数
NEXT45      BTFSS       RLTH,7
            GOTO        NEXT46
            COMF        RLT,F
            COMF        RLTH,F
            INCF        RLT,F       
            BTFSC       STATUS,Z
            INCF        RLTH,F      ;负数取相反数
NEXT46      MOVF        SOUH,W      
            MOVWF       TEMP4       
            MOVF        SOU,W
            MOVWF       TEMP3       ;被除数转移到TEMP4:TEMP3中
            CLRF        SOUH
            CLRF        SOU         ;SOUH:SOU用来存放商
            CLRF        TEMP2
            CLRF        TEMP1       ;TEMP2:TEMP1得到余数
LOOP83      BCF         STATUS,C
            RLF         TEMP3,F
            RLF         TEMP4,F
            RLF         TEMP1,F
            RLF         TEMP2,F
            MOVF        RLTH,W
            SUBWF       TEMP2,W     ;检测是否余数大于除数
            BTFSS       STATUS,Z
            GOTO        NOCHK1
            MOVF        RLT,W
            SUBWF       TEMP1,W     ;如果高位相等则检测低位
NOCHK1      BTFSS       STATUS,C    
            GOTO        NOGO1
            MOVF        RLT,W       ;余数减除数
            SUBWF       TEMP1,F
            BTFSS       STATUS,C
            DECF        TEMP2,F
            MOVF        RLTH,W
            SUBWF       TEMP2,F
            BSF         STATUS,C    ;结果中移入1
NOGO1       RLF         SOU,F
            RLF         SOUH,F
            DECFSZ      CNT,F        
            GOTO        LOOP83
            MOVF        TEMP1,W
            MOVWF       RLT
            MOVF        TEMP2,W
            MOVWF       RLTH        ;余数归位
            BTFSS       SADRH,7
            RETLW       0           ;结果是正数则返回
            COMF        SOU,F           
            COMF        SOUH,F
            INCF        SOU,F
            BTFSC       STATUS,Z
            INCF        SOUH,F
            RETLW       0
           ENDIF

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -