Stránka: 1 z 1
| [ Príspevkov: 4 ] | |
| Autor | Správa |
|---|
Registrovaný: 14.03.09 Prihlásený: 16.10.13 Príspevky: 25 Témy: 10 | 10 |
neviem opraviť syntakticke chyby v tomto programe
Kód: .model small .stack 100h
.data
zadaj_retazec db 'Zadajte retazec : $' pocet_slov db 'Pocet slov : $' pocet_slov2 db 'Pocet cislic delitelnych 5 : ' db '$' delit5 db 0 cislice db 0
.code
put_char mov ah, 02h ; - 02h vypis znaku int 21h ret Ret
put_string mov ah, 09h ; 09h - vypis retazca int 21h ret Ret
get_char mov ah, 01h ; 01h - citanie znaku do AL int 21h ; 21h prerusenie DOS ret Ret
new_line mov dl, 10 call put_char mov dl, 13 call put_char ret Ret
_asm_main:
mov ax, @data ; inicializacia data segmetu mov ds, ax mov dx, offset zadaj_retazec call put_string call new_line
mov cl, 0h ; cl - pocitadlo spravnych slov
next_word:
mov ch, 0h ; ch - ; 0 - dobre slovo ; 1 - zle slovo ; mov bh,0 ; nebolo nacitane nic mov al,0
read_char: ; nacitanie znaku & jeho vyhodnotenie
cmp cl, 255 ; mame uz plny register je write_result
mov [cislice],al call get_char
cmp al,13 ; test na koniec riadku 13 = '\n' je end_of_read
cmp al,32 ; test na koniec slova 32 = ' ' je end_of_word
mov bh,1 ; bolo uz daco nacitane
cmp al,'0' jl zle_slovo
cmp al,'9' jg zle_slovo
jmp read_char
zle_slovo: mov ch,1 jmp read_char
end_of_word: ; koniec slova call slovo jmp next_word
slovo cmp ch, 0 ; mame nacitane iba spravne znaky ? jne next_ ; ak nie, citame dalsie slovo cmp bh,0 ; ak nebolo predtym nic nacitane je next_ ; citame dalsie slovo inc cl ; inak zaratame dalsie dobre slovo cmp [cislice],'0' je pricti cmp [cislice],'5' je pricti next_: ret pricti: mov al,[delit5] inc al daa mov [delit5],al ret Ret
end_of_read: ; koniec riadku
call slovo write_result: ; vypis vysledku
call new_line mov dx, offset pocet_slov call put_string ; vypis poctu slov na obrazovku ; musime previest hodnotu na desiatkovu mov ch, 100 ; ulozime si najvacsi zaklad
convert: mov ah, 00h ; ulozime si hodnotu do ax mov al, cl
div ch ; vydelime zakladom mov cl, ah ; zvysok si ulozime ako pocet slov mov dl, al ; nasobok vytlacime add dl, '0' call put_char
cmp ch, 1 ; ak je uz zaklad = 1 => uz sme previedli vsetky cifry je end_of_write
mov ah, 0h ; teraz musime zmensit zaklad mov al, ch mov dl, 10 ; 10x div dl mov ch, al ; zvysok si ulozime jmp convert ; a pokracujeme
end_of_write:
call new_line
mov dx, offset pocet_slov2 call put_string
mov dl,[delit5] shr dl,4 add dl,30h call put_char mov dl,[delit5] and dl,0fh add dl,30h call put_char
mov ax, 4c00h int 21h
//zdrojak patri do code! (stenley)
|
|
Registrovaný: 11.01.09 Prihlásený: 28.04.26 Príspevky: 1399 Témy: 10 | 10 Bydlisko: Hrinova |
Za týmito návestiami ti chýba dvojbodka:
put_char, put_string, get_char, new_line, slovo.
|
|
Registrovaný: 14.03.09 Prihlásený: 16.10.13 Príspevky: 25 Témy: 10 | 10 | Napísal autor témy bbeni: 30.04.2009 22:16 | NASM | |
|
nepomohlo to...
|
|
Registrovaný: 13.11.07 Prihlásený: 20.08.16 Príspevky: 1702 Témy: 0 | 0 |
Prečo nepoužiješ kompilátor, pre ktorý to je určené?
V nasm môžeš vyskúšať toto: Kód: segment data
zadaj_retazec db 'Zadajte retazec : $' pocet_slov db 'Pocet slov : $' pocet_slov2 db 'Pocet cislic delitelnych 5 : ' db '$' delit5 db 0 cislice db 0
segment code
put_char: mov ah, 02h ; - 02h vypis znaku int 21h ret
put_string: mov ah, 09h ; 09h - vypis retazca int 21h ret
get_char: mov ah, 01h ; 01h - citanie znaku do AL int 21h ; 21h prerusenie DOS ret
new_line: mov dl, 10 call put_char mov dl, 13 call put_char ret
..start: _asm_main:
mov ax, data ; inicializacia data segmetu mov ds, ax mov ax, stack mov ss, ax mov sp, stacktop mov dx, zadaj_retazec call put_string call new_line
mov cl, 0h ; cl - pocitadlo spravnych slov
next_word:
mov ch, 0h ; ch - ; 0 - dobre slovo ; 1 - zle slovo ; mov bh,0 ; nebolo nacitane nic mov al,0
read_char: ; nacitanie znaku & jeho vyhodnotenie
cmp cl, 255 ; mame uz plny register je write_result
mov [cislice],al call get_char
cmp al,13 ; test na koniec riadku 13 = '\n' je end_of_read
cmp al,32 ; test na koniec slova 32 = ' ' je end_of_word
mov bh,1 ; bolo uz daco nacitane
cmp al,'0' jl zle_slovo
cmp al,'9' jg zle_slovo
jmp read_char
zle_slovo: mov ch,1 jmp read_char
end_of_word: ; koniec slova call slovo jmp next_word
slovo: cmp ch, 0 ; mame nacitane iba spravne znaky ? jne next_ ; ak nie, citame dalsie slovo cmp bh,0 ; ak nebolo predtym nic nacitane je next_ ; citame dalsie slovo inc cl ; inak zaratame dalsie dobre slovo cmp byte [cislice],'0' je pricti cmp byte [cislice],'5' je pricti next_: ret pricti: mov al,[delit5] inc al daa mov [delit5],al ret
end_of_read: ; koniec riadku
call slovo write_result: ; vypis vysledku
call new_line mov dx, pocet_slov call put_string ; vypis poctu slov na obrazovku ; musime previest hodnotu na desiatkovu mov ch, 100 ; ulozime si najvacsi zaklad
convert: mov ah, 00h ; ulozime si hodnotu do ax mov al, cl
div ch ; vydelime zakladom mov cl, ah ; zvysok si ulozime ako pocet slov mov dl, al ; nasobok vytlacime add dl, '0' call put_char
cmp ch, 1 ; ak je uz zaklad = 1 => uz sme previedli vsetky cifry je end_of_write
mov ah, 0h ; teraz musime zmensit zaklad mov al, ch mov dl, 10 ; 10x div dl mov ch, al ; zvysok si ulozime jmp convert ; a pokracujeme
end_of_write:
call new_line
mov dx, pocet_slov2 call put_string
mov dl,[delit5] shr dl,4 add dl,30h call put_char mov dl,[delit5] and dl,0fh add dl,30h call put_char
mov ax, 4c00h int 21h
segment stack stack resb 256 stacktop: , ale netuším, či to bude fungovať (skompilovať sa to dá, ale nemám DOS, aby som to mohol vyskúšať)
|
|
Stránka: 1 z 1
| [ Príspevkov: 4 ] | |
Podobné témy | | Témy | Odpovede | Zobrazenia | Posledný príspevok |
|---|
 | v Backend | 0 | 534 | 15.05.2010 17:20 djkmito |  | v Backend | 1 | 543 | 30.11.2011 13:45 Fico |
|