
- •Введение
- •1.1. Основные направления эволюции микрокомпьютеров
- •1.2. Основные сведения о компьютерах
- •1.3. Представление чисел
- •Заключение
- •Лекция 2 машинная организация процессора 80286
- •2.1. Введение
- •2.2. Структура памяти
- •2.3. Сегментация памяти
- •2.4. Структура ввода-вывода
- •2.5. Регистры
- •2.6. Операнды и режимы адресации операндов
- •2.7. Замечания о режимах адресации
- •Глава 3 базовая система команд процессора 80286
- •3.1. Нотация языка ассемблера
- •3.2. Команды передач данных
- •3.3. Арифметические команды
- •Лекция 6. Цепочечные команды
- •Лекция 7. Команды безусловной передачи управления
- •Лекция 8. Команды условной передачи управления
- •Лекция 9. Прерывания
- •Int n
- •Лекция 10. Флажковые команды
- •3.10. Команды синхронизации
- •3.11. Поддержка языков высокого уровня
- •3.12. Замечания о префиксах
- •3.13. Воздействие на флажки
- •Заключение
Глава 3 базовая система команд процессора 80286
Если в гл. 2 мы рассматривали операнды команд, то теперь коснемся операций, которые выполняются над операндами. Описание команд дается неформально, а более строгое описание можно найти в литературе.
Система команд подразделяется на базовые и усовершенствованные команды, которые связаны с мультипрограммированием, управлением памятью и защитой; их нет в предыдущих процессорах семейства 86. Все базовые команды процессора 80286 имеются также в процессоре 80186, а большинство их - и в микропроцессоре 8086 (отсутствующие в нем команды будут отмечаться при описании). Усовершенствованные команды рассматриваются в гл. 5.
Ради удобства изучения введены следующие группы базовых команд: команды передач данных, арифметические, логические команды, цепочечные, передачи управления, прерываний, флажковые, синхронизации и поддержки языков программирования высокого уровня. Мы подробно рассмотрим все эти группы команд.
Напомним, что процессор 80286 имеет два режима работы: реальный и виртуальный. В реальном режиме усовершенствованные возможности запрещены, а в виртуальном режиме - разрешены. В этой главе предполагается, что процессор 80286 работает в реальном режиме.
Когда допустимым операндом команды указывается регистр, им может быть любой РОН, указательный или индексный регистр, но не может быть сегментный регистр или IP. Специально оговаривается, когда в команде допустим как операнд сегментный регистр. Регистр IP никогда нельзя указывать как операнд.
3.1. Нотация языка ассемблера
Мы будем описывать команды, пользуясь нотацией языка ассемблера ASM286 фирмы Intel, Конечно, мы не преследуем цели научить программированию на этом языке, а пользуемся им как средством описания процессора. Подробное описание языка ассемблера содержится в руководствах фирмы Intel.
Как обычно, оператор состоит из полей метки, команды, операнда и комментария (из них обязательным является только поле команды). Поле операнда может содержать источник и приемник, причем приемник указывается первым. Например, команда
передает в регистр ВХ (приемник) содержимое регистра СХ (источник).
В командах ASM286 допустимы операнды трех типов: регистр, непосредственный операнд и память. Например, команда
осуществляет инкремент регистра DX. Непосредственный операнд - это значение, содержащееся в самой команде; например, команда
прибавляет значение 35 (непосредственный операнд) к содержимому регистра СХ (регистровый операнд) и помещает результат в СХ.
Процессор 80286 имеет два режима адресации операндов в памяти: прямой и косвенный. В прямой адресации памяти адрес операнда содержится в команде. При косвенной адресации памяти адрес приемника образуется суммированием двух или нескольких элементов: содержимого базового регистра (ВХ или ВР), содержимого индексного регистра (SI или DI) и значения, находящегося в команде. Вот несколько примеров адресации памяти в ASM286:
Ради простоты в этой главе все операнды в памяти даются в режиме прямой адресации, но вместо него можно всегда указывать любой режим косвенной адресации.
Отличительная
особенность языков ассемблера для
процессоров семейства 86 заключается в
том, что они являютсятипизированными.
Другими
словами, с каждым операндом ассоциируется
тип (байт, слово и др.), который используется
Ассемблером для определения кода
операции генерируемой команды. В
нетипизированном языке код операции
полностью определяется мнемоникой
команды, например
В типизированном языке переменная LOC должна быть определена как байт или слово (оператором, который распределяет память для переменной LOC), и команда
осуществляет инкремент байта или слова в зависимости от типа переменной LOC. Аналогично и каждый регистр имеет тип (например, регистр ВХ -слово, регистр CL - байт), поэтому в ассемблере ASM286 команды инкремента байта или слова в регистре имеют вид: