ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 06.02.2025

Просмотров: 8984

Скачиваний: 4

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

Системное программирование

Контрольные вопросы

2. Программная модель микропроцессора 8086

2.1. Представление информации

2.2. Регистры микропроцессора

2.3. Формат машинной команды

2.4. Способы задания операндов команды

Контрольные вопросы

3. Основные понятия языка ассемблера

3.1. Предложения

3.2. Директивы определения данных

3.3. Выражения

Контрольные вопросы

4. Сегментированная модель памяти

4.1. Сегментирование адресов

4.2. Директивы сегментации

4.3. Общая структура программы

4.4. Модели памяти

Контрольные вопросы

5. Основные группы команд

5.1. Соглашению по описанию команд

5.2. Команды пересылки данных

5.3. Арифметические команды

5.4. Логические команды

5.5. Команды переходов

5.6. Команды организации циклов

5.7. Команды обработки строк

5.8. Стековые команды

5.9. Команды ввода-вывода

5.10. Команды прерываний

5.11. Команды управления микропроцессором

Контрольные вопросы

6. Подпрограммы

Контрольные вопросы

7. Разработка одномодульной программы

7.1. Трансляция и компоновка программы

7.2. Отладка программы

Контрольные вопросы

8. Разработка многомодульных программ

8.1. Принципы разработки модулей

8.2. Расширенное применение директивы сегментации

9. Упражнения

Контрольные вопросы

Программирование микропроцессорных устройств

10. Программирование системного таймера

10.1. Описание таймера-счетчика 8254

10.2. Режимы работы таймера

10.3. Структура регистров таймера

10.4. Упражнения

Контрольные вопросы

11. Программирование контроллера прерываний

11.1. Механизм обработки прерываний

11.2. Типы прерываний

11.3. Приоритеты прерываний

11.4. Контроллер прерываний 8259

11.5. Идентификация прерываний

11.6. Прерывания bios и ms-dos

11.7. Упражнения

Контрольные вопросы

12. Программирование параллельного порта

12.1. Интерфейс Centronics

12.2. Работа с параллельным портом на низком уровне

12.3. Стандартные средства работы с параллельным портом

12.4. Упражнения

Контрольные вопросы

13. Программирование последовательного порта

13.1. Основы последовательной передачи данных

13.2. Последовательный интерфейс rs-232c

13.3. Универсальный асинхронный приемо-передатчик 8250

13.4. Порты асинхронного адаптера

13.5. Стандартные средства программирования последовательного порта

13.6. Упражнения

Контрольные вопросы

Литература

141 Кафедра Вычислительной Техники и Программирования Московского Государственного Открытого Университета

Приведем примеры выполнения операций ввода-вывода:

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

Блокирование доступа к шине.