zdravim mam problem so zadanim ...vypisuje mi toto
http://i43.tinypic.com/or8nzs.png (http://i43.tinypic.com/or8nzs.png)
-------------------------
a tu je zdrojak...ma vypisat slova v ktorych je 2krat viac oepratorov ako malych znakov...tie chyby su kokretne v tychto raidkoch
mov al, male_znaky
mov ah, 2
mul ah
cmp al, operatori
----------------
a tu je cely zdrojak...prosim pomozte v stvrtok to mam odovzdat nevem cim to jeeee...diks
.MODEL SMALL
.STACK 100H
.DATA
retazec DB "Zadaj retazec : ",10,13,"$"
pocet_slov DB "Pocet vyhovujucich slov : $"
operatori DW 0
male_znaky DW 0
vyh_slovo DB 0
.CODE
START:
mov AX,@DATA
mov DS,AX
mov AH,09H
mov DX,OFFSET retazec
mov ah,0Ah
int 21H
mov bx, offset retazec
xor cx, cx
mov cl, byte ptr[bx+1]
mov si, bx
add si, 2
MAIN:
cmp [bx+si], 20h ; medzera = nove slovo
je KONTROLA
cmp [bx+si], 61h ; kontrola, ci sa jedna o male pismeno
jl OPERATOR
cmp [bx+si], 7Ah
jg OPERATOR
inc male_znaky
jmp DALSI_ZNAK
OPERATOR:
cmp [bx+si], 2Ah ; kontrola, ci sa jedna o operator
jl DALSI_ZNAK
cmp [bx+si], 2Fh
jg DALSI_ZNAK
inc operatori
jmp DALSI_ZNAK
KONTROLA:
call SKONTROLUJ
DALSI_ZNAK:
inc si
loop START
call SKONTROLUJ
KONIEC:
mov AH,09H
mov DX,OFFSET pocet_slov
int 21H
mov ax, 4C00h
int 21h
SKONTROLUJ PROC
mov ax, male_znaky
mov di, 2
mul di
cmp ax, operatori
jne DELETE
inc vyh_slovo
DELETE:
mov male_znaky, 0
mov operatori, 0
ret 0
ENDP SKONTROLUJ
END START
mov cl, [bx+1]
ma byt
mov cl,byte ptr[bx+1]
treba mu povedat ze pointer na pamat treba brat ako pointer na bajt (aj ked je to jednoznacne lebo pouzivas cl)
a podobne pre ostatne operacie s pamatou.
Warningy odstranene...
mov al, male_znaky
al je 8bitove, maleznaky si dal ako DW.
skus
mov ax,male_znaky
(daj pozor, ze ked aktualne ah potrebujes inde, treba ulozit, napr. do stacku)
ok dik...a este mi mozete niekto vysvetlit preco mi to nic nevypisuje?...co tam je zle?a ako mam doprogramovat ten konecny vypis?? ten "pocet_slov"
Ja by som pripojil, malu s velkou pravdepodobnostou blbu otazku....Aky je rozdiel medzi NASM a TASM? :) akoze viem ze su to 2 prekladace, ale ak mi nieco ide v jednom, tak v druhom nepojde? alebo ako to je?
jj...neviem poriadne preco ale proste vacsinou to v nasm vypise chyby...radsej pouzivam ten tasm...tri prikazy a uz to ide...a to co sme brali na cvikach tie prvy.asm a nevem co tak to som nechapal nic...pre vsetkych stranka kde su dobre veci aj vysvetlene aj setko
http://silent.host.sk/assembler/obsah.html (http://silent.host.sk/assembler/obsah.html)
no nejak sa tej stránke nechce...
dikes za ten link, vyzera to tam schopne :)
taaak...myslim ze uz som skoro pri konci...mam toto
------------------------------------
.MODEL small
.STACK 100h
.DATA
retazec DB 255, 0, 253 dup (24h)
male_znaky DB 0
operatory DB 0
vyhovujuce_slova DB 0
text DB 10,13,"Pocet slov : $"
.CODE
ByteToString PROC
push bp
mov bp, sp
push cx
mov ax, WORD PTR [bp+4] ; v prvom parametri je číslo, teda vyhovujuce_slova
mov bx, WORD PTR [bp+6] ; v druhom parametri je reťazec, do ktorého vypišeš
prevedené číslo
xor cx, cx
cmp ax, 99
jng desiatky
mov ax, -1 ; v prípade veľkého čísla vráť -1
jmp pr_koniec
desiatky:
mov cl, 10
div cl
cmp al, 0
je jednotky
add al, 30h
mov BYTE PTR [bx], al
inc bx
sub al, 30h
mov cl, 10
mul cl
mov cx, WORD PTR [bp+4]
sub cx, ax
mov WORD PTR [bp+4], cx
jednotky:
mov ax, WORD PTR [bp+4]
add al, 30h
mov BYTE PTR [bx], al
mov BYTE PTR [bx+1], 24h
pr_koniec:
pop cx
pop bp
ret 4
ByteToString ENDP
start:
mov ax, @data
mov ds, ax
lea dx, retazec ; nacitanie retazca
mov ah, 0Ah
int 21h
lea bx, retazec
xor cx, cx
mov cl, [bx+1]
mov si, bx
add si, 2
main_loop:
cmp WORD PTR [bx+si], 20h ; medzera = nove slovo
je kontrola
cmp WORD PTR [bx+si], 61h ; kontrola, ci sa jedna o male pismeno
jl operator
cmp WORD PTR [bx+si], 7Ah
jg operator
inc male_znaky
jmp dalsi_znak
operator:
cmp WORD PTR [bx+si], 2Ah ; kontrola, ci sa jedna o operator
jl dalsi_znak
cmp WORD PTR [bx+si], 2Fh
jg dalsi_znak
inc operatory
jmp dalsi_znak
kontrola: ; vyhovuje podmienka (operatory = 2 * male_znaky) ?
call skontroluj
dalsi_znak:
inc si
loop main_loop
call skontroluj
koniec:
mov ah,09h
mov dx,offset text
int 21h
mov ah,vyhovujuce_slova
call ByteToString
mov ax, 4C00h
int 21h
skontroluj PROC
mov al, male_znaky
mov ah, 2
mul ah
cmp al, operatory
jne zmaz
inc vyhovujuce_slova
zmaz:
mov male_znaky, 0
mov operatory, 0
ret 0
skontroluj ENDP
END start
-------------------
ale program nevypise ten pocet slov nevite preco??vyzera to takto
http://i41.tinypic.com/27ywsqo.png (http://i41.tinypic.com/27ywsqo.png)