技术热线: 4007-888-234

三字节除以双字节的子程序

更新时间: 2019-03-26
阅读量:2190

24位除以16,商为16;采用优化算法 ;-------------------------------------------------------------- ;入口条件:16位除数存放在A_HA_L单元中; ; 16位被除数存放在B1_L\B_HB_L单元中; ;出口条件:16位的商存放在B_HB_L单元中; ; 16位的余存放在C1_L\C_HC_L单元中; ;-------------------------------------------------------------- LIST P=16F84 INCLUDE "P16F84.INC" ;-------------------------------------------------------------- A_H EQU 0C ;除数高8A_L EQU 0D ;除数低8

B1_L EQU 0E ;除数的最高8B_H EQU 0F ;被除数高8(商的高8) B_L EQU 10 ;被除数低8(商的低8)

C1_L EQU 11 ;余数的最高8C_H EQU 12 ;余数高8C_L EQU 13 ;余数低8

D1_L EQU 14 D_H EQU 15 D_L EQU 16 TEMP EQU 17

;--------------------------------------------------------------- ORG 0 GOTO START ORG 8 ;--------------------------------------------------------------- CHUFA MOVLW D'24' ;左移次数 MOVWF TEMP MOVF B1_L,W MOVWF D1_L MOVF B_H,W ;BD MOVWF D_H MOVF B_L,W MOVWF D_L CLRF B1_L CLRF B_H CLRF B_L CLRF C1_L CLRF C_H CLRF C_L

DLOOP BCF STATUS,C RLF D_L,F ;带进位左移 RLF D_H,F RLF D1_L,F RLF C_L,F RLF C_H,F RLF C1_L,F MOVF C1_L,W BTFSS STATUS,Z GOTO DIV1 MOVF A_H,W SUBWF C_H,W BTFSS STATUS,Z GOTO DIV2 MOVF A_L,W SUBWF C_L,W BTFSS STATUS,C GOTO NOGO DIV1 MOVF A_L,W SUBWF C_L,F BTFSC STATUS,C GOTO DIV1_1 MOVLW 1 SUBWF C_H,F BTFSC STATUS,C GOTO DIV1_1 DECF C1_L,F DIV1_1 MOVF A_H,W SUBWF C_H,F BTFSC STATUS,C GOTO DIV3 DECF C1_L,F DIV3 BSF STATUS,C GOTO NOGO DIV2 BTFSC STATUS,C GOTO DIV1 NOGO RLF B_L,F RLF B_H,F DECFSZ TEMP,F ;所有位处理完否? GOTO DLOOP ;没完,继续循环 RETLW 0 ;-------------------------------------------------------------- START MOVLW 1 ;除数 MOVWF A_H MOVLW 8 MOVWF A_L MOVLW 56 ;被除数 MOVWF B_H MOVLW 20 MOVWF B_L MOVLW 1 MOVWF B1_L CALL CHUFA GOTO $ ;-------------------------------------------------------------- END