;Napisati program koji ucitava proizvoljan niz cifara i sve cifre na ekranu koji se pojavljuju u tom nizu boji 
u zutu boju.

;Pre startovanja programa ispisati proizvoljan tekst na ekran.

DSEG SEGMENT

Poruka : DB 'Upisati niz cifara iz skupa {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}: $'

Brojevi DB 10 DUP (0)

;Definicija niza od 10 bajtova, u kome su svi bajtovi imaju 

vrednost nula

DSEG ENDS

SSEG SEGMENT STACK

DB 256 DUP (0)

;obavezni deo

SSEG ENDS

CSEG SEGMENT

   ASSUME CS:CSEG, DS:DSEG, SS:SSEG ;obavezni deo

;*****************************************************

IspisStringa MACRO str

PUSH AX

PUSH DX

        MOV AH, 9

;Poziva se Podinterapt za ispis stringa

        MOV DX, offset str ;U DX smestamo adresu prvog znaka stringa str (offset je funkcija koja vraca 
rastojanje od pocetka Data Segmenta do pocetka str promenljive iz data segmenta)

        INT 21h

;Pozivamo Interapt  (isisuje string)

        POP DX     ;POP skidanje sa steka

        POP AX

ENDM

;*****************************************************

UnosKaraktera MACRO

;Unosi znakove dok korisnik ne pritisne ENTER

PUSH AX

PUSH BX

   NoviZnak:

;Ucitava znake sa tastature dok se ne pritisne ENTER

MOV AH, 1

;Podinterapt za unos znaka sa izlazom

INT 21H

;Interapt 21H, uneti znak se sada nalazi u AL

CMP AL, 13

;Proveravamo da li je pritisnut ENTER (13)            (poredjenje)

JE EndRD

;Ako jeste zavrsavamo rad makroa  (skace na kraj makroa)

CMP AL, 48

;Poredimo AL sa 48 (sto je nula u ASCII tabeli)

JL NoviZnak

;Ako je manje od 48 onda nije cifra pa ucitavamo sledeci znak

CMP AL, 57

;Poredimo AL sa 57 (sto je devet u ASCII tabeli)

JG NoviZnak

;Ako je vece od 57 onda nije cifra pa ucitavamo sledeci znak

;Inace jeste cifra 48-57 (nula-devet)

MOV AH, 0

; (stavljamo u gornji dio regista 0 da budemo sigurni da se u cijelom 

registru nalazi ucitani broj)

SUB AL, 48

;Smanjimo AL za 48 da bi u AL bio bas uneti broj, a ne njegova 

reprezentacija iz ASCII tabele

MOV BX, AX

;Prebacimo broj iz AX u BX, zato sto pomocu BX moze da se pristupi 

promenljivoj u data segmentu

MOV Brojevi[BX], 1

;Setujemo bajt u promenljivoj brojevi, na indeksu BX

JMP NoviZnak

;Vracamo se na unos sledeceg znaka

   EndRD:

POP BX

POP AX

ENDM

;*****************************************************

   Start:

background image

Želiš da pročitaš svih 4 strana?

Prijavi se i preuzmi ceo dokument.

Ovaj materijal je namenjen za učenje i pripremu, ne za predaju.

Slični dokumenti