?? calculation.asm
字號:
;--------------------------------------
;Title: calculation study
;Date: June 3 2004
;---------------------------------------
rBufA0 equ 30h
rBufA1 equ 31h
rBufA2 equ 32h
rBufA3 equ 33h
rDivCnt equ 34h
rBufB0 equ 35h
rBufB1 equ 36h
rBufB2 equ 37h
rBufB3 equ 38h
org 0000h
jmp L_Reset
L_Reset:
mov SP, #60h
nop
mov R0, #0
mov R1, #0
mov R2, #099h
mov R3, #065h
mov R4, #06h
mov R5, #01h
mov R6, #0
mov R7, #0
call S_DivisionA
nop
mov R2, #99h
mov R3, #0fh
mov R6, #0f0h
mov R7, #02h
call S_HexMul
nop
mov R2, #000h
mov R3, #0ffh
mov R4, #0ah
mov R5, #0h
mov R6, #099h
mov R7, #01h
call S_Division
nop
L_MainLoop:
jmp L_MainLoop
;---------------------------------------------------------------
;Func: multiplication
; (R4,R5,R6,R7) = (R2,R3)*(R6,R7)
;---------------------------------------------------------------
S_HexMul:
mov R4, #0
mov R5, #0
mov R0, #16
clr c
L_MulLoop:
mov a, R4
rrc a
mov R4, a
mov a, R5
rrc a
mov R5, a
mov a, R6
rrc a
mov R6, a
mov a, R7
rrc a
mov R7, a
jnc L_MulChk
mov a, R5
add a, R3
mov R5, a
mov a, R4
addc a, R2
mov R4, a
L_Mulchk:
djnz R0, L_MulLoop
mov a, R4
rrc a
mov R4, a
mov a, R5
rrc a
mov R5, a
mov a, R6
rrc a
mov R6, a
mov a, R7
rrc a
mov R7, a
ret
;---------------------------------------------------------------------------
;Func: Division
; quotient is (R4,R5) = (R2,R3,R4,R5) / (R6,R7)
; remainder is (R2,R3)
;---------------------------------------------------------------------------
S_Division:
mov a, R3 ;check overflow or not?
clr c
subb a, R7
mov a, R2
subb a, R6
jnc L_DivOver ;overflow
mov B, #16
L_DivLoop:
clr c
mov a, R5
rlc a
mov R5, a
mov a, R4
rlc a
mov R4, a
mov a, R3
rlc a
mov R3, a
xch a, R2
rlc a
xch a, R2
mov F0, c
clr c
subb a, R7 ;R1 = R3 - R7
mov R1, a
mov a, R2 ;a = R2 - R6
subb a, R6
jb F0, L_DivSub
jc L_DivChk
L_DivSub:
mov R2, a
mov a, R1
mov R3, a
inc R5
L_DivChk:
djnz b, L_DivLoop
clr F0
ret
L_DivOver: setb F0
ret
;-----------------------------------------------------------------------------------------------------------------
;Func: Division
; quotient is (R0,R1) = (R2,R3) / (R4,R5)
; remainder is (R2,R3)
;-----------------------------------------------------------------------------------------------------------------
S_DivisionA:
mov R0, #0
mov R1, #0
mov B, #0
L_SDA1:
mov a, R4
jb acc.7, L_SDA0
clr c
mov a, R5
rlc a
mov R5,a
mov a, R4
rlc a
mov R4,a
inc B
mov a, B
cjne a, #16, L_SDA1
ret
L_SDA0:
mov a, R2
jb acc.7, L_SDA2
mov a, R3
clr c
rlc a
mov R3, a
mov a, R2
rlc a
mov R2, a
;Note if B = 0 then error, so (R2,R3) must be > (R4,R5)
djnz B, L_SDA0
ret
L_SDA2:
;(F0,R0,R1,R2,R3) - (R4,R5,R6,R7)
clr F0
L_DivComp:
clr c
mov a, R3
subb a, R5
mov R6, a
mov a, R2
subb a, R4
mov R7, a
jc L_ChkF0
L_AddResult:
mov a, R6
mov R3, a
mov a, R7
mov R2, a
setb c
L_ShiftResult:
mov a, R1
rlc a
mov R1, a
mov a, R0
rlc a
mov R0, a
mov a, B
jz L_DivRet
dec B
jmp L_ShiftA
L_DivRet:
ret
L_ShiftA:
clr c
mov a, R3
rlc a
mov R3, a
mov a, R2
rlc a
mov R2, a
mov F0, c
jmp L_DivComp
L_ChkF0:
jbc F0, L_AddResult
clr c
jmp L_ShiftResult
end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -