24位除以16位,商為16位 ;采用優(yōu)化算法 ;-------------------------------------------------------------- ;入口條件:16位除數(shù)存放在A_H和A_L單元中; ; 16位被除數(shù)存放在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 ;除數(shù)高8位 A_L EQU 0D ;除數(shù)低8位
B1_L EQU 0E ;除數(shù)的最高8位 B_H EQU 0F ;被除數(shù)高8位(商的高8位) B_L EQU 10 ;被除數(shù)低8位(商的低8位)
C1_L EQU 11 ;余數(shù)的最高8位 C_H EQU 12 ;余數(shù)高8位 C_L EQU 13 ;余數(shù)低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' ;左移次數(shù) 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 ;沒完,繼續(xù)循環(huán) RETLW 0 ;-------------------------------------------------------------- START MOVLW 1 ;除數(shù) MOVWF A_H MOVLW 8 MOVWF A_L MOVLW 56 ;被除數(shù) MOVWF B_H MOVLW 20 MOVWF B_L MOVLW 1 MOVWF B1_L CALL CHUFA GOTO $ ;-------------------------------------------------------------- END