2

mail@pastecode.io avatar
unknown
assembly_x86
a year ago
2.0 kB
0
Indexable
Never
ARG1	EQU	20h	;bajty ARG1, ARG1+1, ARG1+2, ARG1+3  pierwszy argument HEX i wynik
ARG2	EQU	2Ah	;bajty ARG2 i ARG2+1  drugi argument HEX
REG	EQU	30h	;do przechowania rejestrów
 
LJMP    START
ORG 100H

START:	

	; Napisz program wykonujący operacje logiczne na dwóch argumentach pobieranych z klawiatury matrycowej z zakresu [0 - FF] hex.
	; Kolejne operacje:

	; 1. na LCD wyświetlamy napis: "Kliknij 4 znaki " (tekst ma 16 znaków)
	LCALL	LCD_CLR
	MOV	DPTR, #TXT_WELCOME
	LCALL      WRITE_TEXT	

	; 2. wciskamy 4 dowolne klawisze, kolejne dwa znaki tworzą jednobajtowe liczby heksalne
	MOV	R1, #ARG1
	ACALL	READ_H_1B
	MOV	R1, #ARG2
	ACALL	READ_H_1B

	; 3. po czwartym znaku czyścimy LCD
	LCALL     LCD_CLR

	; Po wprowadzeniu i zapamiętaniu liczb pod adresami AD1=Arg.1 oraz AD2=Arg.2:
	; 1. w pierwszym wierszu LCD wyświetlamy: Arg1&&Arg2=iloczyn logiczny (argumenty i wynik wypisujemy jako 2-u cyfrowe liczby heksalne zakończone literą h)
	MOV A, ARG1
	LCALL WRITE_HEX

	MOV DPTR, #TXT_DIVIDER
	LCALL WRITE_TEXT

	MOV A, ARG2
	LCALL WRITE_HEX

	MOV DPTR, #TXT_EQUALS
	LCALL WRITE_TEXT
	

READ_H_1B:

	LCALL	WAIT_KEY
	MOV	R2, A
	SWAP	A
	MOV	@R1, A
	MOV	A, R2
	ACALL	PISZ_CYFRA
	LCALL	WAIT_KEY
	MOV	R2, A
	ADD	A, @R1
	MOV	@R1, A
	MOV	A, R2
	ACALL	PISZ_CYFRA
	RET

PISZ_CYFRA:
	MOV	R0, A
	CLR	C
	SUBB	A, #10
	JNC	E2
	MOV	A, R0
	ADD	A, #48		;uzyskujemy kod ASCII cyfry od 0 do 9
	AJMP	E3
E2:	MOV	A, R0
	ADD	A, #55		;uzyskujemy kod ASCII cyfry od A do F
E3:	LCALL	WRITE_DATA
	RET
  
MUL_2_1:
	MOV	REG, R1
	MOV	REG+1, R2
	MOV	R1, A
	MOV	B, A
	MOV	A, @R0
	MUL	AB	;wynik mnozenia: B-high A-low
	MOV	@R0, A
	MOV	R2, B
	MOV	A, R1
	MOV	B, A
	INC	R0
	MOV	A, @R0
	MUL	AB
	CLR	C
	ADD	A, R2
	MOV	@R0, A
	CLR	A
	INC	R0
	MOV	@R0, B 
	ADDC	A, @R0
	MOV	@R0, A
	MOV	R1, REG
	MOV	R2, REG+1
	RET

TXT_WELCOME:	DB	'Kliknij 4 znaki ', 0
TXT_DIVIDER:	DB	'h&&', 0
TXT_EQUALS:	DB	'=', 0
TXT_HEXAL: 	DB	'h', 0

TXT1:	DB	'h + ',0
TXT2:	DB	'h = Press any key ',0
TXT3:	DB	'h  klik',0



END