Файл: Системное программирование.doc

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

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

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

Добавлен: 06.02.2025

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

Скачиваний: 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 Кафедра Вычислительной Техники и Программирования Московского Государственного Открытого Университета

Значение 00 указывает, что при вычислении исполнительного адреса операнда отклонение не используется. Значение 01 указывает, что используется 8-разрядное отклонение, находящееся в байте, следующем за байтом ModRegR/M. Значение 10 указывает, что используется 16-разрядное отклонение, записанное в двух байтах, следующих за байтом ModRegR/M.

Табл. 3. Коды поля ModRegR/M.

R/M

Mod

00

01

10

11

000

[BX+SI]

[BX+SI]+disp8

[BX+SI]+disp16

AX/AL

001

[BX+DI]

[BX+DI]+disp8

[BX+DI]+disp16

CX/CL

010

[BP+SI]

[BP+SI]+disp8

[BP+SI]+disp16

DX/DL

011

[BP+DI]

[BP+DI]+disp8

[BP+DI]+disp16

BX/BL

100

[SI]

[SI]+disp8

[SI]+disp16

SP/AH

101

[DI]

[DI]+disp8

[DI]+disp16

BP/CH

110

disp16

[BP]+disp8

[BP]+disp16

SI/DH

111

[BX]

[BX]+disp8

[BX]+disp16

DI/BH

Поле R/M для случая операнда в памяти определяет, содержимое каких регистров общего назначения будет использоваться при вычислении исполнительного адреса операнда. Комбинация Mod=00 и R/M=110 является исключением из общего правила: исполнительный адрес операнда равен 16-разрядному отклонению, следующему в коде команды непосредственно за байтом ModRegR/M. Содержимое регистров общего назначения в формировании исполнительного адреса для этого случая не используется.

Когда в состав исполнительного адреса входит содержимое регистра BP, для формирования адреса операнда используется сегмент стека, находящийся в регистре SS. Если при вычислении адреса регистр BP не используется, физический адрес формируется с помощью сегмента данных из регистра DS. В любом случае используемый по умолчанию сегментный регистр может быть изменён с помощью префикса замены сегмента, входящего в состав кода команды.


Байт масштаб-индекс-база SIBиспользуется для расширения возможностей адресации операндов. На наличие байта SIB в машинной команде указывает сочетание одного из значений 01 или 10 поля Mod и значения поля R/M = 100. Байт SIB состоит из трех полей (рис. 15):

  • В поле масштаба SS размещается масштабный множитель для индексного компонента Index, занимающего следующие три бита байта. В поле может находиться числа, кратные степени двойки. При вычислении исполнительного адреса на это значение умножается содержимое индексного регистра.

  • Поле Index используется для хранения номера индексного регистра, который используется для вычисления исполнительного адреса операнда.

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

SS

Index

Base

7 6 5 3 2 0

Рис. 15. Назначение разрядов байта SIB.

Отклонениеявляется 8- или 16-разрядной величиной, используемой при вычислении исполнительного адреса операнда. Один или два байта отклонения располагаются в коде команды сразу за байтом ModRegR/M. Для 16-разрядного отклонения сначала идёт младший, затем – старший байты. Наличие отклонения определяется содержимым байта ModRegR/M:

  • 16-разрядное отклонение присутствует в двух случаях: когда поле Mod байта ModRegR/M содержит значение 10, либо когда поле Mod содержит значение 00, а поле R/M – значение 110;

  • 8-разрядное отклонение присутствует, когда поле Mod содержит значение 01.

Непосредственный операндможет быть 8- или 16-разрядной величиной и присутствует в командах вида «регистр-непосредственный операнд» и «память–непосредственный операнд». Его наличие определяется кодом операции, который состоит из байта кода операции и поля Reg байта ModRegR/M. Поля Mod и R/M этого байта определяют местоположение второго операнда – в регистре общего назначения или в памяти. Непосредственный операнд располагается в коде команды за отклонением, а если оно отсутствует – за байтом ModRegR/M.


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

Микропроцессор представляет множество способов доступа к операндам, которые определяются используемым режимом адресации. Операнды могут находиться в регистрах, в командах, в памяти или портах ввода-вывода. Команды могут вовсе не иметь операндов, либо содержать один или два операнда.

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

В двухоперандной команде возможны следующие сочетания операндов:

  • регистр регистр;

  • регистр память;

  • память регистр;

  • непосредственный операнд регистр;

  • непосредственный операнд память.

Из перечисленных сочетаний наиболее часто употребляются регистр-память и память-регистр.

У правила есть исключения, которые касаются:

  • команд работы с цепочками, которые могут перемещать данные из памяти в память;

  • команд работы со стеком, которые могут перемещать данные из памяти в стек;

  • команд, использующих способ неявного задания операнда.

Операнд задается неявно.Команда явно не содержит операндов, но алгоритм ее выполнения использует некоторые регистры по умолчанию (регистры общего назначения, флаги в регистре флагов). Например, командыCLIиSTIработают с флагом прерыванияIF, а команда перекодировки символов XLAT используется без операндов, но требует наличия в регистре BX адреса смещения на таблицу перекодировки, а в регистре AL – порядкового номера исходного символа.

Операнд задается в команде.Для хранения такого операнда в команде выделяется поле длиной до 32 бит. Непосредственный операнд может быть только источником, но не приемником результата. Операнд получатель может находиться в памяти, либо в регистре. Например, командаMOVAX, 0FFFFhпересылает в регистрAXшестнадцатеричную константуFFFF.

Операнд находится в одном из регистров.Регистровые операнды указываются именами регистров. В качестве регистров могут использоваться:

  • 32-разрядные регистры EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP;

  • 16-разрядные регистры AX, BX, CX, DX, SI, DI, SP, BP;

  • 8-разрядные регистры AH, AL, BH, BL, CH, CL, DH, DL;

  • сегментные регистры CS, DS, SS, ES, FS, GS.


Сегментные регистры могут использоваться в качестве операндов только в инструкциях MOV, PUSH и POP. Сегментный регистр CS может быть источником в инструкции MOV, но не может быть приёмником. Он не может также использоваться в команде POP. Регистр флагов и указатель команд IPне могут использоваться в качестве явно задаваемых операндов.

Операндом является порт ввода-вывода.Помимо адресного пространства оперативной памяти микропроцессор поддерживаетадресное пространство ввода-выводаобъемом 64 Кб, используемое для доступа к периферийным устройствам. Для любого периферийного устройства в пространстве ввода-вывода выделяются адреса. Значение адреса в пределах этого пространства называется портом ввода-вывода.

Физически порту ввода-вывода соответствует аппаратный регистр, доступ к которому осуществляется с помощью командINиOUT. Например, командаINAL, 60h читает байт из порта по адресу 60h. Регистры, адресуемые с помощью порта ввода-вывода, могут иметь разрядность 8, 16 или 32 бит. В качестве источника или получателя данных применяются регистры-аккумуляторыEAX,AX,AL. Выбор регистра определяется разрядностью порта. Адрес порта может задаваться непосредственным операндом в командахINиOUTили значением в регистреDX.

Операнд располагается в памяти.Такой способ задания операндов является наиболее эффективным. Он позволяет реализоватьпрямуюикосвеннуюадресацию.

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

Относительная прямая адресацияиспользуется для команд условных переходов. Поле смещения машинной команды содержит 8-, 16- или 32-битное значение, которое складывается с содержимым регистра указателя командIP. В результате по полученному адресу и осуществляется переход.

Абсолютная прямая адресация.Исполнительный адрес является частью машинной команды, но формируется только из поля смещения. Для формирования физического адреса операнда в памяти микропроцессор складывает это поле со сдвинутым влево на 4 разряда значением сегментного регистра (см. раздел 5.4.1). В процессе трансляции ассемблер вычисляет и подставляет значение смещения имени в формируемую им машинную команду в поле смещение. В итоге машинная команда прямо адресует свой операнд, имея в одном из своих полей значение исполнительного адреса.


Косвенная адресация.Остальные виды адресации относятся к косвенным. В команде может находиться часть исполнительного адреса, а остальные компоненты располагаются в регистрах, на которые указывают своим содержимым байты ModRegR/M и SIB. Поле Mod определяет наличие и размер отклонения, а поле R/M – используемую комбинацию регистров. Поле Reg в формировании адреса не участвует. Формула вычисления исполнительного адреса при косвенной адресации имеет следующий вид:

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

Табл. 4. Компоненты эффективного адреса.

Структура данных

Операнд в памяти

Операнд в стеке

Базирования нет

Базирование есть

Простая переменная

disp

BX+disp

BP+disp

Массив

SI

DI

BX+SI

BX+DI

BP+SI

BP+DI

Массивы из записей

SI+disp

DI+disp

BX+SI+disp

BX+DI+disp

BP+SI+disp

BP+DI+disp

Косвенная базовая адресация.Исполнительный адрес операнда находится в базовом регистре BX или BP. Синтаксически такой режим состоит в заключение имени регистра в квадратные скобки. Например, командаMOVAX, [BX] помещает в регистр AX содержимое размером слово по адресу из сегмента данных со смещением, хранящимся в регистре BX. Такой способ адресации позволяет динамически назначить адрес операнда, например, для организации циклических вычислений и работы с различными структурами данных (таблицами или массивами).

Косвенная базовая адресация со смещением.Адресация предназначена для доступа к данным с известным смещением относительно некоторого базового адреса. Например, командаMOVAX, M[BX] пересылает в регистр AX слово из области памяти по адресу: значение регистра BX плюс значение идентификатора M. Транслятор присваивает каждому идентификатору значение, равное смещению этого идентификатора относительно начала сегмента данных. В примере используется модификация адреса (BX регистр-модификатор).