Advertisement
jakubs11

Untitled

Jan 21st, 2014
342
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. format PE CONSOLE                      ; Program zliczajacy ilosc wystapien litery w pliku tekstowym
  2. entry main
  3. include 'D:\fasm\include\win32a.inc'
  4.  
  5. section '.data' data readable writeable            ; definiowanie zmiennych
  6.     plik dd ?                      ; przchowuje plik
  7.     licznik dd ?                       ; zlicza wystapienia
  8.     nazwapliku db 'test.txt', 0            ; nazwa pliku do otworzenia
  9.     tryb db 'r', 0                     ; tryb otwarcia pliku, read
  10.     litera db 'o'                      ; litera wyszukiwana w tekscie
  11.     dowyswietlenia db 'Ilosc wystapien litery `%c` pliku %s: %i', 13, 10, 0 ; napis wyswietlany w formacie 'printf'
  12.  
  13. section '.code' code readable writeable executable     ; kod egzekwowany
  14.     proc main                      ; procedura main
  15.         cinvoke fopen, nazwapliku, tryb        ; otwarcie pliku
  16.         mov [plik], eax                ; przekopiowanie pliku do zmiennej plik
  17.         test eax, eax                  ; sprawdzenie czy plik sie otworzyl
  18.         jz .end                    ; jezeli nie. to skok na koniec
  19.          
  20.         .petla:                    ; etykieta definiuje petle przechodzaca przez caly pli
  21.             cinvoke fgetc, [plik]          ; pobranie znaku z pliku
  22.             cmp eax, -1 ;EOF                   ; jezeli nastepny znak nie zostal pobrany
  23.             je .eof                ; to skok do etykiety gdy koniec pliku
  24.             cmp al, [litera]           ; porownanie wczytanego z plu znaku z litera ktorej szukamy
  25.             jne .petla             ; jezeli jest rozna to skok do poczatku petli
  26.             inc [licznik]              ; w innym wypadku zwiekszenie licznika
  27.             jmp .petla             ; powrot do poczatku petli
  28.          
  29.         .eof:                      ; etykieta definiujaca zachowanie w przypadku konca pliku
  30.             movzx eax, [litera]        ; przekopiowanie litery do rejestru eax
  31.             cinvoke printf, dowyswietlenia, eax, nazwapliku, [licznik] ; wywolanie wyswietlenia w formacie 'printf'
  32.             cinvoke fclose, [plik]         ; zamkniecie pliku
  33.             cinvoke getch              ; odpowiednik wstrzymanie wykonywania
  34.             xor eax, eax               ; wyzerowanie rejestru eax
  35.  
  36.         .end:
  37.             ret                    ; koniec
  38.     endp                           ; koniec procedury
  39.  
  40. section '.idata' import data readable writeable        ; definicje importow bibliotek
  41.     library msvcrt, 'msvcrt.dll'               ; importujemy biblioteke msvcrt
  42.      
  43.     import msvcrt,\                    ; a z niej funkcje do:
  44.         fopen, 'fopen',\               ; operacji na plikach: otwieranie pliku
  45.         fclose, 'fclose',\             ; pobieranie znaku z pliku
  46.         fgetc, 'fgetc',\               ; zamykania pliku
  47.         printf, 'printf',\             ; wyswietlania w konsoli
  48.         getch, '_getch'                ; oraz do wstrzymania programu
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement