Лекция: Язык ассемблера IBM PC

Рассмотрим минимальный набор средств языка ассемблера IBM PC, достаточный для понимания работы транслятора С0 (подробнее см. [1]).

В языке ассемблера строчные и заглавные буквы считаются одинаковыми (в данной книге команды для наглядности обычно выделяются заглавными буквами). Символ подчеркивания "_" рассматривается как буква. Используется строчный формат команд: каждая команда пишется с начала новой строки. Команда в общем случае состоит из четырех частей (полей): метки, названия, операндов и комментария, и имеет вид:

метка название операнд,..., операнд; комментарий

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

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

Имеются три типа команд: машинная команда, псевдокоманда и макрокоманда (здесь не рассматривается).

Машинная команда — это буквенная запись машинной команды IBM PC, обозначающая некоторую операцию. Название машинной команды определяет вид операции (ниже кратко описаны все используемые операции).

Машинная команда имеет не более двух операндов. Обычно первый из них служит приемником информации (сокращенно — прм), а второй — ее источником (ист).

Например, команда вида MOV прм, ист обозначает пересылку (move — переслать) из источника в приемник: ист --> прм.

Команда ADD прм, ист обозначает сложение (add — прибавить) приемника с источником и запись суммы в приемник:

прм + ист --> прм

Присваивание A = B + 9 выполняется следующими командами с использованием двухбайтового регистра AX:

M1: MOV AX,B; B --> AX

ADD AX,9; AX+9 --> AX

MOV A,AX; AX --> A

Операнды приемник и источник могут быть адресом переменной (области памяти), например A, B, или названием регистра, например, AX; источник может быть также непосредственным операндом — числом, участвующим в операции, как например, в команде ADD AX,9.

Адрес переменной (области памяти) может также задаваться в виде смещение[BP], где смещение обозначает целое число, например 4[BP] обозначает адрес, равный содержимому регистра BP, сложенному с заданным смещением 4: BP+4.

Перед машинной командой можно поставить (в том числе в отдельной строке) метку с двоеточием, как M1 в команде MOV приведенного примера. Эта метка обозначает адрес данной команды и используется для переходов к ней из других мест программы командами перехода, например: JMP M1.

Псевдокоманда (директива) не обозначает какую-либо операцию при выполнении программы. Это — указание ассемблеру, влияющее на трансляцию программы. Метки перед псевдокомандами не содержат двоеточия.

Псевдокоманда DW (define word — определить слово) вида

метка DW ?

пишется в том месте программы, где необходимо разместить область памяти из двух байт (слово) для хранения, например, целочисленного значения. Метка обозначает адрес этого значения и соответствует имени переменной.

Например, переменные A и B в приведенном выше примере можно было разместить в памяти псевдокомандами

A DW ?

B DW ?

Следующая псевдокоманда создает область из 100 слов:

метка DW 100 DUP (?)

Запись 100 DUP (?) обозначает 100-кратное повторение операнда (?).

Псевдокоманда ASSUME (предполагать) указывает ассемблеру имена сегментов команд, стека и данных программы (программе необходимо поместить их адреса в регистры сегментов CS, SS, DS):

 

ASSUME CS: сегмент-команд, SS: сегмент-стека, DS: сегмент-данных

 

Используются также следующие псевдокоманды.

INCLUDE имя-файла; вставить заданный файл

имя-сегмента SEGMENT; начало сегмента

имя-сегмента ENDS; конец сегмента

имя-процедуры PROC FAR; начало процедуры (дальней)

имя-процедуры ENDP; конец процедуры

END точка-входа; конец программы

 

В архитектуре процессора IBM PC предусмотрены двухбайтовые регистры: AX, BX, DX — для выполнения операций; BP – база для вычисления адреса; SP — указатель стека (адрес последнего записанного байта); CS, SS, DS — для адресов сегментов. AH — старший байт регистра AX; DL — младший байт регистра DX. Регистры флагов – однобитовые регистры, содержащие характеристики результата команды: знак, равенство/неравенство нулю, наличие переполнения и т.п.

еще рефераты
Еще работы по информатике