Ahojte. Chcem pomôct kamarátovi so zadaním na assembler, prosiiiim pomôžte.
Zadanie je na procesor 8080:
Načítajte z klávesnice reťazec znakov ukončený znakom „nového riadku“. Slová vo vstupe sú oddelené najmenej jedným znakom „medzera“. Uvažujte aj prvé, resp. posledné slovo vstupu. Určte počet slov reprezentujúcich zápis osmičkového čísla (začína znakom 0, napr. 015) podľa syntaxu jazyka C. Počet (0-255)vytlačte osmičkovo.
rg 1000 ; povod
dcx sp ; inicializacia zasobnika (0FFFFh)
lxi h,text1 ; skopiruj text1 do h
call putstr ; vypis uvodny text
mvi h,0 ; pocitadlo vsetkych znakov v slove
mvi d,0 ; pocitadlo spravnych znakov v slove
mvi b,0 ; pocitadlo spravnych slov
citaj:
call getchar ; nacitame znak
cpi 10 ; enter ?
jz kontrola ; skoc na vystupnu kontrolu
cpi 13 ; enter ?
jz kontrola ; skoc na vystupnu kontrolu
cpi 32 ; medzera ?
jz medzera ; skoc na navestie medzera
cpi '0' ; porovname s 0
jz pridajznak ; skoc na navestie pridajznak
cpi '1' ; porovname s 1
jz pridajznak ; skonc na navestie pridajznak
inr h ; inkrementuj pocitadlo vsetkych znakov
jmp citaj ; nacitaj dalsi znak
pridajznak:
inr d ; inkrementuj pocitadlo vsetkych znakov
inr h ; inkrementuj pocitadlo spravnych znakov
jmp citaj ; nacitaj dalsi znak
medzera:
mov a,h ; skopiruj pocitadlo vsetkych znakov do akumulatora
cpi 0 ; nebola prvy znak medzera?
jz citaj ; ak ano nacitaj dalsi znak
cmp d ; porovnaj ci vsetky znaky boli spravne
mvi h,0 ; vynuluj pocitadlo vsetkych znakov
mvi d,0 ; vynuluj pocitadlo spravnych znakov
jnz citaj ; nacitaj dalsi znak
inr b ; inkrementuj pocitadlo spravnych slov
jmp citaj ; nacitaj dalsi znak
kontrola:
mov a,h ; skopiruj pocitadlo vsetkych znakov do akumulatora
cpi 1 ; nemame ziadne dalsie znaky?
jc vypis ; ak nie pokracuj vo vypise
cmp d ; inak skontroluj ci posledne slovo bolo spravne
jnz vypis ; ak nie pokracuj vo vypise
inr b ; ak ano tak inkrementuj poslednykrat pocitadlo spravnych slov
vypis:
lxi h,text2 ; skopiruj text2 do h
call putstr ; vypis text2
mov a,b ; skopiruj pocitadlo spravnych slov do akumulatora
adi '0' ; hodnota a jej ASCII tvar ...
call putchar ; vypis znak
call newline ; vypis novy riadok
hlt ; ukonci program
include 'examples\8080\include\getline.inc'
include 'examples\8080\include\putstr.inc'
include 'examples\8080\include\putchar.inc'
include 'examples\8080\include\getchar.inc'
include 'examples\8080\include\newline.inc'
text1: db 'Pocet slov reprezentujucich binarny zapis cisla ...',10,13,'Vloz text: ',0
text2: db 10,13,'Spravnych slov: ',0
vlozeny: ds 30iadok
hlt ; ukonci program
include 'examples\8080\include\getline.inc'
include 'examples\8080\include\putstr.inc'
include 'examples\8080\include\putchar.inc'
include 'examples\8080\include\getchar.inc'
include 'examples\8080\include\newline.inc'
text1: db 'Pocet slov reprezentujucich binarny zapis cisla ...',10,13,'Vloz text: ',0
text2: db 10,13,'Spravnych slov: ',0
vlozeny: ds 30