- GROUP-Dyrektywa ta pozwala wiązać kilka segmentów zdefiniowanych dyrektywami SEGMENT tak, że adresy w każdym z nich są liczone nie względem jego początku, ale względem początku grupy. Segmenty w grupie mogą być ciągłe (max. 64KB), ale nie muszą - między segmentami grupy mogą znajdować się segmenty nie należące do danej grupy.
nazwa GROUP nazwa_segmentu
Aby ustalić adresację w obrębie całej grupy, należy użyć dyrektywy ASSUME, podając w niej nazwę grupy, np.:
GROUP1 GROUP DANE1, DANE2
DANE1 SEGMENT
PAR1 DB ?
DANE1 ENDS
DANE2 SEGMENT
PAR2 DW ?
DANE2 ENDS
KOD SEGMENT
ASSUME CS:KOD, DS:GROUP1 ; SEGMENT DANE1 i DANE2
; SĄ ADRESOWANE WZGLĘDEM REJESTRU DS
MOV AX,GRUP1 ; SEGMENT GRUPY GRUP1
MOV DS,AX
...
SUB CX,PAR2 ; PRZESUNIECIE PAR2 LICZONE JEST
; WZGLĘDEM POCZATKU GRUPY
KOD ENDS
- EVEN - Dyrektywa ta umieszcza instrukcję lub definicję danych następującą po niej na granicy pełnego słowa, wstawiając ewentualnie instrukcję pustą (NOP). Dyrektywy EVEN nie można używać w segmentach z parametrem 'ułożenie' równym BYTE.
- PUBLIC i EXTERN
PUBLIC nazwa,...
EXTRN nazwa:typ,...
Dyrektywa PUBLIC czyni podaną przy niej nazwę (etykietę, nazwę zmiennej lub procedury) dostępną dla innych modułów. Dyrektywa EXTRN natomiast deklaruje nazwę użytą w module jako zewnętrzną, tj. taką do której odwołanie zostanie rozwiązane dopiero na etapie łączenia modułów. Typ w tej deklaracji określa rodzaj nazwy zewnętrznej i może być następujący:
BYTE WORD DWORD NEAR FAR
np. pierwszy moduł wygląda tak:
EXTRN PIERWSZA:FAR, ZMIENNA:BYTE
KOD1 SEGMENT
ASSUME CS:COD1,DS:COD1
START:
...
CALL PIERWSZA ;WYWOŁANIE BĘDZIE TYPU FAR
...
MOV AL,ZMIENNA ;ODWOŁANIE DO ZMIENNEJ BĘDZIE Z
;PODANIEM SEGMENTU
KOD1 ENDS
END START
Drugi natomiast wygląda tak:
PUBLIC PIERWSZA,ZMIENNA
KOD2 SEGMENT
ASSUME CS:KOD2,DS:KOD2
...
PIERWSZA PROC FAR ;PROCEDURA TYPU FAR
...
RET
PIERWSZA ENDS
...
ZMIENNA DB 0
...
KOD2 ENDS
- Zbiory instrukcji
Istnieje kilka dyrektyw, które pozwalają deklarować procesory, których instrukcje będą używane w programie. Dyrektywa deklarowania rodzaju procesora powinna być podana na początku zbioru, żeby objąć całą jego zawartość. Domyślnym rodzajem procesora jest 8086. My mamy do dyspozycji:
- .8086
- .8087
- .186
- .286c
- .286p
- .287
- .386
- LABEL-Dyrektywa ta służy do tworzenia etykiet, przyporządkowując im aktualną wartość adresu. Jest ona użyteczna przy nadawaniu zmiennym pamięciowym, już nazwanym, innej nazwy z innym kodem. Mamy do dyspozycji typy:
- BYTE
- WORD
- DWORD
- QWORD
- TBYTE
- NEAR
- FAR
Format :
nazwa LABEL typ
np.:
SLOWO LABEL WORD
ZMIENNA1 DB 5
ZMIENNA2 DB 8
Liczby 5 i 8 znajdują się w dwóch kolejnych bajtach pamięci. Można teraz odwoływać się do nich używając ich nazw (ZMIENNA1, ZMIENNA2), wtedy nadajemy wartości bajtowe, lub odwołać się do SLOWO, gdzie nadamy im wartość słowa (dwa bajty jednocześnie), np:
MOV AX,SLOWO ; LADUJE DO AX WARTOSC 0508H
MOV CL,ZMIENNA1 ; LADUJE DO CL WARTOŚĆ 8
Podobnie można robić z etykietami:
ETYKIETA1 LABEL FAR
ETYKIETA2:MOV AX,BX
Etykieta ETYKIETA2 jest typu NEAR, a ETYKIETA1 typu FAR, a obie wskazują ten sam adres w pamięci.