60 4. Język asemblerowy nuKroprocesorów 8086/8088
; OOh 16-23
DANE ENDS +
Sposób określenia zawartości pamięci jest zgodny z konwencją firmy Intel (por. rys.
Wartość wyrażenia nie może być większa niż wynika to z zastosowanej dyrektywy. I tak, odpowiednie zakresy są następujące
- dla DB szesnastkowo [0,0FFH] i dziesiętnie [0,255J lub [-128,+ 127],
- dla DW szesnastkowo [0,0FFFFH] oraz dziesiętnie [0,65535] lub [-32768, +32767],
- dla DD szesnastkowo [0, OFFFFFFFFH] oraz dziesiętnie [0, 8589934591] lub [-42949672%, + 4294%7295],
- dla DQ szesnastkowo [0, OFFFFFFFFFFFFFFFFH] oraz dziesiętnie
[0, 36893488147419103231] lub [-18446744073709551616, + 18446744073709551615],
- dyrektywa DT pozwala zdefiniować wartość dziesiętną wyrażoną w kodzie BCD, przy czym pierwszy bajt jest bajtem znaku (OOH - liczba dodatnia, 80H - liczba ujemna), w zakresie [-999999999999999999, + 999999999999999999]. Przy innej podstawie liczenia wartość może być z zakresu [0,0FFFFFFFFFFFFFFFFFFFFH].
Jeżeli warunki te nie są spełnione, to obliczona wartość nie zostaje "obcięta”, lecz zmienna pozostaje niezdefiniowana.
Przykłady
DANE
zawartość pamięci offset
08 |
0 |
FF |
1 |
4C |
2 |
69 |
3 |
64 |
4 |
69 |
5 |
61 |
6 |
34 |
7 |
12 |
8 |
00 |
9 |
80 |
A |
09 |
B |
00 |
C |
42 |
D |
41 |
E |
78 |
F |
56 |
10 |
34 |
11 |
12 |
12 |
FF |
13 |
FF |
14 |
SEGMENT
ZMIENNAJ
ZMIENNA2
TEKST
LICZBA
WYNIK
WSKAŹNIK
INNYTEKST
LICZBA2
INNY WYNIK
; definicja DB 8 DB -1 DB ’Lidia’
DW 1234H DW -32768 DW WYNIK DW AB5 DD 12345678H
DD -1
4.3. Dyrektywy i pseudoinstrukcje
powered by
Mi sto!
WSKAZNIK 2 DD INNY WYNIK ; 13 17
DUZA LICZBA DO 123456789ABCDEF0H ; FO 1F
% • • •
LICZBA BCD DT -123456789012345678 ; 80 27
y • • •
Wyszczególnione wartości są przykładowym adresem początku segmentu.
Za pomocą słowa kluczowego DUP można powtarzać rezerwowanie i inicjowanie pamięci. Składnia dyrektywy jest wtedy następująca
[nazwa] Dx liczba DUP (wyrażenie)
przy czym:
- liczba jest wyrażeniem numerycznym większym niż 0,
- wyrażenie musi być w nawiasach okrągłych i zawierać wyrażenie numeryczne, adresowe lub pytajnik,
- wyrażenie może być listą wyrażeń lub ponownie zawierać "liczba DUP (wyrażenie )".
Należy zwrócić uwagę, że dyrektywy: "DW V oraz "DW 1 DUP(?)" nie są identyczne. Pierwsza rezerwuje miejsce w pamięci i przypisuje jej wartość równą 0, druga rezerwuje miejsce w pamięci, ale nie generuje żadnej wartości, która jest niezdefiniowana. Może to mieć znaczenie w segmentach COMMON.
Przykłady
TABLICA DB 100 DUP (?) ; zarezerwowano 100 bajtów o
; niezdefiniowanej wartości
TABELA DW 25 DUP (0) ; zarezerwowano 25 słów o wartości
; początkowej zero
SPACJE DB 50 DUP (’ ’),0DH,0AH ; zarezerwowano 50 spacji
Następujące zapisy są równoważne
AAA ' DB 2 DUP (2 DUP (1,2,3),4,2 DUP (5))