Автор работы: Пользователь скрыл имя, 01 Октября 2013 в 20:04, контрольная работа
Микропроцессор Intel-8086 появился как результат совершенствования МП Intel-8080, и архитектура обоих процессоров имеет много общего. Преемственность этих микропроцессоров выражается в программной совместимости снизу вверх, благодаря которой для Intel-8086 можно использовать программное обеспечение Intel-8080.
Микросхема Intel-8086 представляет собой однокристальный 16-битовый МП, выполненный по n-МОП-технологии (металло-оксидный проводник). Кристалл микросхемы размерами 5,5x5,5 мм содержит около 29000 транзисторов и потребляет 1,7 Вт от источника питания 5B. Схема выпускается в 40-выводном корпусе. Синхронизируется импульсами с частотой повторения 25 МГц от внешнего тактового генератора. Основные операции обработки данных типа регистр-регистр выполняются с быстродействием 1,66 х 106 оп/с.
16-разрядные микропроцессоры семейства х86(на примере Intel 8086) 3
Организация ввода-вывода 12
Организация прерываний 13
Задание 2 18
Список литературы 19
По мере необходимости операционное устройство считывает байт из очереди и выполняет предписанную командой операцию. При многобайтовых командах из очереди считываются и другие байты команды. В тех редких случаях, когда к моменту считывания очередь оказывается пустой, операционное устройство ожидает выборку очередного командного слова, которую инициирует шинный интерфейс. Если команда требует обращения к памяти или порту ввода–вывода, операционное устройство запрашивает шинный интерфейс на выполнение необходимого цикла шины для передачи данных. Когда шинный интерфейс не занят выборкой команды, он удовлетворяет запрос немедленно; в противном случае операционное устройство ожидает завершения текущего цикла шины. Со своей стороны, шинный интерфейс приостанавливает выборку команд во время обмена данными между операционным устройством и памятью или портами ввода–вывода.
Сегментация памяти и вычисление адресов. Пространство памяти емкостью 1 Мбайт представляется как набор сегментов, определяемых программным путем. Сегмент состоит из смежных ячеек памяти и является независимой и отдельно адресуемой единицей памяти емкостью 64 кбайт. Каждому сегменту программой назначается начальный (базовый) адрес, являющийся адресом первого байта сегмента в пространстве памяти. Начальные адреса четырех сегментов, выбранных в качестве текущих, записываются в сегментные регистры CS, DS, SS и ES, тем самым фиксируются текущие сегменты программы (кода программы), данных, стека и дополнительных данных. Для обращения к командам и данным, находящимся в других сегментах, необходимо изменять содержимое сегментных регистров, что позволяет использовать все пространство памяти емкостью 1 Мбайт. Частный случай загрузки всех сегментных регистров нулями приводит к организации памяти, характерной для Intel-8080, т. е. фактически к отказу от сегментации памяти.
В сегментном регистре хранится 16 старших битов 20-битового начального адреса сегмента. Четыре младших бита адреса принимаются равными нулю и дописываются справа к содержимому сегментного регистра при вычислении физических адресов ячеек памяти. Поэтому начальные адреса сегментов всегда кратны 16. Поскольку других ограничений на размещение сегментов в памяти нет, сегменты могут быть соседними (смежными), неперекрывающимися, частично или полностью перекрывающимися. Физическая ячейка памяти может принадлежать одному или нескольким сегментам.
Физический адрес ячейки памяти представляет 20-битовое число в диапазоне 0 – FFFFFh, которое однозначно определяет положение каждого байта в пространстве памяти емкостью 1 Мбайт. В начале каждого цикла шины, связанного с обращением к памяти, физический адрес выдается на шину адреса и сопровождается сигналом ALE. Так как МП INTEL-8086 является 16-битовым, то все операции при вычислении физического адреса производятся с 16-битовыми адресными объектами.
Логический адрес ячейки памяти состоит из двух 16-битовых беззнаковых значений: начального адреса сегмента, который называется также просто базой или сегментом, и внутрисегментного смещения, которое определяет расстояние от начала сегмента до этой ячейки. Для вычисления физического адреса база сегмента сдвигается влево на 4 бит и суммируется со смещением,
Сумматор адресов осуществляет вычисление 20-битовых физических адресов.
Указатель команд IP хранит смещение следующей команды в текущем кодовом сегменте, т. е. указывает на следующую по порядку команду. Он является аналогом стандартного программного счетчика с той лишь разницей, что его содержимое определяет адрес команды лишь в совокупности с содержимым регистра CS; если же CS заполнен нулями, аналогия становится полной. Модификация IP осуществляется шинным интерфейсом так, что при обычной работе IP содержит смещение того командного слова, которое шинный интерфейс будет выбирать из памяти. Оно не совпадает со смещением очередной команды (находящейся в этот момент на выходе очереди команд), которую будет выполнять операционное устройство. Поэтому при запоминании содержимого IP в стеке, например при вызове подпрограмм, оно автоматически корректируется, чтобы адресовать следующую команду, которая будет выполняться. Эта особенность является следствием опережающей выборки команд, реализованной в Intel-8086. Непосредственный доступ к IP имеют команды передачи управления.
Организация ввода-вывода
Ввод и вывод данных может осуществляться двумя способами: с использованием адресного пространства ввода-вывода и с использованием общего с памятью адресного пространства, т. е. с отображением на память.
При первом способе применяются специальные команды IN (ввод) и OUT (вывод), которые обеспечивают передачу данных между аккумуляторами AL или АХ и адресуемыми портами. При выполнении команд вырабатывается сигнал М/IO = 0, который идентифицирует выбор пространства ввода-вывода и в совокупности с сигналами WR и RD позволяет сформировать системные сигналы I/O W и I/O R для управления операциями записи данных в порт и чтения.
Команды IN и OUT могут использовать прямую адресацию, когда адрес порта содержится в виде константы во втором байте команды, и косвенную адресацию, когда адрес располагается в регистре DX. В первом случае можно адресовать по 256 портов для ввода и вывода данных. Во втором обеспечивается адресное пространство до 64К 8-битовых портов или до 32К 16-битовых портов. Косвенная адресация позволяет вычислять адреса портов при выполнении программы и удобна при организации вычислительных циклов для обслуживания нескольких портов с помощью одной процедуры.
При втором способе адреса портов размещаются в общем адресном пространстве, и обращение к ним не отличается от обращения к ячейкам памяти. Это повышает гибкость программирования, так как для ввода-вывода можно использовать любую команду с обращением к памяти при любом способе адресации. Так, команда MOV позволяет передавать данные между любым регистром общего назначения или ячейкой памяти и портом ввода-вывода, а логические команды AND, OR, XOR позволяют манипулировать битами в регистре порта. При этом, однако, следует учитывать, что команды с обращением к памяти имеют больший формат и выполняются дольше, чем простые команды IN и OUT. Кроме того, несколько усложняется дешифрирование 20-битового физического адреса порта и сокращается число адресов, которые могут использоваться для ячеек памяти.
Организация прерываний
Для обработки событий, происходящих асинхронно по отношению к выполнению программы, лучше всего подходит механизм прерываний. Прерывание можно рассматривать как некоторое особое событие в системе, требующее моментальной реакции.
Поскольку прерывания возможны самые разнообразные по самым различным причинам, каждому прерыванию присваивается номер прерывания. С каждым номером прерывания связывается то или иное событие. Система умеет распознать какое прерывание, с каким номером произошло, и запускает соответствующую этому номеру процедуру.
Программные прерывания (исключения) вызывают сами программы, поэтому они не являются асинхронными. Для этого они используют команду INT. Программные прерывания удобно использовать для организации доступа к отдельным общим для всех программ модулям.
Например, программные модули операционной системы доступны прикладным программам именно через прерывания, и нет необходимости при вызове этих модулей знать их текущий адрес в памяти. Прикладные программы сами могут устанавливать свои обработчики прерываний для их последующего использования другими программами. Для этого встраиваемые обработчики прерываний должны быть резидентными в памяти.
Аппаратные прерывания вызываются физическими устройствами v приходят асинхронно. Эти прерывания информируют систему о событиях связанных с работой устройств, например о том, что завершилась печатЕ символа на принтере и неплохо было бы выдать следующий символ, или с том, что требуемый сектор диска уже прочитан, его содержание доступно программе.
Использование прерываний при работе с медленными внешними устройствами позволяет совместить ввод/вывод с обработкой данных в центральном процессоре и в результате повышает общую производительность системы.
Внутренние (логические) прерывания формируются самим процессором, когда он встречается с некоторыми особыми событиями вроде деления на 0. Это прерывания с номерами 0, 1, 3, 4.
Внешние аппаратные прерывания вызваны сигналами, внешними пс отношению к центральному процессору, и подаются на его входы INT и NMI.
Прерывания по входу INT относятся в аппаратным маскируемым прерываниям, поскольку могут быть разрешены или запрещены флагом IF регистра флагов.
Обработку аппаратных маскируемых прерываний выполняют контроллеры прерываний, которые принимают запросы на прерывание от нескольких устройств, назначают им приоритеты, выбирают наиболее приоритетные и прерывают работу процессора по входу INT.
Номер вектора прерываний маскируемых прерываний передается в процессор по его восьми младшим разрядам шины данных.
Вход немаскируемого прерывания NMI обычно используется для сообщений о «катастрофических» событий (отключении питания, обнаружении ошибок памяти и т.д.). Номер этого прерывания равен 2.
Так как номер немаскируемого прерывания заведомо известен, то он не передается в процессор и обработка этого прерывания начинается быстрее, чем обработка маскируемых прерываний. Запрос на прерывание NMI маскируется установкой в 1 старшего 7-го бита порта 70h. При этом остальные биты (6-й бит всегда равен 0, а биты 5-0 задают адрес CMOS памяти) должны остаться без изменения. Приоритет NMI выше всех маскируемых прерываний.
Для того чтобы связать номер прерывания с адресом программы обработки прерываний (обработчика прерываний), используется таблица векторов прерываний, занимающая в реальном режиме первый килобайт оперативной памяти - адреса от 0000:0000h до 0000:03FFh. В защищенном режиме используется таблица дескрипторов прерываний ГОТ. Таблица состоит из 256 элементов - FAR-адресов обработчиков прерываний. Эти элементы называются векторами прерываний. В первом слове элемента таблицы записано смещение, а во втором - сегмент адреса обработчика прерываний.
Прерыванию с номером 0 соответствует адрес 0000:0000h, прерыванию с номером 1 - 0000:0004h и т.д. Инициализация таблицы происходит частично программой POST после тестирования аппаратуры, частично при загрузке операционной системы, которая может переключить на себя некоторые прерывания BIOS.
Если программе потребуется изменить обработку некоторых прерываний, то для этого необходимо переназначить требуемый вектор прерываний на свой обработчик. Это можно сделать, изменив содержание соответствующего элемента таблицы векторов прерываний.
Очень важно не забыть перед завершением работы программы восстановить содержимое измененных векторов, т.к. после завершения работы программы память, которая ей была распределена, считается свободной и может быть использована для загрузки другой программы. Если вектор не был восстановлен, и пришло прерывание, то работа системы может нарушиться - вектор теперь указывает на область, которая может содержать все, что угодно. Поэтому последовательность действий для нерезидентных программ, обрабатывающих прерывания, должна быть такой:
-прочитать содержимое элемента таблицы векторов прерываний для вектора с номером того прерывания, какое требуется обработать;
-запомнить это содержимое (адрес старого обработчика прерываний) в области данных программы;
-установить новый адрес в таблице векторов прерываний так, чтобы он соответствовал началу программы обработки прерываний пользователя;
-перед завершением работы программы прочитать из области данных адрес старого обработчика прерывания и записать его в таблицу векторов прерываний.
Отметим, что для резидентных программ (т.е. программ постоянно находящихся в оперативной памяти) последний пункт выполнять не нужно.
Операция изменения вектора прерываний должна быть непрерывной в том смысле, что во время изменения не должно произойти прерывание с номером, для которого производится замена программы обработки. Если, например, будет записано новое значение смещения, а сегмент адреса не успеет обновиться, то по какому адресу будет передано управления в случае прерывания и что при этом произойдет?
Поэтому перед записью в вектор прерываний нужно запретить прерывания командой CLI, а после записи - разрешить командой STI.
Для облегчения работы по замене прерывания DOS имеет специальные функции для чтения элемента таблицы прерываний и для записи в нее нового адреса. Правильность операций при этом будет гарантирована.
Для чтения вектора используется функция 35h DOS (прерывания 21h). Перед ее вызовом регистр AL должен содержать номер вектора в таблице. После выполнения функции в регистрах ES:BX будет искомый адрес обработчика прерывания.
Функция 25h DOS устанавливает для вектора с номером, находящимся в AL, обработчик прерываний DS:DX.
Если необходимо добавить какие-либо собственные действия к тем, что выполняет стандартный обработчик прерывания, то можно организовать цепочку прерываний. Для организации цепочки прерываний необходимо записать в таблицу векторов адрес собственного обработчика, не забыв сохранить прежнее содержимое таблицы. Обработчик пользователя получает управление по прерыванию, выполняет какие-либо действия, затем передает управление стандартному обработчику. Можно сделать и по-другому: Обработчик пользователя вызывает стандартный обработчик, а затем выполняет дополнительные действия. Т.е. можно вставить дополнительную обработку как до вызова стандартного обработчика, так и после его вызова.
Задание 2
Вычислить значение выражения (786+35)*3 + (125-50)/5. Полученный результат записать в регистр DI
Задача решалась с использованием ассемблера, встроенного в Turbo Pascal.
PROGRAM Zadanie_2;
BEGIN
Asm
Mov AX, 786
Add AX, 35
Mov BX, 3
Mul BX
Информация о работе Контрольная работа по «Архитектура вычислительных систем»