
- •Архитектура и структура компьютера
- •3.2 Архитектура системы команд. Классификация процессоров (cisc и risc)
- •3.3 Система команд. Методы адресации и типы данных
- •3.4 Структура и формат команд. Кодирование команд.
- •4.2 Системные блоки – корпуса персональных компьютеров
- •Блок питания
- •4.4 Материнская плата – основа архитектурного исполнения pc
- •4.3.1 Системная шина
- •4.3.1.1 Шина isa (Industrial Standard Architecture)
- •4.3.1.2 Шина pci (Peripheral Component Interconnect bus)
- •Шина agp (Accelerated Graphic Port)
- •4.3.2 Коммуникационные порты
- •Тема 5. Запоминающие устройства эвм
- •Типы запоминающих устройств
- •1Память.
- •5.1.4. Классификация оперативной памяти (озу)
- •5.1.4.1. Введение
- •5.1.4.2. Энергозависимая и энергонезависимая память
- •1.1Полупроводниковая память.
- •5.1.5.1. Sram. Замечания.
- •5.1.6. Динамическое озу.
- •5.1.6.1. Конструктивные особенности.
- •5.1.6.3. Sipp (sip) —модули памяти.
- •5.1.6.4. Simm-модули.
- •5.1.6.5. Сравнение simm-модулей.
- •5.1.6.6. Причины повышения скорости работы edo ram.
- •1.1Память от Rambus (rdram, rimm).
- •5.1.7. Постоянное запоминающее устройство.
- •5.1.8. Флэш-память.
- •5.1.9. Cmos-память.
- •5.1.10. Недостатки перезаписываемой памяти.
- •5.1.10.1. Потеря данных в cmos.
- •5.1.10.2 . Потеря данных в flash-памяти.
- •1Общие рекомендации по выбору памяти.
- •Тема 6. Организация ввода-вывода пк
3.3 Система команд. Методы адресации и типы данных
Команда — это описание элементарной операции, которую должен выполнить компьютер.
В общем случае, команда содержит следующую информацию:
· код выполняемой операции;
· указания по определению операндов (или их адресов);
· указания по размещению получаемого результата.
В зависимости от количества операндов, команды бывают:
· одноадресные;
· двухадресные;
· трехадресные;
· переменноадресные.
Команды хранятся в ячейках памяти в двоичном коде.
В современных компьютерах длина команд переменная (обычно от двух до четырех байтов), а способы указания адресов переменных весьма разнообразные. В адресной части команды может быть указан, например:
· сам операнд (число или символ);
· адрес операнда (номер байта, начиная с которого расположен операнд);
· адрес адреса операнда (номер байта, начиная с которого расположен адрес операнда), и др.
Рассмотрим несколько возможных вариантов команды сложения (англ. add — сложение), при этом вместо цифровых кодов и адресов будем пользоваться условными обозначениями:
|
одноадресная команда add x (содержимое ячейки x сложить с содержимым сумматора, а результат оставить в сумматоре) |
add |
x |
|
двухадресная команда add x, y (сложить содержимое ячеек x и y, а результат поместить в ячейку y) |
add |
x |
y |
|
трехадресная команда add x, y, z (содержимое ячейки x сложить с содержимым ячейки y, сумму поместить в ячейку z) |
add |
x |
y |
z |
3.4 Структура и формат команд. Кодирование команд.
Все возможные преобразования дискретной информации могут быть сведены к четырем основным видам:
1) передача информации в пространстве;
2) хранение информации;
3) логические операции;
4) арифметические операции.
ЭВМ, являющаяся универсальным преобразователем дискретной информации, выполняет все указанные виды преобразований.
Обработка информации в ЭВМ осуществляется автоматически путем программного управления. Программа представляет собой алгоритм обработки информации, записанный в виде последовательности команд, которые должны быть выполнены машиной для получения решения задачи.
Команда представляет собой код, определяющий операцию вычислительной машины и данные, участвующие в операции. Команда содержит также в явной или неявной форме информацию об адресе, по которому помещается результат операции, и об адресе следующей команды.
Процесс выполнения программы состоит из отдельных машинных операций. В данном случае под операцией понимается преобразование информации, выполняемое машиной под воздействием одной команды. Содержанием машинной операции могут быть запоминание в памяти, передача, арифметическое или логическое преобразование машинных слов, а также некоторые вспомогательные процедуры.
По характеру выполняемых операций различают следующие основные группы команд:
1) команды арифметических операций для чисел с фиксированной и плавающей запятой;
2) команды десятичной арифметики;
3) команды логических операций;
4) команды передачи кодов;
5) команды ввода-вывода;
6) команды передачи управления;
7) команды задания режима работы машины.
В команде, как правило, содержатся не сами операнды, а информация об адресах ячеек памяти или регистрах, в которых они находятся.
Код команды можно представить состоящим из нескольких частей или полей, имеющих определенное функциональное назначение при кодировании командной информации. Команда в общем случае состоит из операционной и адресной частей. В свою очередь, эти части могут состоять из нескольких полей.
Операционная часть содержит код операции, который задает вид операции. Адресная часть команды содержит информацию об адресах операндов и результата операции, а в некоторых случаях информацию об адресе следующей команды.
Структура команды определяется составом, назначением и расположением полей в команде. Форматом команды называют ее структуру с разметкой номеров разрядов (бит), определяющих границы отдельных полей команды, или с указанием числа бит в определенных полях.
Организации памяти и адресации.
МП I8008 имеет мегабайтовую память. Для того чтобы адресовать к такому количеству ячеек, необходим 20-разрядный указатель. Поскольку указатель команд IP, также как и все остальные регистры – указатели BX, SI, DI, BP и SP имеет 16 разрядов, МП не имеет прямого доступа сразу ко всей памяти. Эта задача решается с помощью сегментирования.
Организация сегмента.
Каждый сегмент памяти содержит до 64 кб(65536 байт). Начальный адрес сегмента может быть установлен прикладной программой и всегда должен начинаться с 16-байтовых границ. Базовый адрес сегмента получается делением действительного физического адреса начальной ячейки сегмента на 16. Эти базовые адреса содержаться в сегментных регистрах, так что МП одновременно может до четырёх однозначно определяемых сегментов. На расположение сегмента не накладывается никаких специальных ограничений, кроме одного: он должен быть на границы 16 байт (т. е. физический адрес начальной ячейки должен делиться на 16). Сегменты могут быть смежными, разделёнными, перекрываться частично или полностью. После того как сегмент определён, регистры- указатели могут быть использованы для адресного обращения к любому байту или слову в пределах этого сегмента. При такой организации адресации МП имеет прямой доступ только к 64 кб памяти, а к миллиону байтов может адресоваться лишь при помощи регистров-сегментов.
Так как МП I8088 имеет четыре регистра сегментов, в его памяти одновременно выделяются четыре адресуемых сегмента: командный сегмент, сегмент данных, дополнительный сегмент и стековый сегмент.
Командный сегмент представляет собой 64 – килобайтовую область памяти, содержащую машинные команды, которые выбираются УС и выполняются ИУ. Содержимое указателя команд соответствует перемещаемому адресу очередной, выполняемой в этом сегменте, команды.
Сегмент данных представляет собой 64 – килобайтовую область памяти, обычно используемую для запоминания программных данных, переменных и констант.
Дополнительный сегмент обеспечивает дополнительные 64 Кб памяти.
Стековый сегмент содержит стековую структуру емкостью до 64 Кб.
Можно писать программы, которые для хранения команд, переменных и констант, а так же для стека используют один и тот же сегмент памяти. Это достигается назначением во все регистры сегментов одного и того же базового адреса, так что все четыре сегмента будут перекрывать одну и ту же область физической памяти.
Сегментирование эффективно для развития модульного построения программного обеспечения и структурного программирования, где большие программы обычно разбивают на множество более мелких логических модулей.
Организация памяти.
Мегабайтовую память МП I8088 можно рассматривать как последовательность байтов, начинающуюся с физического адреса 00000Н, заканчивающуюся адресом FFFFFH.
Команды и программные данные могут быть записаны побайтно или словами в любой из этих адресов. Для запоминания 16 – битового слова или 32 – битового двойного слова используется следующее соглашение:
16 – битовое слово всегда заносится в память так, что старший байт находится в ячейке с большим номером. Например, если шестнадцатеричное число 0235Н записано в ячейку 2800Н, то при этом сама ячейка 2800Н содержит число 35Н, а число 02Н записывается в ячейку 2801Н.
2
.
32 – битовое двойное слово может быть
использовано в качестве указателя для
адресации байта или слова в любом
сегменте памяти ЭВМ. Младшее слово
адреса указывает перемещаемый адрес,
а старшее слово – начальную ячейку
(базовый адрес) сегмента. Два байта
каждого слова заносятся в память согласно
условию записи 16 - битового слова. Так
как физический адрес определяется 20 –
битовым кодом, то УС генерирует
действительный адрес, соответствующий
адресу в сегменте, сдвигал базовый адрес
(старшее слово) влево на 4 разряда и
прибавляя к нему 16 – битовый перемещаемый
адрес (младшее слово). 32- битовый указатель
заполнен 16 – ричным числом 04854000Н, которое
задет физический адрес 08В50Н (сегмент
04В5Н, сдвинутый на 4 разряда влево), что
дает 4В50Н, плюс перемещаемый адрес
(4000Н).
Режимы адресации.
Операнды команд в программе, написанной на машинном языке, могут храниться в регистре общего назначения, в регистре сегмента или ячейке памяти. Операнды могут быть также заданы и в форме констант, являющихся частью команды. В МП I8088 на основе использования различных режимов адресации реализован ряд гибких методов выборки операндов, определяющих производительность и гибкость МП. Способы адресации МП I8088 используют регистровые и непосредственные операнды, прямую и косвенную адресацию, косвенную адресацию со смещением, базов – индексную адресацию со смещением, адресацию строковых данных и портов ввода – вывода.
Регистровые операнды.
Команды, содержащие только регистровые операнды, являются наиболее компактными и выполняются быстрее всех остальных типов команд. Это происходит вследствие того, что все операции с регистровыми операндами реализуются в ИУ ЦП без обращения к памяти ЭВМ. Регистры общего назначения могут быть источниками операндов, их приемниками или теми и другими одновременно. Сегментные регистры могут использоваться только либо как источники, либо как приемники операндов. Например, машинная команда 20D0 (AND AL, DL) выполняет операцию логического умножения AND содержимого регистров AL и DL и помещает результаты в регистр AL. Регистр DL является источником операнда, а регистр AL – приемником. Эта команда содержит только два байта и выполняется ЦП за 3 такта.
Непосредственные операнды.
Непосредственные операнды – это постоянные данные, определяемые как часть машинной команды. Данные могут быть 8 – или 16 – битовыми. Непосредственные операнды могут быть выбраны достаточно быстро, так как ЦП может получить их прямо из очереди команд без обращения к памяти ЭВМ. Непосредственные операнды могут быть заданы только как так называемые операнды – источники. Машинная команда более компактна, если приемник операнда – аккумулятор (регистр AL или AX).
Например, машинная команда 3С02 (СНР AL, 02) сравнивает содержимое регистра AL с шестнадцатеричным числом 02 и устанавливает определенные флаги в соответствии с результатом сравнения. Непосредственным операндом в этой команде является шестнадцатеричная константа 02. Эта команда занимает только два байта в памяти и может быть полностью выполнена ЦП за 4 такта.
Исполнительный адрес EA.
Перемещаемый адрес внутри сегмента, который ЦП вычисляет для операнда в памяти, называется исполнительным адресом ЕА операнда. Так как сегмент памяти содержит до65536 однобайтовых ячеек, перемещаемый адрес может быть представлен 16-ти разрядным двоичным числом без знака, что обеспечивает возможность доступа к каждому байту сегмента. В тех случаях, когда для определения операнда в памяти в коде машинной команды требуются два байта, группа битов второго байта команды сообщает ЦП, как вычисляется 16-ти битовый адрес необходимых операндов.
10- два байта
смещения (16 бит без знака)
Mod=
00- нет байтов смещения
01-один знаковый
байт смещения
|
|
байт |
слово |
|
|
|
|
|
|
Reg= |
000 |
AL |
AX |
Rm= |
000 |
BX + SI |
BX + SI + смещение |
AL |
AX |
|
001 |
CL |
CX |
|
001 |
BX +DI |
BX + DI + смещение |
СL |
CX |
|
010 |
DL |
DX |
|
010 |
BP+ SI |
BP + SI + смещение |
DL |
DX |
|
011 |
BL |
BX |
|
011 |
BP + 05 |
BP +DI + смещение |
BL |
BX |
|
100 |
AH |
SP |
|
100 |
SI |
SI + смещение |
AH |
SP |
|
101 |
CH |
BP |
|
101 |
DI |
D + смещение |
СH |
BP |
|
110 |
DH |
SS |
|
110 |
Direct |
BP + смещение |
DH |
SI |
|
111 |
BH |
DS |
|
111 |
BX |
BX+ смещение |
BH |
DI |
Поле Mod используется для того, чтобы различить, соответствуют ли операнды команд регистрам ЦП или ячейкам памяти. Величина XX имеет четыре возможных двоичных значения:00, 01, 10, 11. Значение11 в поле Mod указывает на то, что операндами машинных команд являются регистровые операнды. Двоичные значения 00, 01, и 10 задают типы адресам соответственно с нулевым, одно- или двухбайтовым смещением. Смещение может быть 8-ми битовым числом со знаком или 16-ти битовым без знака, которое включается в машинную команду, как ее часть и используется при вычислении исполнительного адреса.
Обозначение YYY соответствует трем битам, образующим поле Reg и используемым для указания регистра, содержащего операнд. Поле Reg идентифицирует 8-ми битовый регистр при байтовых операциях и 16-ти битовый регистр при работе со словами. В некоторых командах эти биты используются также для идентификации группы, к которой относится машинная команда (например команда AND в группе логических команд).
Три бита ZZZ формируют поле Rm. Вместе с полем Mod оно используется для идентификации определенного типа адресации. В команде допустима любая комбинация в полях Mod и Rm, что обеспечивает многообразие регистров адресации в МП.
Прямая адресация.
Простейшим типом адресации является простая; Она не использует не каких регистров. Исполнительный адрес ЕА берется непосредственно из 16-ти битового поля смещения машинной команды. Этот прямой адрес однозначно определяет байт или слова памяти, расположенные внутри сегмента.
Прямая адресация обычно используется для работы с простыми переменными или константами. В МП должно соблюдаться условие, согласно которому прямой адрес не выходит за пределы сегмента данных. Поскольку в программах прямой адрес может определяться относительно любого из четырех доступных сегментов, для его модификации возможно применение префиксных команд. При использовании прямой адресации в поле Mod содержится число 00, а в поле Rm- число 110.
Пусть, например, в программе, написанной на языке ассемблера, регистр сегмента данных DS содержит 04В5H, а байт 1400H текущего сегмента данных – символическое имя LOCI. Машинная команда C606001402 (MOV LOC1.02) предписывает заполнить по перемещаемому адресу 1400H сегмента данных шестнадцатеричное число 02. После смешения команды содержит число 1400H и интерпретируется как исполнительный адрес ЕА. Действительный физический 20-ти битовый адрес, определяемый YC, в этом случае соответствует 05F50H (4B50H+1400H).
Для прямой адресации используется два специальных вида адресации: относительную и абсолютную.
При относительной адресации поле смещения представляется 8-ми битовым числом со знаком. Исполнительный адрес ЕА при этом определяется в результате сложения содержимого поля смещения и регистра указателя команду IP (рис. 9, В).
Относительную адресацию используют для команд условных переходов, таких, как JE (переход по равенству), JO (переход по переполнению). При использовании относительной адресации байт адресации (Mod /Reg/ Rm) не требуется.
При абсолютной адресации часть команд представляет собой 32- битовый указатель, определяющий физический адрес в памяти МП. Младшее слово указателя рассматривается при этом как перемещаемый адрес сегмента, базовым адресом которого является старшее слово указателя (рис 9, с). При абсолютной адресации байт адресации (Mod/Reg/ Rm) также не требуется.
Косвенная адресация
При такой адресации в качестве исполнительного адреса EA выступает содержимое базового или индексных регистров (BX,SI или DI).
Вследствие этого одна и та же команда может быть обращена к множеству различных участков памяти простым изменением содержимого базового или индексного регистров, участвующего в косвенной адресации. При этом содержимое соответствующего регистра- BX,SI или DI- рассматриваются как исполнительный адрес внутри текущего сегмента данных. Прикладные программы могут использовать дополнительные префиксные команды для переназначения в другие сегменты памяти. С помощью адресации данного вида можно очень эффективно организовывать работу с различными участками компьютерной памяти.
При косвенной адресации существует одно исключение: для команды JMP (переход) и CALL ( вызов процедур) В качестве исполнителя может выступать содержимое любого из 16-битовых регистров общего назначения (AX, BX, CX, DX, SJ, DJ, BP, SP)/
Пусть, например, в программе на языке ассемблера регистр DS содержит число 14С5H. Если содержимым регистра SJ является число 28FFH, команда CG0410 (MOV [SI], 10H) заполняем шестнадцатеричное число10 в байте 28FFH сегмента данных. В этом случае содержимое регистра SJ служит исполнительным адресом. Действительный физический 20-битовый адрес памяти, соответствующий перемещаемому адресу 28FFH , при этом равен 1754FH (14C50H+28FFH).
Косвенная адресация со смещением.
При такой адресации используемый адрес ЕА определяется как сумма величины смещения и содержимого одного из регистров - базового или индексного(BX, BP, SJ, DJ) (рис.11).
Величина смещения может быть 8-битовым числом без знака. При использовании регистров BX, SJ или DJ за исполнительный адрес принимается перемещаемый адрес текущего сегмента данных, базовый адрес которого определяется регистром сегмента данных DS. При использовании регистра BP за исполнительный адрес принимается перемещаемый адрес текущего стекового сегмента, базовый адрес которого содержится в регистре сегмента стека SS. Поскольку в прикладных программах могут быть использованы префиксные команды, существует возможность переприсвоения исполнительных адресов относительно других сегментов памяти.
При использовании адресации денного типа поле Mod содержит двоичное число 01 и 10 в зависимости от того, является ли смещение 8-ми 16-битовым числом. Поле Rm представляется двоичным числом 100, 101, 110 или 111 в зависимости от того, какой используется регистр SJ, DJ, BP или BX соответственно.
Рассмотрим пример, в котором регистр сегмента содержит код 04В5Н. Если регистр ВР содержит число FF10Н, машинная команда С6870245 (MOV [BP+02],45H) запоминает шестнадцатеричное число 45 в байте FF12Н стекового сегмента. Величиной смещения является 8-битовое число со значением (02), занимающее в команде третий байт. Исполнительный адрес ЕА вычисляется в результате сложения величины смещения с содержимым регистра ВР (FF10Н+02Н). Это соответствует физическому адресу 14А62Н (4В50Н+FF12Н) памяти, который определяется УС. Поскольку при использовании регистра ВР описанная адресация обеспечивает доступ к стековому сегменту, это очень удобно для работы с конструкциями данных, использующих стек.
Базово-индексная адресация.
При такой адресации исполнительный адрес определяется в результате сложения содержимого базового регистра (ВХ или ВР) и индексного регистра (SJили DJ).
Благодаря возможности в процессе выполнения программы содержимого базового и индексного регистров, базово-индексная адресация является очень гибким средством доступа к самым различным участкам памяти. При использовании регистра ВХ исполнительный адрес определяется относительно сегмента данных с базовым адресом, содержащимся в регистре РS. При использовании регистра ВР исполнительный адрес определяется относительно сегмента стека, базовый адрес которого содержится в регистре SS. Прикладные программы могут включать префиксные команды, дающие возможность переприсвоить исполнительный адрес относительно других сегментов памяти компьютера.
При базово-индексной адресации поле Mod представлено числом 00. Поле Rm- двоичным числом 000, 001, 010 или 011 соответственно используемой адресации [BX+SJ], [BX+DJ], [BP+SJ] или [BP+DJ].
Пусть регистр сегмента данных содержит код 04В5Н. Если регистры ВХ и SJ содержат коды 1000Н и 1500Н соответственно, то машинная команда С60015 (MOV[BX+SJ],15Н) запомнит шестнадцатеричное число 15 в байте памяти, имеющим адрес 2500Н в сегменте данных. Исполнительный адрес вычисляется суммированием содержимого регистров BX и SJ (1000Н+1500Н). Этот адрес соответствует действительному физическому адресу памяти 07050Н(4В50Н+2500Н), устанавливаемому УС с шиной.
Базово-индексная адресация со смещением.
При такой адресации исполнительный адрес определяется сложением содержимого базового регистра (ВХ или ВР), индексного регистра (SJили DJ) и величины смещения.
Как отмечалось выше, величина смещения является частью команды и может быть 8-битовым числом со знаком или 16-битовым числом без знака. За исполнительный адрес принимается перемещаемый адрес текущего сегмента данных или стекового сегмента в зависимости от того, какой из регистров используется - ВХ или ВР соответственно. Прикладные программы могут содержать префиксные команды, благодаря которым можно переприсвоить исполнительные адреса относительно других сегментов памяти.
При базово-индексной адресации со смещением поле Mob представляет собой двоичное число 01 или 10 в зависимости от того, определяется ли смещение 8-ми или 16-битовыми числами. Поле Rm представляется точно так же, как и в случае базово-индексной адресации.
Рассмотрим пример, в котором регистр сегмента стека содержит число 04С5Н. Если регистр ВР или SJ содержит соответственно FF00Н и 0010Н, по машинной команде С642200АВ (Mov[BP+SJ+20Н], 0BH) шестнадцатеричное число 0В будет записано в ячейку FF30Н стекового сегмента. Смещением в этом случае является 8-битовое число со знаком (шестнадцатеричное число 20Н). Исполнительный адрес равен сумме величины смещения и содержимого регистров ВР и SJ(FF00H+0010H+20H) и соответствует действительному физическому адресу памяти 14В80Н(4С50Н+FF00Н+001Н+20Н), определяемому УС с шиной.
Адресации строк данных.
Строковые команды такие, как MOVS (переслать строку), CMPS (сравнить строку), LOPS(загрузить строку), CTOS (записать строку) и SCAS(скопировать строку), не используют ни один из рассмотренных выше типов адресации для выборки своих операндов. Содержимое индексных регистров (SJ и/или DJ) используется для непосредственного указания требуемого участка памяти. Регистр SJ всегда используется как указатель первого байта или слова строки-источника.
Регистр DJ используется как указатель первого байта или слова строки-приемника. Команда LODS предлагает использование регистра SJ в качестве указателя источника. Команды STOS и SCAS используют регистр DJ в качестве указателя приемника. Команды MOVS и СMPS используют оба регистра SJ и DJ. Перемещаемый адрес, находящийся в регистре DJ, всегда относится к текущему дополнительному сегменту. Для команд со строковыми данными могут быть определены и префиксные команды, которые позволяют переприсвоить сегмент данных (для команд LODS, MOVS и CMPS) или дополнительный сегмент (для команды SCAS) другому сегменту, расположенному в любой части памяти. При использовании строковой команды увеличение или уменьшение содержимого регистров SJ или DJ определяется состоянием (нулевое или единичное) флага направления. В зависимости от того, с чем работает команда с байтами или со словами, содержимое индексных регистров увеличивается/уменьшается соответственно на 1 или 2.
Адресация порта ввода-вывода.
Э
тот
тип адресации обеспечивает доступ к
устройствам ввода-вывода (в/в),
присоединённым в/в области памяти МП.
Область в/в МП I 8088 в
дополнение к мегабайтовой памяти
содержит ещё 64 КБ.
Эта область в/в не является сегментируемой и может выполняться как отдельно, так и вместе со всей памятью МП. В последнем случае уменьшается мегабайтовая память на 64 КБ, но обеспечивается дополнительная гибкость при программировании, так как все рассмотренные ранее типы адресации могут обеспечить доступ к этой области.
Каждый байт области в/в может быть назначен в качестве адреса однозначно определяемого порта в/в. Данные могут передаваться между накопителем и любым портом в/в, адресуемом внутри 64-килобайтовой области в/в. Регистр AL используется для передачи байта, а регистр АХ – для передачи слова. Для адресации порта в/в существуют команды IN (ввести из порта) и OUT (вывести в порт). Если номер порта находится в пределах 0-255 (десятичных чисел), он может быть определён частью машинной команды; если же номер порта превышает 255, то для его хранения используют регистр DX.
Работа со стековой памятью.
Стек – это область памяти, специально выделенная для временного хранения параметров или программных данных, необходимых для информационной связи программ и процедур. Максимальная ёмкость стековой памяти составляет 32К (32768) 16-битовых слов. Т. о. стек может полностью размещаться в одном сегменте памяти.
Поскольку существует только один регистр сегмента стека SS, хранящий начальный (базовый) адрес стека, в каждый момент времени можно обращаться только к одному стеку. Указатель стека SP используется для хранения адреса последнего члена последовательности (вершины стека), записанного в стек.
В большинстве случаев программист не должен следить за адресами действительного расположения программных данных в стеке. Такие команды, как PUSH (записать данные в стек), РОР (считать данные из стека), CALL (вызов процедуры), RET (возврат из процедуры) или IRET (выход из прерывания), автоматически изменяют содержимое указателя стека SP так, чтобы отслеживать адрес вершины стека.
Запись данных в стек называется операцией загрузки. При загрузке в стек нового числа содержимое указателя стека возрастает на 2, при этом полагают, что ячейка стека, содержавшая считанные числа, считается свободной и готовой для последующего использования. Физически же содержимое ячейки компьютерной памяти после операции считывания остаётся без изменений.
Команды PUSH (записать данные в стек) и РОР (считать данные из стека) позволяют организовать обмен данными между стеками и любым из 16-битовых регистров общего назначения или ячейками памяти.
Процедуры вызова и возврата, использующие стек.
Процедуры и подпрограммы позволяют многократно использовать фиксированную последовательность команд и данных различными программами, которые могут располагаться в любых участках памяти ПК. Для этого машинные команды CALL (вызов процедур) и RET (возврат из процедур) устанавливают стандартную форму передачи управления от программы к процедуре и возврат управления команде, следующей за командой CALL после выполнения процедуры.
Вызов и возврат внутри сегмента. Если физический адрес ячейки памяти, содержащей команду CALL, и начальная ячейка процедуры лежат внутри сегмента, то для передачи управления процедуре используется внутрисегментная команда CALL. Адрес возврата (адрес команды, следующей за командой CALL) загружается в текущий стек (определяемый указателем стека SP и регистром SS).
Последней командой выполняемой перед
выходом из процедуры, должна быть команда
RET (шестнадцатеричный
машинный код – С3), по которой содержимое
вершины стека (являющееся адресом
возврата) считывается в указатель команд
IP. Это обеспечивает
передачу управления команде, следующей
за командой CALL. В языке
ассемблера процедура, выполненная
в
нутрисегментным
вызовом, определяется как NEAR.
Межсегментные вызовы и возвраты.
П
рограмма
может передавать управление процедуре,
находящейся в произвольном месте памяти
МП, используя межсегментную команду
CALL. Выполняя её, процессор
автоматически осуществляет следующие
операции (рис.17):
Указатель стека уменьшается на 2. Содержимое регистра CS, базовый адрес текущего командного сегмента, переносится в ячейку – вершину стека;
Указатель стека вновь увеличивается на 2. В стек загружается перемещаемый адрес команды, следующей за командой CALL.
Последней машинной командой из процедуры, вызванной межсегментной командой вызова, должна быть команда RET (код СВ.). В языке ассемблера процедуры, вызываемые командой межсегментного вызова, определяются как FAR. При осуществлении команды RET МП автоматически выполняет следующие операции
Слово из вершины стека (определяемой указателем стека SP) считывается в указатель команд IP. Для определения новой вершины стека содержимое регистра SP увеличивается на 2;
Слово, занимающее новую вершину стека, переписывается обратно регистр CS. Содержимое регистра SP вновь возрастает на 2.
Таким образом, управление передаётся команде, следующей за командой CALL.
Вложенные процедуры вызова и возврата.
Программа может передавать управление процедуре, которая в свою очередь может вызывать другую процедуру, расположенную в произвольном месте памяти ЭВМ. В этом случае вторая процедура определяется как вложенная процедура вызова. Благодаря использованию стека, становятся возможными считывание всех адресов возвратов автоматически в требуемом порядке без каких-либо дополнительных программных сложностей и вставка произвольно чередующихся межсегментных и внутрисегментных вызовов без какой бы то ни было путаницы.
Использование стека для передачи переменной.
Хранение в стеке параметров или промежуточных результатов ведущей программы позволяет воспользоваться или при выполнении определяемой процедуры (программы). Во многих случаях операции, осуществляемые процедурой, могут выполняться непосредственно под данными, расположенными в стеке. Для указания данных, хранящихся в стеке, обычно используется регистр ВР. Вместе с командой RET может быть определено смещение для обхода области переменных в стеке, что позволяет при возврате передать контроль команде, следующей за командой CALL.
Прерывание работы микропроцессора.
Прерывания осуществляются аппаратными средствами, которые заставляют МП приостановить выполнение текущей программы и отреагировать на внешнее событие. Прерывание используется, прежде всего, для увеличения эффективности МП. Прерывание используется в качестве удобного средства, обеспечивающего доступ к аппаратному оборудованию и утилитным программам, контролируемым операционной системой. Прерывания дают возможность осуществлять операции ввода-вывода независимо от МП.
Поскольку быстродействие ЦП значительно выше, чтобы ЦП имел возможность выполнять другие программы или осуществлять более полезные функции, чем постоянный контроль за состоянием присоединённых к нему периферийных устройств. Когда же устройство ввода или вывода требует обслуживания со стороны ЦП, оно сообщает об этом МП формированием соответствующего сигнала, по которому может быть прервано выполнение текущей программы.
ЦП может игнорировать требование маскируемого прерывания и продолжать выполнять текущую программу. Это происходит тогда, когда флаг разрешения прерывания IF регистра флагов содержит 0 (прерывание невозможно) и маскируемые прерывания должны ждать обслуживания ЦП-м. ЦП может либо вообще не обработать маскируемое прерывание, либо обработать его через какое-то время (после того как обработает текущую программу). В этом случае флаг разрешения прерывания IF регистра флагов станет 1.
Если обрабатывается не маскируемое прерывание, то ЦП должен немедленно приостановить выполнение текущей программы и отреагировать на поступивший сигнал прерывания, не считаясь с положением флага разрешения прерывания. Немаскируемые прерывания имеют в ЭВМ наивысший приоритет и должны обслуживаться МП немедленно. При использовании ЭВМ в монопольном режиме немаскируемыми прерываниями являются фактически "катастрофы", такие, как ошибка памяти или сбой питания. При коллективном или мультипрограммном режиме пользования МК-ми немаскируемыми прерываниями могут быть сигналы системного времени на прекращение работы (например, для выполнения другой программы) или сигнал прекращения выполнения программы, которая нарушила границы, отведённой ей памяти (программные ошибки, приводящие к её неправильному выполнению).
Прежде, чем реагировать на прерывание, ЦП всегда завершает выполнение текущей машинной команды. Если машинная команда состоит из множества тактов (например, команды умножения и деления), требование на прерывание не выполняется до полной реализации машинной команды, и только после этого оно будет опознано и обслужено МП. Время, необходимое ЦП для того, чтобы отреагировать на требование прерывания, называется задержкой прерывания.
Каждому прерыванию соответствует код, по которому его различает МП. В системе может быть до 256 типов прерываний. Прерывания могут генерироваться требованиями устройств ввода-вывода, внешними по отношению к ЦП. Такого типа прерывания могут быть как немаскируемые, так и маскируемые. Прерывания могут быть внутренними, возникающими в прикладных программах при определённых условиях, таких как выполнение команды INTO (прерывание по переполнению), когда флаг переполнения OF равен 1.
ЦП автоматически присваивает текущую работу в следующих случаях:
при делении на 0 (прерывание из-за ошибки деления, тип 0);
при восполнении команды, когда флаг ловушки TF находится в состоянии 1 (пошаговый останов, прерывания 1);
при выполнении команды СС (16 –й код )(прерывании в заданной точке программы).
Внешние прерывания
В систему, основанную на МП I8088, может входить много соединённых с ним BY: принтер, терминал, ЗУ на гибких дисках, клавиатура и др. Ряд из них требует «внимания» со стороны МП лишь на непродолжительный срок; остальное время они могут функционировать без помощи ЦП.
Рассмотрим клавиатуру. Хорошая машинистка вводит до 400 символов в минуту. Это означает, что новый символ может поступать от клавиатуры в ЭВМ каждые 150 мс, а МП должен каждые 150 мс считывать и запоминать символ, введённый с клавиатуры.
Сам процесс считывания символа и запоминания его в память занимает 10 мкс. В этом примере преимущества от использования прерываний очевидны. Каждый раз, когда нажимается клавиша, устройство выдаёт в ЦП требование на прерывание. Чтобы ни выполнял МП, он постанавливает свою работу, и передаёт управление процедуре прерываний, обслуживающей клавишное устройство, которая содержит команды, необходимые для оценивания и занесения символа в компьютерную память.
Когда эта процедура завершается, ЦП продолжает свою работу с того места программы, где его застало прерывание. Благодаря механизму прерывания, процессор тратит менее 10 мкс на считывание каждого символа, вводимого с клавиатуры. А в течении времени, оставшегося от 150 мс интервала между двумя символами, вводимыми с клавиатуры, он может выполнять другие действия.
У МП есть три линии прерываний, RESET, NMI и INTR, по которым ВУ могут передавать свои запросы на обслуживание со стороны ЦП.
Запуск ЦП
При появлении запроса в линии RESET ЦП выполняем следующие действия:
устанавливаем флаг IF в нулевое состояние. Это приводит к невозможности выполнения маскируемых и пошаговых прерываний;
обнуляет регистры сегментов DS, ES, SS;
обнуляет указатель команд IP;
засылает шестнадцатеричное число FFFF в регистр сегмента команд.
ЦП начинает работу с обращения к ячейке памяти с адресом FFFFО. Эта ячейка содержит команду IMP, которая передает управление процедуре инициализации, запускающей МК.
Векторы прерываний служат для идентификации процедур, необходимых для обслуживания требования прерывания. Каждому внешнему требованию на прерывании может быть поставлен в соответствие код прерывания в переделах 0 – 255.
В ПК семейства I 8088 существует 256 векторов прерываний – по одному вектору на каждый тип прерывания.
Т
аблица
векторов прерываний ПК фирмы IBM.
Таблица векторов прерываний занимает 1024 младших байта памяти – ячейки с физическими адресами от 0 до 03FFH – и имеют 256 входов в соответствии с количеством векторов.
Каждый вход таблицы является указателем двойного слова, содержащего начальный адрес процедуры, которая обеспечивает обслуживание требования на прерывание данного типа. Старшее 16-битовое слово каждого входа содержит базовый адрес сегмента, в котором находится процедура. Младшее 16-битовое слово каждого входа содержит перемещаемый адрес процедуры обслуживания внутри сегмента. Так как каждый вход таблицы занимает 4 байта, первая ячейка входа для прерывания данного типа может быть определена простым умножением кода типа прерывания на четыре.
Маскируемые прерывания. Это внешние требования, поступающие в МП по линии INTR. С помощью маскируемых прерываний можно засинхронизировать с ЦП наибольшее число BУ. При активизации линии INTER МП осуществляет различные действия, зависящие от состояния флага прерываний. Реализуемая в этот момент машинная команда всегда выполняется до конца, и только после этого начинаемая обработка запроса на прерывание.
Если флаг прерываний находится в нулевом состоянии (прерывание невозможно), то требования маскируемого прерывания игнорируются и ЦП продолжает выполнять очередную команду текущей программы. Если состояние флага прерываний единичное (прерывание разрешено), МП подтверждает требование прерывания и передает управление той программе, которая должна обслужить поступившее требование. Для выполнения требования маскируемого прерывания ЦП автоматически выполняет следующую последовательность действий:
генерируется сигнал прерывания внешнего прерывания. Этот сигнал сообщает ВУ о том, что его требование признано;
считывается код прерывания, поступивший на шину с ВУ;
содержимое регистров флагов записываемая в ячейку памяти, адрес которой хранится в текущей в текущей вершине стека, определяемой регистром SS и SP;
обнуляется флаг прерываний, что предотвращает возможность выполнения вновь поступающего маскируемого прерывания;
обнуляется флаг ловушки TF, что делает невозможным пошаговый режим;
В указатель команд IP засылаемая 16-битовое слово, находящееся по физическому адресу (TYPE*4) и (TYPE*4)+1, где TYPE – код типа прерывания;
в регистр сегмента команд CS засылается 16-битовое слово, находящееся в ячейках памяти с физическим адресом (TYPE*4)+2 и (TYPE*4)+3.
После выполнения операции 6) и 7) управление передается процедуре обслуживания прерывания, содержащей машинные команды, подходящие для удовлетворения требований маскируемого прерывания. Одной из таких команд, содержащихся в процедуре обслуживания, является команда STI (установить прерывание), которая устанавливает флаг прерываний в 1-е состояние и тем самым делает возможным выполнение новых требований, поступающих на INTER.
Немаскируемые прерывания. Это внешние прерывания, поступающие в МП по линии NMI. Обычно ими являются прерывания, сигнализирующие ЦП о внешних событиях особой важности, таких как отключение питания, сбой памяти и т.д. Немаскируемые прерывания признаются МП всегда независимо от состояния флага прерываний. Таким образом, немаскируемые прерывания имеют более высокий приоритет по сравнению с маскируемыми. Им присвоен тип 2. МП в ответ на требование немаскируемого прерывания выполняет следующую последовательность операций:
содержимое регистра флагов записывается в ячейку памяти (адрес который хранится в текущей вершине стека), определяемую регистрами SS и SP;
обнуляется флаг прерываний IF, что запрещает выполнение всех маскируемых прерываний;
обнуляется флаг ловушки TF, что делает невозможным пошаговый режим;
в стек загружается содержимое регистра сегмента команд CS;
в стек загружается содержимое указателя команд IP;
16-битовое слово из ячейки с физическим адресом 00008Н записывается в регистр IP;
16-битовое слово из ячейки с физическим адресом 0000АН записывается в регистр CS.
После выполнения операций 6 и 7 управление передается процедуре обслуживания прерываний, содержаний команды, которые необходимо выполнить для удовлетворения требования, поступившего по линии NMI.
Внутренние прерывания.
Эти прерывания обусловливаются прикладными программами, использующими команду INT. Они возникают также при некоторых условиях по сигналам в самом МП, например, при ошибках деления, переполнении и т. п. Внутренние прерывания аналогичны маскируемым, требования на которые поступают по линии INTR. Отличие заключается только в том, что МП реагирует на запросы внутренних прерываний независимо от состояния флага прерываний IF.
Код типа внутреннего прерывания может быть задан аппаратно либо представлен частью машинной команды. Если тип прерывания кодируется командой, то оно называется программным прерыванием. Последние являются удобным средством проверки процедур прерывания, составленных для обслуживания ВУ.
В ПК IBM программные прерывания используются для реализации возможностей, предоставляемых системным программным обеспечением BIOS. Так, например, команда INT 16Н может быть использована для чтения символа из буфера клавишного пульта ЭВМ.
Прерывания из-за ошибки деления.
МП автоматически генерирует прерывание типа 0 немедленно вслед за операциями DIV (деление) или IDIV (целочисленное деление) при возникновении следующих условий:
деление на 0;
если результат занимает больше 8 или 16 бит при делении соответственно 8- и 16-разрядных чисел.
Адрес процедуры обслуживания прерывания типа 0 должен определяться ячейками памяти с физическими адресами с 00000Н по 00003Н.
Прерывание в точке.
Прерывание в заданной точке (месте) программы используется в основном для отладки программы при её написании или тестировании. МП генерирует прерывание типа немедленно по завершении выполнения команды INT 3 (CCH). Шестнадцатеричный машинный код СС используется как команда прерывания в точке. Его можно вставить в любое место программы, где необходимо прервать его нормальное выполнение, и с помощью процедуры, обслуживающей это прерывание, отобразить критическую информацию, такую, как содержимое регистров ЦП и ячеек памяти. Поскольку минимальная смысловая часть команды на языке МП I8088 занимает один байт, машинный код ССН может заменить любую команду, обозначая тем самым точку программы, в которой необходимо осуществить прерывание.
Пошаговое прерывание. Если флаг ловушки регистра флагов находится в первом состоянии, то сразу после выполнения текущей команды осуществляется пошаговое прерывание. Этому прерыванию присвоен тип 1, и служит оно для покомандного выполнения программы. Прерывание типа 1 происходит автоматически после выполнения каждой машинной команды. При генерации прерывания МП автоматически загружает в стек содержимое регистра флагов (С 1-м флагом ловушки), после чего обнуляет флаги ловушки и прерываний. Таким образом, ЦП не переходит в пошаговый режим, пока выполняется сама процедура обслуживания прерывания, которая реализует различные диагностические операции, такие, как отображение содержимого регистра ЦП или определённых ячеек памяти и т. п. Последней машинной командой в процедуре обслуживания должна быть команда IRET(выход из прерывания). Этим восстанавливается прежнее 1-ое состояние флага ловушки, и по завершении следующей команды вновь генерируется прерывание типа 1.
В МП I8088 нет команд, которые непосредственно изменяли бы состояние флага ловушки. Но содержимое регистра флагов можно загрузить в стек, и состояние флага ловушки может быть изменено с помощью модификации образа флага, находящегося в стеке. Таким образом, для инициации пошагового режима могут быть использованы команды PUSHF(записать флаг в стек) и POPF(считать флаг из стека).
Состав персонального компьютера
Устройства в составе персонального компьютера IBM-PC
Системный блок, монитор, клавиатура и периферийные устройства
Внешний вид персонального компьютера может иметь самые разнообразные формы. Как правило, мы можем выделить несколько крупных объектов, оформленных в виде отдельных компонент соединенных кабелями или шлейфами, представляющих персональный компьютер непосредственно и периферийные компоненты. В зависимости от реализации исполнения и дизайна корпуса системного блока, монитора и клавиатуры они могут быть объединены в один или более общих корпусов и выполняться как совершенно самостоятельные отдельные элементы.