maths.asm

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

ASM
95
字号
;======================================================
; File : Maths.asm
;
; 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 : local_tmp1, local_tmp2
;========================================================
udiv:
	bsf	STATUS,RP0	;Page 1 RAM
	clrf  	rem
	movlw 	8            
	movwf 	local_tmp1
	
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	local_tmp1,F
	goto  	udiv_loop1

	movlw 	8
	movwf 	local_tmp1
	clrf  	local_tmp2

udiv_loop2:
	rlf   	lo_byte,W
	rlf   	rem,F     
	rlf   	local_tmp2,F
	movf  	divisor,W
	subwf 	rem,F
	clrw
	btfss 	STATUS,C
	movlw 	1
	subwf 	local_tmp2,F
	btfsc 	STATUS,C
	goto  	udiv_3
	movf  	divisor,W
	addwf 	rem,F
	clrw
	btfsc 	STATUS,C
	movlw 	1
	addwf 	local_tmp2,F
	bcf   	STATUS,C

udiv_3:
	rlf  	lo_byte,F
	decfsz	local_tmp1,F
	goto  	udiv_loop2
	
	bcf	STATUS,RP0	;Page 0 Ram
	
	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	;Page 1 RAM
	movlw 	0x08
	movwf 	mul_cnt		;mul_cnt=8
	movf  	hi_byte,W	;W=hi_byte
	clrf  	hi_byte		;clear hi_byte
        bcf	STATUS,C

umul_loop:               	
	rrf  	hi_byte,F	;right shift
	rrf  	lo_byte,F	;right shift
	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	;Page 0 RAM
	
	return

⌨️ 快捷键说明

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