ASSEMBLER 8080 pomozte mi prosim

Programovacie jazyky, rady, poradňa...
defjam
Novice
Novice
Príspevky: 5
Registrovaný: 20 dec 2008, 23:46

ASSEMBLER 8080 pomozte mi prosim

Príspevok od používateľa defjam »

Ak niekto najde chybu tak mi prosim dajte vediet kde. Program ma vypisat pocet slov ktore obsahuju max. 3 cisla (poprosim neodkazujte ma na ten, ktory je tu uz urobeny lebo chcem mat vlastny:) ). Nech zadam cokolvek tak mi vypise 1. Neviem uz co s tym mam este urobit aby to pocitalo konecne normalne.

Kód: Vybrať všetko

org 1000
dcx sp
lxi h,text1
call putstr
lxi d,vlozeny
call getline
lxi b,vlozeny
mvi c,0
mvi e,0
char_loop:
ldax b
inr b
cpi 10
jz poslslovo
cpi 32
jz slovo
cpi '0'
jc inrc
cpi '9'+ 1
jnc inrc
jmp char_loop
inrc:
inr c
jmp char_loop
slovo:
push psw
mvi a,0
mov a,c
cpi 4
jnc inre
pop psw
mvi c,0
jmp char_loop
poslslovo:
mov a,c
cpi 4
jnc inre2
jmp koniec
inre:
pop psw
inr e
mvi c,0
jmp char_loop
inre2:
inr e
mvi c,0
jmp koniec
koniec:
lxi h,text2
call putstr
mov a,e
adi '0'
call putchar
call newline
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'

text1: db 10,13,'Vloz text: ',0
text2: db 10,13,'Pocet vyhovujucich slov: ',0
vlozeny: ds 50
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Re: ASSEMBLER 8080 pomozte mi prosim

Príspevok od používateľa chrono »

Mohol si sa to aspoň pokúsiť naformátovať trochu prehľadnejšie (musel som sa veľmi nútiť, aby som sa na takto neprehľadný kód pozrel).

Určite nasledujúci kód robí čo chceš?

Kód: Vybrať všetko

	cpi '0'
	jc inrc
	cpi '9'+ 1
	jnc inrc
	jmp char_loop
inrc:
	inr c
	jmp char_loop
A ďalší kód robí čo?

Kód: Vybrať všetko

slovo:
	push psw
	mvi a,0
	mov a,c
	cpi 4
	jnc inre
	pop psw
	mvi c,0
	jmp char_loop
inre:
	pop psw
	inr e
	mvi c,0
	jmp char_loop
(a to isté aj tá časť pre poslslovo)

PS: Minimálne to posledné sa dá napísať krajšie bez toho zbytočného opakovania sa.
defjam
Novice
Novice
Príspevky: 5
Registrovaný: 20 dec 2008, 23:46

Re: ASSEMBLER 8080 pomozte mi prosim

Príspevok od používateľa defjam »

Dakujem ti za to ze si sa na to pozrel a sorry za to formatovanie. Asi mi este chyba dost informacii o assembleri, som dost lama do toho ale neviem co tym myslis ci to robi co chcem..nevidim v tom totiz chybu...jedine ak narazas na to porovnavanie so skokmi.
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Re: ASSEMBLER 8080 pomozte mi prosim

Príspevok od používateľa chrono »

Ten prvý úsek robí: ak je znak menší ako '0' alebo je väčší ako '9' zväčší sa register C (a to asi nie je to, čo chceš).
defjam
Novice
Novice
Príspevky: 5
Registrovaný: 20 dec 2008, 23:46

Re: ASSEMBLER 8080 pomozte mi prosim

Príspevok od používateľa defjam »

dakujem ze si mi objasnil podstatnu cast problemu...ale tak narazil som na dalsi, teda ak som to pochopil spravne a spravne som to upravil..teraz mi to nechce skocit na koniec..

Kód: Vybrať všetko

org 1000

dcx sp

lxi h,text1
call putstr

lxi d,vlozeny
call getline

lxi b,vlozeny
mvi c,0
mvi e,0

char_null:
	mvi c,0
	jmp char_loop
char_loop:
	ldax b
	inr b
	cpi 10
	jz poslslovo
	cpi 32
	jz slovo
	cpi '0'
	jc char_loop
	cpi '9'+ 1
	jnc char_loop
	inr c
	jmp char_loop
slovo:
	push psw
	mvi a,0
	mov a,c
	cpi 4
	jnc char_null
	inr e
	pop psw
	jmp char_null
poslslovo:
	mov a,c
	cpi 4
	jnc koniec
	inr e
	jmp koniec
koniec:
	lxi h,text2
	call putstr
	mov a,e
	adi '0'
	call putchar
	call newline
	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'

text1: db 10,13,'Vloz text: ',0
text2: db 10,13,'Pocet vyhovujucich slov: ',0
vlozeny: ds 50
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Re: ASSEMBLER 8080 pomozte mi prosim

Príspevok od používateľa chrono »

Netuším, či je to jediný problém, ale teraz tam niekedy preskočíš inštrukciu pop (konkrétne ak bolo v slove príliš veľa čísel).

Tá časť by mohla vyzerať približne takto:

Kód: Vybrať všetko

slovo:
   push psw
   mvi a,0
   mov a,c
   cpi 4
   jnc preskoc
   inr e
preskoc:
   mvi c, 0
   pop psw
   jmp char_loop
defjam
Novice
Novice
Príspevky: 5
Registrovaný: 20 dec 2008, 23:46

Re: ASSEMBLER 8080 pomozte mi prosim

Príspevok od používateľa defjam »

dorobil som to tam ale aj tak nic...aj som si to presiel ale nedava mi to zmysel preco by to nemalo skocit na koniec..
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Re: ASSEMBLER 8080 pomozte mi prosim

Príspevok od používateľa chrono »

Inštrukcia LXI B nepoužíva náhodou registre B a C? (a to isté aj LDAX B)
Ak áno, tak nemôžeš používať register C na počítanie čísel, inak si neustále meníš adresu, z ktorej načítavaš ten zadaný text.
defjam
Novice
Novice
Príspevky: 5
Registrovaný: 20 dec 2008, 23:46

Re: ASSEMBLER 8080 pomozte mi prosim

Príspevok od používateľa defjam »

ale tak registre d a e mozem pouzivat..kedze ich vyuzijem v celom programe len na zaciatku...ale aj tak stale nic..

//autoeditácia príspevku (01 Máj 2010, 17:14)
ale ked nezadam ziadny znak ale stlacim hned enter tak mi napise pocet vyhovujucich slov: 1

//autoeditácia príspevku (01 Máj 2010, 19:43)
uz to mam.... miesto inr ma ist inx :smt081 ale velmi pekne ti dakujem za pomoc
Napísať odpoveď