TUKE FÓRUM - Fórum pre študentov Technickej Univerzity v Košiciach
FEI archív 2008/2009 => 1. ro?ník => Topic started by: dEVIANT on 11.05.2009, 05:28:17
-
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)