Автор работы: Пользователь скрыл имя, 26 Февраля 2013 в 22:31, лабораторная работа
Целью работы является исследование архитектурных характеристик от-
дельных микропроцессоров и приобретение навыков записи программ в мне-
мокодах и машинных кодах.
Лабораторная работа №1.
«Изучение архитектуры микропроцессоров»
1.1 Цель работы
Целью работы является
дельных микропроцессоров и приобретение навыков записи программ в мне-
мокодах и машинных кодах.
1.2 Общие положения
1.2.1 Архитектура микропроцессорных систем
Центром вычислительной
ное звено, или "мозг" компьютер(см. лекц.).
Именно процессор обладает
ставляющие компьютерную программу. Персональные компьютеры строятся
на базе микропроцессоров, выполняемых в настоящее время на одном кри-
сталле или "чипе".
Для программиста, разрабатывающего программное обеспечение мик-
ропроцессорной системы (МПС) на языке ассемблера, микропроцессор (МП)
представляется в виде следующих элементов: памяти, счетчика команд, рабо-
чих регистров процессора, регистров признаков, стека и указателя стека, пор-
тов ввода-вывода, системы прерывания, набора команд.
При программировании МПС
архитектуры МП. В общем случае под архитектурой МП понимают совокуп-
ность следующих компонентов и характеристик:
- разрядность адресов и данных;
- состав, имена и назначение программно-доступных регистров;
- форматы системы команд;
- режимы адресации памяти;
- способы машинного
- способ адресации внешних
ций ввода-вывода;
- особенности инициирования и обработки прерываний.
Программы, управляющие
положены в различных типах памяти. Наиболее часто используют постоянное
(ПЗУ) и оперативное (ОЗУ) запоминающие устройства. Из ПЗУ МП может
лишь считывать команды и данные, но не может модифицировать его содер-
жимого в отличие от ОЗУ, для которого возможно как считывание, так и запись
любой информации.
1.2.2 Архитектура микропроцессора
Архитектуру МП Intel 8086 в упрощённом виде, с функциональной точки зрения, можно представить из двух частей: операционное устройство и шинный интерфейс. Все компоненты МП взаимодействуют между собой посредством систем шин: адресных (16 разрядов), данных (8разрядов) и управления. В процессоре 8086 имеется несколько быстрых элементов памяти на интегральных схемах, которые называются регистрами. Каждый из регистров предоставляет определенные возможности, которые другими регистрами или ячейками памяти не поддержи-
ваются.
Регистры разбиваются на четыре категории:
- регистр флагов;
- регистры общего назначения AX, BX, CX, DX, BP, SP,DI и SI;
- указатель инструкций IP;
- сегментные регистры CS, SS, DS и ES.
1.2.3 Регистр флагов
Регистр флагов - это 16-разрядный
(16-битовый) регистр содержит
необходимую информацию о состоянии процессора 8086 и результатах по-
следних инструкций.
Например, если вы хотите знать, получен ли при вычитании нулевой ре-
зультат, непосредственно после этой инструкции вам следует проверить флаг
нуля (бит Z в регистре флагов). Если он установлен (то есть имеет ненулевое
значение), это будет говорить о том, что результат нулевой. Другие флаги, та-
кие, как флаги переноса и переполнения аналогичным образом сообщают о
результатах арифметических и логических операций.
Другие флаги управляют
направления управляет направлением, в котором строковые инструкции вы-
полняют перемещение, а флаг прерывания управляет тем, будет ли разреше-
но внешним аппаратным средствам.
Битовые флаги:
O - флаг переполнения;
D - флаг направления;
I - флаг прерывания;
T - флаг перехвата;
S - флаг знака;
Z - флаг нуля;
A - флаг дополнительного переноса;
P - флаг четности;
C - флаг переноса.
Так, например, клавиатура или модем, могут временно приостанавливать те-
кущий код для выполнения функций, требующих немедленного обслуживания.
Флаг перехвата используется только программным обеспечением, которое
служит для отладки другого программного обеспечения (отладчики).
Регистр флагов не считывается
и не модифицируется непосредст
но. Вместо этого регистр флагов управляется в общем случае с помощью спе-
циальных инструкций (таких, как CLD, STI и CMC), а также с помощью ариф-
метических и логических инструкций, модифицирующих отдельные флаги. И
наоборот, содержимое отдельных разрядов регистра флагов влияет на выпол-
нение инструкций (например, JZ, RCR и MOVSB). Регистр флагов не исполь-
зуется на самом деле, как ячейка памяти, вместо этого он служит для контроля
за состоянием и управления процессором 8086.
1.2.4 Регистры общего назначения
Восемь регистров общего
сора 8086 (каждый размером 16 бит) используются в операциях большинства
инструкций в качестве источника или приемника при перемещении данных и
вычислениях, указателей на ячейки памяти и счетчиков. Каждый регистр
общего назначения может использоваться для хранения 16-битового значения,
в арифметических и логических операциях, может выполняться обмен между
регистром и памятью (запись из регистра в память и наоборот). Например, в
данном фрагменте программы:
mov ax,5
mov dx,9
add ax,dx
:
значение 5 загружается в регистр AX, значение 9 - в DX, и эти два значения
складываются вместе.
При этом результат сохраняется в регистре AX. Вместо регистров AX и DX
здесь можно использовать регистр CX, SI или любой другой регистр общего
назначения.
Кроме такого общего свойства регистров, как использования их для
хранения значений или в качестве источника и приемника при работе в инст-
рукциях с данными, каждый регистр общего назначения имеет свою особен-
ность.
Регистр AX называют также накопителем (аккумулятором). Этот ре-
гистр всегда используется в операциях умножения или деления и является
также одним из тех регистров, который можно использовать для наиболее эф-
фективных операций (арифметических, логических или операций перемещения
данных).
Младшие 8 бит регистра AX называются также регистром AL, а стар-
шие 8 бит - регистром AH. Это может оказаться удобным при работе с данными
размером в байт. Таким образом, регистр AX можно использовать, как два от-
дельных регистра. В следующем фрагменте программы регистр AH устанав-
ливается в значение 0, это значение копируется в AL и затем в регистр AL до-
бавляется 1:
.
mov ah,0
mov al,ah
inc al
.
В результате в регистре AX будет записано значение 1. Регистры BX,
CX и DX могут аналогичным образом использоваться либо как один 16-
разрядный регистр, либо как два 8-разрядных.
Регистр BX может использоваться для ссылки на ячейку памяти (указа-
тель). Если говорить кратко, то 16-битовое значение, записанное в BX, может
использоваться в качестве части адреса ячейки памяти, к которой производится
доступ. Например, следующий код загружает в AL содержимое адреса памяти
9:
:
mov ax,0
mov ds,ax
mov bx,9
mov al,[bx]
:
Как можно заметить, перед обращением к ячейке памяти, на которую указывает
BX, мы загрузили в DS значение 0 (через регистр AX). Это результат сегмент-
ной организации памяти процессора 8086. По умолчанию, когда BX использу-
ется в качестве указателя на ячейку памяти, он ссылается на нее относительно
сегментного регистра DS. Регистр BX может интерпретироваться, как два вось-
мибитовых (8-разрядных) регистра - BH и BL.
Специализация регистра CX - использование в качестве счетчика. Пред-
положим, мы хотим 10 раз повторить выполнение блока инструкций. Это мож-
но сделать следующим образом:
mov cx,10
Begin:
<блок инструкций, который нужно повторить>
sub cx,1
jnz Begin
:
Инструкции между меткой Begin и инструкцией JNZ будут повторяться
до тех пор, пока содержимое регистра CX не станет равным 0. Заметим, что
чтобы уменьшить содержимое CX и перейти на начало цикла Begin, если ре-
гистр CX еще не равен 0, здесь используются две инструкции - SUB CX,1 и
JNZ.
Уменьшение значения счетчика и цикл - это часто используемый эле-
мент программы, поэтому в процессоре 8086 используется специальная инст-
рукция для того, чтобы циклы выполнялись быстрее и были более компакт-
ными. Эта инструкция называется LOOP. Инструкция LOOP (инструкция цик-
ла) вычитает 1 из значения регистра CX и выполняет переход, если содержи-
мое регистра CX не равно 0 (все это в одной инструкции). Для приведенного
выше примера можно записать такой эквивалент:
:
mov cx,10
Begin:
<блок инструкций, который нужно повторить>
:
loop Begin
:
Регистр CX можно интерпретировать, как два 8-разрядных регистра -
CH и CL.
Регистр DX - это единственный регистр, которые может использоваться
в качестве указателя адреса ввода-вывода в инструкциях IN и OUT. Фактиче-
ски, кроме использования регистра DX нет другого способа адресоваться к пор-
там ввода-вывода с 256 по 65535. Например, в следующем фрагменте програм-
мы в порт 878h (LPT) записывается значение 62:
:
mov al,62
mov dx,878h
out dx,al
:
Другие уникальные качества регистра DX относятся к операциям деле-
ния и умножения. Когда вы делите 32- или 16-битовый делитель, старшие 16
бит делимого должны быть помещены в регистр DX. После выполнения деле-
ния остаток также сохраняется в DX. (Младшие 16 бит делимого должны
быть помещены в AX. Частное от деления также будет записано в AX.) Ана-
логично, когда вы перемножаете два 16-битовых сомножителя, старшие 16
бит произведения сохраняются в DX (младшие 16 бит записываются в регистр
AX). Регистр DX можно интерпретировать, как два 8-разрядных регистра - DH
и DL.
Регистр SI может использоваться, как указатель на ячейку памяти. На-
пример:
:
mov ax,0
mov ds,ax
mov si,20
mov al,[si]
:
Здесь 8-битовое значение, содержащееся по адресу 20, записывается в
регистр AL. Особенно полезно использовать регистр SI для ссылки на память в
строковых инструкциях процессора 8086. Например:
:
mov ax,0
mov ds,ax
mov si,20
mov al,[si]
lodsb
:
Здесь
не только содержимое по
сохраняется в регистре AX, но к SI также добавляется 1. Это может оказаться
очень эффективным при организации доступа к последовательным ячейкам
памяти (например, к строке текста). Кроме того, можно сделать так, что стро-
ковые инструкции будут автоматически определенное число раз повторять
свои действия, так что отдельная инструкция может выполнить сотни, а иногда
и тысячи действий.
Регистр DI очень похож на регистр SI в том плане, что его можно ис-
пользовать в качестве указателя ячейки памяти. При использовании его в
строковых инструкциях он имеет также особые свойства. Например:
:
mov ax,0
mov ds,ax
mov di,1024
add bl,[di]
lodsb
:
Здесь 8-битовое значение, расположенное по адресу 1024, записывается
в регистр BL. При использовании его в строковых инструкциях регистр DI не-
сколько отличается от регистра SI. В то время как SI всегда используется в
строковый инструкциях, как указатель на исходную ячейку памяти (источник),
DI всегда служит указателем на целевую ячейку памяти (приемник). Кроме то-
го, в строковых инструкциях регистр SI обычно адресуется к памяти относи-
тельно сегментного регистра DS, тогда как DI всегда адресуется к памяти от-
носительно сегментного
качестве указателей на ячейки памяти в других инструкциях (не строковых), то
они всегда адресуются к памяти относительно регистра DS. Например:
:
cld
mov dx,0
mov es,dx
mov di,2048
stosb
:
Строковая инструкция STOSB используется здесь и для сохранения
значения в регистре AL (по адресу памяти, на который указывает регистр DI),
и для добавления к содержимому регистра DI 1.
Регистр BP также
может использоваться в
памяти, но здесь есть некоторые отличия. Регистры BX, SI и DI обычно ссы-
лаются на память относительно сегментного регистра DS (или, в случае ис-
пользования в строковых инструкциях регистра DI, относительно сегментного