Система команд процессоров Intel
Ниже приводится алфавитный
перечень команд процессоров Intel с кратким описанием действия каждой команды
и примерами ее использования.
В разделах статей, начинающихся с обозначения 386+, описываются отличия
действия рассматриваемой команды в современных 32-разрядных процессорах (80386,
i486, Pentium). Как правило, эти отличия заключаются в возможности использования
не только 8- и 16-разрядных, но и 32-разрядных операндов, а также расширенных
режимов адресации памяти. Обычные 16-разрядные программы реального режима вполне
могут использовать расширенные регистры процессора (ЕАХ, ЕВХ и проч.), 32-битовые
ячейки памяти и варианты команд для их обработки. Для того, чтобы ассемблер
правильно транслировал команды с 32-разрядными операндами, в программу необходимо
включить директиву ассемблера .386 (можно также использовать директивы .486
или .586), а сегменту команд (и во многих случаях сегменту данных) придать описатель
use 16:
.386codes segment use 16
assume CS:codes
codes ends
data segment use16
data ends
Кроме этого, необходимо разрешить компоновщику обрабатывать 32-разрядные операнды,
что для компоновщика TLINK осуществляется указанием ключа /3.
Отдельные статьи, начинающиеся с обозначений 386+ , 486+ и
Pentium+,
посвящены командам, отсутствующим в МП 86. Многие из этих команд (например,
команды проверки бита Ы или условной установки байта
set) носят прикладной характер
и могут использоваться в обычных программах реального режима.
Новые команды, реализованные впервые в МП 80386, сохраняют свое значение и в
более современных процессорах. Для того, чтобы ассемблер распознавая команды
МП 80386, в программе должна присутствовать директива .386.
Новые команды, реализованные впервые в МП 80486, сохраняют свое значение и в
процессорах Pentium. Для того, чтобы ассемблер распознавая команды МП 80486,
в программе должна присутствовать директива .486.
Для того, чтобы ассемблер распознавал команды, реализованные впервые в процессоре
Pentium, в программе должна присутствовать директива .586.
Ряд команд требует для своего выполнения специальных условий, обычно отсутствующих
в приложениях MS-DOS. Так, например, команда bound (проверки индекса массива
на выход за границы) при обнаружении выхода за границы генерирует прерывание
с вектором 5. Это прерывание в защищенном режиме как раз и является исключением
нарушения границ массива, но в приложениях MS-DOS используется для вывода на
печать содержимого экрана. Поэтому использование таких команд в реальном режиме
затруднено.
Отдельные статьи, начинающиеся с обозначения 386Р+, посвящены привилегированным
командам современных процессоров, работающих в расширенном режиме, и отсутствующим
в МП 86. Для использования этих команд в программу необходимо включить директиву
ассемблера .386Р (можно также использовать директивы .486Р или .586Р). Если
при этом программа реализуется, как 16-разрядное приложение
MS-DOS, сегмент
команд должен иметь описатель usc16 (при наличии директивы .386 транслятор по
умолчанию создает 32-разрядное приложение). Следует, однако, иметь в виду, что
привилегированные команды защищенного режима предназначены для использования
не в прикладных программах, а в операционных системах защищенного режима. В
прикладных программах привилегированные команды приходится использовать лишь
в весьма специальных случаях, когда, например, прикладная программа запускается
в реальном режиме под управлением MS-DOS, но затем переводит процессор в защищенный
режим и далее использует преимущества этого режима. Типичный пример программы
такого рода - приложение DOS, которому требуется использовать всю оперативную
память компьютера. В настоящей книге, посвященной, в основном, реальному режиму,
дается лишь перечисление привилегированных команд защищенного режима.