Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ 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
Príspevok NapísalOffline : 08.05.2009 15:49

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ý: 16.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 08.05.2009 17:07

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
Príspevok Napísal autor témyOffline : 08.05.2009 17:23

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ý: 16.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 09.05.2009 14:10

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
Príspevok Napísal autor témyOffline : 09.05.2009 16:04

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
Príspevok Napísal autor témyOffline : 11.05.2009 9:19

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ý: 16.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 11.05.2009 14:57

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
Príspevok Napísal autor témyOffline : 11.05.2009 15:09

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ý: 16.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 11.05.2009 16:33

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. :)


Odpovedať na tému [ Príspevkov: 9 ] 


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

1418

25.03.2011 10:07

dury26 Zobrazenie posledných príspevkov

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

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

0

459

03.05.2010 20:47

Balzer1 Zobrazenie posledných príspevkov

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

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

0

402

25.02.2017 14:50

kemperik Zobrazenie posledných príspevkov

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

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

4

519

10.04.2010 14:24

chrono Zobrazenie posledných príspevkov

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

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

1

612

04.05.2008 11:47

snapshot Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. K: Arctic ASM Push Pins

v Kúpim

0

297

17.08.2017 15:45

RRHRY10 Zobrazenie posledných príspevkov

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

560

14.05.2009 8:37

Fico Zobrazenie posledných príspevkov

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

453

16.04.2011 10:33

Fico Zobrazenie posledných príspevkov

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

805

18.03.2010 20:28

Fico Zobrazenie posledných príspevkov

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

618

23.03.2010 15:55

crazy Zobrazenie posledných príspevkov

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

367

06.03.2017 17:48

Miso122 Zobrazenie posledných príspevkov

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

3981

15.03.2011 13:47

katiMIR Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  
cron

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra