Национальный исследовательский ядерный университет «МИФИ»
Опубликован: 05.04.2005 | Доступ: свободный | Студентов: 17140 / 6007 | Оценка: 4.25 / 4.16 | Длительность: 12:55:00
Специальности: Разработчик аппаратуры
Лекция 6:

Режимы адресации и форматы команд 16-разрядного процессора

< Лекция 5 || Лекция 6: 123 || Лекция 7 >

В командах, использующих непосредственный операнд, признак s вместе с признаком w определяет разрядность непосредственного операнда, записываемого в команде, и разрядность выполняемой операции согласно табл. 6.3.

Таблица 6.3.
w s Операция Непосредственный операнд
0 0 8-разрядная 8-разрядный
0 1 не используется
1 0 16-разрядная 16-разрядный
1 1 8-разрядный, расширяемый знаком до 16-ти разрядов при выполнении операции

Изменение естественного порядка выполнения команд программы осуществляется с помощью команд передачи управления. К ним относятся команды переходов, циклов, вызова подпрограммы и возврата из нее, а также некоторые другие. Мы рассмотрим лишь первые две группы команд.

Классификация команд переходов в персональной ЭВМ представлена на рис. 6.2.

Классификация команд переходов IBM PC

Рис. 6.2. Классификация команд переходов IBM PC

Физический адрес выполняемой команды определяется содержимым указателя команд IP и сегментного регистра команд CS. Команды, меняющие значение обоих этих регистров, называются командами межсегментных переходов, а меняющие только значение IP, - командами внутрисегментных переходов.

Команды безусловных переходов производят модификацию регистра IP или регистров IP и CS без предварительного анализа каких-либо условий. Существует пять команд безусловных переходов. Все они имеют одинаковую мнемонику JMP и содержат один операнд. Конкретный формат команды определяется соответствующим префиксом и приведен в общей таблице машинного представления команд (табл. 6.4).

Таблица 6.4. Машинные коды некоторых команд
Команда Байты кода команды Схема операции
байт 1 байт 2 байты 3…6
ADD 000000dw md reg r/m (disp8/16) r(r/m) = r + r/m
100000sw md 000 r/m (disp8/disp16)d8/16 r/m = r/m + d8/16
0000010w data L (data H) ac = ac + d8/16
SUB 001010dw md reg r/m (disp8/16) r(r/m)=r(r/m)-(r/m)r
100000sw md 101 r/m (disp8/16)d8/16 r/m = r/m - d8/16
0010110w data L (data H) ac = ac - d8/16
AND 001000dw md reg r/m (disp8/16) r(r/m) = r & r/m
100000sw md 100 r/m (disp8/16)d8/16 r/m = r/m & d8/16
0010010w data L (data H) ac = ac & d8/16
OR 000010dw md reg r/m (disp8/16) r(r/m) = r V r/m
100000sw md 001 r/m (disp8/16)d8/16 r/m = r/m V d8/16
0000110w data L (data H) ac = ac V d8/16
XOR 001100dw md reg r/m (disp8/16) r(r/m) = r + r/m
100000sw md 110 r/m (disp8/16)d8/16 r/m = r/m + d8/16
0011010w data L (data H) ac = ac + d8/16
MOV 100010dw md reg r/m (disp8/16) r = r/m, r/m = r
1100011w md 000 r/m (disp8/16)d8/16 r/m = d8/16
1011wreg data L (data H) reg = d8/16
1010000w disp L disp H ac=m ;прямой адрес
1010001w disp L disp H m=ac ;прямой адрес
CMP 0011101w md reg r/m (disp8/16) r - r/m
0011100w md reg r/m (disp8/16) r/m - r
100000sw md 111 r/m (disp8/16)d8/16 r/m - d8/16
0011110w data L (data H) ac - d8/16
INC 1111111w md 000 r/m (disp8/16) r/m = r/m+1
01000reg reg = reg+1
DEC 1111111w md 001 r/m (disp8/16) r/m = r/m-1
01001reg reg = reg-1
TEST 1000010w md reg r/m (disp8/16) r & r/m
1111011w md 000 r/m (disp8/16)d8/16 r/m & d8/16
1010100w data L (data H) ac & d8/16
XCHG 10010reg reg \leftrightarrow  AX
1000011w md reg r/m (disp8/16) reg \leftrightarrow  r/m
JMP short 11101011 disp L IP=IP+dispL
near ptr 11101001 disp L disp H IP=IP+dispH,L
word ptr 11111111 md 100 r/m (disp8/16) IP=(EA)
far ptr 11101010 IP-L IP-H,CS-L,CS-H IP=IPH,L, CS=CSH,L
dword ptr 11111111 md 101 r/m (disp8/16) IP=(EA), CS=(EA+2)
Условный переход IP=IP+dispL, если условие выполнено, иначе к след. команде
JZ (JE) 01110100 disp L ноль (равно)
JNZ (JNE) 01110101 disp L не ноль (не равно)
JS 01111000 disp L минус
JNS 01111001 disp L плюс
JO 01110000 disp L переполнение
JNO 01110001 disp L нет переполнения
JL (JNGE) 01111100 disp L меньше для чисел
JNL (JGE) 01111101 disp L не меньше для чисел
JG (JNLE) 01111100 disp L больше для чисел
JNG (JLE) 01111101 disp L не больше для чисел
JB (JNAE,JC) 01110010 disp L меньше для кодов
JNB (JAE, JNC) 01110011 disp L не меньше для кодов
JA (JNBE) 01110010 disp L больше для кодов
JNA (JBE) 01110011 disp L не больше для кодов
JP (JPE) 01111010 disp L четное число "1"
JNP (JPO) 01111011 disp L нечетное число "1"

Примечание: в столбце "Схема операции" ac означает регистр-аккумулятор, в качестве которого используется регистр AX при w=1 и регистр AL при w=0.

< Лекция 5 || Лекция 6: 123 || Лекция 7 >
Илья Бекиров
Илья Бекиров
Кирилл Кондратьев
Кирилл Кондратьев