Ahojte,
mam mensi problem a neviem si s nim poradit. Program by mal z konzoly nacitat retazec konciaci Enterom a mal by v nom spocitat binarne slova (teda len obsahujuce 0 1). No a nejde mi ich spocitat :(, staci ak dostanem spravnu hodnotu do registra. Vypis mi netreba. Vopred Vam Dakujem za rady a pripomienky.
org 1000
dcx sp ; inicializacia zasobnika (0FFFFh)
lxi h,vyzva
call putstr ; vypis nadpisu a vyzvanie k zadaniu textu
lxi h,buffer ; adresa pre vstup textu
call getline ; nacitame text z klavesnice
lxi b,buffer ; adresa testovaneho retazca -> B,C
mvi e,0 ; pocet spravnych slov
nuluj: mvi d,0 ; ak je znak nevyhovujuci
loop:
ldax b
cpi 10 ; porovna sa register "a" s backspacom
jz end ; skoci sa na end, ak sa rovna
cpi 13 ; porovna sa register "a" s enterom
jz end ; skoci sa na end, ak sa rovna
cpi 32 ; porovna sa register "a" s medzerou
jz space ; skoci sa na space, ak sa rovna
cpi 48 ; nacitany znak sa porovna s '0'
jz loop ; skoci sa na loop, ak sa rovna
cpi 49 ; nacitany znak sa porovna s '1'
jz loop ; skoci sa na loop, ak sa rovna
jmp minus ; zly znak, skoci na minus
plus:
inr e
jmp loop ; nacita sa dalsi znak
minus:
inr d
jmp loop
space:
mov a,d
cpi 48 ; porovna register "a" s '0'
jz plus ; skoci na plus, ak sa rovna
jmp nuluj ; skoci na nuluj
; zobrazenie vysledku
end: lxi h,vysledok ; skopiruje sa
call putstr ; vypise
;dokoncit :)
hlt
include 'examples\8080\include\getchar.inc'
include 'examples\8080\include\getline.inc'
include 'examples\8080\include\putstr.inc'
include 'examples\8080\include\putchar.inc'
include 'examples\8080\include\newline.inc'
vyzva: db 'Spocitanie slov v texte, ktore obsahuju len 0 a 1.',10,13,'Zadajte text: ',0
vysledok: db 10,13,'Pocet slov v texte je: '
pocet: db 0
buffer: ds 1024 ; vyhradime 1 kbyte pre vstupny text
hlt ; ukonci sa program