M E N U
Strona główna Assembler -kurs
Assembler -teksty
AntiCracking
API
Opisy narzędzi
Zabezpieczenia CD/DVD
Budowa plików
Sources
Linki
Kontakt

STATYSTYKI

stat4u
PRV.PL - Twoje miejsce w sieci.
Od 06.09.2000
Optymalizacja:
1024x768, IE5
  • Assembler - kurs

  • Zmienne
  • Zmienna jest niczym innym tylko miejscem w pamięci oznaczonym przez jej nazwę.

    Zmienne jednostkowe
    Zmiennaang. znaczenieRozmiar
    DBDefine Byte1 bajt
    DWDefine Word2 bajty (słowo)
    DDDEfine Doubleword4 bajty (2 słowa)
    DF-6 bajtów (3 słowa)
    DQ-8 bajtów (4 słowa)
    DT-10 bajtów (5 słow)

    Przykładowe sposoby deklarowania zmiennych:
    Przykład deklaracjiOpis
    ZMIENNA1 db 0Deklaracja zmiennej ZMIENNA1 o rozmiarze 1 bajta i wartości początkowej 0
    ZMIENNA2 dw 12345Deklaracja zmiennej ZMIENNA2 o rozmiarze 1 słowa i wartości początkowej 12345
    ZMIENNA3 db "A"Deklaracja zmiennej ZMIENNA3 o rozmiarze 1 bajtu z przypisaniem zmiennej wartości początkowej o kodzie ASCII danej litery
    ZMIENNA4 dw ?Deklaracja zmiennej ZMIENNA4 o rozmiarze 1 słowa i bez określania wartości początkowej

    ? - oznacza, że deklarujemy zmienną bez nadawania jej wartości początkowej; kompilator assemblera rezerwuje tylko pamięć dla tej zmiennej. Stosujemy także zapisy: (?) lub <?> .

    W zmiennych można przetrzymywać również etykiety, np:
    START:
    ;...
    ;kod programu
    ;...
    END START

    ADRES16 dw START ; zmienna(16-bitowa) zawiera przesunięcie (offset) etykiety START
    ADRES32 dd START ; zmienna(32-bitowa) zawiera segment i przesunięcie etykiety START

    Zmienne łańcuchowe
    Używanie łańcuchów polega na tym, że nazwa zmiennej definiuje większą niż jeden liczbę pól w pamięci. Wykorzystujemy tutaj dyrektywy: db, dw, dd.

    Przykładowe sposoby deklarowania zmiennych łańcuchowych:
    Przykład deklaracjiOpis
    LANCUCH1 dw 0,1,2,100,2000Każde pole w LANCUCH1 to 1 słowo
    LANCUCH2 db 11, 22, 111, 222Każde pole w LANCUCH2 to 1 bajt
    LANCUCH3 db "Lancuchy znakow"Przykład deklarowania łańcuchów znaków,każde pole to 1 bajt
    LANCUCH4 db 'abcd',10,20,'xyz'Mieszana deklaracja,każde pole to 1 bajt

    Teksty możemy podawać w cudzysłowac "" lub w apostrofach ''.
    Możemy także deklarować łańcuchy bardzo elastycznie, podając dowolny(w bajtach) ich rozmiar. Służy do tego dyrektywa dup.
    Przykład deklaracjiOpis
    LANCUCH5 db 2000 dup(0)Deklaracja tablicy o rozmiarze 2000 bajtów wypełnionej zerami
    LANCUCH6 db 3000 dup(FFh)Deklaracja tablicy o rozmiarze 2000 bajtów wypełnionej wartościami FFh
    LANCUCH7 db 2000 dup(?)Deklaracja tablicy o rozmiarze 2000 bajtów o nieokreślonych wartościach
    LANCUCH8 db 50 dup('WYRAZ')Deklaracja tablicy LANCUCH7 zawierającej 50-krotnie powtórzone wyrażenie WYRAZ; czyli tablica ma rozmiar 50x5 bajtów (5 - długość WYRAZ w bajtach)
    LANCUCH9 dw 1000 dup(1,2,3,4)Deklaracja tablicy LANCUCH8 zawierającej 1000-krotnie powtórzoną sekwencję 1,2,3,4; rozmiar tablicy wynosi 1000x4=4000 słow=8000 bajtów
    Czasem wykorzystujemy operator $, który zwraca bierząca wartość wskaźnika.
    Przykład:
    LANCUCH db 'Wartosc poczatkowa' ;deklaracja łańcucha
    DLUGOSC dw $ - LANCUCH ;DLUGOSC= długość łańcucha, obliczona poprzez odjęcie adresów


    Struktury
    Struktura jest zbiorem jednej lub wiekszej liczby zmiennych (tych samych lub różnych typów) zgromadzonych dla wygody pod jedną nazwą.
    Aby "użyć" struktury w programie trzeba ją zdefiniować, zadeklarować i odwołąć się do niej. Szkielet definicji struktury w assemblerze wygląda następująco:

    nazwa_struktury STRUCT
    pole_1
    pole_2
    ...
    pole_N
    nazwa_struktury ENDS

    STRUCT jest tutajm słowem kluczowym. Sama definicja struktury nie powoduje włączenia danych do programu. Zapamietywana jest ona dopiero przy jej zadeklarowaniu.
    Poszczególne pola struktury mają następujący format:

    nazwa_pola DB wartosc_poczatkowa

    Nazwa_pola określa przesunięcie pola liczone od początku struktury. W assemblerze niestety nie możemy zagnieżdżać struktur, jak to jest możliwe np. w C.
    Gdy mamy już zdefiniowaną strukturę należy ją zadeklarować w kodzie źródłowym programu. Ogólny format deklaracji struktury jest następujący:

    NAZWA nazwa_struktury <wartosc_poczatkowa_pola_1,...,wartosc_poczatkowa_pola_N>

    Do struktury odwołujemy się za pomocą kropki.Np.:

    PRACOWNIK STRUCT
    KSYWA DB ''
    IMIE DB ''
    WIEK DB ?
    STAZ DB ?
    PRACOWNIK ENDS

    ZOOMEK PRACOWNIK <"zoomek","rafal",,1>

    Mając juz zadeklarowaną strukturę odwołujemy się do niej np. tak:

    MOV AL,ZOOMEK.STAZ

    Do AL zostanie załadowany staż zoomka. Można również tak:

    LEA BX,ZOOMEK
    ;......
    MOV AL,[BX].STAZ



    Rekordy
    Szablon rekordu:

    nazwa_rekordu RECORD
    nazwa_pola_1:ilosc_bitow[=wartosc_poczatkowa_1]
    ;...
    nazwa_pola_N:ilosc_bitow[=wartosc_poczatkowa_N]

    Dyrektywa RECORD definuje pewien rodzaj struktury danych, gdzie operujemy na bitach. Nazwa_rekordu identyfikuje nasz rekord. Nazwa_pola określa pole w rekordzie, ilosc_bitow - liczbę bitów, z których składa się pole, a opcjonalne wartosc_poczatkowa, nadaje wartość początkową
    (0 lub 1), np.:

    DATA RECORD ROK:7,MIESIAC:4,DZIEN:5

    Tak zadeklarowany rekord tworzy strukturę postaci:

    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

    7 najstarszych bitów określa ROK
    4 nastepne określają MIESIĄC
    a 5 najmłodszych bitów charakteryzuje DZIEŃ
    Format deklaracji:

    NAZWA nazwa_rekordu <wartosc_poczatkowa_1,...,wartosc_poczatkowa_N>

    np.:

    DZIS DATA <2000,09,29>

    Z tak zdefiniowanej daty możemy wyizolować wartość roku używając operatora MASK:

    MOV BX,DZIS
    AND BX,MASK ROK ;izoluje bity ROKU
    MOV CL,ROK ;liczba bitów z prawej strony pola rekordu
    SHR BX,CL ;w BX mamy naszą datę

    <<

    ©Copyright by zoomek 2001
    Wszelkie prawa zastrzeżone!