
- •Префиксы повторения
- •3.11.6. Команды управления микропроцессором
- •Команды управления флагами
- •Команды синхронизации
- •3.11.7. Принципы кодирования команд
- •3.11.8. Время выполнения команд
- •3.12. Организация подпрограмм
- •3.12.1. Директивы описания подпрограмм
- •3.12.2. Передача параметров в подпрограммы
- •Передача параметров через регистры
- •Передача параметров через общие ячейки памяти
- •Передача параметров через зоны параметров
- •Передача параметров через стек
- •3.13. Организация системы прерываний
- •3.13.1. Внешние прерывания
- •3.13.2. Внутренние прерывания
- •3.13.3. Обслуживание прерываний
- •3.14.Нестандартные типы данных
- •3.14.1. Структуры
- •3.14.2. Записи
- •3.15.Макрокоманды
- •3.15.1. Макроопределения и макровызовы
- •3.15.2.Сравнение макрокоманд и подпрограмм
- •3.15.3. Макрокоманды повторения
- •3.15.4. Библиотеки макроопределений
- •IncludeИмя_библиотеки
3.11.7. Принципы кодирования команд
В общем случае формат команд одноадресной ЭВМ имеет вид, приведенный на рис. 3.7. Поле кода операции КОП определяет функциональное назначение команды, а поле адреса указывает адрес операнда или способ его вычисления.
Поле КОП |
Поле адреса |
Рис. 3.7. Обобщенный формат команды одноадресной ЭВМ |
Команды МП ВМ86/ВМ88 могут адресовать один или два операнда и записываются на ассемблере в общем виде как COP oper или COP oper1, oper2, где COP обобщенная мнемоника, а operоперанд команды.
В двухместных командах один из операндов обязательно должен быть регистром. Следовательно, они допускают обращения типа регистр-регистр, регистрпамять или памятьрегистр, а обращения типа памятьпамять, то есть одновременная адресация двух ячеек памяти в одной команде, недопустимы. Это определяется принятым способом кодирования команд. Наиболее общий формат машинного кода двухместной команды (без непосредственного операнда) приведен на рис. 3.8, где штриховыми линиями обозначены необязательные байты команды, содержащие смещение disp.
Первый байт команды содержит код операции COP и два однобитных поля: поле направления d и поле ширины операнда w. Операнды, участвующие в операции, определяются вторым байтом команды, называемом постбайтом режима адресации. Постбайт включает в себя три поля: двухбитное поле режима адресации md, трехбитное поле операндарегистра reg и трехбитное поле операнда r/m, который может быть и регистром и ячейкой памяти.
D7 D1 D0 COP d w md reg r/m
disp L disp H
Рис. 3.8. Формат двухместной команды (без
непосредственного операнда)
Поле направления d определяет операндприемник результата. При d=0 приемником результата является операнд, описываемый полем r/m, а при d=1полем reg.
Поле режима адресации md указывает способ интерпретации поля r/m при адресации операнда. Значение md=11 соответствует регистровой адресации, и поле r/m рассматривается как код регистра. Значение md< >11 соответствует адресации памяти. При этом конкретное значение md определяет ширину смещения disp, используемого при вычислении адреса операнда:
смещение отсутствует;
8-битное смещение, расширяемое по
знаку до 16 битов;
16-битное смещение.
При md< >11 реализуется косвенная адресация памяти, и поле r/m определяет способ формирования эффективного адреса EA операнда. Кодирование способа адресации операнда, определяемого полем r/m, в общем случае описывается табл.3.5, в которой обозначено D8=dispL однобайтное смещение, а D16=dispH,dispLдвухбайтное смещение в команде.
Из этой таблицы следует, что всего имеется 24 варианта вычисления эффективного адреса EA памяти и 16 вариантов адресации регистров.
Приведенные в табл. 3.5 правила кодирования имеют одно исключение.
Таблица 3.5
Кодирование способов адресации операнда
|
00 |
01 |
10 |
11 | |
r/m |
|
|
|
w=0 |
w=1 |
000 001 010 011 100 101 110 111 |
(BX)+(SI) (BX)+(DI) (BP)+(SI) (BP)+(DI) (SI) (DI) D16 (BX) |
(BX)+(SI)+D8 (BX)+(DI)+D8 (BP)+(SI)+D8 (BP)+(DI)+D8 (SI)+D8 (DI)+D8 (BP)+D8 (BX)+D8 |
(BX)+(SI)+D16 (BX)+(DI)+D16 (BP)+(SI)+D16 (BP)+(DI)+D16 (SI)+D16 (DI)+D16 (BP)+D16 (BX)+D16 |
AL CL DL BL AH CH DH BH |
AX CX DX BX SP BP SI DI |
При md=0 и r/m=110 смещение disp не равно 0, как следует из общего правила, а равно двухбайтному смещению D16. Это исключение позволяет реализовать прямую адресацию памяти, не предусмотренную явно форматом постбайта адресации. Смещение D16 в этом случае представляет собой абсолютный адрес операнда, то есть смещение соответствующей ячейки памяти внутри сегмента.
Однако, это исключение приводит к невозможности косвенной адресации по регистру BP (на уровне машинных кодов). Для реализации косвенной адресации по BP ассемблер кодирует ее как базовую адресацию с нулевым смещением, то есть на уровне машинных кодов [BP]=[BP+0].
D7 D1 D0 COP s w md COP r/m
dispL dispH
dataL dataH
Рис. 3.9. Формат двухместной команды
с непосредственным операндом
В этом случае необходимость адресации второго операнда отсутствует, и поле reg постбайта режима адресации используется для расширения кода операции. Кроме того, здесь не нужен бит d, так как результат можно загрузить только на место одного операнда. Вместо бита d используется бит s, определяющий совместно с битом w размер непосредственного операнда data:
8битный операнд;
16битный операнд;
8битный операнд,
расширяемый по
знаку до 16 битов.
Например, поле sw в машинном коде нижеприведенных команд имеет следующие значения:
MOV AL,5 (sw=00); MOV AX,5555h (sw=01); MOV AX,5 (sw=11).
Поля md, r/m, и disp интерпретируются также, как и в предыдущем формате.
Наиболее общий формат одноместной команды приведен на рис.3.10. Все поля этого формата рассмотрены выше.
При вычислении физического адреса ячейки памяти компоненты ее логического адреса выбираются в соответствии с табл.2.3. При обращении к данным сегментный регистр по умолчанию может быть заменен с помощью префикса замены сегмента на любой другой. На уровне машинных кодов префикс замены сегмента представляется предшествующим команде байтом с форматом, изображенным на рис.3.11. При этом сегментные регистры sreg кодируются следующим образом:
ES00, CS01, SS10, DS11.
D7 |
|
|
D4 |
D3 |
|
|
D0 |
0 |
0 |
1 |
sreg |
1 |
1 |
0 | |
Рис. 3.11. Формат префикса замены сегмента |
D7 |
D0 | ||
COP |
w | ||
md |
COP |
r/m | |
|
|
| |
dispL | |||
dispH | |||
Рис. 3.10. Формат одноместной команды |
COP
Рис. 3.12. Формат команды с
неявной адресацией
COP w reg
Рис.
3.13. Специальный укорочен-
ный формат команды
При трансляции программы ассемблер автоматически выбирает более короткий формат команды. Более полная информация о кодировании команд приведена в [10].
Знание форматов команд необходимо при анализе дампов памяти в процессе отладки и ремонта программ МПС.