Система команд
Команды, выполняемые микропроцессором, представляются комбинациями единиц и нулей. Такое представление команд называют машинными командами. Чтобы представить машинные команды более понятными для человека, используют их символьные (мнемонические) обозначения. В этом случае каждой машинной команде соответствует командный оператор на специальном языке – Ассемблере и машинная программа представлена в виде ассемблерной программы. Программа на языке Ассемблер является простейшей, так как в точности описывает последовательность действий микропроцессора. Для перевода ассемблерной программы на машинный язык единиц и нулей можно, конечно, воспользоваться таблицами перевода, но практически для этого имеются специальные ассемблирующие программы. Процесс преобразования программы с языка Ассемблер в машинные коды называется трансляцией. Программа, написанная на языке Ассемблер, кроме операторов содержит также директивы, т.е. специальные указания ассемблирующей программе. Они не транслируются в машинные команды, но информация, заложенная в них, используется для преобразования командных операторов в машинные команды.
Общий формат ассемблерной команды имеет следующий вид:
Метка: Мнемоника Операнд, Операнд; Комментарий.
Метка – это идентификатор, присваиваемый команде. С помощью меток в программе можно указывать команды, которым следует передать управление в случае условных или безусловных переходов. Мнемоника – краткое обозначение команды, обычно состоящее из трех-четырех латинских букв, представляющих сокращение от английского названия команды: ADD – addition (сложение); MOV – move (переслать) и т.д. Операнд, Операнд – поля первого и второго операндов. Первый операнд является приемником результата операции. Запятая служит признаком разделения полей операндов. Один из операндов – содержимое регистра, второй задается всеми возможными режимами адресации. Комментарий – необязательная составляющая оператора. Он игнорируется при трансляции и служит только для пояснений программы, ее отдельных фрагментов или операторов.
Для записи операндов используются следующие правила.
1. Если в регистре содержится сам операнд, его обозначение дается без скобок, если в регистре содержится составляющая адреса ячейки ОЗУ при косвенной адресации, то дается обозначение регистра в квадратных скобках. Например, запись ADD АХ, [ВХ] означает, что в операции сложения первый операнд находится в регистре АХ, а второй – в ячейке ОЗУ, адрес которой содержится в регистре BX. По записи оператора ассемблирующая программа автоматически определяет режим адресации.
2. Операнд может быть задан идентификатором – каким-либо сочетанием букв, не совпадающим с наименованием регистров, например ADD АХ, BETA. В этом случае идентификатору (в нашем случае метке BETA) соответствует ячейка ОЗУ, которая должна быть зарезервирована за ним в начале программы специальным оператором. Ассемблирующая программа при трансляции вычислит смещение этой ячейки относительно начала сегмента, и соответствующий операнд будет задан в машинной команде в режиме прямой адресации в виде адреса.
3. Знак "+" в записи операнда используется для задачи смещения. Например, запись ADD АХ, [SI] +8 определяет второй операнд в режиме регистровой относительной адресации. Адрес ячейки ОЗУ, содержащей второй операнд, определится как сумма содержимого регистра SI и смещения "8". Знак "+" можно использовать также для задачи дополнительного смещения. Например, операнд, заданный как ВЕТА+2, будет указывать на ячейку ОЗУ, адрес которой больше адреса ячейки BETA на "2". При этом ассемблирующая программа вычислит соответствующий адрес и поместит его в машинную команду в режиме прямой адресации.
4. Операнд может быть задан непосредственно числом. При этом необходимо указать, в какой системе счисления оно записано. Этот признак проставляется сразу после числа. Ассемблирующая программа самостоятельно переведет это число в двоичную форму и занесет в машинную команду. Двоичные числа сопровождаются признаком В (например, 101001106); десятичные сопровождаются признаком D или совсем без признака; шестнадцатеричные – признаком Я. В шестнадцатеричных числах для обозначения цифр 10, 11, 12, 13, 14 и 15 используются буквы Л, В, С, D, Е и F. Так, например, запись 53AFH обозначает шестнадцатеричное число 53AF, которое после трансляции запишется в машинной команде в виде двоичного числа