Государственное Образовательное Учреждение высшего профессионального образования Московский Авиационный Институт Государственный Технический Университет "маи" кафедра 304. конспект

Вид материалаКонспект

Содержание


Предложения языка Ассемблера
Комментарии Инструкции Директивы
Директивы определения данных и резервирования памяти
Директивы определения имен
Директивы управления ассемблированием
Подобный материал:
1   ...   5   6   7   8   9   10   11   12   ...   15

Предложения языка Ассемблера


Предложения ЯА



Комментарии Инструкции Директивы


Программа на ЯА – это последовательность предложений, каждое из которых занимает отдельную строку. Максимальная длина строки – 131 символ.

Переносить предложения на следующую строку или записывать 2 предложения на одной строке запрещено.

Правила расстановки пробелов:

- пробел обязателен, чтобы отделять стоящие рядом имена или числа;

- внутри имен или чисел пробелы не допускаются;

- в остальных случаях пробелы используются произвольно;

- количество пробелов подряд безразлично.

Предложения ЯА делятся на три вида: комментарии, инструкции и директивы.
  1. Комментарии не влияют на смысл программы, при трансляции Ассемблер их игнорирует. Комментарием считается любая строка или конец строки, начиная с точки с запятой, либо пустая строка.

Например,

; начало процесса

ADD BX, 20; BX := BX + 20d

Можно организовать комментарий, состоящий из нескольких строк, он должен начинаться с директивы

COMMENT {маркер} {текст}



{текст}{маркер} [{текст}]

где {маркер} – любой символ, кроме пробела, расположенный после COMMENT,

прямоугольными скобками оформляются необязательные элементы.

Последней строкой комментария считается строка, содержащая тот же маркер в любой позиции.

Это позволяет временно исключить фрагмент программы из обработки.
  1. Инструкции ЯА были в основном рассмотрены выше.

Общий вид инструкции ЯА:

[{метка}:] {мнемоника} [{операнды}] [;{комментарий}]

где {мнемоника} – является обязательной частью инструкции, она относится к ключевым словам;

{операнды} – если они есть, то разделяются запятыми, обычно записываются в виде выражений, содержащих указания на режим адресации.

Например,

SYM: mov AH, S[SI+2]; AH := содержимое ОП по адресу [S+[SI]+2]

mov CX, [126h]; CX := содержимое ОП по адресу [126h]

add Z, -300; Z := Z + (- 300d)

Выражения в квадратных скобках позволяют вычислить адрес операнда как смещение относительно DS.

Непосредственный операнд не может быть представлен выражением.
  1. Директивы не порождают машинные коды и используются на этапе ассемблирования.

Директивы в ЯА бывают трех видов:
      • директивы определения данных и резервирования памяти;
      • директивы определения имен;
      • директивы управления ассемблированием (т.е. трансляцией программы).

Общий вид директивы ЯА

[{имя}] {название директивы} [{операнды}]

а) Директивы определения данных и резервирования памяти используются для определения и инициализации основных единиц памяти:

DB – (declare byte) декларация последовательности байтов;

DW – (declare word) декларация последовательности слов;

DD – (declare double word) декларация последовательности двойных слов.

Рассмотрим эти директивы на примере декларации байтов

[{имя}] DB {начальные значения}

где {имя} переменной заменяет численное значение адреса распределяемых ячеек памяти, если оно есть, то относится к первому байту данной области ОП (ООП).

DB – позволяет определить один или несколько последовательно расположенных в ОП байтов, содержащих значения, перечисленные в поле начальных значений.

Например,

Line DB ‘SYMBOL буквы‘; описана последовательность 12 байтов

M DB 2

DB -4

Две последние декларации описывают общую ООП из 2 байтов.

Начальные значения разделяются запятыми, если отдельному байту на присваивается начальное значение, то в списке начальных значений записывается «?».

Например,

A DB 0f2h,-2,?,’*’ ; описываются 4 байта, содержащие следующую информацию:

F2h

FEh

Что было

2Ah

А

А+1

А+2

Код ’*’



б) Директивы определения имен.

Директива EQU (equal) позволяет присвоить символическое имя часто используемой конструкции.

Общий вид : {имя} EQU {выражение}

где {имя}- может быть определено только один раз в программе, оно сохраняет свое значение во всей программе, если не будет отменено директивой PURGE;

{выражение} – может определять константы, мнемоники, регистры, адреса.

Ассемблер автоматически заменяет имя выражением(его значением).

Например,

K EQU 1024; K=1024

Stap EQU xor ax, ax ; Stap замещается текстом команды

Prop EQU ‘type enter’ ; Prop замещается текстом сообщения

Существует другой вид той же директивы :

{имя} = {константное выражение}

Константа, описанная таким образом, может менять свое значение в разных частях текста программы.

Например,

X = 10

A DW X ; эквивалентно A DW 10



X = X+4

B DB X ; A DW 14d

Директива PURGE используется для удаления имени из таблицы имен, которую формирует ассемблер, и для его переопределения.

Общий вид: PURGE {имя}

Например,

PURGE Stap ; После этой директивы имя Stap можно переопределить.

Директива LABEL создает новое имя для любых ячеек памяти, независимо от содержимого и предполагаемого использования, т.е. переопределяет атрибут имени, расположенного непосредственно после этой декларации.

Общий вид

{имя} LABEL {тип} , где



три первых атрибута используются для имен ячеек памяти с данными, а два последних - для меток команд.

Например,

Barb LABEL BYTE

Barw DW 253Bh



mov AL, Barb; AL := ОП[Barb] (размер - 1 байт)

mov BX, Bar W; BX := ОП[Barb W] - слово

Таким образом можно обращаться как к слову целиком, так и к отдельному байту.

в) Директивы управления ассемблированием или структурные директивы

Перечислим основные директивы этой группы, необходимые для оформления программы на ЯА:

SEGMENT – определение сегмента;

ENDS – конец сегмента;

END – конец исходного файла;

ASSUME – определение сегментных регистров;

PROC – определение процедуры;

ENDP – конец текста процедуры.

Эти директивы на примере необходимого оформления структуры программы. Кроме того есть директивы набора команд (инструкций) для конкретных МП :

.8086 – используются по умолчанию

.8087

.286 – 286 процессора набор команд

.286p ; защищенный режим

.287 и т.д.

Эти директивы могут быть помещены в начале исходного файла программы и гарантируют ассемблирование всех команд в текущем файле. Более поздние версии МП включают в себя команды предыдущих версий.