Asembler i8080 potrebujem pomoct

Programovacie jazyky, rady, poradňa...
totaluser
Novice
Novice
Príspevky: 2
Registrovaný: 02 mar 2010, 8:45

Asembler i8080 potrebujem pomoct

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

nazdar chlapy
videl som ze tu dokazete pomoct s Asemblerom a tak by som sa na vas rad obratil s tymto problemom

Načítajte z klávesnice reťazec znakov ukončený znakom "nový riadok"
Slová vo vstupe sú oddelené najmenej jedným znakom "medzera"
Uvažujte prvé aj posledné slovo vstupu

Určte počet slov začínajúcich a končiacich rovnakým znakom
počet (0-255 slov max)(vyhovujúcich slov) vytlačte dvojkovo


z tohto vychadzam (je to iny program, ale prva cast je zhodna ak sa dobre pamatam)

Kód: Vybrať všetko

org 1000

dcx sp			; inicializacia zasobnika (0FFFFh)

lxi h,text1	
call putstr		; vypis text1

lxi d,vlozeny	; adresa pre vstup retazca
call getline	; nacitaj z klavesnice

lxi b,vlozeny
mvi d,0			; pocitadlo cislic

char_loop:
ldax b
inx b
cpi 10			; koniec vstupu?
jz char_end
cpi 13
jz char_end
cpi '0' 
jc char_loop	; menej ako '0'?	
cpi '9'+1
jnc char_loop	; viac ako '9'+1?
inr d			; cislica
jmp char_loop
char_end:

lxi h,text2		; vypis text2
call putstr

mov a,d
adi '0'			; hodnota a jej ASCII tvar ...
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 'Pocet cislic vo vstupe ...',10,13,'Vloz text: ',0
text2: db 10,13,'Cislic: ',0
vlozeny: ds 30

napadlo ma nieco take ze do jedneho registra by sa ulozil kod zaciatocneho znaku a do dalsieho kod nasledujuceho znaku
ak by za nim bola medzera, kody by sa porovnali a ak by sa zhodovali, inkrementoval by som cislo v dalsom registry, co by bol vlastne counter vyhovujucich slov
ak by za nasledujucim znakom nebola medzera alebo enter, ale iny znak, tak by sa kod znaku prepisal tym dalsim a takto by to islo


uvazujem spravne alebo sa to robi nejako inac?
dakujem za akykolvek napad a pomoc uz vopred
dolarik
Novice
Novice
Príspevky: 4
Registrovaný: 25 dec 2009, 10:57

Re: Asembler i8080 potrebujem pomoct

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

keď už radite mohli by ste aj mne ako na tento príklad Určte počet slov kratších ako 5 znakov skusal som to kadejak stále som stoho ako debil ...
JR55
Novice
Novice
Príspevky: 5
Registrovaný: 21 apr 2010, 9:44

Re: Asembler i8080 potrebujem pomoct

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

dolarik napísal:keď už radite mohli by ste aj mne ako na tento príklad Určte počet slov kratších ako 5 znakov skusal som to kadejak stále som stoho ako debil ...
Ak mas zaujem tvoj prg som uz spravil neviem ci mas este o neho zaujem. Je funkcny aj s dokumentaciou. :)
totaluser
Novice
Novice
Príspevky: 2
Registrovaný: 02 mar 2010, 8:45

Re: Asembler i8080 potrebujem pomoct

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

zial uz je to neaktulane
ak by si ale vedel robit aj v nasm pre 8086
tak by som mal dalsi problem, ktory by som potreboval vyriesit


za odpoved velmi pekne vopred dakujem
JR55
Novice
Novice
Príspevky: 5
Registrovaný: 21 apr 2010, 9:44

Re: Asembler i8080 potrebujem pomoct

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

totaluser napísal:zial uz je to neaktulane
ak by si ale vedel robit aj v nasm pre 8086
tak by som mal dalsi problem, ktory by som potreboval vyriesit


za odpoved velmi pekne vopred dakujem

No momentalne riesim nejake problemy s 8086 mozes mi skusit napisat na mail [email protected] a ti dam vediet co a ako :)

//autoeditácia príspevku (19 Máj 2010, 23:07)
mohol by mi niekto pomoct. Stale mi to hlasi chybu.
Zadanie:
Načítajte z klávesnice reťazec znakov ukončených znakom konca riadku. Slová vo vstupe sú oddelené najmenej jedným znakom medzera. Uvažujte aj prvé, resp. posledné slovo vstupu. Určte počet čísel menších ako 1. uvedené číslo reprezentovaných slovami. Počet vytlačte dvojkovo.

zdrojak:
%include "asm_io.inc"

segment .data

no1 times 2048 db 0

segment .bss
no2 resb 80

segment .text
global _asm_main

_asm_main:
enter 0,0
pusha
mov ebx,no1
mov edx,no2

mov ebx,0
mov ecx,0
mov edx,0

prve_pismeno:
call read_char
cmp al,20h
jz prve_pismeno
cmp al,0ah
jz koniec1
cmp al,30h
jc znak1
cmp al,40h
jnc znak1

prva_cislica1:
mov byte[edx],al
inc edx
call read_char
cmp al,0ah
jz koniec1
cmp al,20h
jnz dalsia_cislica1
jmp cele_cislo

cele_cislo:
inc cl
call read_char
cmp al,20h
jz cele_cislo
cmp al,0ah
jz koniec2
cmp al,30h
jc znak2
cmp al,40h
jnc znak2
jmp prva_cislica2

prva_cislica2:
mov byte[ebx],al
inc ebx
call read_char
cmp al,0ah
jz koniec2
cmp al,20h
jnz dalsia_cislica2
cmp ebx,edx
jnc nulovanie
inc cl
jmp nulovanie

koniec1:
add cl,'0'
mov eax,ecx
call print_string
popa
mov eax,0
leave
ret

koniec2:
cmp ebx,edx
jnc koniec1
inc cl
jmp koniec1

znak1:
call read_char
cmp al,0ah
jz koniec1
cmp al,20h
jz prve_pismeno
jmp znak1

dalsia_cislica1:
cmp al,30h
jz znak1
cmp al,40h
jnc znak1
jmp prva_cislica1

znak2:
call read_char
cmp al,0ah
jz koniec2
cmp al,20h
jz cele_cislo
jmp znak2

dalsia_cislica2:
cmp al,30h
jz znak2
cmp al,40h
jnc znak2
jmp prva_cislica2


nulovanie:
mov ebx,0
jmp cele_cislo


pls potreboval by som najst chybu a popripade pomoct s tym vytlacenim dvojkovo
Napísať odpoveď