Author Topic: Tasm zadanie  (Read 4249 times)

dEVIANT

  • Hero Member
  • *****
  • Posts: 1311
  • Robím, čo môžem. Keď nerobím, nemôžem!
    • View Profile
Tasm zadanie
« on: 11.05.2009, 05:28:17 »
zdravim mam problem so zadanim ...vypisuje mi toto

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
« Last Edit: 11.05.2009, 15:11:20 by dEVIANT »
Nie je nič nákazlivejšie ako rozhodný a presvedčením sa vyznačujúci život.

Raleon

  • VIP
  • Hero Member
  • *****
  • Posts: 1296
  • Csirke forever!
    • View Profile
    • Pessimistic Dreams
Re: Tasm zadanie
« Reply #1 on: 11.05.2009, 09:38:22 »
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)


There is no such bad temper that can not be fixed with some good wine.

dEVIANT

  • Hero Member
  • *****
  • Posts: 1311
  • Robím, čo môžem. Keď nerobím, nemôžem!
    • View Profile
Re: Tasm zadanie
« Reply #2 on: 11.05.2009, 15:04:36 »
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"
Nie je nič nákazlivejšie ako rozhodný a presvedčením sa vyznačujúci život.

tino8

  • Hero Member
  • *****
  • Posts: 1093
    • View Profile
Re: Tasm zadanie
« Reply #3 on: 11.05.2009, 21:21:19 »
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?


karamel je cukr co se uz neuzdravi!

dEVIANT

  • Hero Member
  • *****
  • Posts: 1311
  • Robím, čo môžem. Keď nerobím, nemôžem!
    • View Profile
Re: Tasm zadanie
« Reply #4 on: 11.05.2009, 21:27:40 »
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
Nie je nič nákazlivejšie ako rozhodný a presvedčením sa vyznačujúci život.

Blackwing

  • Newbie
  • *
  • Posts: 7
    • View Profile
Re: Tasm zadanie
« Reply #5 on: 11.05.2009, 21:35:44 »
no nejak sa tej stránke nechce...

tino8

  • Hero Member
  • *****
  • Posts: 1093
    • View Profile
Re: Tasm zadanie
« Reply #6 on: 11.05.2009, 21:48:58 »
dikes za ten link, vyzera to tam schopne :)


karamel je cukr co se uz neuzdravi!

dEVIANT

  • Hero Member
  • *****
  • Posts: 1311
  • Robím, čo môžem. Keď nerobím, nemôžem!
    • View Profile
Re: Tasm zadanie
« Reply #7 on: 11.05.2009, 22:53:39 »
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
« Last Edit: 11.05.2009, 23:01:48 by dEVIANT »
Nie je nič nákazlivejšie ako rozhodný a presvedčením sa vyznačujúci život.