math.asm

来自「VCP201_CODE is a FPGA source code.」· 汇编 代码 · 共 119 行

ASM
119
字号
;------------------------------------------------------------
; Name : udiv
; Parm : hi_byte, lo_byte:unsigned char
;        divisor:8bits 
; Retn : hi_byte.lo_byte:16bits unsigned quotient
;        rem:8bits remainder
; Desc : 16/8 unsigned division
; Vars : temp_buf1, temp_buf2
;------------------------------------------------------------
udiv:
        bsf     STATUS,RP0      ; to page 1
        clrf    rem
        bcf	STATUS,RP0

        movlw   8            
        movwf   temp_buf1
        
udiv_loop1:
        rlf     hi_byte,W
        bsf	STATUS,RP0
        rlf     rem,F
        movf    divisor,W
        subwf   rem,F
        bcf	STATUS,RP0

        btfsc   STATUS,C
        goto    udiv_2

        bsf	STATUS,RP0
        addwf   rem,F
        bcf	STATUS,RP0

        bcf     STATUS,C
udiv_2:
	bcf	STATUS,RP0
        rlf     hi_byte,F
        decfsz  temp_buf1,F
        goto    udiv_loop1

        movlw   8
        movwf   temp_buf1
        clrf    temp_buf2

udiv_loop2:
        rlf     lo_byte,W

        bsf	STATUS,RP0
        rlf     rem,F     
        bcf	STATUS,RP0

        rlf     temp_buf2,F

        bsf	STATUS,RP0
        movf    divisor,W
        subwf   rem,F
        bcf	STATUS,RP0
        clrw

        btfss   STATUS,C
        movlw   1
        subwf   temp_buf2,F
        btfsc   STATUS,C
        goto    udiv_3
        bsf	STATUS,RP0
        movf    divisor,W
        addwf   rem,F
        bcf	STATUS,RP0

        clrw
        btfsc   STATUS,C
        movlw   1
        addwf   temp_buf2,F
        bcf     STATUS,C
udiv_3:
        rlf     lo_byte,F
        decfsz  temp_buf1,F
        goto    udiv_loop2

	bcf	STATUS,RP0        
        return



;------------------------------------------------------------
; Name : umul
; Parm : hi_byte, lo_byte:unsigned char
; Retn : hi_byte.lo_byte:16bits unsigned product
; Desc : 8x8 unsigned multiply
; Vars : mul_cnt
;------------------------------------------------------------
umul:
        bsf     STATUS,RP0      ; to page 1
        movlw   0x08
        movwf   mul_cnt
        bcf	STATUS,RP0

        movf    hi_byte,W
        clrf    hi_byte
        bcf     STATUS,C

umul_loop:
	bcf	STATUS,RP0
        rrf     hi_byte,F
        rrf     lo_byte,F
        btfsc   STATUS,C
        addwf   hi_byte,F

       	bsf	STATUS,RP0
        decfsz  mul_cnt,F
        goto    umul_loop
        bcf	STATUS,RP0

        rrf     hi_byte,F
        rrf     lo_byte,F
       
        return


⌨️ 快捷键说明

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