math.asm

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

ASM
94
字号
;------------------------------------------------------------
; 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
        movlw   8            
        movwf   temp_buf1
        
udiv_loop1:
        rlf     hi_byte,W
        rlf     rem
        movf    divisor,W
        subwf   rem
        btfsc   STATUS,C
        goto    udiv_2
        addwf   rem,F
        bcf     STATUS,C
udiv_2:
        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
        rlf     rem,F     
        rlf     temp_buf2,F
        movf    divisor,W
        subwf   rem,F
        clrw
        btfss   STATUS,C
        movlw   1
        subwf   temp_buf2,F
        btfsc   STATUS,C
        goto    udiv_3
        movf    divisor,W
        addwf   rem,F
        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      ; to page 0
        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   8
        movwf   mul_cnt
        movf    hi_byte,W
        clrf    hi_byte
        bcf     STATUS,C
umul_loop:
        rrf     hi_byte,F
        rrf     lo_byte,F
        btfsc   STATUS,C
        addwf   hi_byte,F
        decfsz  mul_cnt,F
        goto    umul_loop
        rrf     hi_byte,F
        rrf     lo_byte,F
        
;;        bcf     STATUS,RP0      ; to page 1
        
        return


⌨️ 快捷键说明

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