All pastes #942138 Raw Edit

Anonymous

public text v1 · immutable
·published 2008-03-14 07:55 UTC
rendered paste body
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