Kód: Vybrať všetko
org 1000
dcx sp ; inicializacia zasobnika (0FFFFh)
lxi h,text1 ; skopiruj text1 do h
call putstr ; vypis uvodny text
mvi b,0 ; pocitadlo vyhovujucich slov
mvi c,0 ; pocitadlo vyhovujucich znakov v slove
mvi d,0 ; pocitadlo vsetkych znakov v slove
char_loop:
call getchar ; nacita sa zadany znak do registra "a"
cpi 10 ; porovna sa register "a" s backspacom
jz char_end ; skoci sa na char_end, ak sa rovna
cpi 13 ; porovna sa register "a" s enterom
jz char_end ; skoci sa na char_end, ak sa rovna
cpi 32 ; porovna sa register "a" s medzerou
jz char_space ; skoci sa na char_space, ak sa rovna
cpi 65 ; nacitany znak sa porovna s 'A'
jz char_add ; skoci sa na char_add, ak sa rovna
cpi 66 ; dalej sa nacitavaju a porovnavaju vsetky ASCII
jz char_add ; kody znakov velkej abecedy, az po 'Z'
cpi 67
jz char_add
cpi 68
jz char_add
cpi 69
jz char_add
cpi 70
jz char_add
cpi 71
jz char_add
cpi 72
jz char_add
cpi 73
jz char_add
cpi 74
jz char_add
cpi 75
jz char_add
cpi 76
jz char_add
cpi 77
jz char_add
cpi 78
jz char_add
cpi 79
jz char_add
cpi 80
jz char_add
cpi 81
jz char_add
cpi 82
jz char_add
cpi 83
jz char_add
cpi 84
jz char_add
cpi 85
jz char_add
cpi 86
jz char_add
cpi 87
jz char_add
cpi 88
jz char_add
cpi 89
jz char_add
cpi 90 ; nacitany znak sa porovna so 'Z'
jz char_add ; skonci sa na char_add, ak sa rovna
inr d ; inkrementuje sa pocitadlo vsetkych znakov v slove
jmp char_loop ; nacita sa dalsi znak
char_add:
inr c ; inkrementuje sa pocitadlo vyhovujucich znakov v slove
inr d ; inkrementuje sa pocitadlo vsetkych znakov v slove
jmp char_loop ; nacita sa dalsi znak
char_space:
mov a,d ; pocitadlo vsetkych znakov v slove sa skopiruje do registra "a"
cpi 0 ; nebola prvy znak medzera?
jz char_loop ; ak ano, nacita sa dalsi znak
cmp c ; porovna sa, ci vsetky znaky boli vyhovujuce
mvi d,0 ; vynuluje sa pocitadlo vsetkych znakov v slove
mvi c,0 ; vynuluje sa pocitadlo vyhovujucich znakov v slove
jnz char_loop ; nacita sa dalsi znak
inr b ; inkrementuje sa pocitadlo vyhovujucich slov
jmp char_loop ; nacita sa dalsi znak
char_end:
mov a,d ; skopiruje sa pocitadlo vsetkych znakov v slove do registra "a"
cpi 1 ; ak nie su ziadne dalsie znaky,
jc print ; pokracuje sa vo vypise
cmp c ; inak sa kontroluje, ci posledne slovo bolo spravne
jnz print ; ak nie, pokracuje sa vo vypise
inr b ; ak ano, inkrementuje sa pocitadlo vyhovujucich slov
celociselny_zvisok_po_deleni:
sub b ; odcita b od a
cmp b ; porovna b s a
jnc celociselny_zvisok_po_deleni ; ak je a < b skonci
ret ; vrati sa spet
delenie_celeho_cisla:
mvi h,0;
_delenie:
sub b ; odcita b od a
inr h ; zvisi h
cmp b ; porovna b s a
jnc _delenie ; ak je a < b skonci
mov a, h
ret ; vrati sa spet
binarny_prevod:
mvi a,0 ; do registra a da 0
sta 20 ; zapise obsah registra a do pamete 20
sta 21 ; zapise obsah registra a do pamete 21
sta 22 ; zapise obsah registra a do pamete 22
sta 23 ; zapise obsah registra a do pamete 23
sta 24 ; zapise obsah registra a do pamete 24
sta 25 ; zapise obsah registra a do pamete 25
sta 26 ; zapise obsah registra a do pamete 26
sta 27 ; zapise obsah registra a do pamete 27
sta 28 ; zapise obsah registra a do pamete 28
sta 29 ; zapise obsah registra a do pamete 29
mov a, c ; do registra a da obsah registra c
sta 20 ; zapise obsah registra a do pamete 20
mvi b,2 ; do registra b da 2
call celociselny_zvisok_po_deleni ; zavola celociselny_zvisok_po_deleni
sta 22 ; zapise obsah registra a do pamete 22
lda 20 ; obsah pamete 20 da do registra a
call delenie_celeho_cisla ; zavola delenie_celeho_cisla
sta 21 ; zapise obsah registra a do pamete 21
call celociselny_zvisok_po_deleni ; zavola celociselny_zvisok_po_deleni
sta 23 ; zapise obsah registra a do pamete 23
lda 21 ; obsah pamete 21 da do registra a
call delenie_celeho_cisla ; zavola delenie_celeho_cisla
sta 21 ; zapise obsah registra a do pamete 21
call celociselny_zvisok_po_deleni ; zavola celociselny_zvisok_po_deleni
sta 24 ; zapise obsah registra a do pamete 24
lda 21 ; obsah pamete 21 da do registra a
call delenie_celeho_cisla ; zavola delenie_celeho_cisla
sta 21 ; zapise obsah registra a do pamete 21
call celociselny_zvisok_po_deleni ; zavola celociselny_zvisok_po_deleni
sta 25 ; zapise obsah registra a do pamete 25
lda 21 ; obsah pamete 21 da do registra a
call delenie_celeho_cisla ; zavola delenie_celeho_cisla
sta 21 ; zapise obsah registra a do pamete 21
call celociselny_zvisok_po_deleni ; zavola celociselny_zvisok_po_deleni
sta 26 ; zapise obsah registra a do pamete 26
lda 21 ; obsah pamete 21 da do registra a
call delenie_celeho_cisla ; zavola delenie_celeho_cisla
sta 21 ; zapise obsah registra a do pamete 21
call celociselny_zvisok_po_deleni ; zavola celociselny_zvisok_po_deleni
sta 27 ; zapise obsah registra a do pamete 27
lda 21 ; obsah pamete 21 da do registra a
call delenie_celeho_cisla ; zavola delenie_celeho_cisla
sta 21 ; zapise obsah registra a do pamete 21
call celociselny_zvisok_po_deleni ; zavola celociselny_zvisok_po_deleni
sta 28 ; zapise obsah registra a do pamete 28
lda 21 ; obsah pamete 21 da do registra a
call delenie_celeho_cisla ; zavola delenie_celeho_cisla
sta 21 ; zapise obsah registra a do pamete 21
call celociselny_zvisok_po_deleni ; zavola celociselny_zvisok_po_deleni
sta 29 ; zapise obsah registra a do pamete 29
lda 29 ; obsah pamete 29 da do registra a
adi 48 ; k obsahu registra a pripocita 48
out 11h ; vypise obsah registra a na obrazovku
lda 28 ; obsah pamete 28 da do registra a
adi 48 ; k obsahu registra a pripocita 48
out 11h ; vypise obsah registra a na obrazovku
lda 27 ; obsah pamete 27 da do registra a
adi 48 ; k obsahu registra a pripocita 48
out 11h ; vypise obsah registra a na obrazovku
lda 26 ; obsah pamete 26 da do registra a
adi 48 ; k obsahu registra a pripocita 48
out 11h ; vypise obsah registra a na obrazovku
mvi a,' ' ; do registra a da ' '
out 11h ; vypise obsah registra a na obrazovku
lda 25 ; obsah pamete 25 da do registra a
adi 48 ; k obsahu registra a pripocita 48
out 11h ; vypise obsah registra a na obrazovku
lda 24 ; obsah pamete 24 da do registra a
adi 48 ; k obsahu registra a pripocita 48
out 11h ; vypise obsah registra a na obrazovku
lda 23 ; obsah pamete 23 da do registra a
adi 48 ; k obsahu registra a pripocita 48
out 11h ; vypise obsah registra a na obrazovku
lda 22 ; obsah pamete 22 da do registra a
adi 48 ; k obsahu registra a pripocita 48
out 11h ; vypise obsah registra a na obrazovku
ret ; vrati sa spet
print:
lxi h,text2 ; skopiruje sa text2 do h
call putstr ; vypise sa text2
mov a,b ; skopiruje sa pocitadlo vyhovujucich slov do registra "a"
adi '0' ; hodnota a jej ASCII tvar ...
call putchar ; vypise sa znak
call newline ; vypise sa novy riadok
hlt ; ukonci sa 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 obsahujucich len velke pismena ...',10,13,'Vloz text: ',0
text2: db 10,13,'Slov je: ',0
vlozeny: ds 30