[ Príspevkov: 4 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 14.03.09
Prihlásený: 16.10.13
Príspevky: 25
Témy: 10 | 10
NapísalOffline : 30.04.2009 13:04 | NASM

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)


Offline

Skúsený užívateľ
Skúsený užívateľ
NASM

Registrovaný: 11.01.09
Prihlásený: 28.04.26
Príspevky: 1399
Témy: 10 | 10
Bydlisko: Hrinova
NapísalOffline : 30.04.2009 14:59 | NASM

Za týmito návestiami ti chýba dvojbodka:

put_char, put_string, get_char, new_line, slovo.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 14.03.09
Prihlásený: 16.10.13
Príspevky: 25
Témy: 10 | 10
Napísal autor témyOffline : 30.04.2009 22:16 | NASM

nepomohlo to...


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 13.11.07
Prihlásený: 20.08.16
Príspevky: 1702
Témy: 0 | 0
NapísalOffline : 01.05.2009 2:01 | NASM

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ť)


 [ Príspevkov: 4 ] 


NASM



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

TASM na NASM

v Backend

0

534

15.05.2010 17:20

djkmito

V tomto fóre nie sú ďalšie neprečítané témy.

eratosthenovo sito - NASM

v Backend

1

543

30.11.2011 13:45

Fico



© 2005 - 2026 PCforum, edited by JanoF