Четверг, 17.07.2025, 16:31 Приветствую Вас Гость

On-line: Книги, учебники, статьи

Главная | Регистрация | Вход | RSS

Приложение 2. Справочник по командам и архитектуре Pentium(1)

Приложение 2. Справочник по командам и архитектуре Pentium

В литературе при описании команд микропроцессоров часто встречаются досадные ошибки. Стараясь избежать таких ошибок, автор выверял описание команд по нескольким источникам [3,5,6,8,9,10]. Часть команд была проверена программным путем.

Список регистров микропроцессора Pentium

Регистры общего назначения

 EAX = (16+AX=(AH+AL))
 EBX = (16+BX=(BH+BL))
 ECX = (16+CX=(CH+CL))
 EDX = (16+DX=(DH+DL))
 ESI = (16+SI)
 EDI = (16+DI)
 EBP = (16+BP)
 ESP = (16+SP)

Регистры EAX, EBX, EDX, ECX называют рабочими регистрами. Регистры EDI, ESI - индексные регистры, играют особую роль в строковых операциях. Регистр EBP обычно используется для адресации в стеке параметров и локальных переменных. Регистр ESP - указатель стека, автоматически модифицируется командами PUSH, POP, RET, CALL. Явно используется реже.

Регистр флагов. Содержит 32 бита. Вот используемые значения битов.

  • 0-й бит, флаг переноса (CF), устанавливается в 1 если был перенос из старшего бита;
  • 1-й бит, 1;
  • 2-й бит, флаг четности (PF). Устанавливается в 1, если младший байт результата содержит четное число единиц.
  • 3-й бит, 0;
  • 4-й бит, флаг вспомогательного переноса (AF). Устанавливается в 1, если произошел перенос из третьего бита в четвертый.
  • 5-й бит, 0;
  • 6-й бит, флаг нуля (ZF). Устанавливается в единицу, если результат операции ноль;
  • 7-й бит, флаг знака (SF). Равен старшему биту результата;
  • 8-й бит, флаг ловушки (TF). Установка в единицу этого флага приводит к тому, что после каждой команды вызывается INT 3. Используется отладчиками в реальном режиме;
  • 9-й бит, флаг прерываний (IF). Сброс этого флага в 0 приводит к тому, что микропроцессор перестает воспринимать прерывания;
  • 10-й бит, флаг направления (DF). Данный флаг учитывается в строковых операциях. Если флаг равен 1, то в строковых операциях адрес автоматически уменьшается;
  • 11-й бит, флаг переполнения (OF). Устанавливается в единицу, если результат операции над числом со знаком вышел за допустимые пределы;
  • 12,13-й биты, уровень привилегий ввода-вывода (IOPL);
  • 14-бит, флаг вложенной задачи (NT);
  • 15-й бит, 0;
  • 16-й бит, флаг возобновления (RF). Используется совместно с регистрами точек отладочного останова;
  • 17-й бит, в защищенном режиме включает режим виртуального режима 8086 (VM);
  • 18-й бит, флаг контроля выравнивания (AC). При равенстве этого флага 1 и при обращении к невыровненному операнду вызывает исключение 17;
  • 19-й бит, виртуальная версия флага IF (VIF). Работает в защищенном режиме;
  • 20-й бит, виртуальный запрос прерывания (VIP);
  • 21-й бит, флаг доступности команды идентификации;
  • 22-31-й, 0;

Сегментные регистры

CS - сегмент кода,
DS - сегмент данных,
SS - сегмент стека,
ES,GS,FS - дополнительные регистры. Сегментные регистры 16-битны.

Управляющие регистры

Регистр CR0.

  • 0-й бит, разрешение защиты (РЕ). Переводит процессор в защищенный режим.
  • 1-й бит, мониторинг сопроцессора (МР). Вызывает исключение 7 по каждой команде WAIT.
  • 2-й бит, эмуляция сопроцессора (ЕМ). Вызывает исключение 7 по каждой команде сопроцессора.
  • 3-й бит, бит переключения задач (TS). Позволяет определить, относится данный контекст сопроцессора к текущей задаче или нет. Вызывает исключение 7 при выполнении следующей команды сопроцессора.
  • 4-й бит, индикатор поддержки инструкций сопроцессора (ЕТ).
  • 5-й бит, разрешение стандартного механизма сообщений об ошибке сопроцессора (NE).
  • 5-15-й бит, не используются.
  • 16-й бит, разрешение защиты от записи на уровне привилегий супервизора (WP).
  • 17-й бит, не используется.
  • 18-й бит, разрешение контроля выравнивания (AM).
  • 19-28-й бит, не используются.
  • 29-й бит, запрет сквозной записи кэша и циклов аннулирования (NW).
  • 30-й бит, запрет заполнения кэша (CD).
  • 31-й бит, включение механизма страничной переадресации.

Регистр CR1 пока не используется.

Регистр CR2 хранит 32-битный линейный адрес, по которому был получен последний отказ страницы памяти.

Регистр CR3 - в старших 20 битах хранится физический базовый адрес таблицы каталога страниц.

Остальные биты.

  • 3-й бит, кэширование страниц со сквозной записью (PWT).
  • 4-й бит, запрет кэширование страницы (PCD).

Регистр CR4

  • 0-й бит, разрешение использования виртуального флага прерываний в режиме V8086 (VME).
  • 1-й бит, разрешение использования виртуального флага прерываний в защищенном режиме (PVI).
  • 2-й бит, превращение инструкции RDTSC в привилегированную (TSD).
  • 3-й бит, разрешение точек останова по обращению к портам ввода-вывода (DE).
  • 4-й бит, включает режим адресации с 4-мегабайтными страницами (PSE).
  • 5-й бит, включает 36-битное физическое адресное пространство (РАЕ).
  • 6-й бит, разрешение исключения МС (МСЕ).
  • 7-й бит, разрешение глобальной страницы (PGE).
  • 8-й бит, разрешает выполнение команды RDPMC (РМС).
  • 9-й бит, разрешает команды быстрого сохранения/восстановления состояния сопроцессора (FSR).

Системные адресные регистры

GDTR - 6-байтный регистр, в котором содержится линейный адрес глобальной дескрипторной таблицы.
IDTR - 6-байтный регистр, содержащий 32-битный линейный адрес таблицы дескрипторов обработчиков прерываний.
LDTR - 10-байтный регистр, содержащий 16-битный селектор (индекс) для GDT и 8-байтный дескриптор.
TR - 10-байтный регистр, содержащий 16-битный селектор для GDT и весь 8-байтный дескриптор из GDT, описывающий TSS текущей задачи.

Регистры отладки
DR0...DR3 - хранят 32-битные линейные адреса точек останова.
DR6 (равносильно DR4) - отражает состояние контрольных точек.
DR7 (равносильно DR5) - управляет установкой контрольных точек.

Команды пересылки данных
MOV dest,srcПересылка данных в регистр из регистра, памяти или непосредственного операнда. Пересылка данных в память из регистра или непосредственного операнда. Например, MOV AX,10; MOV EBX,ESI; MOV AL, BYTE PTR MEM.
XCHG r/m,rОбмен данными между регистрами или регистром и памятью. Команда "память - память" в микропроцессоре Intel не предусмотрена.
BSWAP reg32Перестановка байт из порядка "младший - старший" в порядок "старший - младший". Разряды 7-0 обмениваются с разрядами 31-24, а разряды 15-8 с разрядами 23-16. Команда появилась в 486-м микропроцессоре.
MOVSXB r,r/mПересылка байта с его расширением до слова или двойного слова с дублированием знакового бита: MOVSXB AX,BL; MOVSXB EAX,byte ptr mem. Команда появилась с 386-ого процессора.
MOVSXW r,r/mПересылка слова с расширением до двойного слова с дублированием знакового бита: MOVSXW EAX,WORD PTR MEM. Команда появилась с 386-ого процессора.
MOVZXB r,r/mПересылка байта с его расширением до слова или двойного слова с дублированием нулевого бита: MOVSXB AX,BL; MOVSXB EAX,byte ptr mem. Команда появилась с 386-ого процессора.
MOVZXW r,r/mПересылка слова с расширением до двойного слова с дублированием нулевого бита: MOVZXW EAX,WORD PTR MEM. Команда появилась с 386-ого процессора.
XLATЗагрузить в AL байт из таблицы в сегменте данных, на начало которой указывает EBX (ВХ), при этом начальное значение AL играет роль смещения.
LEA r,mЗагрузка эффективного адреса. Например, LEA EAX,MEM; LEA EAX,[EBX]. Данная команда обладает магичаскими свойствами, позволяющими эффективно выполнять арифметические действия. Например, команда LEA EAX,[EAX*8] умножает содержимое EAX на 8, LEA EAX,[EAX][EAX*4] на 5, Команда LEA ECX,[EAX][ESI+5] эквивалента 3(!) командам MOV ECX,EAX/ADD ECX,ESI/ADD ECX,5.
LDS r,mЗагрузить пару DS:reg из памяти. Причем вначале идет слово (или двойное слово), а в DS - последующее слово.
LES r,mАналогично предыдущему, но для пары ES:reg.
LFS r,mАналогично предыдущему, но для пары FS:reg.
LGS r,mАналогично предыдущему, но для пары GS:reg.
LSS r,mАналогично предыдущему, но для пары SS:reg.
SETcc r/mПроверяет условие "cc", если выполняется, то первый бит байта устанавливается в 1, в противном случае в 0. Условия аналогичны в условных переходах (je, jc). Например, SETE AL. Команда появилась с 386-ого микропроцессора.
LAHFЗагрузить флаги в АН (устарела).
SAHFСохранить АН в регистре флагов (устарела).

Команды ввода-вывода
IN AL(AX,EAX),Port
IN AL(AX,EAX),DX
Ввод в аккумулятор из порта ввода-вывода. Порт адресуется непосредственно или через регистр DX.
OUT port,AL(АХ,EAX)
OUT DX,AL(АХ,EAX)
Вывод в порт ввода-вывода. Порт адресуется непосредственно или через регистр DX.
[REP] INSB
[REP] INSW
[REP] INSD
Выводит данные из порта, адресуемого регистром DX в ячейку памяти ES:[EDI/DI]. После ввода байта, слова или двойного слова производится коррекция EDI/DI на 1,2,4. При наличии префикса REP процесс продолжается, пока содержимое СХ не станет равным 0.
[REP] OUTSB
[REP] OUTSW
[REP] OUTSD
Выводит данные из ячейки памяти, определяемой регистрами DS:[ESI/SI], в выходной порт, адрес которого находится в регистре DX. После вывода байта, слова, двойного слова производится коррекция указателя ESI/SI на 1,2,4.

Инструкции работы со стеком
PUSH r/mПоместить в стек слово или двойное слово. Поскольку при включении в стек слова нарушается выравнивание стека по границам двойных слов, рекомендуется в любом случае помещать в стек двойное слово.
PUSH constПоместить в стек непосредственный 32-битный операнд.
PUSHAПоместить в стек регистры EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP. Команда появилась с 386-ого процессора.
POP reg/memИзвлечь из стека слово или двойное слово.
POPАИзвлечение из стека данных в регистры EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP. Команда появилась, начиная с 386-ого процессора.
PUSHFПомещение в стек регистра флагов.
POPFИзвлечь данные в регистр флагов.

Инструкции целочисленной арифметики.
ADD dest,srcСложение двух операндов. Первый операнд может быть регистром или ячейкой памяти, второй - регистром, ячейкой памяти, константой. Невозможно только, когда оба операнда являются ячейками памяти.
XADD dest,srcДанная операция производит в начале обмен операндами, а затем выполняет операцию ADD. Начиная 486-ого.
ADC dest,srcСложение с учетом флага переноса - в младший бит добавляется бит (флаг) переноса.
INC r/mИнкремент операнда.
SUB dest,srcВычитание двух операндов. Остальное аналогично сложению (команда ADD).
SBB dest,srcВычитание с учетом бита переноса. Из младшего бита вычитается бит (флаг) переноса.
DEC r/mДекремент операнда.
CMP r/m,r/mВычитание без изменения операндов (сравнение).
CMPXCHG r,m,aСравнение с обменом. Воспринимает три операнда (регистр-операнд-источник, ячейка памяти-операнд- получатель, аккумулятор, т.е. AL,AX или EAX) Если значения в операнде-получателе и аккумуляторе равны, операнд-получатель заменяется операндом-источником, исходное значение операнда-получателя загружается в аккумулятор. Начиная с 486-ого.
CMPXCHG8B r,m,aСравнение и обмен восьми байт. Начиная с Pentium.
NEG r/mИзменение знака операнда.
АААКоррекция после ASCII-сложения. Коррекция результата двоичного сложения двух неупакованных десятичных чисел. Например, АХ содержит число 9H. Пара команд ADD AL,8/AAA приводит к тому, что в АХ будет содержаться 0107, т.е. ASCII-число 17.
AASКоррекция после ASCII-вычитания. Например:
MOV AX,205H; загрузить ASCII 25 SUB AL,8; двоичное вычитание AAS ;теперь АХ содержит 107Н, т.е. 17.
ААМКоррекция после ASCII-умножения. Для этой команды предполагается, что в регистре АХ находится результат двоичного умножения двух десятичных цифр (диапазон от 0 до 81). После выполнения команды образуется двухбайтное произведение в регистре АХ в ASCII-формате.
AADКоррекция перед ASCII-делением. Предполагается, что младшая цифра находится в AL, а старшая - в АН.
DAAКоррекция после BCD-сложения.59
DASКоррекция после ВСD-вычитания.
MUL r/mУмножение АL(AX,EAX) на целое беззнаковое число. Результат, соответственно, будет содержаться в АХ, DX:AX, EDX:EAX.
IMUL r/mЗнаковое умножение (аналогично MUL). Все операнды считаются знаковыми. Команда IMUL имеет также двухоперандный и трехоперандный вид. Двухоперандный вид IMUL r,src r<-r*src. Трехоперандный вид IMUL dst,src,imm dst<-src*imm.
DIV r/m (src)Беззнаковое деление. Аналогично беззнаковому умножению. Осуществляет деление аккумулятора и его расширения (AH:AL, DX:AX, EDX:EAX) на делитель src. Частное помещается в аккумуляторе, а остаток - в расширении аккумулятора.
IDIV r/mЗнаковое деление. Аналогично беззнаковому.
CBWРасширение байта (AL) в слово с копированием знакового бита.
CWDРасширение слова (АХ) в двойное слово (DX:AX) с копированием знакового бита.
CWDEРасширение слова (АХ) в двойное слово (EAX) с копированием знакового бита.
CDQПреобразование двойного слова (EAX) в учетверенное слово (EDX:EAX).


59 Напоминаю, что ASCII-число предполагает одну цифру на один байт, BCD-число - одну цифру на половину байта. Т.о. скажем в регистре АХ, может находиться двухразрядное ASCII-число и четырехразрядное BCD-число.


Логические операции.
AND dest,srcЛогическая операция "AND". Обнуление бит dest, которые равны нулю у src.
TEST dest,srcАналогична "AND", но не меняет dest. Используется для проверки ненулевых бит.
OR dest,srcЛогическая "ИЛИ". В dest устанавливаются биты, отличные от нуля в src.
XOR dest,srcИсключающее "ИЛИ".
NOT destПереключение всех бит (инверсия).

Сдвиговые операции.

Начиная с 386-ого микропроцессора, непосредственный операнд src может быть не только 1, но произвольным числом. В ранних версиях для количества сдвигов использовался регистр CL.
RCL/RCR dest,srcЦиклический сдвиг влево/вправо через бит переноса CF. Src может быть либо CL, либо непосредственный операнд.
ROL/ROR dest,srcАналогично командам RCL/RCR, но по другому, работает с флагом CF. Флаг не участвует в цикле, но в него попадает бит, перешедший с начала на конец или наоборот.
SAL/SAR dest,srcСдвиг влево/право. Называется еще арифметическим сдвигом. При сдвиге вправо дублируется старший бит. При сдвиге влево младший бит заполняется нулем. Ушедший бит помещается в CF.
SHL/SHR dest,srcЛогический сдвиг влево/вправо. Сдвиг вправо отличается от SAR тем, что и старший бит заполняется нулем.
SHLD/SHRD dest,src,countТрехоперандные команды сдвига влево/вправо. Первым операндом, как обычно, может быть либо регистр, либо ячейка памяти, вторым операндом должен быть регистр общего назначения, третьим - регистр CL или непосредственный операнд. Суть операции заключается в том, что dest и src в начале объединяются, а потом производится сдвиг на количество бит count. Результат снова помещается в dest.

Строковые операции
REPПрефикс, означающий повтор строковой операции до обнуления ECX. Префикс имеет также разновидности REPZ (REPE) - выполнять, пока не нуль (ZF=1), REPNZ (REPNE) - выполнять, пока нуль.
MOVS dest,srcКоманда передает байт, слово или двойное слово из цепочки, адресуемой DS:[ESI], в цепочку dest, адресуемую ES:[EDI]. При этом EDI и ESI автоматически корректируются согласно значению флага DF. Допускается явная спецификация MOVSB (byte), MOVSW (word), MOVSD (dword). Dest и src можно явно не указывать.
LODS srcКоманда загрузки цепочки в аккумулятор. Имеет разновидности LODSB, LODSW, LODSD. При выполнении команды байт, слово, двойное слово загружается соответственно в AL,AX,EAX. При этом ESI автоматически изменяется на 1 в зависимости от значения флага DF. Префикс REP не используется.
STOS destКоманда, обратная LODS, т.е. передает байт, слово или двойное слово из аккумулятора в цепочку и автоматически корректирует EDI.
SCAS destКоманда сканирования цепочки. Команда вычитает элемент цепочки dst из содержимого аккумулятора (AL\AX\EAX) и модифицирует флаги. Префикс REPNE позволяет найти в цепочке нужный элемент.
CMPS dest,srcКоманда сравнения цепочек. Данная команда производит вычитание байта, слова или двойного слова цепочки dst из соответствующего элемента цепочки src. В зависимости от результата вычитания модифицируются флаги. Регистры EDI и ESI автоматически продвигаются на следующий элемент. При использовании префикса REPE команда означает - сравнивать, пока не будет, достигнут конец цепочки или пока элементы не будут равны. При использовании префикса REPNE команда означает - сравнивать, пока не достигнут конец цепочки или пока элементы будут равны.

Команды управления флагами
CLCСброс флага переноса.
CMCИнверсия флага переноса.
STCУстановка флага переноса.
CLDСброс флага направления.
STDУстановка флага направления.
CLIЗапрет маскируемых аппаратных прерываний.
STIРазрешение маскируемых аппаратных прерываний.
CTSСброс флага переключения задач.

Вход на сайт
Поиск
Календарь
«  Июль 2025  »
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
28293031
Архив записей
Наш опрос
Как Вам удобнее??
Всего ответов: 341
Мини-чат
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0