Anonymní profil dEVIANT – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil dEVIANT – Programujte.comAnonymní profil dEVIANT – Programujte.com

 

Příspěvky odeslané z IP adresy 147.232.182.–

dEVIANT
Assembler › TASM problem
11. 5. 2009   #100884

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

[url=http://i41.tinypic.com/27ywsqo.png]http://i41.tinypic.com/27ywsqo.png[/url]

dEVIANT
Assembler › TASM problem
11. 5. 2009   #100882

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

[url=http://i41.tinypic.com/27ywsqo.png]http://i41.tinypic.com/27ywsqo.png[/url]

dEVIANT
Assembler › TASM problem
11. 5. 2009   #100861

zdravim...mam program co porovna ci je pocet operatorov v retazci dvojnasovny ako pocet malych pismen

mam toto

.486

.MODEL small
.STACK 100h

.DATA

retazec DB 255, 0, 253 dup (24h)
male_znaky DB 0
operatory DB 0
vyhovujuce_slova DB 0

.CODE

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 DWORD PTR [bx+si], 20h ; medzera = nove slovo
je kontrola

cmp DWORD PTR [bx+si], 61h ; kontrola, ci sa jedna o male pismeno
jl operator
cmp DWORD PTR [bx+si], 7Ah
jg operator

inc male_znaky
jmp dalsi_znak

operator:

cmp DWORD PTR [bx+si], 2Ah ; kontrola, ci sa jedna o operator
jl dalsi_znak
cmp DWORD 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 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


len teraz neviem ako doprogramovat aby to na zaciatku vypisalo "Zadajte retazec : " a potom "Pocet slov : " a vypisalo vyhovujuce slova...

a este pri prikaze tlink subor.obj mi vypiste chybu ze "Fatal: 32bit record encountered in modul subor.asm"

mozte prosim pomoct vyriesit tie dva problemy ?diks :)

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý