You are on page 1of 4

3

16
03106715
03112186
03111423

2

(
). :
, ( / )
. -
( 00
09) BCD ( BCD). K
DAA /
1 DAA ( 0). display
-
(002,003).

IN 10H ;
CALL CLEAR_SCREEN ;
START: ;
CALL READ_DIGIT ; 1
MOV C,A ; 1 C
CALL CLEAR_SCREEN ; 1
LXI H,0B05H ; 1
MOV M,C
DCX H
CALL REFRESH_SCREEN ; 1
CHECK: ;
CALL KIND ;
CPI 80H ; FETCH REG
JZ MULT ; =83 FETCH REG
CPI 83H ; STORE/INCR
JZ SINGLE_DIGIT_ADD ; =83 INCR
CPI 0AH ; 2
JNC CHECK ;
MOV B,A ; B
LXI H,0B04H ; 2 1 7-segment
MOV M,B
CALL REFRESH_SCREEN
MOV A,C ; 1 RLC
; BCD (: 4 MSB, : 4 LSB)
RLC
RLC
RLC
ANI F0H
ADD B
MOV C,A ; 1 BCD C
READ_INCR: ; (STORE/INCR)
CALL KIND
CPI 83H
JNZ READ_INCR ; STORE/INCR
CALL READ_DIGIT ;
LXI H,0B01H ;
MOV M,A
CALL REFRESH_SCREEN ;

RLC ; ' 4LSB 4MSB


RLC
RLC
RLC
ANI F0H
MOV B,A ;
CALL READ_DIGIT ; 2
LXI H,0B00H ; 1 7-segment
MOV M,A
CALL REFRESH_SCREEN ;
ADD B ; 2 BCD
ADD C ; 2 1 ( 2 BCD)
DAA ;
CALL PRINT_BASE_10 ;
JMP START ;
SINGLE_DIGIT_ADD: ; ( C)
CALL READ_DIGIT ;
LXI H,0B00H ; display
MOV M,A
CALL REFRESH_SCREEN ;
ADD C ; ( 2 BCD)
DAA ;
CALL PRINT_BASE_10 ;
JMP START ;
MULT: ; ( C)
CALL READ_DIGIT ;
MOV B,A ; B /
LXI H,0B00H ; 2
MOV M,A
CALL REFRESH_SCREEN ;
CPI 00H ; 0 0
JZ ZERO ; 0 0
MVI A,00H ; loop
MULT_LOOP:
ADD C ; 1o
DAA ;
DCR B ; 0
JNZ MULT_LOOP ; C, B 0 ( =xC)
CALL PRINT_BASE_10 ;
JMP START ;
ZERO:
MVI A,00H ; =0 0
CALL PRINT_BASE_10 ;
JMP START ;

READ_DIGIT: ;
CALL KIND
CPI 0AH
JNC READ_DIGIT ; 0-9
RET
PRINT_BASE_10: ; '
LXI H,0B03H ;
CPI 0AH ; 10 2
JNC OVER_9
MVI M,10H ; <10
DCX H
JMP UNITS ;
OVER_9: ; >=10 2

MOV B,A ;
RRC ; 4 SB
RRC
RRC
RRC
ANI 0FH
LXI H,0B03H ; 7-segment
MOV M,A
DCX H
MOV A,B
UNITS:
ANI 0FH ; 4 LSB
MOV M,A ;
CALL REFRESH_SCREEN ;
RET
REFRESH_SCREEN:
PUSH PSW
LXI D,0B00H
CALL STDM
CALL DCD
POP PSW
RET
CLEAR_SCREEN:
LXI H,0B00H
MVI M,10H
INX H
MVI M,10H
INX H
MVI M,10H
INX H
MVI M,10H
INX H
MVI M,10H
INX H
MVI M,10H
LXI D,0B00H
CALL STDM
CALL DCD
RET
END

;
;
; DCD

; D,E

You might also like