; ACCAHI ACCALO
; * ACCBHI ACCBLO
;-------------------------
; AHI,ALO,BHI,BLO
DD_MULT:
CLR ACCCHI
CLR ACCCLO
LD R8,#16
LD R9,ACCBHI
LD R10,ACCBLO
CLR ACCBHI
CLR ACCBLO
RCF
COMUT: RRC R9
RRC R10
JR NC,NEXT_P1
ADD ACCBLO,ACCALO
ADC ACCBHI,ACCAHI
NEXT_P1: RRC ACCBHI
RRC ACCBLO
RRC ACCCHI
RRC ACCCLO
DEC R8
JR NZ,COMUT
LD ACCAHI,ACCBHI
LD ACCALO,ACCBLO
LD ACCBHI,ACCCHI
LD ACCBLO,ACCCLO
RET
; ACCAHI ACCALO ACCBHI ACCBLO
; / ACCCHI ACCCLO
;---------------------------------
; ACCAHI ACCALO
;功能描述: 双字除法 AB/C
DD_DIV: LD R2,#16
CP ACCCHI,#00H
JR NE,SURE_DIV
CP ACCCLO,#00H
JR NE,SURE_DIV
CLR ACCAHI
CLR ACCALO
RET
SURE_DIV:
DIVD2: RCF
RLC ACCBLO
RLC ACCBHI
RLC ACCALO
RLC ACCAHI
JR C,NOT_MATHC
OR SYSTEM_FLAG,#MATHC
JR SUB_SURE
NOT_MATHC: AND SYSTEM_FLAG,#MATHC_CLR
SUB_SURE:
RCF
LD R1,ACCALO
SUB R1,ACCCLO
LD R0,ACCAHI
SBC R0,ACCCHI
JR C,IF_DIVD3
NODIVD3: LD ACCAHI,R0
LD ACCALO,R1
INC ACCBLO
JR DIVD3
IF_DIVD3: TM SYSTEM_FLAG,#MATHC
JR Z,NODIVD3
DIVD3: DEC R2
JR NZ,DIVD2
LD ACCAHI,ACCBHI
LD ACCALO,ACCBLO
RET
;数制转换
;*********************************************************************************
;NAME: HEX2B_TOBCD
;INPUT: R11(H),R10(L)(HEX)
;FUNCTION: 双字节十六进制数转换为BCD
;USING RESOURCE: R1,R0,R7,R4,R3,R5
;OUTPUT: R5,R4,R3,R2,R1
;*********************************************************************************
HEX_BCD:
CLR R5
CLR R4
CLR R3
CLR R2
CLR R1
LD R7,R10
LD R8,R11
LD R9,#27H
LOOP_10000: SUB R7,#10H
SBC R8,R9
JR C,LOOP_10000_ADD
INC R5
JR LOOP_10000
LOOP_10000_ADD:ADD R7,#10H
ADC R8,#27H
LD R9,#03H
LOOP_1000: SUB R7,#0E8H
SBC R8,R9
JR C,LOOP_1000_ADD
INC R4
JR LOOP_1000
LOOP_1000_ADD: ADD R7,#0E8H
ADC R8,#03H
LD R9,#00H
LOOP_100: SUB R7,#64H
SBC R8,R9
JR C,LOOP_100_ADD
INC R3
JR LOOP_100
LOOP_100_ADD: ADD R7,#64H
LOOP_10: SUB R7,#0AH
LD R8,R7
JR C,LOOP_10_ADD
INC R2
JR LOOP_10
LOOP_10_ADD: ADD R7,#0AH
LD R1,R7
RET
DB_SUB:
SCF
SUB ACCALO,ACCBLO
SBC ACCAHI,ACCBHI
RET
;R0R1 COMPARE WITH R2R3
;If R0R1>=R2R3 C="0" else c="1"
DB_CMP: CP R0,R2
JR ULT,CMP_SETC
JR UGT,CMP_CLRC
CP R1,R3
JR UGE,CMP_CLRC
CMP_SETC: SCF
JR CMP_OVER
CMP_CLRC: RCF
CMP_OVER:
RET
READ_ROM:
;DEC BUFF_PT
LD R2,BUFF_PT
RL R2
ADD R1,R2
LDC R2,@RR0
LD ACCAHI,R2
INC R1
LDC R2,@RR0
LD ACCALO,R2
RET
;INPUT R8
;OUTPUT R8
SWAPDATA: RR R8
RR R8
RR R8
RR R8
RET
READ_BUFF:
LD R1,BUFF_POINT
LD R3,#DATA_BUFFER
ADD R3,R1
LD ACCBLO,@R3
NOP
INC R1
LD R3,#DATA_BUFFER
ADD R3,R1
LD ACCBHI,@R3
RET
WRITE_BUFF:
LD R1,BUFF_POINT
LD R3,#DATA_BUFFER
ADD R3,R1
LD @R3, ACCBLO
NOP
INC R1
LD R3,#DATA_BUFFER
ADD R3,R1
LD @R3, ACCBHI
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;C=1 B<A
;C=0,MATHC=0 B>A
;MATHC=A B="A"
ASK_MIN:
LD ACCAHI,#0FFH
LD ACCALO,#0FFH
ASK_MIN_NEXT:
CALL READ_BUFF
CP ACCBHI,#0
JR NZ,COMP_SURE
CP ACCBLO,#0
JR Z,THIS_MIN
COMP_SURE: LD R0,ACCAHI
LD R1,ACCALO
LD R2,ACCBHI
LD R3,ACCBLO
CALL DB_CMP
JR C,MIN_NEXT_PT
THIS_MIN:
LD ACCAHI,ACCBHI
LD ACCALO,ACCBLO
LD MIN_PT,BUFF_POINT
MIN_NEXT_PT:
INC BUFF_POINT
INC BUFF_POINT
CP BUFF_POINT,#22
JR ULE,ASK_MIN_NEXT
RET
;------------------------------------
SORT:
CLR LOOP_CNT
SORT_NEXT:
LD BUFF_POINT,LOOP_CNT
CALL ASK_MIN
LD BUFF_POINT,LOOP_CNT
CALL READ_BUFF
LD ACCALO,ACCBLO
LD ACCAHI,ACCBHI
LD BUFF_POINT,MIN_PT
CALL READ_BUFF
LD BUFF_POINT,LOOP_CNT
CALL WRITE_BUFF
LD BUFF_POINT,MIN_PT
LD ACCBHI,ACCAHI
LD ACCBLO,ACCALO
CALL WRITE_BUFF
NOP
INC LOOP_CNT
INC LOOP_CNT
CP LOOP_CNT,#22
JR ULT,SORT_NEXT
SORT_ADBUF_OVER:
RET
;DELAY ABOAT 1MS
DELAYXMS:
LD R0,#0B0H
ECHO_FILTER:
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DEC R0
JR NZ,ECHO_FILTER
RET
;DELAY 100MS
DELAY100MS:
LD R9,#80
DELAY100MS_LOOP:
CALL DELAYXMS
DEC R9
JR NZ,DELAY100MS_LOOP
RET
DELAY1S:
CALL DELAY100MS
CALL DELAY100MS
CALL DELAY100MS
CALL DELAY100MS
RET
DELAY_20MS:
LD R9,#20
DELAY_20MS_LOOP:
CALL DELAYXMS
DEC R9
JR NZ,DELAY_20MS_LOOP
RET
文章评论(0条评论)
登录后参与讨论