1.) Nemáš ošetrenie spodnej hranice ASCII pre číslo (máš iba, či je mnšie ako 9, ale nie, či je väčšie, ako 0)
2.) Na konci char_loop ideš rovno do návestia char_space, kde sa má vojsť až pri medzere. Tzn zabudol si tam jmp
3.) Informácia, ktorú vkladáš do registra c neurčuje, či sú v slove iba čísla, ale počet čísel, koľko obsahuje. Takže ju potrebuješ porovnať s počtom čísel
4.) Hlavná chyba - prepisuješ register c, pričom offset reťazca, ktorý prehľadávaš, je uložený v páre bc
Kód:
org 1000
dcx sp
lxi h, text1
call putstr
lxi d, vlozeny
call getline
lxi b, vlozeny
mvi e, 0
char_begin:
mvi l, 0
mvi d, 0
char_loop:
ldax b
inx b
cpi 10
jz char_space
cpi 13
jz koniec
cpi 32
jz char_space
inr d ; pocet pismen
cpi '0'
jc char_loop ; menej ako '0'?
cpi '9'+1
jnc char_loop ; viac ako '9'+1?
inr l
jmp char_loop
char_space:
mov a, l
cmp d
jnz char_begin
inr e
jmp char_begin
koniec:
lxi h, text2
call putstr
mov a, e
adi '0'
call putchar
hlt
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 cislic vo vstupe (getchar) ...',10,13,'Vloz text: ',0
text2: db 10,13,'Cislic: ',0
vlozeny: ds 30