Určte počet slov obsahujúcich len aritmetické operátory (+,-,*,/).
na Určte počet slov obsahujúcich reťazec ASM alebo asm.
Kód: Vybrať všetko
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 malych pismen
mvi e,0 ;pocet cislic
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 '/' ;vacsie alebo rovne ako 0
jz increment
cpi '*' ;mensie alebo rovne ako 9
jz increment
cpi '-' ;vacsie alebo rovne ako 0
jz increment
cpi '+' ;mensie alebo rovne ako 9
jz increment
inr e ;zvysenie poctu cislic o 1
jmp char_loop
increment:
inr e
inr d ;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
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
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 len aritmeticke operatory',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