|
发表于 2020-12-21 20:47:30
|
显示全部楼层
有人认识这什么MCU么“CalMul:
call CalClearNumC
call CalPoint_A
call CalNumZero
jz CalMul_End
call CalClearNumD
call CalPoint_B
call CalNumZero
jz CalMul_End
lda calA+CALNUM_SIGN
eor calB+CALNUM_SIGN
sta calC+CALNUM_SIGN
lds Ry3,0
lda calA+CALNUM_DOT
add calB+CALNUM_DOT
sta Ry0
adci* Ry3,0
subi Ry0,CALNUMMAX
sta calC+CALNUM_DOT
sbci* Ry3,0
;
lds Ry2,CALNUMMAX-1
CalMul_loop:
INDEX (calB+CALNUM_MSB)
lda Ry2
INDEXaddA
mwr# Ry0,@hl
lds Ry1,0
CalMul_loop2:
lda Ry0
jz CalMul_Next
dec* Ry0
lda calA+CALNUM_LSB-0
add calC+CALNUM_LSB-0
daa* calC+CALNUM_LSB-0
lda calA+CALNUM_LSB-1
adc calC+CALNUM_LSB-1
daa* calC+CALNUM_LSB-1
lda calA+CALNUM_LSB-2
adc calC+CALNUM_LSB-2
daa* calC+CALNUM_LSB-2
lda calA+CALNUM_LSB-3
adc calC+CALNUM_LSB-3
daa* calC+CALNUM_LSB-3
lda calA+CALNUM_LSB-4
adc calC+CALNUM_LSB-4
daa* calC+CALNUM_LSB-4
lda calA+CALNUM_LSB-5
adc calC+CALNUM_LSB-5
daa* calC+CALNUM_LSB-5
lda calA+CALNUM_LSB-6
adc calC+CALNUM_LSB-6
daa* calC+CALNUM_LSB-6
lda calA+CALNUM_LSB-7
adc calC+CALNUM_LSB-7
daa* calC+CALNUM_LSB-7
adci* Ry1,0
jmp CalMul_loop2
CalMul_Next:
call CalPoint_D
call CalShiftNumR
LMR calC+CALNUM_LSB,calD+CALNUM_MSB
call CalPoint_C
call CalShiftNumR
LMR Ry1,calC+CALNUM_MSB
dec* Ry2
jc CalMul_loop
CalMul_Judge:
lda calC+CALNUM_MSB
jnz CalMul_Judge2
call CalPoint_C
call CalShiftNumL
LMR calD+CALNUM_MSB,calC+CALNUM_LSB
call CalPoint_D
call CalShiftNumL
inc* calC+CALNUM_DOT
adci* Ry3,0
jmp CalMul_Judge
CalMul_Judge2:
lda Ry3
JNB3 CalMul_End
CalMul_Overflow:
lds Ry0,15
eor* calC+CALNUM_DOT
inc* calC+CALNUM_DOT
lds Ry0,CALNUMMAX
lda calC+CALNUM_DOT
sub* Ry0
sta calC+CALNUM_DOT
jmp CalOverflow
CalMul_End:
lda Ry3
jz CalNumFormat
call CalPoint_C
call CalShiftNumR
dec* calC+CALNUM_DOT
sbci* Ry3,0
jmp CalNumFormat
|
|