rendered paste body0800:
START: MVI C,00H
LDA 2000H
LOOP1: INR C
RAL
JNC LOOP1
DCR C
MOV A,C
CPI 00H
JZ NONE
MVI A,80H
LOOP2: RAR
DCR C
JNZ LOOP2
CMA
STA 3000H
MOV B,A
JMP START
NONE: MVI A,80H
CMA
STA 3000H
MOV B,A
JMP START
END
0800:
START: MVI C,00H
LDA 2000H
LOOP1: INR C
RAL
JNC LOOP1
DCR C
MOV A,C
CPI 00H
JZ NONE
MVI A,80H
LOOP2: RAR
DCR C
JNZ LOOP2
MOV B,A
CMA
STA 3000H
;MOV B,A
JMP ER2
NONE: MVI A,80H
CMA
STA 3000H
;MOV B,A
JMP ER2
ER2: CALL KIND
CPI 00H
JZ TELOS
CPI 08H
JNC ER2
MOV C,A
MOV A,B
LOOP3: DCR C
RLC
JNZ LOOP3
MOV D,A
ORA B
CMA
STA 3000H
MOV B,D
JMP ER2
TELOS:
END
INCLUDE MMACROS.ASM ; περιλαμβάνονται οι έτοιμες συναρτήσεις του αρχείου MACROS
STACK SEGMENT STACK
DW 50 DUP(?) ; ορισμός του πεδίου στοίβας
STACK ENDS
DATA_SEG SEGMENT
DB 50 DUP(?)
MSG1 DB "DOSE EISODO: $" ; εκτύπωση του πρώτου μηνύματος που ζητάει είσοδο
MSG2 DB 0AH,0DH,"A8ROISMA: $"
DATA_SEG ENDS
CODE_SEG SEGMENT
ASSUME CS:CODE_SEG,DS:DATA_SEG,SS:STACK
MAIN PROC FAR
MOV AX,STACK ; αρχικοποίηση των STACK SEGMENT
MOV SS,AX
MOV AX,DATA_SEG ; kai DATA SEGMENT
MOV DS,AX
PRINT_STR MSG1
CALL DEC_KEYB
MOV DX,AX
LOOP5: READ
CMP AL,4CH
JE DONE3
JMP OK3
DONE3: CALL DONE
OK3: CMP AL,20H
JNE LOOP5
PUSH DX
PRINT AL
POP DX
PUSH DX
CALL DEC_KEYB
POP DX
ADD DX,AX
PUSH DX
LOOP6: READ
CMP AL,4CH
JE DONE4
JMP OK4
DONE4: CALL DONE
OK4: CMP AL,0DH
JNE LOOP6
POP DX
PUSH DX
PRINT_STR MSG2
POP DX
CALL PROSTH
EXIT
MAIN ENDP
DEC_KEYB PROC NEAR
IGNORE1:
READ
CMP AL,4CH
JE DONE1
JMP OK1
DONE1: CALL DONE
OK1: CMP AL,30H
JL IGNORE1
CMP AL,34H
JG IGNORE1
PRINT AL
SUB AL,30H
MOV DL,10D
MUL DL
MOV CX,AX
IGNORE2:
READ
CMP AL,4CH
JE DONE2
JMP OK2
DONE2: CALL DONE
OK2: CMP AL,30H
CMP AL,30H
JL IGNORE2
CMP AL,39H
JG IGNORE2
PRINT AL
SUB AL,30H
MOV AH,00H
ADD AX,CX
RET
DEC_KEYB ENDP
PROSTH PROC NEAR
;PUSH DX
;PUSH CX
;ADD DX,CX
MOV AX,DX
MOV DL,10D
DIV DL
ADD AH,30H
ADD AL,30H
PUSH AX
PRINT AL
POP AX
CMP AH,30H
JE ONED
PUSH AX
PRINT AH
POP AX
;POP CX
;POP DX
ONED:
RET
PROSTH ENDP
DONE PROC NEAR
EXIT
RET
DONE ENDP
CODE_SEG ENDS
END MAIN
.include "m16def.inc"
.def reg=R16
.def no1=R17
.def no2=R18
.def sum=R19
.def temp=R20
.def count=R21
main:
clr reg
clr sum
out DDRA,reg
out DDRB,reg
ser reg
out DDRC,reg
out DDRD,reg
ldi count,0x08
in no1,PINA
out PORTD,no1
mov temp,no1
next:
andi temp,0x01
cpi temp,0x00
breq none
inc sum
;cpi sum,0x0A
;brne none
;ldi sum,0b00010000
none:
lsr no1
mov temp,no1
dec count
brne next
ldi count,0x08
in no2,PINB
out PORTB,no2
mov temp,no2
next2:
andi temp,0x01
cpi temp,0x00
breq none2
inc sum
cpi sum,0x0A
brne none2
ldi sum,0b00010000
none2:
lsr no2
mov temp,no2
dec count
brne next2
out PORTC,sum
rjmp main