Государственное Образовательное Учреждение высшего профессионального образования Московский Авиационный Институт Государственный Технический Университет "маи" кафедра 304. конспект
Вид материала | Конспект |
СодержаниеПредложения языка Ассемблера Комментарии Инструкции Директивы Директивы определения данных и резервирования памяти Директивы определения имен Директивы управления ассемблированием |
- Инновационной образовательной программы, 1090.47kb.
- Самостоятельная работа 2 часа в неделю всего часов, 28.69kb.
- Самостоятельная работа 2 часа в неделю всего часов, 45.89kb.
- Самостоятельная работа 2 часа в неделю всего часов, 73.46kb.
- Самостоятельная работа 2 часа в неделю всего часов, 46.6kb.
- Самостоятельная работа 2 часа в неделю всего часов, 41.37kb.
- Самостоятельная работа 2 часа в неделю всего часов, 41.08kb.
- Самостоятельная работа 2 часа в неделю всего часов, 64.33kb.
- Самостоятельная работа 2 часа в неделю всего часов, 29.72kb.
- Самостоятельная работа 2 часа в неделю всего часов, 33.42kb.
Предложения языка Ассемблера
Предложения ЯА
Комментарии Инструкции Директивы
Программа на ЯА – это последовательность предложений, каждое из которых занимает отдельную строку. Максимальная длина строки – 131 символ.
Переносить предложения на следующую строку или записывать 2 предложения на одной строке запрещено.
Правила расстановки пробелов:
- пробел обязателен, чтобы отделять стоящие рядом имена или числа;
- внутри имен или чисел пробелы не допускаются;
- в остальных случаях пробелы используются произвольно;
- количество пробелов подряд безразлично.
Предложения ЯА делятся на три вида: комментарии, инструкции и директивы.
- Комментарии не влияют на смысл программы, при трансляции Ассемблер их игнорирует. Комментарием считается любая строка или конец строки, начиная с точки с запятой, либо пустая строка.
Например,
; начало процесса
ADD BX, 20; BX := BX + 20d
Можно организовать комментарий, состоящий из нескольких строк, он должен начинаться с директивы
COMMENT {маркер} {текст}
…
{текст}{маркер} [{текст}]
где {маркер} – любой символ, кроме пробела, расположенный после COMMENT,
прямоугольными скобками оформляются необязательные элементы.
Последней строкой комментария считается строка, содержащая тот же маркер в любой позиции.
Это позволяет временно исключить фрагмент программы из обработки.
- Инструкции ЯА были в основном рассмотрены выше.
Общий вид инструкции ЯА:
[{метка}:] {мнемоника} [{операнды}] [;{комментарий}]
где {мнемоника} – является обязательной частью инструкции, она относится к ключевым словам;
{операнды} – если они есть, то разделяются запятыми, обычно записываются в виде выражений, содержащих указания на режим адресации.
Например,
SYM: mov AH, S[SI+2]; AH := содержимое ОП по адресу [S+[SI]+2]
mov CX, [126h]; CX := содержимое ОП по адресу [126h]
add Z, -300; Z := Z + (- 300d)
Выражения в квадратных скобках позволяют вычислить адрес операнда как смещение относительно DS.
Непосредственный операнд не может быть представлен выражением.
- Директивы не порождают машинные коды и используются на этапе ассемблирования.
Директивы в ЯА бывают трех видов:
- директивы определения данных и резервирования памяти;
- директивы определения имен;
- директивы управления ассемблированием (т.е. трансляцией программы).
Общий вид директивы ЯА
[{имя}] {название директивы} [{операнды}]
а) Директивы определения данных и резервирования памяти используются для определения и инициализации основных единиц памяти:
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 и т.д.
Эти директивы могут быть помещены в начале исходного файла программы и гарантируют ассемблирование всех команд в текущем файле. Более поздние версии МП включают в себя команды предыдущих версий.