Caute mohol by mi niekto pls popisat a vysvetlit ako funguje tento program ? viem co robi len by som chcel vediet ze co su to za prikazy psw pop... a ten prevod ako funguje dakujem
org 1000
dcx sp ;inicializacia zasobnika (0FFFFh)
lxi h,text ;vypis text
call putstr
lxi h,text1 ;vypis text1
call putstr
lxi d,vlozeny ;adresa pre vstup retazca
call getline
lxi b,vlozeny
mvi d,0 ;pocet cislic v slove
mvi e,0 ;pocet velkych pismen v slove
push psw ;vlozime si nulu do zasobnika, pocet vyhovujucich slov
jmp char_loop
char:
mvi d,0 ;vynulovanie pocitadla
mvi e,0 ;vynulovanie pocitadla
char_loop: ;citanie znakov a pocitanie cislic v slove
ldax b ;nacitanie znaku z retazca
inx b ;posun v retazci doprava
cpi 10 ;porovnanie pre koniec nacitavania, enter
jz koniec_nacitania ;
cpi 32 ;porovnanie na koniec slova, space=medzera
jz pocet_slov
cpi '0' ;vacsie alebo rovne ako 0
jc pismena
cpi '9' + 1 ;mensie alebo rovne ako 9
jnc pismena
inr d ;zvysenie poctu cislic o 1
jmp char_loop
pismena:
cpi 'A' ;vacsie alebo rovne ako A
jc char_loop
cpi 'Z' + 1 ;mensie alebo rovne ako Z
jnc char_loop
inr e ;zvysenie poctu pismen o 1
jmp char_loop
pocet_slov: ;pocitanie vyhovujucich slov
mov a,d ;presun hodnoty z registra D do akumulatora
cmp e ;porovnanie akumulatora a registra E
jc char ;ak je pismen viac skoc na char
jz char ;ak je pismen rovnako vela ako cislic skoc na char, osetrene medzery
pop psw ;vyber zo zasobnika do akumulatora
inr a ;zvysenie poctu vyhovujucich slov
push psw ;vlozenie z akumulatora do zasobnika
jmp char
koniec_nacitania: ;osetrenie ak sme spracovali posledne slovo
mov a,d
cmp e ;porovnanie ci slovo obsahuje aspon 2 cislice
jc prevod
jz prevod
pop psw
inr a ;zvysenie poctu vyhovujucich slov
push psw
jmp prevod
prevod: ;prevod 4b binarneho cisla na sestnastkove [jednotky]
pop psw
mov h,a
ani 15 ;logicky sucin
push psw
cpi 10 ;porovnananie ci je cislo mensie ako 10
jc prevod1
pop psw ;ak je mensie skoci na koniec1
mov b,a
mvi a,7
add b ;pripocitanie 7, lebo su to pismena, vacsie ako 10
push psw
prevod1: ;prevod 4b binarneho cisla na sestnastkove [desiatky]
mov a,h
rrc ;posun o 1b doprava
rrc
rrc
rrc
ani 15 ;logicky sucin
push psw
cpi 10 ;porovnananie ci je cislo mensie ako 10
jc vypis ;ak je mensie skoci na koniec1
pop psw
mov b,a
mvi a,7
add b ;pripocitanie 7
push psw
vypis: ;vypis poctu slov sestnastkovo
lxi h,text2
call putstr
pop psw
adi '0'
call putchar ;vypisanie sestanstkovej cislice [desiatky]
pop psw
adi '0'
call putchar ;vypisanie sestanstkovej cislice[jednotky]
call newline
hlt
include 'examples\8080\include\getline.inc'
include 'examples\8080\include\putstr.inc'
include 'examples\8080\include\putchar.inc'
include 'examples\8080\include\newline.inc'
text: db 'Program zistuje pocet slov obsahujucich viac cislic ako pismen velkej abecedy',10,13
text1: db 'Zadaj retazec, ukonci stlacenim enter ',0,10,13
text2: db 10,13,'Pocet slov, v hexa tvare: 0x',0
vlozeny: ds 50