Форматы записи команд Ассемблера и некоторые его директивы

Язык Ассемблера является следующим по уровню за машинными кодами языком программирования.

В языке Ассемблера программист использует символические мнемокоды вместо двоичных кодов машинных команд и описательные именами для указания операндов этих команд.

Программа на языке Ассемблера называется исходной программой (исходным модулем).

Ассемблерный транслятор (tasm) преобразует исходный текст в машинный код (объектную программу). И, наконец, программа-компоновщик (tlink) определяет все адресные ссылки для, возможно, нескольких объектных модулей, генерируя загрузочный модуль.

Форматы записи команд Ассемблера


Мнемоническая команда Ассемблера дает указание, какое действие должен выполнять данный оператор.

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

При разработке программ рекомендуется использовать комментарии. Комментарий всегда начинается с символа «;». Ассемблер полагает, что все символы, которые находятся справа от этого символа являются комментарием.

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

; фрагмент программы
М5: ADD АХ,ЗОН ; сложение содержимого аккумулятора
; АХ с шестнадцатиричным числом 30
MOV RLOW,AX ; пересылка данных из регистра АХ
; в область памяти RLOW
JMP М5 ; команда перехода к метке М5

Некоторые директивы Ассемблера

Директива SEGMENT используется для описания сегментов. Сегментом зовется область памяти, которая начинается на границе параграфа (имеет начальный адрес, кратный 10Н) и имеет размер до 64 Кбайт.

Программа может содержать не более четырех сегментов, из которых основными являются следующие три:
  1. сегмент кода. В сегменте кода находятся машинные команды, которые подлежат выполнению; адрес сегмента кода находится в регистре CS;
  2. сегмент данных. В сегменте данных содержится определение данных, рабочие области и константы необходимые программе; адрес сегмента данных находится в регистре DS;
  3. сегмент стека. В стеке находятся адреса возврата подпрограмм, адреса параметров процедур и т.д.; адрес сегмента находится в регистре SS.

Любые программы, написанные на ассемблере, содержат один или несколько сегментов — сегмент кода. В COM-файлах сегмент кода является одновременно сегментом данных и сегментом стека.

Директива SEGMENT задает имя сегмента. Имя сегмента обязательно должно быть задано, соответствовать соглашениям для имен в Ассемблере и быть уникальным. Директива Ассемблера ENDS указывает на конец описания сегмента. Директивы, SEGMENT и ENDS, должны обладать одинаковыми именами.

Процессор всегда использует регистры CS, DS, SS для адресации сегмента кода, данных и стека соответственно.

Ассемблеру нужно сообщить назначение каждого сегмента. Для этого служит директива ASSUME. Формат директивы ASSUME имеет вид:

ASSUME SS:имя_стек,DS:имя_дан,СS:имя_код

Например, запись SS:ABC указывает, что сегмент с именем ABC является сегментом стека.

Для определения кода или относительной позиции в сегменте данных Ассемблер использует счетчик адреса. Директива ORG используется для изменения значения счетчик адреса и, соответственно, адресов всех следующих за ней команд или данных. Формат директивы имеет вид:

ORG выражение

Выражение может быть, в частности, целым числом.

На завершение программы указывает директива END. Директива имеет следующий формат:

END [имя точки входа]

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

0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.