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

  • Stałe i symbole

  • Deklarowanie symboli
    Istnieją dwa sposoby deklarowania symboli(stałych):

    1. Przy pomocy dyrektywy EQU
    Przypisujemy nazwie wyrażenie i wtedy tę nazwę stosujemy tak, jakby się stosowało to wyrażenie.Przypisanie wykonane za pomocą equ jest stałe i niemożliwa jest redefinicja.

    Przykłady użycia equOpis
    STALA equ 2000Przypisanie nazwie STALA wyrażenia 2000
    AKUMULATOR equ axNadanie innej nazwy rejestrowi ax
    PI equ 3.1415
    DWA_PI equ 2*PI
    Dopuszczalne są także proste operacje arytmetyczne na symbolach
    WYRAZENIE equ mov al, ds:[si]Można również przypisywać do stałych wyrażenia.Teraz wpisanie w programie: WYRAZENIE spowoduje wykonanie instrukcji: mov al,ds:[si]

    2. Przy pomocy operatora =
    Umożliwia przypisanie nazwie wyrażenia arytmetycznego i pozwala na zmianę wartości symbolu i przedefiniowanie.

    Przykład użycia operatora =Opis
    SYMBOL = 2
    WYNIK= 2*SYMBOL
    SYMBOL = SYMBOL+1
    Przypisanie nazwie SYMBOL wartości 2
    Przypisanie nazwie WYNIK wartości 2xSYMBOL
    A teraz SYMBOL=3

    Operacje na symbolach

    Operatory arytmetyczne
    OperatorOpis
    +Dodawanie. Przykład:
    X equ 10
    Y equ X+2
    mov ax,X+Y
    -Odejmowanie. Przykład:
    X equ offset start ;przesuniecie etykiety start
    Y equ X-5
    *Mnożenie. Przykład:
    A = 100
    B = 200
    WYNIK = A * B
    /Dzielenie całkowite. Przykład:
    A = 100
    B = 20
    WYNIK = A/B ;5
    MODReszta z dzielenia. Przykład:
    X equ 12345
    Y equ X mod 10000 ;Y=2345
    SHLPrzesunięcie bitów w lewo o zadaną przez wyrażenie liczbę miejsc(mnożenie przez kolejne potęgi 2, czyli przesuwamy argument w lewo o określoną liczbę bitów, a z prawej strony agrumentu dodajemy zera). Przykład:
    maska equ 111010001001b
    pole equ 3
    wynik equ maska shl pole ;wynik=010001001000b
    SHRPrzesuwanie bitów w prawo o zadaną przez wyrażenie liczbę miejsc (dzielenie przez kolejne potęgi 2, czyli przesuwamy argument w prawo o określoną liczbę bitów, a z lewej strony argumentu dodajemy zera). Przykład:
    adres_slowa equ 111010001001b
    numer equ adres_slowa shl 1 ;numer 011101000100b

    Operatory logiczne
    OperatorOpis
    ANDLogiczne "i" argumentów. Przykład:
    X equ 1001b
    Y equ 1100b
    mov ax,X AND Y ;mov ax,1000b
    ORLogiczne "lub" argumentów. Przykład:
    X equ 0101b
    Y equ 1010b
    mov cx,X OR Y ;mov cx,1111b
    XORLogiczne "albo" argumentów. Przykład: X equ 1100b
    Y equ 1000b
    mov bx,X XOR Y ;mov bx,0100b
    NOTNegacja bitów argumentu. Przykład: liczba equ 00110011b
    mov dx,NOT liczba ;mov dx,11001100b

    Operacje binarne:

    XYX AND YX OR YX XOR YNOT X
    000001
    010111
    100110
    111100

    Operatory relacji
    Służą do porównywania wartości dwóch wyrażeń. Wynikiem porównań jest wartość 0FFFFh reprezentująca prawdę, albo wartość 0h oznaczjąca falsz.
    OperatorOpis
    EQZwraca prawdę, gdy agrgumenty są równe. Przykład:
    mov cx, (warunek EQ 100) AND 1000
    Interpretacja:
    warunek=100 ;mov cx, 0FFFFh AND 1000, czyli mov cx,1000
    warunek różny od 100 ;mov cx,0AND 1000, czyli mov cx,0
    NEZwraca prawdę gdy argumenty są różne.
    LTZwraca prawdę, gdy argument lewy jest mniejszy niż argument prawy.
    GTZwraca prawdę, gdy argument prawy jest mniejszy niż argument lewy.
    LEZwraca prawdę, gdy argument lewy jest mniejszy lub równy argumentowi prawemu.
    GEZwraca prawdę, gdy argument prawy jest mniejszy lub równy argumentowi lewemu.

    Są to instrukcje bardzo pomocne, gdy chcemy np. załadować do jakiegość rejestru wartość z danego przedziału liczbowego, bądź liczbę spełniającą określone warunki: =,<,>,=<,>= argunentów.

    Operatory zwracające wartość
    OperatorOpis
    $Zwraca wartość wskaźnika assemblera - przesunięcie aktualnej instrukcji.
    SEGZwraca nr segmentu, w którym znajduje się argument - etykieta. Przykład:
    mov bx,SEG tablica_znakow
    Oznacza to ,że do bx ładujemy nr segmentu, w którym jest tablica_znakow
    OFFSETZwraca przesunięcie argumentu - etykiety. Przykład:
    mov si, offset tablica_znakow
    Oznacza to, że ładujemy do si przesunięcie tablicy tablica_znakow.
    LENGHTZwraca długość tablicy zdefiniowanej przy pomocy dyrektywy DUP. Jeżeli zmienna została zadeklarowana bez użycia dyrektywy DUP to operator zwraca wartość 1. Przykład:
    TABLICA db 100 dup(0)
    mov ax,LENGHT TABLICA ;mov ax,100
    TYPEZwraca rodzaj zmiennej: 1-byte, 2-word, 4-doubleword.
    SIZEZwraca rozmiar tablicy w bajtach (jest to iloczyn TYPE i LENGHT). Przykład:
    TABLICA dw 200 dup(0)
    mov ax,SIZE TABLICA ; zaladowanie 400 do ax
    mov bx,TYPE TABLICA ;zaladowanie 2 do bx
    HIGHZwraca starszy bajt 16-bitowego argumentu(wartości numerycznej lub wyrażenia typu adresowego) . Przykład:
    LICZBA equ 01234h
    mov bh,HIGHT LICZBA ;zaladowanie do bh wartosci 12h
    LOWZwraca młodszy bajt 16-bitowego argumentu(wartości numerycznej lub wyrażenia typu adresowego). Przykład:
    LICZBA equ 01234h
    mov bl,LOW LICZBA ;zaladowanie do bl wartosci 34h

    <<

    ©Copyright by zoomek 2001
    Wszelkie prawa zastrzeżone!