80386 процессор

Содержание

1.Введение

2.Режимы процессора

2.1.Реальный режим

2.2.Защищенный режим

3.Типы данных

4.Регистры

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

4.2.Регистр системных флагов

4.3.Регистры сегментов

4.4.Регистры управления сегментированной памятью

4.5.Указатель команд

4.6.Регистры управления

4.7.Регистры отладки

4.8.Буфер ассоциативной трансляции

5.Система команд

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

5.2.Описание обозначения

5.3.Список команд

1. Введение

МП 80386 вышел на рынок с уникальным преимуществом. Он является единственным 32-разрядным МП, для которого пригодно существующее прикладное програмное обеспечение, написанное для МП предыдущих моделей от 8086/88 до 80286. Любые программы, написанные для этих МП могут выполняться на 80386 без всяких исправлений и дополнений, лишь только с увеличением скорости их выполнения. Это свойство МП называется совместимостью снизу вверх. Также, дополнительными преимуществами этого МП являются многозадачность, встроенное управление памятью, виртуальная память с разделением на страницы, защита программ и большое адресное пространство. Аппаратная совместимость с предыдущими моделями сохранена посредством динамического изменения разрядВнности магистрали.

МП 80386 выполнен на основе технологии CHMOS III фирмы Intel, которая вобрала в себя быстродействие технологии HMOS (МДП высокой плотности) и малое потребление мощности технолоВнгии CMOS (КМДП). МП 80386 предусматривает переключение прогВнрамм, выполняемых под управлением различных операционных систем, таких как MS-DOS и UNIX. Это свойство позволяет разраВнботчикам программ включать стандартное прикладное программное обеспечение для 16-разрядных МП непосредственно в 32-разрядную систему. Процессор определяет адресное пространство как один или несколько сегментов памяти любого размера в диапазоне от 1 байт до 4 Гбайт. Эти сегменты могут быть индивидуально защищеВнны уровнями привилегий и таким образом избирательно раздеВнляться различными задачами.

2. Режимы процессора

Для более полного понятия системы команд МП 80386 необхоВндимо предварительно описать общую схему его работы и архитекВнтуру.

В данном реферате не раскрывается более подробно значения некоторых специфических слов и понятий, считая, что читатель предварительно ознакомился с МП 8086 и МП 80286 и имеет представление о их работе и архитектуре. Описываются только те функции МП 80386, которые отсутствуют или изменены в предыдуВнщих моделях МП.

МП 80386 имеет два режима работы: режим реальных адресов, называемый реальным режимом, и защищенный режим.

2.1. Реальный режим

При подаче сигнала сброса или при включении питания устаВннавливается реальный режим, причем МП 80386 работает как очень быстрый МП 8086, но, по желанию программиста, с 32-разрядным расширением. В реальном режиме МП 80386 имеет такую же базовую архитектуру, что и МП 8086, но обеспечивает доступ к 32-разВнрядным регистрам. Механизм адресации, размеры памяти и обраВнботка прерываний МП 8086 полностью совпадают с аналогичными функциями МП 80386 в реальном режиме.

Единственным способом выхода из реального режима является явное переключение в защищенный режим. В защищенный режим МП 80386 входит при установке бита включения защиты (РЕ) в нулеВнвом регистре управления (CR0) с помощью команды пересылки (MOV to CR0). Для совместимости с МП 80286 с целью установки бита РЕ может быть также использована команда загрузки слова состоВняния машины LMSW. Процессор повторно входит в реальный режим в том случае, если программа командой пересылки сбрасывает бит РЕ регистра CR0.

2.2. Защищенный режим

Полные возможности МП 80386 раскрываются в защищенном реВнжиме. Программы могут исполнять переключение между процессами с целью входа в задачи, предназначенные для режима виртуальноВнго МП 8086. Каждая такая задача проявляет себя в семантике МП 8086 (т.е. в отношениях между символами и приписываемыми им значениями независимо от интерпретирующего их оборудования). Это позволяет выполнять на МП 80386 програмное обеспечение для МП 8086 - прикладную программу или целую операционную систему. В то же время задачи для виртуального МП 8086 изолированы и защищены как друг от друга, так и от главной операционной системы МП 80386.

3. Типы данных

МП 80386 подразделяет память на 8-разрядные байты, 16-разрядные слова и 32-разрядные двойные слова. Дополнительно МП 80386 поддерживает также следующие дополнительные типы данВнных.

Неупакованный двоично-десятичный тип - распакованное байВнтовое представление десятичной цифры от 0 до 9. Распакованные десятичные числа хранятся как беззнаковые байтовые значения по одной цифре в каждом байте. Значение цифры определяется младВншим полубайтом. Старший полубайт должен быть равным нулю при делении и умножении, но может иметь любое значение при вычитаВннии или сложении.

Упакованный двоично-десятичный тип - упакованное байтовое представление двух десятичных цифр от 0 до 9. Каждая цифра хранится в своем полубайте. Цифра в старшем полубайте является более значимой. Диапазон упакованного десятичного байта составляет от 0 до 99.

Битовое поле - непрерывная последовательность битов, в которой каждый бит рассматривается как независимая переменная. Битовое поле может начинаться с любого бита любого байта и моВнжет быть длиной до 32 бит.

Битовая строка - подобно битовому полю, битовая строка является непрерывной последовательностью битов. Битовая строка может начинаться с любого бита любого байта и иметь длину до (2Е32-1) бит.

Ближний указатель - 32-разрядный логический адрес, котоВнрый представляет собой относительный адрес внутри сегмента. Ближние указатели используются как в сплошной, так и в сегменВнтированной модели памяти.

Дальний указатель - 48-разрядный логический адрес из двух компонентов: 16-разрядного сегмента и 32-разрядного относиВнтельного адреса. Дальние указатели используются программистами тольком в том случае, когда конструкторы системы выбирают сегВнментированную организацию памяти.

Целый тип - знаковое двоичное значение, содержащееся в 32-разрядном двойном слове, 16-разрядном слове или 8-разрядном байте. Все операции предполагают представление чисел в дополВннительном коде. Знаковый бит расположен в бите 7 в байте, в бите 15 в слове и в бите 31 в двойном слове. Он равен нулю для положительных чисел и единице для отрицательных. Поскольку этот старший бит используется как знаковый, то 8-разрядное (байт) целое число может изменяться в диапазоне от -128 до +127, 16-разрядное (слово) целое число в диапазоне от -32768 до +32767, а 32-разрядное (двойное слово) целое число в диапаВнзоне от -2Е31 до +2Е31-1. Нулевое значение имеет положительный знак.

Обычный тип - беззнаковое двоичное значение, содержащееся в 32-разрядном двойном слове, 16-разрядном слове или 8-разрядВнном байте. Все биты определяют величину числа.

Строка - непрерывная последовательность байтов, слов или двойных слов. Строка может содержать от 0 до 2Е32 -1 байтов или 4 Гбайтов.

4. Регистры

Регистр является устройством временного хранения данных и используется с целью облегчения арифметических, логических и пересылочных операций. Регистры МП 80386 являются расширением регистров прежних МП 8086, 80186, 80286. Все 16-разрядные реВнгистры МП предыдущих поколений содержатся внутри 32-разрядной архитектуры.

Микропроцессор 80386 включает шесть непосредственно доступных программисту регистров селекторов сегментов, которые содержат указатели сегментов. Значения этих селекторов могут быть загружены при исполнении программы и являются специфичныВнми для задачи. Это значит, что регистры сегментов перезагружаВнются автоматически при переключении МП 80386 на другую задачу. За регистрами селекторов сегментов стоят реальные регистры кэш-памяти сегментов, которые содержат описания сегментов, указываемых селектором. Это сделано на аппаратном уровне для того, чтобы избежать дополнительной выборки из памяти в слуВнчае, когда требуется описание сегмента.

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

Восемь регистров общего назначения имеют длину в 32 бит и содержат адреса или данные. Они поддерживают операнды-данные длиной 1, 8, 16, 32 и 64 бит; битовые поля от 1 до 32 бит: операнды-адреса длиной 16 и 32 бит. Эти регистры называются EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP.

Доступ к младшим 16 бит этих регистров выполняется незаВнвисимо. Это делается в большинстве ассемблеров при использоваВннии 16-разрядных имен регистров: AX, BX, CX, DX, SI, DI, BP, SP.

4.2. Регистр системных флагов

Регистр EFLAGS управляет вводом-выводом, маскируемыми прерываниями, отладкой, переключением задач и включением исполнения в режиме виртуального МП 8086 в защищенной многозаВндачной среде - все это в дополнение к флагам состояния, котоВнрые отражают результат исполнения команды. Младшие 16 бит его представляют собой 16-разрядный регистр флагов и состояния МП 80286, называемый FLAGS, который наиболее полезен при исполнеВннии программ для МП 8086 и 80286.

4.2. Регистры сегментов

Шесть 16-разрядных регистров содержат значения селекторов сегментов, которые указывают на текущие адресуемые сегменты памяти. Ниже перечислены эти регистры.

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

Регистр сегмента стека (SS). Вызовы подпрограмм, записи параметров и активизация процедур обычно требуют области памяВнти, резервируемой под стек. Все операции со стеком используют регистр SS при обращении к стеку. В отличие от регистра CS реВнгистр SS может быть загружен явно с помощью команды программы.

Остальные четыре регистра являются регистрами сегментов данных (DS, ES, FS, GS), каждый из которых адресуется текущей исполняемой программой. Доступ к четырем раздельным областям данных имеет целью повысить эффективность программ, позволяя им обращаться к различным типам структур данных. Содержимое этих регистров может быть заменено под управлением программы.

При использовании регистров сегментов МП 80386 с каждым выбранным сегментом связывает базовый адрес. При адресации единицы данных внутри сегмента к базовому адресу сегмента доВнбавляется 32-разрядный относительный адрес. Если сегмент выбВнран загрузкой селектора сегмента в регистр сегмента, то команВндам манипуляции данными нужен только этот относительный адрес.

4.3. Регистры управления сегментированной памятью

Регистр таблицы глобальных дескрипторов (GDTR). Содержит 32-разрядный линейный адрес и 16-разрядную границу таблицы глобальных дескрипторов.

Регистр таблицы локальных дескрипторов (LDTR). Содержит 16-разрядный селектор для таблицы локальных дескрипторов. Так как эта таблица является специфичным для задачи сегментом, то она определяется значением селектора, хранимым в регистрах системного сегмента. Регистр дескриптора сегмента, связанный с этой таблицей, програмно недоступен.

Регистр таблицы дескрипторов прерываний (IDTR). Указывает на таблицу точек входа в программы обработки прерываний. РеВнгистр содержит 32-разрядный линейный базовый адрес и 16-разВнрядную границу таблицы дескрипторов прерываний (IDT).

Регистр задачи (TR). Указывает на информацию, необходимую процессору для определения текущей задачи. Регистр TR содержит 16-разрядный селектор дескриптора сегмента состояния задачи. Поскольку этот сегмент специфичен для задачи, то он определяВнется значениями селекторов, хранящихся в регистрах системного сегмента. Заметим, что с каждым регистром системных сегментов связан программно недоступный регистр дескриптора сегмента.

4.5. Указатель команд

Расширенный указатель команд (EIP) является 32-разрядным регистром. Он содержит относительный адрес следующей команды, подлежащей выполнению. Относительный адрес отсчитывается от начала сегмента текущей программы. Указатель команд неВнпосредственно не доступен программисту, но он управляется явно командами управления потоком, прерываниями и исключениями.

Младшие 16 бит регистра EIP называются IP и могут быть использованы процессором независимо. Это свойство полезно при исполнении команд МП 8086 и 80286, которые имеют только реВнгистр IP.

4.6. Регистры управления

МП 80386 имеет три 32-разрядных регистра управления (CR0, CR2 и CR3, а CR1 зарезервирован фирмой Intel), в которых храВннятся состояния машины или глобальные состояния. Глобальное состояние - это такое состояние, к которому может получить доступ любой из логических блоков системы или которое управляВнет этими блоками. Вместе с регистрами системных адресов эти регистры хранят информацию о состоянии машины, которая влияет на все задачи в системе. Для доступа к регистрам управления определены команды их загрузки и сохранности содержимого.

Системным программистам регистры управления доступны только через варианты команды MOV, которые позволяют их загруВнжать или сохранять в регистрах общего назначения.

4.7. Регистры отладки

Шесть доступных программисту регистров отладки (DR0-DR3, DR6 и DR7) расширяют возможности отладки в МП 80386, они устаВннавливают точки останова по данным и позволяют устанавливать точки останова по командам без модификации сегментов программ. Регистры DR0-DR3 предназначены для четырех линейных точек останова. Регистры DR4 и DR5 зарезервированы фирмой Intel для будущих разработок. Регистр DR6 показывает текущее состояние точек останова, а регистр DR7 используется для установки точек останова.

4.8. Буфер ассоциативной трансляции

Буфер ассоциативной трансляции (TLB) - это кэш-память, используемая для трансляции линейных адресов в физические.

Механизм проверки TLB является уникальным для МП 80386 и может быть не реализован в том же виде в будущих процессорах. Программы, которые используют этот механизм в его нынешнем виВнде, могут оказаться несовместимыми с будущими процессорами.

5. Система команд

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

Команды МП 80386 состоят из отдельных элементов и могут иметь различные форматы. Из всех описанных ниже элементов только один (код операции, Коп) обязательно присутствует в люВнбой команде. Остальные элементы могут отсутствовать, что опреВнделяется характером операции, а также местоположением и типом операндов.

Команды состоят из следующих элементов: необязательных префиксов; одного или двух байтов кодов операции; возможно - описателя адреса, который включает байт Mod R/M и байт масштаВнба, индекса и базы; смещения - если требуется; поля неВнпосредственных данных - если требуется.

Префиксы - один или несколько байтов, предшествующих коВнманде и модифицирующих операцию этой команды. Имеется 4 типа префиксов.

1. Повторение - используется с командами обработки строк; заставляет команду воздействовать на каждый элемент строки.

2. Размер операнда - переключает разрядность операндов, устанавливая их 32-разрядными или 16-разрядными.

3. Размер адреса - переключает разрядность адреса, опреВнделяя образование 32-разрядных или 16-разрядных адресов.

4. Замена сегмента - в явной форме указывает, какой сегВнментный регистр должна использовать команда. Префикс отменяет действующий по умолчанию выбор сегментного регистра, обычно осуществляемый МП 80386 при выполнении этой команды.

Код операции (Коп) - описывает операцию, выполняемую коВнмандой. Некоторым командам присущи несколько кодов операций, каждый из которых описывает определенный вариант операции.

Описатель регистра - в команде могут быть описаны один или два регистра в качестве операндов. Описатель регистра моВнжет присутствовать как в байте кода операции, так и в байте описателя режима адресации.

Описатель режима адресации. Этот элемент, если он присутствует, описывает, является ли операнд содержимым реВнгистра или ячейки памяти. Если операнд находится в памяти, описатель режима указывает, надо ли использовать смещение, инВндексный регистр, регистр базы и масштабирование.

Байты MOD R/M и SIB. Большинство команд, ссылающихся на операнд, находящийся в памяти, содержат после байта основного кода операции еще байт формы адресации. Этот байт описывает используемую форму адреса. Определенные значения кода поля MOD R/M указывают на наличие второго адресного байта SIB.

Байты MOD R/M и SIB содержат следующую информацию:

- тип индексации или номер регистра, используемого в коВнманде;

- используемый регистр или дополнительную информацию о выборе команды;

- информацию о базе, индексе и масштабе;

Смещение. Если описатель режима адресации указывает, что при вычислении адреса операнда будет использовано смещение, в состав кода команды включается поле смещения. Смещение представляет собой 8-, 16- или 32-разрядное целое число со знаком. 8-разрядная форма используется в тех случаях, когда значение смещения невелико.

Непосредственный операнд (данное). Если этот элемент присутствует, он представляет значение операнда команды. НеВнпосредственные операнды могут быть 8-, 16- или 32-разрядными. В случаях когда 8-разрядный непосредственный операнд используВнется в команде вместе с 16- или 32-разрядным операндом, проВнцессор автоматически увеличивает размер 8-разрядного операнда путем расширения его знакового разряда.

5.2. Описание обозначения

+rb, +rw, +rd Код регистра (от 0 до 7), который складываВнется с указанным слева от знака плюс шестнадцетиричным числом (байтом) с лбразованием байта кода операции. Регистрам присвоВнены следующие коды :

rb rw rd

AL=0 AX=0 EAX=0

CL=1 CX=1 ECX=1

DL=2 DX=2 EDX=2

BL=3 BX=3 EBX=3

AH=4 SP=4 ESP=4

CH=5 BP=5 EBP=5

DH=6 SI=6 ESI=6

BH=7 DI=7 EDI=7

/цифра Цифра, стоящая справа от косой черты, имеет, вообВнще говоря, значение от 0 до 7. Она показывает, что в байте MOD R/M указывается только один операнд r/m (регистр/память). Сама цифра помещается в поле reg и образует расширение кода операВнции.

/r Обозначение показывает, что байт MOD R/M содержит два операнда (reg и r/m).

cb, cw, cd, cp Величина размером 1 байт (cb), 2 байта (cw), 4 байта (cd) или 6 байт (cp) следует за кодом операции и определяет относительный адрес, а также, возможно новое значеВнние программного сегмента.

ib, iw, id Непосредственный операнд размером 1 байт (id), 2 байта (iw) или 4 байта (id) следует за байтами кода операВнции, MOD R/M или SIB. Код операции указывает, является ли опеВнранд знаковой величиной.

imm8 Непосредственный операнд размером 1 байт. Величина imm8 является знаковой величиной между -128 и +127 включительВнно. В командах, где размер второго операнда составляет слово или двойное слово, величина imm8 расширяется до слова или двойного слова. Старшие байты расширенной величины заполняются старшим битом непосредственного операнда.

imm16 Непосредственный операнд размером 1 слово. ИспольВнзуется в командах с атрибутом размера операнда 16 разрядов. Может иметь значение от -32768 до +32767 включительно.

imm32 Непосредственный операнд размером 1 двойное слово. Используется в командах с атрибутом размера операнда 32 разряВнда. Может иметь значение от -2147483648 до +2147483647 включиВнтельно.

m8 Байт памяти. Адресуется через регистры DS:SI или ES:DI.

m16 Слово памяти.

m32 Двойное слово памяти.

moffs8, moffs16, moffs32 Относительный адрес. Простая пеВнременная типа BYTE, WORD или DWORD, используемая некоторыми вариантами команды MOV. Фактический адрес записывается в виде простого смещения относительно базы сегмента. Число при аббреВнвиатуре "moffs" указывает разрядность смещения определяемую аттрибутом размера адреса в команде. Байт MOD R/M в команде не используется.

ptr16:16, ptr16:32 Указатель FAR (дальний). Обычно он наВнходится в другом программном сегменте по отношению к команде. Обозначение 16:16 говорит о том, что указатель состоит из двух частей. Величина слева от двоеточия - это смещение в сегменте приемнике. Величина справа от двоеточия - это 16-разрядный сеВнлектор или величина, предназначенная для регистра программного сегмента. Если атрибут размера операнда команды равен 16, используйте 16:16. Для 32-разрядного атрибута используйте 16:32.

r8 Один из байтовых регистров: AL, CL, DL, BL, AH, CH, DH, BH.

r16 Один из однословных регистров: AX, CX, DX, BX, SP, BP, SI, DI.

r32 Один из двухсловных регистров: EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI.

rel8 Смещение для перехода в диапазоне от 128 байтов пеВнред концом команды до 127 байтов после конца команды.

rel16, rel32 Смещение для перехода в том же программном сегменте, что и ассемблируемая команда, rel16 относится к коВнмандам с атрибутом размера операнда 16 разрядов. rel32 отВнносится к командам с атрибутом размера операнда 32 разряда.

r/m8, r/m16, r/m32 Соответственно одно-, двух- и четырехВнбайтовый операнд. Представляет собой содержимое либо памяти, либо регистра.

rrr Когда обозначение rrr появляется в колонке двоичного эквивалента кода операции, оно указывает конкретный адресуемый регистр.

000 = AX/EAX 100 = SP/ESP

001 = CX/ECX 101 = BP/EBP

010 = DX/EDX 110 = SI/ESI

011 = BX/EBX 111 = DI/EDI

Sreg Регистр сегмента. Кодирование сегментных регистров в поле reg: ES=0, CS=1, DS=3, FS=4, GS=5.

5.3. Список команд

AAA ASCII-коррекция после сложения.

Команда AAA преобразует содержимое регистра AL в неупакоВнванное десятичное число и сбрасывает его старшие четыре разряВнда. Она должна всегда следовать за сложением двух неупакованВнных десятичных операндов в AL. Если возникает перенос, устаВннавливается флаг CF и происходит инкремент в регистре AH.

AAD ASCII-коррекция регистра AX перед делением.

Команда AAD преобразует число в регистрах AH и AL, подгоВнтавливая деления двух неупакованных десятичных операндов так, чтобы полученное в результате деления частное было бы правильВнным неупакованным десятичным числом. В регистре AH должна наВнходится старшая цифра, в AL - младшая. Команда AAD корректируВнет число и помещает результат в AL. Регистр AH содержит 0.

AAM ASCII-коррекция в регистре AX после умножения. Команда AAM корректирует результат умножения двух неупа-

кованных десятичных чисел. Эта команда должна всегда следовать за умножением двух десятичных цифр с целью образования праВнвильного десятичного результата. Старшая цифра помещается в регистр AH, младшая - в AL.

AAS ASCII-коррекция регистра AL после вычитания.

Команда AAS преобразует содержимое регистра AL в неупакоВнванную десятичную цифру и заполняет нулями старшие четыре разВнряда. Эта команда должна всегда следовать за вычитанием одного неупакованного десятичного операнда из другого в AL. Флаг CF устанавливается, а при наличии займа выполняется декремент в регистре AH.

ADC Сложение с переносом целых чисел.

Команда ADC суммирует операнды, прибавляет 1, если устаВнновлен флаг CF, и помещает результат по адресу назначения. ЕсВнли флаг CF сброшен, команда ADC выполняет ту же операцию, что и ADD. Комбинация команды ADD и нескольких команд ADC позволяВнет складывать числа, содержащие более 32 разрядов.

ADD Сложение целых чисел.

В результате выполнения команды операнд-приемник заменяВнется суммой обоих операндов (источника и приемника). При налиВнчии переполнения устанавливается флаг CF.

AND Логическое И.

Команда AND используется для сброса битов, указанных пользователем, например бита четности во входном потоке кодов ASCII от терминала. Будучи использована совместно с командой сравнения, команда AND позволяет убедиться, что указанные биты установлены.

ARPL Коррекция в селекторе уровня привилегий инициатоВнра запроса.

Команда ARPL используется системными программами для обеспечения правильности передачи подпрограмме селекторов в качестве параметров. Селекторы не должны требовать больше приВнвилегий, чем разрешено инициатору запроса.

В команде ARPL используются два операнда. первый предсВнтавляет собой 16-разрядный регистр или слово памяти, содержаВнщее значение селектора. В качестве второго операнда обычно выступает регистр, содержащий значение селектора программного сегмента CS инициатора запроса.

BOUND Проверка индекса массива на выход за границы. Команда BOUND проверяет, лежит ли знаковая величина, на-

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

BSF прямое сканирование битов.

Эта команда сканирует слово или двойное слово в поисках бита, равного 1, и заносит в регистр номер первого установленВнного бита. Сканируемая строка может находиться как в регистре, так и в памяти. Если все слово равно 0, т.е. в нем нет единичВнных битов, устанавливается флаг ZF. Если единичный бит найден, флаг ZF сбрасывается.

BSR Обратное сканирование битов.

Эта команда действует также как и BSF, но начинает сканиВнрование со старшего бита. Это новая команда, специфичная для МП 80386.

BT Проверка бита.

Команда BT служит для определения того, установлен или нет определенный бит в битовом массиве. Значение проверяемого бита копируется во флаг CF. Это новая команда, специфичная для МП 80386.

BTC Проверка и инверсия бита.

Команда BTC проверяет указанный бит, копирует его в CF и инвертирует найденный бит. Это новая команда, специфичная для МП 80386.

BTR Проверка и сброс бита.

Команда BTR проверяет указанный бит, копирует его в CF и сбрасывает найденный бит. Это новая команда, специфичная для МП 80386.

BTS Проверка и установка бита.

Команда BTS проверяет указанный бит, копирует его в CF и устанавливает в найденном бите значение 1. Это новая команда, специфичная для МП 80386.

CALL Вызов процедуры.

Команда CALL передает управление из одной точки программВнного сегмента в другую. Эти точки могут располагаться в одном и том же программном сегменте (ближний переход) или принадлеВнжать разным сегментам (дальний переход). Перед собственно пеВнредачей управления команда CALL сохраняет в стеке адрес следуВнющей за CALL команды и текущее содержимое регистра EIP.

Команды CALL могут быть относительными, прямыми и косвенВнными. В косвенной команде абсолютный адрес перехода указываетВнся одним из двух способов: (1) МП извлекает адрес приемника из ячейки памяти, определенной в команде; (2) программа переходит в точку адрес которой указан в одном из регистров общего назВнначения.

CBW Преобразование байта в слово.

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

CWD Преобразование слова в двойное слово.

Действие команды аналогично команде CBW.

CLC Сброс флага переноса.

Команда сбрасывает флаг CF.

CLD Сброс флага направления.

Команда сбрасывает флаг DF. Если флаг DF сброшен, автомаВнтическая индексация будет выполняться с инкрементом. АвтоматиВнческая индексация используется командами обработки строк.

CLI Сброс флага прерываний.

Если текущий уровень привилегий по крайней мере столь же высок, как уровень привилегий ввода-вывода, команда сбрасывает флаг прерываний.

CLTS Сброс флага переключения задачи в управляющем реВнгистре 0.

Команда сбрасывает флаг TS в CR0. В МП 80386 флаг TS усВнтанавливается каждый раз при переключении задачи. Команда исВнпользуется в системном программировании. Она представляет соВнбой привилегированную команду, выполняемую только на нулевом уровне привилегий.

CMC Инвертирование флага переноса.

Команда инвертирует флаг переноса CF.

CMP Сравнение.

Команда выполняет вычитание операнда-источника из операнВнда-приемника. В соответствии с результатом вычитания команда устанавливает состояние флагов, но не изменяет сами операнды.

CMPS Сравнение строковых операндов.

Ассемблер всегда транслирует команду CMPS как одну из CMPSB, CMPSW, CMPSD. Эти команды предназначены только для операций над строками. Они сравнивают по одному элементу кажВндой строки, причем элементами могут быть байт, слово или двойВнное слово. Элементы строк адресуются через регистры ESI и EDI. После каждой строковой операции ESI и/или EDI автоматически получают положительное или отрицательное приращение и указываВнют на следующие элементы строк. Если DF=0, в индексных регистВнрах осуществляется инкремент, если DF=1 - декремент. В зависиВнмости от результата вычитания строкового элемента по адресу ES:EDI из строкового элемента по адресу DS:ESI устанавливаются флаги результата. Если команда модифицирована с помощью преВнфиксов, МП выполняет сравнение текущего элемента строки с соВндержимым регистра EAX или его части (AL или AX).

CMPSB Сравнение строковых байтов.

CMPSW Сравнение строковых слов.

CMPSD Сравнение строковых двойных слов.

CDQ Преобразование двойного слова в четверное.

CWDE Преобразование слова в двойное слово с расширением.

DAA Десятичная коррекция в регистре AL после сложения. Команда корректирует результат сложения двух правильных

упакованных десятичных операндов в регистре AL. Эта команда должна всегда следовать за сложением двух пар упакованных деВнсятичных чисел, чтобы получить в результате пару правильных упакованных десятичных цифр.

DAS Десятичная коррекция в регистре AL после вычитания. Команда DAS аналогична команде DAA за исключением, что

коррекция выполняется путем вычитания 6 из полубайтов регистра AL вместо прибавления 6.

DEC Декремент на 1.

Команда вычитает 1 из операнда приемника. Состояние флага CF не изменяется.

DIV Деление целых чисел без знака.

Команда выполняет деление числа без знака в аккумуляторе на операнд-источник. Размер делимого в битах в два раза больше размера делителя. Если делитель равен 0, или если частное не помещается в назначенный регистр, возбуждается прерывание 0.

ENTER Создание кадра стека для параметров процедуры Команда создает кадр стека, который можно использовать

для реализации правил языков высокого уровня с блочной струкВнтурой. Команда LEAVE в конце процедуры выполняет обратные действия.

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

ESC Расширение процессора

Арифметический сопроцессор предоставляет расширение

системы команд МП 80386. Сопроцессор поддерживает высокоточные

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

Команды сопроцессора включаются в общий поток команд, составляющих программу для МП 80386. Система выполняет команды сопроцессора в том порядке, в котором они появляются в потоке.

HLT Останов

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

IDIV Знаковое деление

Команда выполняет знаковое деление. Делимому, частному и остатку неявно назначаются определенные регистры, в то время как местонахождение делителя указывается явным образом. По форме делителя определяется, какие регистры должны использоВнваться. Если делитель равен нулю или частное слишком велико для регистра-приемника, возбуждается прерывание 0.

IMUL Знаковое целочисленное умножение

Команда выполняет операцию знакового целочисленного умноВнжения. Команда имеет три варианта.

1. Однооперандная форма. Операнд может быть байтом, слоВнвом или двойным словом в памяти или регистре общего назначеВнния. Команда использует содержимое регистров EAX и EDX в каВнчестве операндов.

2. Двухоперандная форма. Один из операндов-источников моВнжет находиться в любом регистре общего назначения, в то время как другой может быть в регистре общего назначения или в памяВнти. Произведение размещается на месте операнда в регистре обВнщего назначения.

3. Трехоперандная форма. Два операнда представляют собой источники и один приемник. Один из операндов-источников являВнется непосредственным значением, записанным в команде. Второй может находиться в памяти или в любом регистре общего назначеВнния. Произведение может быть записано в любой регистр общего назначения. Непосредственный операнд считается знаковым. Если он является байтом, процессор перед выполнением умножения авВнтоматически расширяет его знак до размера второго операнда.

IN Ввод из порта

Команда вводит байт или слово из порта и записывает его в регистре (AL, AH, EAX). Порт указывается вторым операндом. Для доступа к порту его номер следует поместить в регистр DX и использовать команду IN с обозначением DX в качестве второго параметра.

INC Инкремент на 1.

Команда прибавляет 1 к операнду-приемнику, но в отличие от ADD не влияет на флаг CF.

INT Вызов процедуры обработки прерывания

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

Команда INTn активизирует программу обработки прерывания, соответствующую номеру, указанному в команде. Команда может определять прерывание любого типа. Заметьте, что прерывания

0.31 зарезервированы фирмой Intel. Возврат управления из программы обработки прерывания осуществляется командой IRET.

INTO Прерывание по переполнению

Команда при установленном флаге OF возбуждает прерывание 4, которое специально зарезервировано для этой цели. Флаг OF устанавливается рядом арифметических, логических и строковых команд.

IRET Возврат из прерывания

Команда возвращает управление прерванной процедуре. В отВнличие от команды RET IRET извлекает из стека значения флагов и помещает их в регистр флагов. Флаги записываются в стек в проВнцессе реализации прерывания.

IRETD Возврат из прерывания в 32-разрядном режиме

JMP Переход

Команда передает управление из одной точки сегмента в другую. Точка перехода может быть в том же сегменте (ближний переход) или в другом сегменте (дальний переход). Команда беВнзусловно передает управление в точку перехода и является, таВнким образом, однонаправленной.

Команды условных переходов:

JA/JNBE Выше, не ниже и не равно

JAE/JNB Выше или равно, не ниже

JB/JNAE Ниже, не выше и не равно

JBE/JNA Ниже или равно, не выше

JC Перенос

JE/JZ Равно, нуль

JNC Отсутствие переноса

JNE/JNZ Не равно, не нуль

JNP/JPO Отсутствие четности, нечетность

JP/JPE Четность

JG/JNLE Больше, не меньше и не равно

JGE/JNL Больше или равно, не меньше

JL/JNGE Меньше, не больше и не равно

JLE/JNG Меньше или равно, не больше

JNO Отсутствие переполнения

JNS Отсутствие знака

(положительно, включая нуль)

JO Переполнение

JS Знак (отрицательно)

LAHF Загрузка флагов в регистр AH

Хотя для изменения флагов CF и DF предусмотрены специальВнные команды, остальные флаги, используемые в прикладных прогВнраммах, нельзя изменять непосредственно. Эта команда дает возВнможность программного изменения остальных битов флагов с поВнмощью команд побитовых операций после пересылки флагов в стек или в регистр AH.

Команда копирует биты SF,ZF,AF,PF,CF соответственно в разряды 7,6,4,2,0 регистра AH.

LAR Загрузка байта прав доступа

Команда читает дескриптор сегмента и заносит биты дробВнности(23), свободный (20), присутствия (15), DPL (14), типа (9-11) и доступа (8) в 32-разрядный регистр, бит дробности и свободный бит не пересылаются.

LEA Загрузка исполнительного адреса

Команда пересылает по адресу приемника относительный адВнрес операнда-источника. Операнд-источник должен находиться в памяти. Операнд-приемник должен быть регистром общего назначеВнния. Команда особенно полезна для инициализации регистров пеВнред выполнением действий над начальными данными или команды XLAT.

LEAVE Выход из процедуры высокого уровня

Команда выполняет действия противоположные действию коВнманды ENTER.

LGDT Загрузка регистра таблицы глобальных дескрипторов

LIDT Загрузка регистра таблицы

Команда оповещает аппратные средства о точке перехода в случае прерываний.

LGS Загрузка полного указателя

LSS Загрузка указателя с использованием регистра SS

LDS Загрузка указателя с использованием регистра DS

LES Загрузка указателя с использованием регистра ES

LFS Заг

Вместе с этим смотрят:


Intel


Internet


Pentium II


Windows


Адаптер VGA. Организация и работа