Регистрация Расписание ЭВМ и системы RISC МП CISC МП Микроэлектроника Чатайтесь наздоровье! Форум Разработчики

Учебные
курсы


Справочная информация


Главная страница

Процессор Intel 8086. Учебный курс.

Кристалл процессора i8086 Часть 2. Система команд микропроцессора.

2.1 Режимы адресации.
2.2 Форматы команд.
2.3 Команды микропроцессора.


Режимы адресации.

Прямая адресация 16-битный эффективный адрес данного является частью команды.
Регистровая адресация Данное содержится в определяемом командой регистре. 16-битный операнд может находиться в регистрах AX, BX, CX, DX, SI, DI, SP или BP, а 8-битный - в регистрах AH, AL, BH, BL, CH, CL, DH, DL.
Регистровая косвенная Эффективный адрес данного находится в базовом регистре BX или индексном регистре (SI или DI).
Непосредственная Данное является частью команды.
Стековая адресация Стековая адресация в i8086 применяется в командах работы со стеком PUSH и POP. Для этих команд адрес операнда находится в указателе стека SP и автоматически уменьшается или увеличивается на два при записи в стек или при чтении из стека. Заполнение стека происходит в направлении уменьшения адресов ячеек памяти. Стек может обмениваться данными с регистрами общего назначения и сегментными регистрами.
  Команды обмена данными между стеком и памятью содержат байт адресации, в котором 3-разрядное поле reg совместно с полем COP идентифицирует команду.
Базовая адресация При базовом способе адресации исполнительный (эффективный) адрес ЕА получается путем сложения содержимого одного из регистров (BX или BP) с 8-ми или 16-ти разрядным смещением. Базовая адресация обеспечивает возможность работы со структурами данных, размещенными в памяти.
Индексная адресация Индексная адресация в микропроцессоре i8086 отличается от базовой только использованием для получения исполнительного адреса содержимого регистров SI или DI. Этот вид адресации удобен при обработке массивов, когда смещение указывает базовый адрес массива, а содержимое индексного регистра соответствует индексу массива.
Базово-индексная Эффективный адрес равен сумме содержимого базового (BX или BP) и индексного (SI или DI) регистров.
Относительная При относительной адресации исполнительный адрес ЕА вычисляется как сумма текущего значения содержимого счетчика команд и смещения в команде. В i8086 в роли счетчика команд выступает указатель команд IP, а 8- или 16-разрядное смещение представляет собой числа со знаком в диапазоне от -128 до +127 или от -32768 до +32767 соответственно.
Относительная адресация используется в i8086 только в командах переходов, обращения к подпрограммам и управления циклами.
Для вычисления исполнительного адреса команды берется значение содержимого указателя команд, равное адресу первого байта следующей команды.
Вернуться к началу страницы.

Форматы команд.

Система команд i8086 включает 133 базовые команды и позволяет обрабатывать 8- и 16-разрядные данные. Команды могут быть безоперандными, а также содержать один или два операнда. Длина команд может составлять от 1 до 6 байт. Код операции находится в первом байте команды, а остальные байты содержат информацию об адресах операндов. Чтобы различать операции над байтами или словами, в первом байте команды используется специальный разряд W. При W=1 операции выполняются с 16-разрядными данными. В микропроцессоре используются почти все известные способы адресации, что связано с наличием большого набора регистров. При выполнении команд по умолчанию возможны дополнительные варианты адресации, которые задаются с помощью специального однобайтового префикса замены сегмента, записываемого перед командой. Он информирует микропроцессор об использовании для адресации операнда сегментного регистра, отличающегося от регистра, выбираемого по умолчанию. Сегментные регистры ES, CS, SS, DS в 2-разрядном поле reg задаются кодами 00, 01, 10, 11 соответственно.

биты: 7 6 5 4-3 2 1 0
содержимое: 0 0 1 reg 1 1 0

Вид адресации в команде чаще всего задается байтом, следующим за кодом операции. Байт адресации может определять один или два операнда, его структура представлена ниже. Он содержит поле режима (mod), поле регистра (reg) и поле регистр-память (r/m). Для вычисления исполнительного адреса (ЕА) применяется поле mod или r/m, а также байты смещения (DISP), расположенные в команде непосредственно за байтом адресации.

биты: 7-6 5-3 2-0
содержимое: mod reg r/m

При прямой адресации исполнительный адрес находится непосредственно в поле смещения кода команды. В командах безусловных переходов и обращения к подпрограммам прямой адрес формируется из 16-разрядного адреса сегмента (SEG) и 16-разрядного смещения (DISP) (см. ниже). В процессе выполнения команды смещение передается в указатель команд IP, а базовый адрес сегмента - в регистр CS:

биты: 7-0 7-0 7-0 7-0 7-0
содержимое: cop displ disph segl segh
  EA
IP CS

В командах обработки данных прямой адрес представляется смещением, следующим за байтом адресации, в формате, изображенном ниже. Разряд d в поле кода операции cop задает направление передачи данных, определяемых полем reg в байте адресации. При d=1 передача операнда производится в регистр задаваемый полем reg в соответствии с кодировкой.

биты: 7-2 1 0 7 6 5-3 2 1 0 7-0 7-0
содержимое: cop d w 0 0 reg 0 0 1 displ disph
  EA

Прямая адресация используется и в командах передачи данных между аккумулятором и памятью:

биты: 7-1 0 7-0 7-0
содержимое: cop w addrl addrh
  EA

В командах с регистровой адресацией операнд находится в одном из регистров общего назначения. Эти команды наиболее компактны и быстро выполнимы т.к. для адресации регистров необходимы 2-3 разряда кода команды, а выполнение этих команд полностью осуществляется внутри микропроцессора. Регистровая адресация может задаваться в байте кода операции:

биты: 7-3 2-0
содержимое: cop reg

или с помощью байта адресации:

биты: 7-2 1 0 7-0
содержимое: cop d w mod reg r/m

В командах с двумя операндами при mod=1 используются два регистра, и второй регистр указывается кодом в поле r/m:

биты: 7-2 1 0 7 6 5-0
содержимое: cop d w 1 1 reg r/m

Непосредственная адресация позволяет задавать постоянные данные в виде составных частей команды и используется в большинстве команд с двумя операндами. Непосредственный операнд data занимает один или два байта в конце кода команды причем младший байт всегда предшествует старшему. Однобайтовый непосредственный операнд записывается в дополнительном коде и может представлять константы в диапазоне от -128 до +127. Закрашенные участки при изображении байтов указывают на возможность отсутствия их в формате команды, при выполнении определенных условий. Например, 16-разрядный непосредственный операнд используется только при w=1.

биты: 7-1 0 7-0 7-0 7-0 7-0 7-0
содержимое: cop w mod 000 r/m displ disph data data

 

биты: 7-4 3 2-0 7-0 7-0
содержимое: cop w reg data data

Представленные два формата команд применяются в командах передачи данных и позволяют загрузить непосредственный операнд по адресу памяти, вычисленному с помощью байта адресации, или в некоторый регистр, определяемый полем reg.
Ниже изображен формат арифметических команд, позволяющих использовать непосредственный операнд длиной в слово при sw=01, или, при s=1, непосредственный операнд в диапазоне от -128 до +127, записываемый в дополнительном коде. В этом формате 3-разрядный код ссс в поле reg служит для идентификации разновидности арифметической операции.

биты: 7-2 1 0 7-0 7-0 7-0 7-0 7-0
содержимое: cop s w mod ccc r/m displ disph data data

Формат, представленный ниже, используется в командах арифметических и логических операций, содержащих второй операнд в аккумуляторе AX:

биты: 7-1 0 7-0 7-0
содержимое: cop w data data

Непосредственный операнд, представляющий константу, добавляемую к содержимому указателя стека SP, может использоваться в команде возврата из подпрограммы, формат которой представлен ниже:

биты: 7-0 7-0 7-0
содержимое: cop datal datah

В командах с регистровой косвенной адресацией 16-разрядный исполнительный адрес EA находится в одном из регистров reg, задаваемых полем r/m байта адресации (см. ниже). В этом способе адресации может использоваться только один из регистров - BX, SI или DI.

биты: 7-2 1 0 7 6 5-0
содержимое: cop d w 0 0 reg r/m
  r/m = BX/SI/DI
Вернуться к началу страницы.

Команды микропроцессора.

Команды передачи данных.

Мнемоника КОП Описание команды Байт КОП Байт адресации Длина команды
(байт)
MOV Передача операнда из памяти / операнда регистра в регистр или из регистра в память / операнд регистра. 100010dw mod reg r/m 2-4
Передача непосредственного операнда в память / операнд регистра. 1100011w mod 000 r/m 3-6
Передача непосредственного операнда в регистр. 1011w reg нет 2-3
Передача операнда из памяти в аккумулятор. 1010000w нет 3
Передача операнда из аккумулятора в память. 1010001w нет 3
Передача операнда из памяти / регистра в сегментный регистр. 10001110 mod 0 reg r/m 2-4
Передача операнда из сегментного регистра в память / регистр. 10001100 mod 0 reg r/m 2-4
XCHG Обмен операндом из памяти / регистра с операндом из регистра. 1000011w mod reg r/m 2-4
Обмен операндом из регистра с операндом из аккумулятора. 10010reg нет 1
PUSH Передача операнда из памяти / операнда регистра по адресу в указателе стека SP. 11111111 mod 110 r/m 2-4
Передача операнда из регистра по адресу в указателе стека SP. 01010reg нет 1
Передача операнда из сегментного регистра по адресу в указателе стека SP. 000reg110 нет 1
POP Передача операнда из адреса в указателе стека SP в память / регистр. 10001111 mod 000 r/m 2-4
Передача операнда из адреса в указателе стека SP в регистр. 01011reg нет 1
Передача операнда из адреса в указателе стека SP в сегментный регистр. 000reg11 нет 1
PUSHF Передача содержимого регистра флагов по адресу в указателе стека SP. 10011100 нет 1
POPF Передача содержимого из адреса в указателе стека SP в регистр флагов. 10011101 нет 1
LEA Загрузка исполнительного адреса памяти в регистр общего назначения. 10001101 mod reg r/m 3-4
LDS Загрузка из памяти относительного адреса (смещения) и адреса сегмента в один из регистров общего назначения и сегментный регистр DS. 11000101 mod reg r/m 3-4
LES Загрузка из памяти относительного адреса (смещения) и адреса сегмента в один из регистров общего назначения и сегментный регистр ES. 11000100 mod reg r/m 3-4
LAHF Передача младшего байта регистра флагов в регистр AH. 10011111 нет 1
SAHF Передача содержимого регистра AH на место младшего байта регистра флагов. 10011110 нет 1
XLAT Передача байта в регистр AL из 256-байтовой таблицы кодов. 11010111 нет 1
IN Передача байта / слова из фиксированного порта ввода в аккумулятор AL/AX. 1110010w нет 2
Передача байта / слова из переменного порта ввода в аккумулятор AL/AX. 1110110w нет 1

Арифметические команды.

Мнемоника КОП Описание команды Байт КОП Байт адресации Длина команды
(байт)
Флаги
ADD Сложение операнда из памяти / регистра с операндом из регистра. 000000dw mod reg r/m 2-4 AF; CF; OF; PF; SF; ZF
Сложение непосредственного операнда с операндом из памяти / регистра. 100000sw mod 000 r/m 3-6
Сложение непосредственного операнда с операндом в аккумуляторе. 0000010w нет 2-3
ADC Сложение операнда из памяти / регистра с операндом из регистра (с учетом переноса). 0001010w mod reg r/m 2-4 AF; CF; OF; PF; SF; ZF
Сложение непосредственного операнда с операндом из памяти / регистра (с учетом переноса). 100000sw mod 010 r/m 3-6
Сложение непосредственного операнда с операндом в аккумуляторе (с учетом переноса). 0001010w нет 2-3
INC Увеличение на единицу содержимого памяти / регистра. 1111111w mod 000 r/m 2-4 AF; OF; PF; ZF; SF
Увеличение на единицу содержимого регистра. 01000reg нет 1
AAA Коррекция содержимого аккумулятора AL при сложении двоично - десятичных кодов в неупакованном формате. 00110111 нет 1 AF; CF
DAA Тоже, но в упакованном формате. 00100111 нет 1 AF; CF; PF; SF; ZF
SUB Вычисление разности между операндом из памяти / регистра и операндом из регистра. 001010dw mod reg r/m 2-4 AF; CF; PF; SF; ZF; OF
Вычитание непосредственного операнда из операнда в памяти / регистре. 100000sw mod 101 r/m 3-6
Вычитание непосредственного операнда из операнда в аккумуляторе. 0010110w нет 2-3
SBB Вычисление разности между операндом из памяти / регистра и операндом из регистра (с заемом). 000110dw mod reg r/m 2-4 AF; CF; PF; SF; ZF; OF
Вычитание непосредственного операнда из операнда в памяти / регистре (с заемом). 100000sw mod 011 r/m 3-6
Вычитание непосредственного операнда из операнда в аккумуляторе (с заемом). 0001110w нет 2-3
DEC Вычитание единицы из операнда в памяти / регистре. 1111111w mod 001 r/m 2-4 AF; CF; PF; SF; OF
Вычитание единицы из операнда в регистре. 01001reg нет 1
NEG Вычитание исходного операнда из нуля (изменение знака). 1111011w mod 011 r/m 2-4 AF; CF; PF; SF; ZF; OF
CMP Сравнение операнда из памяти / регистра с операндом из регистра. 001110dw mod 011 r/m 2-4 AF; CF; PF; SF; ZF; OF
Сравнение непосредственного операнда с операндом в памяти / регистре. 100000sw mod reg r/m 3-6
Сравнение непосредственного операнда с операндом в аккумуляторе. 0011110w нет 2-3
AAS Коррекция содержимого аккумулятора AL при вычитании двоично - десятичных кодов в неупакованном формате. 00111111 нет 1 AF; CF
DAS Тоже, но в упакованном формате. 00101111 нет 1 AF; CF; SF; PF; ZF
MUL Умножение без учета знака операнда в аккумуляторе на операнд из памяти / регистра. 1111011w mod 100 r/m 2-4 CF; OF
IMUL Умножение со знаком операнда из памяти / регистра. 1111011w mod 101 r/m 2-4 CF; OF
DIV Деление без учета знака операнда длиной в одно / два слова на операнд из памяти / регистра. 1111011w mod 110 r/m 2-4 CF; OF
IDIV Деление со знаком операнда длиной в одно / два слова на операнд из памяти / регистра. 1111011w mod 111 r/m 2-4 CF; OF
AAM Коррекция содержимого аккумулятора AX при умножении двоично - десятичных кодов в неупакованном формате. 11010100 00001010 2 PF; SF; ZF
AAD Коррекция содержимого аккумулятора AL при делении двоично - десятичных кодов в неупакованном формате. 11010101 00001010 2 PF; SF; ZF

Логические команды.

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

Мнемоника КОП Описание команды Байт КОП Байт адресации Длина команды
(байт)
NOT Инвертирование разрядов операнда в памяти / регистре. 1111011w mod 010 r/m 2-4
SHL / SAL Логический (арифметический) сдвиг влево операнда из памяти / регистра на число разрядов, определяемое константой сдвига. 110100vw mod 100 r/m 2-4
SHR Логический сдвиг вправо операнда из памяти / регистра на число разрядов, определяемое константой сдвига. 110100vw mod 101 r/m 2-4
SAR Арифметический сдвиг вправо операнда из памяти / регистра на число разрядов, определяемое константой сдвига. 110100vw mod 111 r/m 2-4
ROL Циклический сдвиг влево операнда из памяти / регистра на число разрядов, определяемое константой сдвига. 110100vw mod 000 r/m 2-4
ROR Циклический сдвиг вправо операнда из памяти / регистра на число разрядов, определяемое константой сдвига. 110100vw mod 001 r/m 2-4
RCL Циклический сдвиг влево, с использованием CF, операнда из памяти / регистра на число разрядов, определяемое константой сдвига. 110100vw mod 010 r/m 2-4
RCR Циклический сдвиг вправо, с использованием CF, операнда из памяти / регистра на число разрядов, определяемое константой сдвига. 110100vw mod 011 r/m 2-4
AND Логическое умножение операнда из памяти / регистра и операнда из регистра. 001000dw mod reg r/m 2-4
Логическое умножение непосредственного операнда и операнда из памяти / регистра. 1000000w mod 100 r/m 3-6
Логическое умножение непосредственного операнда и операнда в аккумуляторе. 0010010w нет 2-3
TEST Установка флагового регистра в соответствии с результатом логического умножения операнда из памяти / регистра и операнда из регистра. 1000010w mod reg r/m 2-4
Установка флагового регистра в соответствии с результатом логического умножения непосредственного операнда и операнда из памяти / регистра. 1111011w mod 000 r/m 3-6
Установка флагового регистра в соответствии с результатом логического умножения непосредственного операнда и операнда в аккумуляторе. 1010100w нет 2-3
OR Логическое сложение операнда из памяти / регистра и операнда из регистра. 000010dw mod reg r/m 2-4
Логическое сложение непосредственного операнда и операнда из памяти / регистра. 1000000w mod 001 r/m 3-6
Логическое сложение непосредственного операнда и операнда в аккумуляторе. 0000110w нет 2-3
XOR Операция "исключающее ИЛИ" над операндами из памяти / регистра и из регистра. 001100dw mod reg r/m 2-4
Операция "исключающее ИЛИ" над непосредственным операндом и операндом из памяти / регистра. 1000000w mod 110 r/m 3-6
Операция "исключающее ИЛИ" над непосредственным операндом и операндом в аккумуляторе. 0011010w нет 2-3

Команды передачи управления.

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

Мнемоника КОП Описание команды Байт КОП Байт адресации Длина команды
(байт)
JMP Безусловный внутрисегментный переход с прямой адресацией. 11101001 Нет 3
Безусловный короткий внутрисегментный переход с прямой адресацией. 11101011 Нет 2
Безусловный внутрисегментный переход с косвенной адресацией. 11111111 mod 100 r/m 2-4
Безусловный межсегментный переход с прямой адресацией. 11101010 Нет 5
Безусловный межсегментный переход с косвенной адресацией. 11111111 mod 101 r/m 2-4
CALL Внутрисегментный вызов подпрограммы с прямой адресацией. 11101000 Нет 3
Внутрисегментный вызов подпрограммы с косвенной адресацией. 11111111 mod 010 r/m 2-4
Межсегментный вызов подпрограммы с прямой адресацией. 10011010 Нет 5
Межсегментный вызов подпрограммы с косвенной адресацией. 11111111 mod 011 r/m 4
RET Внутрисегментный возврат из подпрограммы. 11000011 Нет 1
Внутрисегментный возврат из подпрограммы с увеличением содержимого указателя стека SP. 11000010 Нет 3
Межсегментный возврат из подпрограммы. 11001011 Нет 1
Межсегментный возврат из подпрограммы с увеличением содержимого указателя стека SP. 11001010 Нет 3
LOOP Передача управления, если содержимое регистра CX не равно нулю. 11100010 Нет 2
LOOPE \
LOOPZ
Передача управления, если содержимое регистра CX не равно нулю и флаг ZF установлен в 1. 11100001 Нет 2
LOOPNE \
LOOPNZ
Передача управления, если содержимое регистра CX не равно нулю и флаг ZF установлен в 0. 11100000 Нет 2
JCXZ Передача управления, если содержимое регистра CX равно нулю. 11100011 Нет 2

Команды условных переходов обеспечивают только внутрисегментные переходы.

Мнемоника КОП Описание команды Байт КОП
JE / JZ Передача управления по равенству / нулю. 01110100
JNE / JNZ Передача управления, если не равно / не нуль. 01110101
JL / JNGE Передача управления, если меньше / не больше и не равно. 01111100
JLE / JNG Передача управления, если меньше или равно / не больше. 01111110
JB / JNAE Передача управления, если меньше / не больше и не равно. 01110010
JBE / JNA Передача управления, если меньше или равно / не больше. 01110110
JP / JPE Передача управления при четности. 01111010
JNP / JPO Передача управления при нечетности. 01111011
JO Передача управления при переполнении. 01110000
JNO Передача управления при отсутствии переполнения. 01110001
JS Передача управления по отрицательному результату. 01111000
JNS Передача управления по положительному результату. 01111001
JG / JNLE Передача управления, если больше / не меньше и не равно. 01111111
JGE / JNL Передача управления, если больше или равно / не меньше. 01111101
JA / JNBE Передача управления, если больше / не меньше и не равно. 01110111
JAE / JNB Передача управления, если больше или равно / не меньше. 01110011

Команды управления процессором.

Команды управления процессором, за исключением ESC являются однобайтовыми и могут быть разделены на две группы: команды, изменяющие содержимое регистра флагов, и команды, предназначенные для работы с внешними устройствами и не воздействующие на флаги.

Мнемоника КОП Описание команды Байт КОП
CLC Сброс признака переноса. 11111000
CMC Инвертирование признака переноса. 11110101
STC Установка признака переноса. 11111001
CDL Сброс признака направления. 11111100
STD Установка признака направления. 11111101
CLI Сброс признака разрешения прерывания. 11111010
HLT Останов. 11110100
WAIT Перевод процессора в состояние ожидания. 10011011
ESC Выдача кода операции или операнда для внешнего процесса. 11011x
LOCK Однобайтный префикс блокировки шины. 11110000

Команды обработки строк.

Все команды обработки строк символов имеют длину один байт и бит 0 показывает операцию с байтом (бит 0=0) или словом (бит 0=1).

Мнемоника КОП Описание команды Байт КОП
REP Циклическое повторение команды обработки строки, пока CX=0. 1111001z
MOVSB / MOVSW Передача элемента строки - байта / слова. 1010010w
CMPSB / CMPSW Сравнение элементов строк - байтов / слов. 1010011w
SCASB / SCASW Сканирование строк символов - байтов / слов. 1010111w
LODSB / LODSW Загрузка элементов строк символов - байтов / слов в регистр AL / AX. 1010110w
STOSB / STOSW Запись байтов / слов из регистра AL / AX в строку символов. 1010101w
Вернуться к началу страницы.

Главный сайт ИУ-4
Copyright ©2001 IU-4. All rights reserved.     старый(designer&webmaster)
Hosted by uCoz