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