52 4. Język asemblerowy mikroprocesorów 8086/8088
MOV AX, DANE 2 ; oraz
MOV ES, AX ; ES
• ••
; przedrostki są zbędne MOV BX, ZMIENNA 4 MOV CL, ZMIENNA 1 MOV DH, ZMIENNA 2
• • •
PROGRAM ENDS +
Użycie opcji NOTHING wyłącza automatyczne generowanie przedrostków
przez asembler i wtedy w każdym przypadku (nawet gdy przyporządkowanie rejestru segmentowego dla danego działania jest standardowe) przedrostki muszą wystąpić.
Przykład
ASSUME DS:NOTHING
• ••
• ••
MOV AH, DS:BAJT[BX + 7]
MOV AL, DS:[SI-9] +
Jeżeli do adresowania pamięci wykorzystuje się rejestry BX, BP, SI, DI, którym są przyporządkowane standardowe rejestry segmentowe (por. p. 2.5), to użycie dyrektywy ASSUME zwalnia z konieczności dopisywania przedrostków w programie.
Przykład
PROGRAM SEGMENT
ASSUME CS:PROGRAM, DS:SEG ZMIENNAl,
& ES:SEG ZMIENNA 2
MOV AX, SEG ZMIENNA l MOV DS, AX
MOV AX, SEG ZMIENNA 2 MOV ES, AX • • •
MOV BX, ZMIENNA_2[BX][SI] ; przedrostek ???
MOV CX, ZMIENNA_1[BP] ; przedrostek ???
♦
Dyrektywa LABEL
Dyrektywa LABEL pozwala zdefiniować typ nazwy symbolicznej określającej zmienną lub etykietę. Składnia dyrektywy jest następująca
nazwa LABEL typ
przy czym typ może być BYTE, WORD, DWORD dla zmiennych lub NEAR, FAR dla etykiet.
powered by
4.3. Dyrektywy i pseudoinstmkcje
Dyrektywa LABEL przypisuje adresowi pamięci (wskazywanemu przez aktualny stan wskaz'nika pozycji asemblera) nazwę oraz określony typ.
Przykłady
deklaracja:
jest równoważna: deklaracja:
jest równoważna:
ZMIENNA
ZMIENNA
OBLICZENIA
OBLICZENIA:
LABEL WORD
DW 5555H DW 5555H LABEL NEAR MOV BX, CX MOV BX, CX
Użycie dyrektywy LABEL do definiowania etykiet musi być poprzedzone określeniem zawartości rejestru CS za pomocą dyrektywy ASSUME. Jeżeli jakaś etykieta jest wykorzystywana jako symboliczny adres skoku zarówno bliskiego wewnątrz segmentu, jak i dalekiego między segmentami, to może być ona dwojako zdefiniowana
SKOK DALEKO LABEL FAR
SKOK BLISKO: MOV BL, BH
Jest możliwe także redefiniowanie typu zmiennych.
Przykład
ZMIENNA SŁOWO LABEL WORD
ZMIENNA BAJT DB100 DUP (?) +
Powyższy zapis pozwala zdefiniowaną tablicę przetwarzać zarówno jako tablicę bajtów, jak i słów.
Przykład
MOV DX, ZMIENNA_SLOWO[BX)
MOV DL, ZMIENNA_BAJT[BX + 5|
Następujące dyrektywy mają identyczne znaczenie (zob. p. 4.3.2 i 4.4)
nazwa LABEL typ
nazwa EQU THIS typ
H Ir . J4..1 ♦
Dyrektywy PROC / ENDP
Dyrektywy PROC i ENDP służą do definiowania podprogramów (procedur). ywołame podprogramu odbywa się za pomocą rozkazu maszynowego CALL, pow-r()t zaś do miejsca wywołania za pośrednictwem rozkazu RET (zob. p. 5.5.1). Aby jed-a asembler mógł wygenerować właściwe kody tych rozkazów, potrzebuje dodat-