📄 maths.asm
字号:
;======================================================
; 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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -