Получающаяся в результате трансляции программа на машинном языке записывается в память точно так же, как данные и иная необходимая информация. Для облегчения составления и чтения программ на машинном языке базовая структура всех команд сделана одинаковой.
Машинные команды в зависимости от типа имеют длину 2,4 или 6 байтов. Мы знаем, что команды языка ассемблера состоят из двух основных полей: поля операции и поля операндов. Машинные команды содержат те же поля и в том же порядке, в котором они входят в соответствующие команды языка ассемблера. Первый байт любой машинной команды отведен под 8-битовый код операции. Последующие байты (в каждом случае точно определено, каково их количество) соответствуют полю операндов. Для правильной работы процессора необходимо, чтобы все команды были выровнены по границам полуслов, т. е. чтобы их адреса были четными.
Рассмотрим теперь формат RR машинных команд. Схематически этот формат может быть изображен так:
Байт 0 |
Байт 1 |
ОР |
R1 R2
|
Здесь символ ОР обозначает 8-битовый код операции, a R1 и R2 означают то же самое, что и в гл. 4. Символически такие команды представляются в виде
MOP R1, R2
где МОР — мнемоническое обозначение соответствующей операции.
Первый байт RR-команд содержит код операции. Во втором байте записываются номера регистров R1 и R2 в двоичном виде. Обратите внимание на то, что каждый номеру занимает 4 бита (полубайт), что достаточно для размещения одной шестнадцатеричной цифры, т. е. для указания произвольного номера регистра от 1 до 15. Все имеющиеся регистры пронумерованы от 00002 до 11112, поэтому на машинном языке для указания конкретного регистра достаточно 4 битов. Например, 11002=C16 соответствует регистру 1210, а 00102=216 — регистру 210.
Рассмотрим машинный эквивалент команды
LR 10,12
Из справочной карты приложения 3 видно, что кодом операции команды LR является 18]в. Регистры 10 и 12 в машинном языке обозначаются А и С соответственно. Команда начинается кодом операции, затем в обычном порядке следуют операнды. Итак,
18 АС
является машинным эквивалентом команды LR 10,12.
В большинстве программ команды следуют одна за другой в порядке выполнения без каких-либо промежутков между ними. В результате трансляции таких программ на машинный язык получается набор следующих одна за другой машинных команд. Так, например, последовательность
AR 1,3 DR 0,5 LR 10,1
оттранслируется в
1A13D0518A1
Два байта второй команды, 1D05, непосредственно следуют за первыми двумя, третья пара следует за второй и т.д. Если рассмотренную выше последовательность записать в память, начиная с байта с четным адресом, и поместить этот адрес в счетчик команд, то она будет выполнена в указанном порядке.
Итак, мы видим, что процесс трансляции команд формата RR на машинный язык достаточно прост. Для выполнения трансляции нужно заменить мнемоническое обозначение машинной операции на ее 8- битовый код и полученный результат поместить в первый байт машинной команды. Затем необходимо определить двоичные номера регистров-операндов и из этих 4-битовых чисел сформировать второй байт. При выполнении трансляции некоторой последовательности команд рассмотренные действия выполняются применительно к каждой команде последовательности, соответствующие машинные эквиваленты располагаются в памяти в порядке их получения. Теперь мы можем приступить к изучению порядка работы ассемблера по трансляции программ.