Лабораторные работы по архитектуре компьютеров. Лабораторные-работы-по-архитектуре-компьютера. Лабораторные работы по архитектуре компьютера
Скачать 0.74 Mb.
|
Адрес вершины стека SS 4BB30H Смещение в SP + 412H Адрес текущего слова в стеке 4BF42H Базовый указатель (base pointer, BP). 16-разрядный ре- гистр BP обрабатывает такие ссылочные параметры, как дан- ные и адреса, передаваемые программой через стек. Процес- сор сочетает адрес в SS со смещением в BP. BP может также сочетаться с DI и SI как базовый регистр специальной адре- сации. В процессоре 80386 впервые появился расширенный 32-разрядный регистр базового указателя – EBP. Регистры общего назначения. 32-разрядные регистры общего назначения – это EAX, EBX, ECX и EDX; их младшие 16 разрядов обозначаются соответственно AX, BX, CX и DX. Каждый из последних, в свою очередь, состоит из двух байтов, например, AX – из старшего AH и младшего AL. Это свойство позволяет обращаться к разным частям регистра для обработ- ки байтов, слов и двойных слов. Следующие ниже инструкции на языке ассемблера иллю- стрируют запись нулей в регистры AX, BH и ECX: MOV AX, 00 MOV BH, 00 40 MOV ECX, 00 Регистр AX – основной аккумулятор, используется в арифме- тических операциях и операциях ввода/вывода. Например, ин- струкции сложения и умножения предполагают использование регистра AX. Кроме того, некоторые инструкции преобразуются в более эффективный машинный код, если они используют имен- но регистр AX. 8-разрядные AH и AL являются левой и правой частями AX, а сам AX – это правая часть регистра EAX. Регистр BX называют базовым регистром, поскольку это единственный регистр общего назначения, который можно использовать в качестве указателя (индекса) для расширения адресации. Другое частое применение этого регистра – для вы- числений. BX может также быть использован в сочетании с DI или SI как базовый регистр для специальной адресации. Вось- миразрядные BH и BL являются левой и правой частями BX, и сам BX – это правая часть регистра EBX. Регистр CX используется как регистр-счетчик. Он может содержать число повторений цикла в программе или величину, на которую нужно сдвинуть биты влево или вправо. CX можно также использовать для различных вычислений. Восьмираз- рядные CH и CL являются левой и правой частями CX, и сам CX – это правая часть регистра ECX. 41 Регистр DX – регистр данных. Он используется в некото- рых операциях ввода/вывода, а операции умножения и деления больших чисел используют AX и DX в паре. Восьмиразрядные DH и DL являются левой и правой частями DX, и сам DX – это правая часть регистра EDX. Регистры общего назначения доступны для сложения и вы- читания 8-,16- и 32-разрядных двоичных чисел: MOV EAX, 337 ; поместить число 337 в EAX (двойное слово) ADD CX, AL ; прибавить AX к CX (слово) SUB BL, AL ; отнять AL от BL (байт) Регистры индекса – это 32-разрядные ESI и EDI. Их млад- шие слова (16-разрядные регистры) – соответственно, SI и DI. Эти регистры доступны для индексированной адресации и ис- пользуются для достижения определенных целей при сложе- нии и вычитании. Регистр SI. 16-разрядный регистр индекса источника (source index register) используется в некоторых строковых (символьных) операциях. В этом случае SI связан с регистром DS. Процессор 80386 впервые представил расширенный 32-разрядный регистр ESI. Регистр DI. 16-разрядный регистр индекса назначения (destination index register) также используется в строковых операциях. В этом случае DI связан с регистром ES. Процес- сор 80386 впервые представил расширенный 32-разрядный регистр EDI. Регистр флагов. Биты 32-разрядного регистра Eflags ука- зывают на состояние различных процессов и компонентов си- стемы. Младшие 16 разрядов регистра Eflags – это, собственно, регистр Flags. Девять из его шестнадцати разрядов указывают на текущее состояние компьютера и результаты выполнения инструкций. Многие инструкции, например, арифметические 42 и сравнения, изменяют состояние этих битов (флагов), и по- следующие инструкции могут их проверять для определения дальнейших действий. Далее кратко описаны эти флаги. OF (overflow, переполнение). Указывает на переполнение старшего разряда после арифметической операции. DF (direction, направление). Определяет правое или левое направление движения при сравнении или перемещении стро- ковых (символьных) данных. IF (interrupt, прерывание). Указывает, будут ли внешние прерывания, например, ввод с клавиатуры, обработаны или проигнорированы. TF (trap, остановка). Разрешает работу процессора в по- шаговом режиме. Программы-отладчики, такие, как DEBUG, устанавливают этот флаг для того, чтобы вы могли детально отслеживать изменения содержимого регистров и других па- раметров после каждой выполненной инструкции. SF (sign, знак). Содержит знак результата последней арифме- тической операции (0 – положительный, 1 – отрицательный). ZF (zero, ноль). Указывает результат последней арифметиче- ской операции (0 – ненулевой результат, 1 – нулевой результат). AF (auxiliary carry, вспомогательный перенос). Содержит бит, переносимый из третьего бита в четвертый бит в специ- ализированных арифметических операциях. PF (parity, четность). Указывает на число единичных битов в результате последней операции. Четное число битов устанав- ливает положительную четность, нечетное – отрицательную. CF (carry, перенос). Содержит перенос из старшего разряда после последней арифметической операции. Содержит также значение последнего бита после операции сдвига и цикличе- ского сдвига (вращения). Флаги в регистре Flags расположены в порядке, показанном ниже: Флаги OF, SF, ZF и CF наиболее важны для программиро- 43 вания на ассемблере арифметических операций и операций сравнения, а DF – для строковых операций. Некоторые другие флаги используются для внутренних нужд, в основном связан- ных с защищенным режимом работы. Память. Два типа внутренней памяти PC – это постоянная память (ПЗУ) и оперативная память (ОЗУ). Последняя также называется памятью с произвольным доступом. Байты в памя- ти нумеруются последовательно, начиная с 0, и каждый байт имеет свой уникальный адрес. На рисунке 6 показана структура внутренней памяти PC с процессором 8086 в качестве простого примера. Из первого мегабайта памяти 640 килобайт – основная оперативная па- мять, большая часть которой доступна для непосредственного использования. Таблица 4.1 Структура ПЗУ персонального компьютера Начало (десятичное) Адрес (шестнадцатеричный) Объем и назначение 960K F0000 64 K – основное ПЗУ системы 768 K C0000 192 K – расширенная область (ПЗУ) 640 K A0000 128 K – видеопамять (ОЗУ) 0 00000 640 K (ОЗУ) – область BIOS. Таблица векторов прерываний ПЗУ состоит из специальных чипов, информация из ко- торых, будучи однажды записана, в дальнейшем только счи- тывается. В силу этого свойства записанные в таких чипах данные и инструкции не могут быть изменены (современные чипы ППЗУ – перезаписываемые, то есть могут быть изменены с помощью специальной программы). ПЗУ BIOS (Basic Input/ Output System – основная система ввода/вывода) начинается с адреса 768 K и отвечает за устройства ввода/вывода, например, 44 контроллер винчестера (жесткого диска). ПЗУ, начинающаяся с адреса 960 K, отвечает за основные функции компьютера, на- пример, самопроверку при включении, рисование точек при вы- воде графики и загрузку операционной системы с диска. Когда вы включаете компьютер, ПЗУ управляет различными провер- ками и загрузкой специальных данных системы с диска в ОЗУ. ОЗУ. Программиста в основном интересует оперативная память (ОЗУ – оперативное запоминающее устройство). В нее можно записывать и из нее можно считывать информацию. Па- мять ОЗУ доступна в качестве «рабочего пространства» для временного хранения данных и выполнения программ. Когда вы включаете компьютер, часть операционной системы загру- жается с диска в ОЗУ. Выполняемая программа находится в памяти и обычно выводит информацию на экран, принтер или диск. После завершения программы операционная система может загрузить на ее место другую программу. Выключение компьютера приводит к потере данных в ОЗУ, но не влияет на ПЗУ. Поэтому, если вы редактировали документ, вы должны сохранять его на диске перед выключением компьютера. Адресация данных в памяти. В зависимости от модели процессор может обращаться к одному или более байтам памя- ти. Рассмотрим десятичное число 1315. Шестнадцатеричное представление этого числа 0529H занимает два байта или одно слово в памяти. Слово состоит из старшего (более значащего) байта 05 и младшего (менее значащего) байта 29. Процессор хранит данные в памяти в инверсном порядке (reverse-byte sequence), то есть младший байт – в ячейке с меньшим адре- сом, а старший байт – в ячейке с большим адресом. Например, процессор передает значение 0529H из регистра в память по адресам 04A26H и 04A27H так: Рис. 6. Передача данных из регистра в память Регистр Память 45 Процессор подразумевает, что данные в памяти хранятся именно в инверсном порядке, и обрабатывает их соответству- ющим образом. Когда процессор извлекает данные из памяти, он переставляет байты, помещая их в регистр в виде hex 05 29. Хотя этот процесс полностью автоматизирован, вы должны помнить о нем при написании и отладке программ на ассем- блере. Для записи числа в память компьютера предусмотрена ассемблерная команда mov, в качестве одного из аргументов которой в квадратных скобках записывается адрес в памяти, по которому нужно произвести запись или чтение, причем в память невозможно записать непосредственное число, можно записать только содержимое какого-либо регистра. Также для того, чтобы поместить данные в память, можно использовать команду push, единственным аргументом которой является ре- гистр, который необходимо сохранить в памяти. Данные со- храняются по адресу, записанному в регистре SP – указатель стека. Для чтения данных из стека предусмотрена команда pop, аргументом которой является регистр, в который необхо- димо записать значение из памяти. Компьютерная шина (от англ. «computer bus, bidirectional universal switch» – двунаправленный универсальный комму- татор) – в архитектуре компьютера подсистема, которая пере- дает данные между функциональными блоками компьютера. Обычно шина управляется драйвером. В отличие от связи «точка–точка» к шине можно подключить несколько устройств по одному набору проводников. Каждая шина определяет свой набор коннекторов для физического подключения устройств, карт и кабелей. Ранние компьютерные шины представляли собой парал- лельные электрические шины с несколькими подключениями, но сейчас данный термин используется для любых физических механизмов, предоставляющих такую же логическую функци- ональность, как параллельные компьютерные шины. Совре- менные компьютерные шины используют как параллельные, так и последовательные соединения и могут иметь параллель- ные (multidrop) и цепные (daisy chain) топологии. В случае 46 USB и некоторых других шин могут также использоваться хабы (концентраторы). Шина адреса – компьютерная шина, используемая цен- тральным процессором или устройствами, способными ини- циировать сеансы DMA, для указания физического адреса сло- ва ОЗУ (или начала блока слов), к которому устройство может обратиться для проведения операции чтения или записи. Основной характеристикой шины адреса является ее ши- рина в битах. Ширина шины адреса определяет объем адре- суемой памяти. Например, если ширина адресной шины со- ставляет 20 бит и размер слова памяти равен одному байту (минимальный адресуемый объем данных), то объем памяти, который можно адресовать, составляет 220 = 1 048 576 байтов (1 МБайт) как в IBM PC/XT. С точки зрения архитектуры микропроцессорной системы, если не применять мультиплексирование, каждый бит в адресе определяется одним проводником (линией) в магистрали, по которой передается адрес. Если рассматривать структурную схему микро-ЭВМ, то адресная шина активизирует работу всех внешних устройств по команде, которая поступает с микропроцессора. Шина данных – шина, предназначенная для передачи ин- формации. В компьютерной технике принято различать выво- ды устройств по назначению: одни для передачи информации (например, в виде сигналов низкого или высокого уровня), другие для сообщения всем устройствам (шина адреса) – кому эти данные предназначены. На материнской плате шина может также состоять из мно- жества параллельно идущих через всех потребителей данных проводников (например, в архитектуре IBM PC). Основной характеристикой шины данных является ее ши- рина в битах. Ширина шины данных определяет количество информации, которое можно передать за один такт. 4.2. Практическая часть Задание 1. Запустите программу DEBUG и убедитесь, что регистр IP содержит значение 0100. 47 Задание 2. С помощью команды A отладчика составьте про- грамму, помещающую нули во все регистры общего назначе- ния. В конце программы введите «int 20», что значит конец программы. Задание 3. С помощью команды R поместите в регистры общего назначения случайные ненулевые числа. Задание 4. Выполните пошагово написанную программу, анализируя каждое действие. Следите за изменяемыми реги- страми. Задание 5. Измените программу так, чтобы к текущему значению регистров общего назначения прибавлялось число F000 16 и записывалось в память, а только после этого регистры обнулялись. Следите за переполнением при сложении чисел. Запись в память производить при помощи ассемблерной ко- манды push. Задание 6. Измените программу так, чтобы к текущему значению регистров общего назначения прибавлялось число F000 16 и записывалось в память, а только после этого регистры обнулялись. Следите за переполнением при сложении чисел. Запись в память производить при помощи ассемблерной ко- манды mov. 4.3. Форма отчета Таблица 4.2 Форма отчета выполняемых действий Команда Выполняемое действие Изменяемые регистры при выполнении команды 48 РАБОТА 5. ПРОГРАММНЫЕ И АППАРАТНЫЕ ПРЕРЫВАНИЯ Цель: научиться использовать программные и аппаратные прерывания. 5.1. Краткая теоретическая часть Прерывание (англ. «interrupt») – сигнал, сообщающий процессору о наступлении какого-либо события. При этом вы- полнение текущей последовательности команд приостанав- ливается и управление передается обработчику прерывания, который реагирует на событие и обслуживает его, после чего возвращает управление в прерванный код. В зависимости от источника возникновения сигнала преры- вания делятся на: – асинхронные, или внешние (аппаратные), – события, кото- рые исходят от внешних источников (например, периферийных устройств) и могут произойти в любой произвольный момент: сигнал от таймера, сетевой карты или дискового накопителя, нажатие клавиш клавиатуры, движение мыши. Факт возник- новения в системе такого прерывания трактуется как запрос на прерывание (англ. «Interrupt request, IRQ»); – синхронные, или внутренние, – события в самом процессоре как результат нарушения каких-то условий при исполнении ма- шинного кода: деление на ноль или переполнение, обращение к недопустимым адресам или недопустимый код операции; – программные (частный случай внутреннего прерывания) – инициируются исполнением специальной инструкции в коде программы. Программные прерывания, как правило, использу- ются для обращения к функциям встроенного программного обе- спечения (firmware), драйверов и операционной системы. Термин «ловушка» (англ. «trap») иногда используется как синоним термина «прерывание» или «внутреннее прерыва- 49 ние». Как правило, словоупотребление устанавливается в до- кументации производителя конкретной архитектуры процес- сора. В зависимости от возможности запрета внешние прерыва- ния делятся на: – маскируемые – прерывания, которые можно запрещать установкой соответствующих битов в регистре маскирования прерываний (в x86-процессорах – сбросом флага IF в регистре флагов); – немаскируемые (англ. «Non maskable interrupt, NMI») – обрабатываются всегда, независимо от запретов на другие пре- рывания. К примеру, такое прерывание может быть вызвано сбоем в микросхеме памяти. Обработчики прерываний обычно пишутся таким образом, чтобы время их обработки было как можно меньшим, посколь- ку во время их работы могут не обрабатываться другие преры- вания, а если их будет много (особенно от одного источника), то они могут теряться. Приоритезация. До окончания обработки прерывания обычно устанавливается запрет на обработку этого типа пре- рывания, чтобы процессор не входил в цикл обработки одно- го прерывания. Приоритезация означает, что все источники прерываний делятся на классы, и каждому классу назначается свой уровень приоритета запроса на прерывание. Приоритеты могут обслуживаться как относительные и абсолютные. Относительное обслуживание прерываний означает, что если во время обработки прерывания поступает более при- оритетное прерывание, то это прерывание будет обработано только после завершения текущей процедуры обработки пре- рывания. Абсолютное обслуживание прерываний означает, что если во время обработки прерывания поступает более приоритет- ное прерывание, то текущая процедура обработки прерыва- ния вытесняется, и процессор начинает выполнять обработку 50 вновь поступившего более приоритетного прерывания. После завершения этой процедуры процессор возвращается к выпол- нению вытесненной процедуры обработки прерывания. Таблица прерываний. Вектор прерывания – закрепленный за устройством номер, который идентифицирует соответству- ющий обработчик прерываний. Векторы прерываний объеди- няются в таблицу векторов прерываний, содержащую адреса обработчиков прерываний. Местоположение таблицы зависит от типа и режима работы процессора. |