ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 06.02.2025
Просмотров: 8984
Скачиваний: 4
СОДЕРЖАНИЕ
2. Программная модель микропроцессора 8086
2.4. Способы задания операндов команды
3. Основные понятия языка ассемблера
3.2. Директивы определения данных
4. Сегментированная модель памяти
4.3. Общая структура программы
5.1. Соглашению по описанию команд
5.6. Команды организации циклов
5.11. Команды управления микропроцессором
7. Разработка одномодульной программы
7.1. Трансляция и компоновка программы
8. Разработка многомодульных программ
8.1. Принципы разработки модулей
8.2. Расширенное применение директивы сегментации
Программирование микропроцессорных устройств
10. Программирование системного таймера
10.1. Описание таймера-счетчика 8254
10.3. Структура регистров таймера
11. Программирование контроллера прерываний
11.1. Механизм обработки прерываний
11.4. Контроллер прерываний 8259
11.5. Идентификация прерываний
11.6. Прерывания bios и ms-dos
12. Программирование параллельного порта
12.2. Работа с параллельным портом на низком уровне
12.3. Стандартные средства работы с параллельным портом
13. Программирование последовательного порта
13.1. Основы последовательной передачи данных
13.2. Последовательный интерфейс rs-232c
13.3. Универсальный асинхронный приемо-передатчик 8250
13.4. Порты асинхронного адаптера
13.5. Стандартные средства программирования последовательного порта
Приведем примеры выполнения операций ввода-вывода:
MOV DX, 10h ; записать номер порта 10h в регистр DX
MOV AL, 20h ; записать значение 20h в регистр AL
OUT DX, AL ; вывести значение 20h в порт 10h
IN AL, 10h ; получить байт данных в регистр AL из порта ввода по адресу 10h
5.10. Команды прерываний
Команды IRET/INT/INTOреализуют механизм обработки прерываний, который заключается во временном приостановлении выполнения текущей программы и переходе к подпрограмме обработке прерывания. Подробно эти вопросы рассматривается в главе 6.
Команда IRETобеспечивает возврат из обработчика прерывания к прерванной программе (табл. 64). Флаги восстанавливаются из стека. Встретив инструкцию IRET, процессор восстанавливает из стека регистровую пару CS:IPи регистр флагов.
Команда INTвырабатывает программное прерывание по указанному вектору. Флаги в момент записи содержимого регистра флагов в стек имеют состояние на момент начала выполнения инструкции. После выполнения прерывания флаги IF и TF обнуляются.
Табл. 64. Команды прерываний.
|
Код |
Инструкция |
Описание |
|
CF |
IRET |
Возврат из прерывания. |
|
CC |
INT 3 |
Прерывание по вектору 3. |
|
CD ib |
INT imm8 |
Прерывание по вектору imm8. |
|
CE |
INTO |
Генерация прерывания при OF=1. |
Прерывание по вектору 3 (по адресу 0000:000Ch) отладочное и может быть выработано инструкциями двух видов – специальной однобайтовой с кодом CC и общей двухбайтовой CD 03. Трансляторы с языка ассемблера для инструкции INT 3 всегда генерируют код CC; двухбайтовый код CD 03 может быть при необходимости сформирован вручную. Однобайтовый код операции используется отладчиками для формирования точек останова, поскольку позволяет заменить код операции любой команды, в том числе и однобайтовой.
Команда INTOвырабатывает прерывание по вектору 4 (по адресу 0000:0010h), если флаг переполнения OF установлен. После выполнения прерывания флаги IF и TF сбрасываются. Флаги в регистре флагов в момент записи его содержимого в стек имеют состояние на момент начала выполнения инструкции прерывания.
Команда INTO обычно размещается после команд, которые могут вызвать установку флага OF, с целью выработки прерывания при возникновении переполнения мантиссы. При начальной загрузки по адресу вектора прерывания 4 записывается адрес некоторой ячейки памяти, содержащей команду IRET (по умолчанию реакция на прерывание отсутствует).
5.11. Команды управления микропроцессором
Команды управления работой микропроцессора включают три группы: команды управления флагами,команды внешней синхронизацииикоманда холостого хода.
По команде CLC флаг переноса CF обнуляется (табл. 65). Остальные флаги не изменяются. По команде STC флаг CF устанавливается. Команда CMC инвертирует флаг CF. Команды полезны для установки нужного состояния флага CF перед исполнением команд циклического сдвига RCL и RCR.
Табл. 65. Команды изменения флага CF.
|
Код |
Инструкция |
Описание |
|
F8 |
CLC |
CF = 0 |
|
F9 |
STC |
CF = 1 |
|
F5 |
CMC |
CF = NOT CF |
По команде CLD сбрасывается флаг направления DF регистра флагов (табл. 66). Остальные флаги не изменяются. Когда флаг DF сброшен, строковые команды выполняются в направлении увеличения адресов памяти (производится инкремент регистров SI и DI). Команда STD устанавливает флаг направления DF. Установка флага DF обеспечивает выполнение строковых операций с уменьшением адресов операндов, находящихся в регистрах SI и DI.
Табл. 66. Команды изменения флага DF.
|
Код |
Инструкция |
Описание |
|
FC |
CLD |
DF = 0 |
|
FD |
STD |
DF = 1 |
Команда CLI обнуляет флаг разрешения прерывания IF регистра флагов (табл. 67). Остальные флаги не изменяются. Когда флаг IF сброшен, запрещаются внешние прерывания. Команда STI устанавливает флаг IF и обработка внешних прерываний разрешена.
Табл. 67. Команды изменения флага IF.
|
Код |
Инструкция |
Описание |
|
FA |
CLI |
IF = 0 |
|
FB |
STI |
IF = 1 |
К группе команд внешней синхронизации относятся команды ESC/WAIT/HLT (табл. 68).
Табл. 68. Команды внешней синхронизации.
|
Код |
Инструкция |
Описание |
|
11011xxx ModRegR/M |
ESC op, r/m |
Выполнение операции сопроцессора op над операндом r/m. |
|
9B |
WAIT |
Переход в ожидание готовности сопроцессора. |
|
F4 |
HLT |
Останов процессора. |
Команда ESC обеспечивает выполнение заданной инструкции сопроцессора. Архитектура микропроцессоров семейства 8086 позволяет подключить к ним сопроцессор любого назначения, выполняющий дополнительные команды и согласующий свою работу с основным процессором. Исторически сложилось так, что был разработан и получил распространение только арифметический сопроцессор 8087. Флаги ESC команда не изменяет.
Команда WAITприостанавливает выполнение программы до тех пор, пока не будет закончена обработка последней команды сопроцессора (до поступления сигнала готовности от сопроцессора). Команда используется после инструкций математического сопроцессора. Флаги команда не изменяет.
По команде HLTпроцессор прекращает дальнейшее выполнение операций и переходит в состояние останова. Флаги команда не изменяет. Работа может быть возобновлена выполнением сброса или по прерыванию. При возобновлении работы по прерыванию в стек будет записан адрес команды, следующей за инструкцией HLT.
Последней командой является NOP (табл. 69). Эта однобайтовая команда не выполняет никаких действий, за исключением приращения указателя счетчика команд IP. Флаги команда не изменяет. Заметим, что команда на самом деле является инструкцией XCHG AX, AX. Примером применения команды NOP является возможность удаления (замены) кодов команд в исполняемом модуле без необходимости повторной трансляции программы, например, в целях отладки.
Табл. 69. КомандаNOP.
|
Код |
Инструкция |
Описание |
|
90 |
NOP |
Нет операции. |
И еще одна команда управления процессором LOCK на самом деле является префиксом (табл. 70). Он указывает процессору выставить на время выполнения следующей команды сигнал, блокирующий доступ к памяти со стороны других процессоров и внешних устройств. Префикс полезен в реализации многозадачного режима и используется только с инструкциями ADD, ADC, AND, DEC, INC, NEG, NOT, OR, SBB, SUB, XOR и XCHG. Флаги не изменяются, но могут быть изменены инструкцией, с которой он применяется.
Табл. 70. КомандаLOCK.
|
Код |
Инструкция |
Описание |
|
F0 |
LOCK |
Блокирование доступа к шине. |