Anonymní profil lukino – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil lukino – Programujte.comAnonymní profil lukino – Programujte.com

 

Příspěvky odeslané z IP adresy 147.232.182.–

lukino
Assembler › Vysvetlenie pls
8. 4. 2009   #98743

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

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý