Код операции (КОП) занимает один или два первых байта команды.
В ПК много различных операций, что для них нехватает 256 различных кодов, которые можно представить в одном байте.
Поэтому некоторые операции объединяются в группу и им дается один и тот же КОП,
- во втором же байте этот код уточняется.
Кроме того, во втором байте указываются типыоперандов и способы адресации.
В остальных байтах команды указываются ее операнды.
Команды ПК могут иметь от 0 до 2 операндов.
Размер операндов - байтили слово (редко - двойное слово).
Операндможет быть указан в самой команде (это называемый непосредственный операнд), либо может находиться в одном из регистров ПК и тогда в команде указывается этот регистр, либо может находиться в ячейке памяти и тогда в команде тем или иным способом указывается адрес этой ячейки.
Некоторые команды требуют, чтобыих операнднаходился в фиксированном месте (например, в регистре АХ), и тогда операнд явно не указывается в команде.
Результат выполнения команды помещается в регистр или ячейку памяти, откуда беретсяодин из операндов.
Например,
большинство команд с двумя операндами реализуют действие
ор1 := ор1 * ор2,
где ор1 - регистр или ячейка памяти,
а ор2 - непосредственный операнд, регистр или ячейка памяти, а
* - операция, заданная КОПом.
Форматы машинных команд в ПК достаточно разнообразны и "затейливы".
Для примера рассмотрим лишь основные форматы команд с двумя операндами.
1)Формат "регистр - регистр" (2 байта):
1-ый байт: КОП | d | w |
2-ой байт: | 11 | reg1 | reg2 |
Команды этого формата описывают обычно действие
reg1 := reg1 * reg2
илиreg2 := reg2 * reg1,
гдеreg1 и reg2 - регистры общего назначения.
Поле КОП первого байта указывает на операцию (*), которую надо выполнить.
Бит wопределяет размероперандов,
а бит d указывает, в какой из двух регистров записывается результат:
w=1 - слова
w=0 -байты
Во второмбайте два левых бита фиксированы (для данного формата),
а трехбитовые поля reg1 и reg2 указывают на регистры, участвующие в операции, согласно следующей таблице:
reg w=1 w=1
w=0
reg
w=1
w=0
000 001 010
АХ
CX
DX
ВХ
AL CL
DL BL
100 101 110
SP
ВР
SI
DI
АН СН DH ВН
2) Формат "регистр - память" (2-4 байта):
КОП | d | w | | mod | reg | mem | adr (0-2 байт)
Эти команды описывают операции
или adr := adr * reg
, где reg - регистр,
а adr- адрес ячейки.памяти.
Бит wпервого байта определяет размер операндов (см. выше),
а бит d указывает, кудазаписываетсярезультат:
в регистр (d = l)
или в ячейку памяти (d=0).
Трехбитовое поле reg второго байта указывает операнд-регистр (см. выше),
(00 - 0 байтов, 01- 1 байт, 10 -2 байта),
а трехбитовое поле mem указывает способ модификации этого адреса.
В следующей таблице указаны правила вычисления исполнительного адреса в зависимости от значений полей mod и mem