Logo GenDocs.ru

Поиск по сайту:  

Загрузка...

Боровцов Е.Г. Организация ЭВМ - файл n1.doc


Загрузка...
Боровцов Е.Г. Организация ЭВМ
скачать (818.5 kb.)

Доступные файлы (1):

n1.doc819kb.21.12.2012 14:32скачать

n1.doc

1   2   3
Реклама MarketGid:
Загрузка...

6. ОРГАНИЗАЦИЯ СИСТЕМ НА БАЗЕ ПРОЦЕССОРОВ

INTEL80X86

6.1 РЕГИСТРЫ ПРОЦЕССОРА

Базовая модель микропроцессоров Intel80x86 - микропроцессор 18086/8088 имеет следующий набор регистров:



Все регистры являются шестнадцатиразрядными, однако каждый из регистров АХ, ВХ, СХ, DX может использоваться как два восьмиразрядных регистра. Регистры SP, ВР, SI, DI могут использоваться только в качестве шестнадцатиразрядных. Регистры общего назначения процессора (первые восемь) могут использоваться в любых операциях с данными, кроме того, каждый из регистров имеет свои, строго определенные функции:

АХ (AL) выполняет роль, аналогичную аккумулятору процессоров 18080, 18085, Z80 - с использованием данного регистра выполняется умножение, деление, обмен с портами, преобразования, операции двоично-десятичной арифметики;

• ВХ выполняет роль базового регистра при использовании относительной и индексно-относительной адресации;

• СХ (CL) выполняет роль счетчика в командах организации цикла и префиксах, используется при реализации сдвигов и вращений; ,

• DX (DL) используется в качестве расширителя регистра АХ в операциях умножения и деления, а также при обмене данными с портами ввода/вывода в качестве регистра косвенной адресации;

• SP является шестнадцатиразрядным регистром указателя стека;

• ВР используется в качестве базового при адресации относительно вершины стека, позволяя адресовать данные в окне стека (STACK FRAME);

• SI, DI используются в качестве индексных регистров, и в строковых операциях.

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

Регистр флагов F также является шестнадцатиразрядным, однако для хранения флагов, отражающих текущее состояние процессора и вычислительного процесса, используются только девять разрядов. Значения разрядов следующие:

•О - флаг переполнения; сигнализирует о потере старшего бита результата сложения или вычитания в связи с переполнением разрядной сетки при работе со знаковыми числами;

•D - флаг направления, использующийся в строковых операциях; при D=0 адреса последовательно увеличиваются, при D=l уменьшаются;

•I - флаг разрешения прерываний; при I=1 внешние прерывания разрешены, при I=0 внешние прерывания запрещены;

•Т - флаг трассировки; при установленном флаге (Т=1) процессор переходит в пошаговый режим работы, при этом, после выполнения каждой команды генерируется внутреннее прерывание 1; используется отладчиками;

•S - флаг знака; устанавливается в единицу при отрицательном результате операции полученном путем выполнения арифметико-логических команд;

•Z - флаг нуля; устанавливается при нулевом результате;

•А - флаг вспомогательного переноса; устанавливается при наличии переноса из

младшей тетрады в старшую; используется только командами десятичной арифметики;

Р - флаг четности; устанавливается в случае четного числа единиц результата;

•С - флаг переноса; фиксирует значение переноса (заема) при сложении (вычитании), а также значение выдвигаемого бита при сдвигах;

Кроме регистров общего назначения, указателя инструкции и регистра флагов в составе процессора имеется четыре сегментных регистра:



Наличие группы сегментных регистров объясняется применением в микропроцессоре сегментации памяти, которая предполагает выделение в памяти отдельных блоков для хранения кода программ, данных и стека. Адрес начала такого блока или сегмента хранится в соответствующем сегментном регистре. Поскольку сегментные регистры так же, как и регистры общего назначения, являются •шестнадцатиразрядными, то с их помощью возможна адресация 65535 различных сегментов, располагающихся на границе 16 байт. Последовательный блок из шестнадцати байт оперативной памяти в IBM PC носит название параграфа. Размер каждого сегмента фиксированный (для процессоров I8086/88 и для реального режима 80286/80386 и выше) и составляет 65535 байт или 64 Кбайт. В общем случае сегменты могут частично или полностью перекрываться. Дополнительный сегмент и соответствующий сегментный регистр ES используются при работе с большими блоками данных, когда основного сегмента данных недостаточно. Сегментные регистры являются программно-доступными, т.е. программа в ходе функционирования может изменять их значение, получая доступ в различные области физической памяти. Хотя адресные регистры процессора являются 16-ти разрядными, процессор способен адресовать IМ памяти с помощью пары шестнадцатиразрядных величин "сегмент: смещение". Вычисление полного адреса в этом случае осуществляется следующим образом:

•величина "сегмент" во внутреннем регистре шинного интерфейса процессора сдвигается влево на четыре двоичных разряда (что эквивалентно умножению этой величины на 16), при этом освободившиеся младших четыре двоичных разряда заполняются нулями; получается двадцатиразрядный физический адрес памяти, указывающий параграф, с которого начинается сегмент, к которому осуществляется доступ;

•к получившемуся двадцатиразрядному адресу добавляется величина "смещение"; в итоге получается полный двадцатиразрядный адрес байта или слова памяти.

Например, пусть мы имеем величину "сегмент: смещение" в виде 40:1716. Вычислим для нее физический адрес памяти. Сдвигаем величину 4016 на четыре двоичных разряда влево, освободившиеся разряды заполняем нулями, получаем 40016 -адрес параграфа памяти, с которого начинается сегмент с адресом 4016. К получившемуся адресу добавляем 1716 - внутрисегментное смещение. В итоге получаем полный физический адрес памяти - 0041716, по которому размещается требуемый байт. Следует заметить, что преобразование пары "сегмент: смещение" в физический адрес осуществляется однозначно, обратное же преобразование - нет. В частности, физическому адресу 0041716 могут соответствовать, например, такие пары: 40:1716, 20:21716, 30:11716 0:41716 и др.

6.2 РАСПРЕДЕЛЕНИЕ АДРЕСНОГО ПРОСТРАНСТВА

IBM/РС/ХТ/АТ

Распределение памяти компьютера IBM в случае работы под управлением операционной системы MS DOS выглядит следующим образом:



Основная оперативная память (conventional memory) обычно имеет объем 640 К и доступна в системах на базе любых процессоров от Intel8086 и выше. Эта память доступна всегда, вне зависимости от режима работы процессора и установленного менеджера памяти. При более детальном рассмотрении в этой памяти можно выделить несколько достаточно фиксированных областей (при работе в среде MS DOS):

- область векторов прерываний объемом 1К, расположена в диапазоне адресов 00000 ... 003FF. Содержит адреса обработчиков прерываний. Адрес каждого обработчика представляется парой "сегмент: смещение" и занимает 4 байта. Таким образом, область векторов прерываний содержит 256 векторов прерываний;

- служебная область BIOS объемом 256 байт располагается с сегментного адреса 40 или с физического адреса 00400;

- служебная область DOS располагается с сегментного адреса 0050;

- ядро системы, содержащееся в файлах IBMBIO.COM (IO.SYS) и IBMDOS.COM (MSDOS.SYS) (размер зависит от версии системы. В случае, если произведена загрузка DOS в верхние адреса, эта область располагается в другом месте);

- область загружаемых драйверов устройств и системных буферов (также частично может быть перенесена в верхние адреса в системах с процессором 80286 и выше);

- резидентная часть командного процессора COMMAND.COM;

- область пользователя (размер зависит от версии и конфигурации операционной системы);

- транзитная часть командного процессора COMMAND.COM. Область адресов памяти свыше 640 К имеет объем 384 К. В этой области также можно выделить несколько подобластей:

- область системного ПЗУ BIOS; для PC/XT объем ПЗУ BIOS составляет 8 К, BIOS располагается в диапазоне адресов FEOOO ... FFFFF; кроме того, у машин данного класса в диапазоне адресов F6000...FDFFF может располагаться кассетный бэйсик, занимая при этом объем 32 К. Для машин класса PC/AT объем ПЗУ BIOS может достигать 64К и 128К, занимая при этом диапазон адресов FOOOO...FFFFF;

-область видеопамяти; в зависимости от дисплейного адаптера может располагаться в различных участках памяти. Для Дисплейного адаптера MDA (Monocrome Display Adapter) видеопамять располагается с адреса ВОООО и имеет объем 4К. Область видеопамяти цветного графического адаптера CGA (Color Graphics Adapter) занимает диапазон адресов В8000 ... BBFFF (16K). Для улучшенного графического адаптера EGA (Enhanced Graphics Adapter) и адаптера VGA (Video Graphics Array) под видеопамять занимаются две области - для текстового режима - B8000...BDFFF (или BOOOO...B03FF в случае работы в монохромном текстовом режиме), для графического режима - AOOOO...AFFFF (64 К). Следует заметить, что в общем случае видеопамять адаптеров EGA и VGA может превышать объем 64 К, однако, поскольку эта память является страничной, то в общем адресном пространстве компьютера она все равно доступна через окно в 64 К;

- ПЗУ дополнительных адаптеров периферийных устройств в общем случае могут занимать несколько областей, например, ПЗУ BIOS EGA и VGA адаптеров обычно занимает адресное пространство в диапазоне C0000 ... C3FFF (EGA) или С0000 ... C7FFF (VGA); ПЗУ BIOS жесткого диска Может занимать адресное пространство C8000...CBFFF или D8000 ... DBFFF; ПЗУ сетевых адаптеров располагается в диапазоне адресов DCOOO ... DFFFF.

- окно отображаемой памяти (Expanded Memory) обычно располагается в диапазоне адресов ЕОООО ... EFFFF, занимая область размером в 64 К (четыре страницы по 16Кбайт каждая). Отображаемая память имеет страничную организацию и позволяет через окно размером в 64К путем переключения страниц получить доступ к полю памяти, превосходящему размером Ш - т.е. то адресное пространство, которое способен адресовать процессор 18086/88. Изначально спецификация отображаемой памяти была разработана для компьютеров на базе процессоров 18086/88 для расширения объема доступной оперативной памяти, однако в настоящий момент многие машины на базе процессоров 180286/3 86/486/Pentium поддерживают эту спецификацию для совместимости с разработанный ранее программным обеспечением;

- блоки верхней памяти UMB (Upper Memory Block) организуются на машинах с процессором 80286 и выше путем перемещения части Extended памяти в диапазон адресов до 1 Мбайта для увеличения объема памяти, доступной в реальном режиме. Эта память может быть использована для системных буферов, загружаемых драйверов устройств и резидентных программ.

Расширенная память (Extended Memory) присутствует только в системах на базе процессора I80286 и выше. Объем расширенной памяти для процессора 80286 может достигать 15 Мбайт, для процессоров 80386 и выше - 4 Гбайт. Память доступна только в защищенном режиме работы процессора за небольшим исключением 64 Кбайт с сегментного адреса FFFF. Этот блок памяти получил название "Область высших адресов" (High Memory Area или НМЛ). Эта область обычно занимается ядром операционной системы.

6.3 СИСТЕМА ПРЕРЫВАНИЙ

Внутренние аппаратные прерывания (исключения) вызываются аппаратурой процессора, имеют номера в диапазоне 0 ... 31 и обеспечивают реакцию на следующие ситуации:

О - деление на ноль; вызываются инструкциями деления DIV и IDIV в случае нулевого делителя;

1 - пошаговый режим; прерывание возникает после выполнения каждой команды при установленном флаге трассировки Т;

2 - немаскируемое прерывание; генерируется процессором при поступлении сигнала на вход NMI;

3 - прерывание по точке останова; генерируется в случае, если код очередной команды - СС; используется отладчиками;

4 - переполнение; генерируется в случае, если установлен флаг переполнения О и

выполняется инструкция INTO;

5 - печать экрана (Print Screen); вообще говоря, является внешним, однако традиционно имеет фиксированное назначение и располагается в области внутренних прерываний;

6 (80286 и выше) - неверный код операции;

7 (80286 и выше) - математический сопроцессор недоступен; вызывается при
попытке выполнить команду сопроцессора при его отсутствии; может использоваться для
эмуляции сопроцессора; .

8 (80286 и выше) - обнаружена двойная исключительная ситуация; вызывается в случае возникновения более чем одной исключительной ситуации при выполнении очередной команды; в защищенном режиме вызывается при попытке обратиться за установленный предел таблицы векторов прерываний;

9 (80286 и выше) - попытка обращения к памяти за пределами границы сегмента; А (80286 и выше) - неверный сегмент состояния задачи;

В (80286 и выше) - сегмент не найден; возникает при отсутствии требуемого сегмента в памяти в защищенном режиме;

С (80286 и выше) - стек переполнен или неверное значение указателя стека;

D (80286 и выше) - общее нарушение защиты памяти;

Е (виртуальный режим 80386 и выше) - используется для реализации виртуальной памяти;

10 (80286 и выше) –ошибка сопроцессора.

Внешние аппаратные прерывания вызываются внешними по отношению к процессору устройствами. Для управления аппаратными, прерываниями во всех компьютерах IBM PC используется программируемый контроллер прерываний, обеспечивающий обработку прерываний с учетом их приоритетов. ЮМ PC/XT имеет 8 уровней прерываний, IBM PC/AT - 16, так как использует два контроллера прерываний, включенных каскадно. Запросы на аппаратные прерывания 0-7 соответствуют векторам прерываний от 8 до OF, для IBM PC/AT запросам на аппаратные прерывания соответствуют вектора прерываний 70... 7716.

Приоритет аппаратных прерываний следующий:

0 -таймер;

1 -клавиатура;

2 - прерывания от платы расширения (РС,РС/ХТ);

управление вторым контроллером прерываний(АТ);

8 - часы реального времени; ,

9 - программно переводится в 2; 10-резерв;

11 - резерв;

12 - резерв;

13 - математический сопроцессор;

14 - контроллер жесткого диска IDE/EIDE;

15 -резерв;

3 - прерывания от СОМ1 (COM2 для AT);

4 - прерывания от COM2 (СОМ1 для AT);

5 - жесткий диск (PC,PC/XT), принтер 2(LPT2)(AT);

6 - контроллер гибких дисков;

7 - принтер (LPT1).

Высший приоритет имеет аппаратное прерывание 0 - прерывание от таймера, низший - 7 - прерывание от принтера.

Программные прерывания.

Программные прерывания вызываются командой процессора INT n, где n – номер программного прерывания. Программные прерывания можно условно разбить на четыре группы:

•прерывания BIOS;

•прерывания DOS;

•программные прерывания пользователя;

•программные прерывания интерпретатора BASIC;
Прерывания BIOS устанавливаются при включении машины либо при полной
перезагрузке (COLD BOOT) инициализирующей процедурой ВIOS(сокращенный набор прерываний BIOS приведен в приложении 4). Прерывания DOS устанавливаются при загрузке ядра операционной системы и загружаемых драйверов устройств. Прерывания интерпретатора BASIC используются кассетным БЕЙСИКОМ и его дисковыми версиями при их функционировании. Прерывания пользователя могут использоваться программами по усмотрению программиста. В принципе, любое прерывание, как программное, так и аппаратное, может быть дополнено, модифицировано или подменено путем замены в

таблице векторов прерываний соответствующего вектора и написания собственной процедуры обработки прерывания, на которую этот вектор указывает.

6.4 ОРГАНИЗАЦИЯ ВВОДА/ВЫВОДА

Организация обмена с периферийными устройствами в ЮМ РС/ХТ/АТ базируется

'на использовании портов ввода/вывода - специальных регистров, обеспечивающих управление периферийными устройствами и обмен данными, и имеющих адреса на общей шине. Адресное пространство портов ввода/вывода составляет 64 Кбайта, однако реально используется значительно более/ узкий диапазон адресов. Каждое устройство в большинстве случаев представлено несколькими портами, занимающими смежные адреса адресного пространства портов ввода/вывода, при этом порт с самым младшим адресом принято называть базовым. Использование адресного пространства портов достаточно стандартизовано, т.е. в большинстве случаев периферийные устройства имеют стандартные адреса портов, однако, следует иметь в виду, что в ряде случаев, с целью устранения конфликтов с уже установленным оборудованием, адаптер периферийного устройства может быть переконфигурирован для работы в другой области адресуемого пространства портов. Типичная карта портов ввода/вывода для IBM РС/ХТ/АТ может выглядеть, например, следующим образом:





6.5 СИСТЕМА АДРЕСАЦИИ РЕАЛЬНОГО РЕЖИМА

Для процессоров I8086/88 и реального режима процессоров I80286/386 и выше допустимыми являются следующие виды адресации:

• регистровая адресация;

• непосредственная адресация;

• прямая адресация;

• косвенная регистровая адресация;

• базовая адресация;

• индексная адресация;

• базовая индексная адресация;

• относительная адресация;

• неявная адресация.

Регистровая адресация предполагает, что операнд находится в одном из регистров общего назначения, причем, регистр может быть как восьми -, так и шестнадцатиразрядный. Специфичных особенностей не имеется.

Непосредственная адресация предполагает задание в поле операнда команды восьми- или шестнадцатиразрядного непосредственного операнда. В случае двухоперандной команды обязательно соответствие длин операндов. Частным случаем данного вида адресации является длинная прямая адресация, при которой в поле операнда команды содержится четыре байта, указывающие абсолютный адрес памяти в формате "сегмент: смещение", однако подобная форма адресации допустима только в командах межсегментных (далеких) переходов и вызовах подпрограмм. Другая форма прямой адресации допускается в командах обмена с портами, когда в качестве операнда указывается абсолютный адрес порта.

При косвенно-регистровой адресации адрес операнда может располагаться в одном из шестнадцатиразрядных регистров общего назначения, т.е. регистрах ВХ, ВР, SI, DI. Разновидностью данного способа адресации является косвенная адресация портов ввода/вывода через регистр DX.

Базовая адресация предполагает, что в качестве операнда в команде указывается имя базового регистра и смещение. Исполнительный адрес в этом случае указывается как сумма базового регистра и смещения. В качестве базового регистра могут использоваться регистры ВХ и ВР. Причем, если в качестве базового регистра указывается ВХ, выборка операнда осуществляется из сегмента данных, адресуемого сегментным регистром DS, в случае указания регистра ВР выборка операнда осуществляется из стека.

Индексная адресация предполагает, что значение адреса вычисляется как сумма смещения и содержимого индексного регистра SI или DI, указанных в команде. Базовая индексная адресация является комбинацией чисто индексной и базовой адресации, адрес вычисляется соответствующим образом.

Относительная адресация реализуется только по отношению к регистру IP и предполагает, что адрес вычисляется как сумма содержимого регистра IP и смещения. Данная форма адресации используется в командах организации переходов, циклов и вызова подпрограмм, обеспечивая независимость соответствующих команд от места размещения в памяти.

Неявная форма адресации используется в командах умножения, деления,

преобразования и перекодировки, в которых в качестве операнда всегда предполагается

регистр АХ (или пара DX:AX), однако в качестве операнда он не указывается. Кроме того,

подобная форма адресации используется в строковых операциях, в которых для адресации применяются регистры SI и DI, также не указываемые явно в команде.

6.6 БАЗОВАЯ СИСТЕМА КОМАНД ПРОЦЕССОРА

Система команд процессоров 180x86 построена таким образом, что набор инструкций процессора 18086 является базовым для всех последующих моделей. Следовательно, программа, написанная с использованием команд процессора 18086/88 может функционировать на всех последующих моделях. Ниже кратко рассмотрен базовый состав команд процессоров с использованием мнемонических кодов ассемблера для обозначения операций. В приведенной сводке команд использованы следующие обозначения:

dest - операнд-приемник; первый операнд команды и местонахождение результата;

src - операнд-источник; второй операнд команды;

src16 - шестнадцатиразрядный операнд-источник;

src8 - восьмиразрядный операнд-источник;

count - счетчик; может задаваться либо непосредственным операндом, либо с помощью регистра CX(CL);

reg16 - шестнадцатиразрядный регистр;

mem16 - шестнадцатиразрядное слово памяти;

асс - аккумулятор-регистр AX(AL);

port - адрес порта ввода/вывода, задаваемый непосредственно;

addr - адрес памяти;

far_addr - "дальний адрес" - адрес в формате "сегмент: смещение";

near_addr-"близкий адрес" - адрес в формате "смещение";

short_label - "короткая метка" - метка(адрес) отстоящая от текущего адреса не более чем на +/- 127 байт, фактически всегда преобразуется в однобайтовое знаковое смещение;
6.6.1. Арифметические и логические инструкции








6.6.2. Инструкции пересылки данных




6.6.3. Инструкции переходов




Условные переходы.

Все условные переходы - короткие (в пределах 127/-128 байт)



Инструкции работы с подпрограммами и прерываниями



67


6.6.4. Управление состоянием процессора



6.6.5. Операнды инструкций ассемблера

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



6.7 ПРИМЕР ПРОГРАММЫ НА ЯЗЫКЕ АССЕМБЛЕРА

Ниже приведен исходный текст простой программы, обеспечивающей определение конфигурации оборудования компьютера. Здесь же приведен пример использования

директив описания сегментов (SEGMENT, ASSUME) и описания данных.

Prg segment para public 'code'
assume cs:prg,ds:prg,es:prg,ss:prg
org 100h
beg: jmp start

messsopr db 0ah,0dh,'сопроцессор присутствует$'

messmem db 0ah,0dh,'объем оперативной памяти:$'

messdisk db 0ah,0dh,'накопителей на магнитных дисках $'

messser db 0ah,0dh,'последовательных портов $'

messgame db 0ah,0dh,'установлен игровой адаптер $'

messparr db 0ah,0dh,'параллельных портов $'

messvideo db 0ah,0dh,'начальный видеорежим $'

messvidac db 0ah,0dh,'текущий видеорежим $'

reg0l db 'цветной 40x25 $'

reg10 db 'цветной 80x25 $'

reg11 db 'монохром$'

memkb db ' ‘,’k$'

tmp dw ?

am dw offset reg01,offset reg10,oflfset reg11

include bin2str.asm

include hex_out.asm

start: int 11h ; получить конфигурацию оборудования

test ax,2 ; есть сопроцессор ?

jz floppy ; нет сопра, анализируем флоппы .
;присутствует сопроцессор, выводим сообщение

push ах ; сохранить байты конфигурации оборудования

mov ah,9 ; функция DOS вывод строки на экран

lea dx,messsopr ; загрузить адрес сообщения

int21h ; вывести строку на экран

pop ax ; восстановить байты конфигурации

floppy: test ах.1 ;есть флоппы?

jz memory ; нет, идем на память

; есть флоппи, анализируем сколько

push ax ; сохранить байты конфигурации оборудования

mov cl,6 ; установить счетчик сдвигов

shr ax,cl ; сдвиг "ненужных" разрядов

and ах,3 ; выделить биты количества дисков

add ax,31h ; привести число в символьную форму

push ax ; сохранить количество флоппов в стеке

mov ah,9 ; функция 9 DOS - вывод сообщения на экран

lea dx,messdisk ; в DX - адрес сообщения

int 21h ; вывести строку на экран

pop dx ; восстановить количество флоппов в DL

mov ah,6 ; функция 6 DOS - вывод символа на экран

int 21h ; вывод символа в текущей позиции курсора

pop ax ; восстановить в АХ слово конфигурации

memory: push ax ; сохранить слово конфигурации

int 12h ; запрос количества основной памяти

lea bx,memkb ; адрес стр. передается п/п преобразования

call bin2str ; преобразовать число в симв. Форму

mov ah,9 ; функция вывода сообщения на экран

lea dx,messmem ; выдача сообщения

int 21h ; "количество памяти"

mov ah,9 ;

lea dx,memkb+l ; адрес начала симв. предст. числа

int 21h ; вывести объем на экран

pop ax ; восстановить байты конфигурации

;videosystem

push ax ; сохранить байты конфигурации

mov cl,4 ; установить счетчик сдвигов

shr ax,cl ; сдвинуть лишние биты

and ax,3 ; выделить код начального видеорежима

dec ах

push ax ; сохранить приведенный код видеорежима

1   2   3



Скачать файл (818.5 kb.)

Поиск по сайту:  

© gendocs.ru
При копировании укажите ссылку.
обратиться к администрации
Рейтинг@Mail.ru