- •Некоторые понятия языка Ассемблер
- •Поля ассемблерной строки
- •Директивы ассемблера
- •Директива end.
- •2.2 Директива org (начало, origin).
- •Директива equ (equal, приравнять, присвоить)
- •Директива set (установить).
- •Директива db (определить байт, define)
- •Директива dw (определить слово)
- •2.7. Директива ds (define spice, определить память)
Директивы ассемблера
Директивы ассемблера, называемые также псевдокомандами, являются приказами (указаниями) ассемблеру для выполнения определённых действий в процессе ассемблирования. Директивы отсутствуют в системе команд, что естественно, так как они не управляют процессором при непосредственном его функционировании. Директивы определяют порядок ассемблирования, расположение программного кода и отдельных его фрагментов в памяти, резервируют место в памяти и т.п.
Директивы подчиняются стандартному формату предложений ассемблера. Отдельные отличия рассматриваются ниже.
Директива end.
Эта директива – приказ ассемблеру о прекращении ассемблирования вследствие достижения конца физического кода программы.
Формат директивы END |
|||
Метка |
Код |
Операнд |
Комментарий |
;Формат директивы END |
|||
[Метка: ] |
END |
|
[;конец компиляции ] |
Директива имеет две особенности.
Первое. Директива является обязательной. При ее отсутствии в программе, ассемблер формирует код ошибки или не выходит из процедуры ассемблирования.
Второе. Директива должна встречаться в программе только один раз и в последней строке программы.
2.2 Директива org (начало, origin).
Формат директивы ORG |
|||
Метка |
Код |
Операнд |
Комментарий |
;Формат директивы ORG |
|||
[Метка: ] |
ORG |
<выражение> |
[;адрес первого ;байта кода ;программы или ;фрагмента ;программы или следующего ; байта данных] |
Значением обязательного выражения директивы ORG является шестнадцатиразрядный адрес ячейки памяти, в которую будет загружаться первый байт следующей команды или данных. Директива имеет следующие особенности.
Первое. Она может отсутствовать перед “входом” в программу. В этом случае первый байт программного кода размещается в ячейке с адресом 0000h.
Второе. В программе может встречаться несколько директив ORG определяющих начало следующего фрагмента программного кода или массива данных.
Пример. |
|||
Метка |
Код |
Операнд |
Комментарий |
; Пример программы с несколькими директивами ORG |
|||
|
ORG |
0С00h |
; адрес = 0С00h; |
|
LXI |
H, 1210h |
; адрес первого ; байта КК 0С00h |
|
|
|
|
|
MOV |
D,M |
; КК в ячейке 0C03h |
|
* * * |
|
|
|
JMP |
M1 |
; обход пропускаемых ; ячеек |
|
ORG |
0E00h |
; адрес = 0E00h |
M1: |
MOV |
A, D |
; адрес команды 0Е00h |
|
* * * |
|
Cостояние пропущенных в примере ячеек памяти не определено, т.е. нельзя считать, например, что они содержат значение 00h.Они резервируются, однако, чтобы избежать ошибок при работе процессора, в программе должен быть предусмотрен их обход, например, с помощью команды JMP addr.
Третье. Директива ORG может быть использована для точного задания числа резервируемых ячеек.
Пример. |
||||
Метка |
Код |
Операнд |
Комментарий |
|
; Пример резервирования памяти с помощью директивы ; ORG |
||||
|
ORG |
0С00h |
; адрес = 0С00h; |
|
|
LXI |
H, 1210h |
; адрес первого ; байта КК= 0С00h |
|
|
JMP |
M1 |
; обход пропускаемых ; ячеек |
|
|
ORG |
$+20h |
; резервирование ; 32d ячеек |
|
M1: |
MOV |
A, D |
; адрес команды 0Е26h |
|
|
* * * |
|
Четвертое. Директива может определять расположение не только программного кода, но и массива данных.
Пример. |
|||||
Метка |
Код |
Операнд |
Комментарий |
||
;Пример резервирования ячеек для данных |
|||||
|
* * * |
|
|||
|
ORG |
0АС00h |
; адрес = AС00h |
||
ARRAY: |
DB |
12, 03, FCh |
; массив из трех ; чисел 0Сh, 03, FCh ; с адреса AC00h |
||
|
* * * |
|