[ Príspevkov: 9 ] 
AutorSpráva
Offline

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

Registrovaný: 20.10.07
Prihlásený: 27.03.10
Príspevky: 16
Témy: 4 | 4
NapísalOffline : 08.05.2009 15:49 | asm 86

zdravim...mam problem naprogramovat program ktory zisti pocet slov v ktorych je dvakrat vacsi pocet malych pismen ako operatorov +,-,=,/...
---------------------------
chcem vas poprosit ci by ste mi tu mohli dat linky na nejake zrozumitelne tutorialy ktore mi k tomu pomozu...alebo mi tu napisali hocico co mi moze pomoct...popripade nejaky kratky zdrojovy kod na nieco podobne a tak...

vopred dakujem za kazdu radu


Offline

Skúsený užívateľ
Skúsený užívateľ
asm 86

Registrovaný: 11.01.09
Prihlásený: 28.11.24
Príspevky: 1395
Témy: 10 | 10
Bydlisko: Hrinova
NapísalOffline : 08.05.2009 17:07 | asm 86

Pozri si ASCII tabuľku. V nej máš hodnoty znakov (malé písmená a operátory).
Potom keď načítavaš slová, tak každý hodnotu znaku porovnaj, či patrí k malým písmenám, alebo k operátorom. Ak nikde, program nech pokračuje ďalej. Ak patrí k malým písmenám, zvýš hodnotu premennej, ktorá počíta výskyt malých znakov a ak patrí k operátorom, tak zvýš hodnotu premennej počítajúcu operátory. Po skončení slova zistíš, či:
Kód:
2 * male_pismena = operatoy

ak áno, zvýšiš počítadlo slov, ktoré splňujú túto podmienku.

Už to zvládneš alebo chceš aj malý výpis kódu?


Offline

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

Registrovaný: 20.10.07
Prihlásený: 27.03.10
Príspevky: 16
Témy: 4 | 4
Napísal autor témyOffline : 08.05.2009 17:23 | asm 86

no jj mna hlavne ten kod zajima...viem princip ako to naprogramovat napisal by som to napr v pascale alebo c len ten assembler...tomu nejako neviem prist na kloub:D


Offline

Skúsený užívateľ
Skúsený užívateľ
asm 86

Registrovaný: 11.01.09
Prihlásený: 28.11.24
Príspevky: 1395
Témy: 10 | 10
Bydlisko: Hrinova
NapísalOffline : 09.05.2009 14:10 | asm 86

Kód:
.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
   
    mov dx, offset retazec   ; nacitanie retazca
    mov ah, 0Ah
    int 21h

    mov bx, offset retazec
    xor cx, cx   
    mov cl, [bx+1]
    mov si, bx
    add si, 2
   
main_loop:

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





PROC skontroluj
   
    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     
   
ENDP skontroluj


END start


Offline

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

Registrovaný: 20.10.07
Prihlásený: 27.03.10
Príspevky: 16
Témy: 4 | 4
Napísal autor témyOffline : 09.05.2009 16:04 | asm 86

ou diky moc...len mi este pri kompilovani cez cmd a nasm vypisuje tieto chyby
-----------
http://i42.tinypic.com/s4nj84.jpg
-----------
mozes mi pls poradit ako ich odstranit?


Offline

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

Registrovaný: 20.10.07
Prihlásený: 27.03.10
Príspevky: 16
Témy: 4 | 4
Napísal autor témyOffline : 11.05.2009 9:19 | asm 86

tak zatial mam toto...ale nevypisuje mi to vobec tie psravy a tak...mozes mi s tym pomoct plls?

Kód:
.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


Offline

Skúsený užívateľ
Skúsený užívateľ
asm 86

Registrovaný: 11.01.09
Prihlásený: 28.11.24
Príspevky: 1395
Témy: 10 | 10
Bydlisko: Hrinova
NapísalOffline : 11.05.2009 14:57 | asm 86

Ale veď to nemáš správne. Veď sa pozri na svoju slučku:
Kód:
loop START

Všetko sa odznova opakuje (vrátane inicializácie dátového segmentu, načítavanie reťazca, atď). Prečo iba neupravíš môj kód?
Takto to bude fungovať v MASM (myslím, že zmeny medzi NASM a MASM nie sú veľké, tak to už snáď upravíš sám):

Kód:
.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


Počet vyhovujúcich slov je uložený v premennej vyhovujuce_slova, ale nevypisuje sa. Funkciu na vypísanie si vieš napísať, či nie?


Offline

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

Registrovaný: 20.10.07
Prihlásený: 27.03.10
Príspevky: 16
Témy: 4 | 4
Napísal autor témyOffline : 11.05.2009 15:09 | asm 86

pri prikaze tasm subor.asm je setko ok

ale pri tlink subor.obj mi vypise chybu ze "Fatal: 32bit record encountered in modul subor.asm"
--------------------
no to s tym ze to na zaciatku vypise "Zadajte retazec : " a potom "Pocet slov : " a vypise ten pocet tak to neviem vobec...tak ked budes taky ochotny...


Offline

Skúsený užívateľ
Skúsený užívateľ
asm 86

Registrovaný: 11.01.09
Prihlásený: 28.11.24
Príspevky: 1395
Témy: 10 | 10
Bydlisko: Hrinova
NapísalOffline : 11.05.2009 16:33 | asm 86

Ohľadom toho linkovania - skús dať preč direktívu .486

Procedúra na prevedenie čísla na reťazec (procedúra je stavananá na maximálne číslo 99 - myslím, že takýto rozsah na tvoj príklad stači až až):

Kód:
ByteToStr PROC

    push bp
    mov bp, sp
    push bx
    push cx

    mov ax, WORD PTR [bp+4]   ; v prvom parametri je číslo, teda vyhovujuce_slova (vlož ho cez 16-bitový register)
    mov bx, WORD PTR [bp+6]   ; v druhom parametri je adresa reťazca, 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 bx     
    pop bp
    ret 4

ByteToStr ENDP


Možno existuje ľahší spôsob prevedenia čísla, ale ja o inom neviem. :)


 [ Príspevkov: 9 ] 


asm 86



Podobné témy

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

ASEMBLER:Určte počet slov obsahujúcich reťazec ASM alebo asm

v Assembler, C, C++, Pascal, Java

7

1461

25.03.2011 10:07

dury26

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

asm

v Assembler, C, C++, Pascal, Java

0

505

03.05.2010 20:47

Balzer1

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

ASM 8080

v Assembler, C, C++, Pascal, Java

0

435

25.02.2017 14:50

kemperik

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

Pomoc s ASM

v Assembler, C, C++, Pascal, Java

1

640

04.05.2008 11:47

snapshot

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

asm - inicializacie premennej

v Assembler, C, C++, Pascal, Java

4

557

10.04.2010 14:24

chrono

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

K: Arctic ASM Push Pins

v Kúpim

0

330

17.08.2017 15:45

RRHRY10

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

POMOC S PROGRAMOM V asm 86

v Assembler, C, C++, Pascal, Java

1

588

14.05.2009 8:37

Fico

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

preklad z .ASM do .C pomoc

v Assembler, C, C++, Pascal, Java

1

480

16.04.2011 10:33

Fico

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

ASM: pocet slov reprezentujucich zapis osmickoveho cisla

v Assembler, C, C++, Pascal, Java

1

840

18.03.2010 20:28

Fico

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

Asm : spočítanie slov ktoré obsahujú IBA čísla

v Assembler, C, C++, Pascal, Java

2

646

23.03.2010 15:55

crazy

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

Zdravím, potreboval by som pomocť so zadaním z ASM 8080

v Assembler, C, C++, Pascal, Java

2

394

06.03.2017 17:48

Miso122

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

Asm i8080: vypisat pocet slov s dlzkou 2 az 5 znakov

v Assembler, C, C++, Pascal, Java

26

4043

15.03.2011 13:47

katiMIR



© 2005 - 2024 PCforum, edited by JanoF