24位除以16位,商为16位 ;采用优化算法 ;-------------------------------------------------------------- ;入口条件:16位除数存放在A_H和A_L单元中; ; 16位被除数存放在B1_L\B_H和B_L单元中; ;出口条件:16位的商存放在B_H和B_L单元中; ; 16位的余存放在C1_L\C_H和C_L单元中; ;--------------------------------------------------------------
LIST P=16F84 INCLUDE "P16F84.INC"
;-------------------------------------------------------------- A_H EQU
0C ;除数高8位 A_L EQU 0D ;除数低8位
B1_L EQU 0E ;除数的最高8位 B_H EQU 0F ;被除数高8位(商的高8位) B_L EQU 10 ;被除数低8位(商的低8位)
C1_L EQU 11 ;余数的最高8位 C_H EQU 12 ;余数高8位 C_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 ;B送D 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