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 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