Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

arx011010_ch1

.pdf
Скачиваний:
21
Добавлен:
11.05.2015
Размер:
1.98 Mб
Скачать

Рис. 2.5. Регистры процессора.

Во многих случаях регистры данных вполне эквивалентны, однако предпочтительнее пользоваться регистром АХ, поскольку многие команды занимают в памяти меньше места и выполняются быстрее, если их операндом является регистр АХ (или его половина AL). С другой стороны, ряд команд использует определенные регистры неявным образом. Так, все команды циклов используют регистр СХ в качестве счетчика числа повторений; в командах умножения и деления регистры АХ и DX выступают в качестве неявных операндов; операции ввода-вывода можно осуществлять только через регистры АХ или AL и т.д.

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

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

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

Регистры SI, DI, BP и SP, в отличие от регистров данных, не допускают побайтовую адресацию.

Четыре сегментных регистра CS, DS, ES и SS являются важнейшим элементом архитектуры процессора, обеспечивая, как уже отмечалось выше, адресацию 20разрядного адресного пространства с помощью 16-разрядных операндов. Подробнее о них будет рассказано в следующем разделе.

Указатель команд IP "следит" за ходом выполнения программы, указывая в каждый момент относительный адрес команды, следующей за исполняемой. Регистр IP программно недоступен (IP - это просто его сокращенное название, а не мнемоническое обозначение, используемое в языке программирования); наращивание адреса в нем выполняет микропроцессор, учитывая при этом длину текущей команды. Команды переходов, прерываний, вызова подпрограмм и возврата из них изменяют содержимое IP, осуществляя тем самым переходы в требуемые точки программы. В следующем разделе мы еще вернемся к роли регистра IP в выполнении программы.

31

Рис. 2.6. Регистр IP смещение d от начала сегмента.

Специальный регистр командного указателя IP указывает на следующую исполняемую

машинную команду относительно определенного в CS сегмента.

Регистр флагов (его часто называют FLAGS), эквивалентный регистру состояния процессора других вычислительных систем, содержит информацию о текущем состоянии процессора (рис. 2.6). Он включает 6 флагов состояния и 3 бита управления состоянием процессора, которые, впрочем, тоже называются флагами.

Рис. 2.6. Регистр флагов Флаги состояния заново устанавливаются процессором после выполнения каждой

очередной команды, и по ним можно в какой-то степени судить о результате выполнения этой команды (например, не равен ли ее результат, нулю). Флаги управления позволяют изменять некоторые условия работы процессора, например, разрешать или запрещать аппаратные прерывания. Рассмотрим сначала флаги состояния.

Флаг переноса CF (Carry Flag) индицирует перенос или заем при выполнении арифметических операций. Переносом называется ситуация, когда в результате выполнения правильной, в общем, команды образуется число, содержащее более 16 двоичных разрядов и, следовательно, не помещающееся в регистр или ячейку памяти. Пусть, например, в регистре АХ содержится число 60000, а в регистре ВХ - 40000. При выполнении команды сложения

add AX,BX

в регистре-приемнике результата, которым в данном случае будет служить регистр АХ, должно быть записано число 100000, которое, разумеется, там поместиться не может. В этом случае и устанавливается флаг CF, по состоянию которого можно установить, что произошел перенос и, следовательно, содержимое АХ (которое в данном случае будет равно 100000 - 65536 = 34464) не является правильным результатом.

Необходимо подчеркнуть, что ситуация переноса, как и вообще любая ошибка, возникшая по ходу выполнения программы, не приводит ни к каким последствиям, кроме установки соответствующего флага. Процессор, установив флаг, считает свою миссию выполненной и переходит к выполнению следующей команды. Если перенос в данном случае действительно является индикатором ошибки, программа должна после выполнения команды сложения проанализировать состояние флага CF, и при установленном флаге перейти на фрагмент обработки этой ошибки. Такой анализ выполняется с помощью команд условного перехода, в данном случае с помощью команды jc (jump if carry, переход по переносу).

Флаг паритета PF (Parity Flag) устанавливается в 1, если результат операции содержит четное число двоичных единиц, и сбрасывается в О, если число двоичных

32

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

Флаг вспомогательного переноса AF (Auxiliary Flag) используется в операциях над двоично-десятичными числами. Он индицирует перенос или заем из старшей тетрады (бита 4). Двоично-десятичный формат подразумевает запись в каждой половинке байта десятичной цифры в виде ее двоичного эквивалента, что позволяет хранить в байте двухразрядное десятичное число в диапазоне от 0 до 99 Двоично-десятичные числа используются, в частности, для обмена данными с измерительными приборами. Для их обработки в процессоре предусмотрен целый ряд специфических команд, при использовании которых приходится анализировать состояние флага вспомогательного переноса.

Флаг нуля ZF (Zero Flag) устанавливается в 1, если результат операции равен 0. Например, флаг ZF установится, если из 5 вычесть 5 или к 10 прибавить -10.

Флаг знака SF (Sign Rag) показывает знак результата операции, устанавливаясь в 1 при отрицательном результате. Как будет показано в следующей главе, процессор различает числа без знака, т.е. существенно положительные, и числа со знаком, которые могут быть как положительными, так и отрицательными. Признаком отрицательности числа служит установленный старший бит этого числа (бит 15 для слов или бит 7 для байтов). Флаг SF устанавливается, если в результате какой-либо операции сформировано число с установленным старшим битом, например, S000h или FFFFh.

Флаг переполнения OF (Overflow Rag) фиксирует переполнение, т.е. выход результата за пределы допустимого диапазона значений для чисел со знаком. В знаковом представлении числа от 0000h до 7FFFh считаются положительными, а числа от S000h до FFFFh, т.е. числа с установленным старшим битом - отрицательными. Флаг OF устанавливается, если, например, при сложении двух положительных чисел получился результат, превышающий 7FFFh (потому что, начиная с S000h, идут уже отрицательные числа), или при вычитании из отрицательного числа получился результат, меньший S000h (потому что такие числа считаются положительными). Позже этот вопрос будет рассмотрен более детально.

Перейдем теперь к управляющим флагам, которых в регистре флагов реального режима всего три.

Управляющий флаг трассировки (ловушки) TF (Trace Rag) используется для осуществления пошагового выполнения программы. Если TF=1, то после выполнения каждой команды процессор реализует процедуру прерывания через вектор с номером 1, расположенный по физическому адресу 04. Этот флаг активно используется в программах отладчиков, которые должны допускать выполнение отлаживаемой программы по шагам или с точками останова.

Управляющий флаг разрешения прерываний IF (Interrupt Rag) разрешает (если равен 1) или запрещает (если равен 0) процессору реагировать на прерывания от внешних устройств. Тем самым создается возможность выполнения особо ответственных фрагментов программ без каких-либо помех.

Управляющий флаг направления DF (Direction Rag) используется командами обработки строк. Если DF=0, строка обрабатывается в прямом направлении, от меньших адресов к большим; если DF=1, обработка строки идет в обратном направлении. Примеры использования этого флага будут приведены при рассмотрении соответствующих команд процессора.

Для установки и сброса управляющих флагов предусмотрены особые команды, например sti (set interrupt, установить прерывания) или cli (clear interrupt, сбросить прерывания).

Флаги условий:

CF

переноса

признак устанавливается в 1, если имеет место

33

 

(carry flag)

переноса или заем из старшего бита результата

OF

переполнения

равен 1, если возникает арифметическое

 

(overflow flag)

переполнение

ZF

нуля

равен 1, если результат команды равен 0

 

(zero flag)

 

SF

знака

равен 1, если старший бит результата равен 0, т.е.

 

(sign flag)

SF = 0 - число положительное

 

 

SF = 0 - число отрицательное

PF

четности

равен 1, если результат имеет четное число единиц

 

(parity flag)

 

AF

дополнительного

равен 1, если во время выполнения команд

 

переноса

десятичного сложения и вычитания осуществлено

 

(auxiliary carry

выполнение переноса или заема между полубайтами

 

flag)

 

Флаги состояний:

 

DF

направления

устанавливает направление просмотра строк в

 

(direct flag)

строковых командах

 

 

DF = 0 от начала к концу

 

 

DF = 1 в обратном направлении

IF

прерывания

IF = 0 процессор перестает реагировать на

 

(interrupt flag)

поступающие к нему прерывания

 

 

IF = блокировка прерываний снимается

TF

трассировки

TF = 1 после выполнения каждой команды процессор

 

(trap flag)

делает прерывание, чем можно воспользоваться при

 

 

отладке программы

2.4. Понятие о реальном режиме работы процессора

Процессоры Intel для ПЭВМ до выхода intel 286 могли работать только в однозадачном режиме, который мы будем называть реальным режимом или режимом 80x86. начиная с Intel 286, была введена возможность многозадачного режима работы, основной проблемой которого была защита данных каждой задачи от всех остальных. Такой режим мы будем называть защищенным. Следует отметить что процессор Int. 286 с этой задачей не справился и являлся, по существу, более быстрой версией 80x86. Только на процессорах Int 386 и выше с введением новых регистров и повышением разрядности старых регистров удалось достигнуть уверенной работы в защищенном режиме.

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

Режим работы процессора задается наличием основных регистров, разрядностью регистров, способом обращения к ОП. Компьютерные программы которые написаны для реальным режима работы процессора могут работать в защищенном, в так называемом режиме виртуального процессора (80x86). Программы написанные для защищенного режима, как правило в реальном режиме уже работать не будут.

Таблица 1.

Схема адресного пространства процессора 80x86. Реальный режим.

Адресная

Область памяти

Объем

Класс памяти

система

 

памяти

 

00000h

Вектор с прерыванием

1 Кбайт

 

34

00400h

Данные BIOS

256 байт

Обычная память 640 кб.

00500h

MS DOS

~ 80 кбайт

Conventional memory

 

Транзитная область

~550 кбайт

 

0A0000h

Графический видеоадаптер

64 кбайт

 

0B0000h

Транзитная область

32 кбайт

Верхняя память 384 кб. UM

B80000h

Текствидео буфер

32 кбайт

(Upper memory)

0C0000h

Транзитная область

192 кбайт

 

0F0000h

BIOS

64 кбайт

 

100000h

HMA

64 кбайт

Верхняя память

 

 

 

High Memory Area (HMA)

10FFF0h

Расширенная память

До 4 Гбайт

Extended Memory

 

 

 

Specification (XMS, EMS)

2.5. Развитие архитектуры процессора Intel

Описанная в предыдущем пункте архитектура процессора характерна для моделей до Int 80286 включительно. В компьютер мог устанавливаться так называемый арифметический сопроцессор 80х87 для аппаратной поддержки арифметики чисел с плавающей точкой. Работа с двойными словами аппаратно не поддерживалась.

Начиная с модели Int. 80386 процессор Intel был существенно модернизирован. В основном, целью этой модернизации была поддержка надежной работы защищенного режима, однако возможности реалбного режима были также существенно расширены (в частности, введена аппаратная поддержка двойных слов). Все регистры общего назначения были расширены до 32 разрядов и получили наименования EAX, EBX, ECX, EDX, ESI, EBP, ESP (буква E в названии означает Extended – расширенный). Программист получил возможность работать как с полным 32-разрядным регистром (например, ESI), так и с его младшим словом (ES). Кроме того схранилась возможность работать со старшим и младшим байтами младшего слова первых четырех регистров (например, DH и DL).

Сегментные регистры были сохранены 16-разрядными, но введены два новых дополнительных регистра FS и GS. Их роль полностью аналогична роли старого сегментногосегментного регистра ES. Регистры флагов и указателя команд также были расширены до 32 разрядов и получили имена EFLAGS и EIP.

Начиная с процессора Int 80486 арифметический сопроцессор был интегрирован с основным процессором, в результате чего последний получил 11 новых регистров (FPU/NPX) для поддержки арифметики с плавающей точкой.

Начиная с процессора Pentium Pro в стандарт процессора вводится расширение MMX (MultiMedia eXtension) для упрощения обработки больших потоков данных, связанных, в основном, со звуком и изображением. Идея MMX состоит в использовании регистров арифметики с плавающей точкой для аппаратной поддержки учетверенных (64битных) слов. Для MMX введена также новая арифметика “с насыщением”. Например, если результат байтовой операции превышает 255, в режиме насыщения он полагается равным 255. Далее вводятся расширения уже к базовому набору команд MMX, например, AMD 3D.

Лекция 3. Адресация процессора

Адресное пространство называется множество адресов, которые может генерировать данный процессор.

3.1. Сегментный способ адресации памяти

35

Последовательность номера, который присваивается к ячейкамназывается физическим адресом ячейки.

Параграфом- называется последовательные участки памяти по 16 байт. Расположение парагрфов в ОП:

1 параграф. Начало –0h- конец –0Fh

2 параграф. Начало –10h- конец –1Fh

3 параграф. Начало –20h- конец –2Fh

X параграф. Начало –X0h- конец –XFh

Важно заметить, что физический адрес первого байта в начале каждого параграфа оканчивается на шестнадцатеричный – 0h=0000b.

Рис. 3.1. Фиксированы начала и концы параграфов ОП.

Адресное пространство процессора расширяется за счет сегментной адресации. Сегментом называют сплошную область памяти, размером не более 64к.байт, начало

которого совпадает с началом определенного параграфа.

Иначе говоря, физический адрес первого байта сегмента должен быть кратен 16. Поэтому последняя шестнадцатеричная цифра физического адреса сегмента не будет нести ни какой полезной информации – она заведомо будет нулем.

Назовем сегментной частью адреса (Segment) физический адрес начала сегмента с откинутым шестнадцатеричным 0. Положение отдельного байта внутри сегмента будем называть смещением (Offset). Смещение есть номер отдельного байта, отсчитанный от начала сегмента. Комбинацию сегмента и смещения называют просто адресом байта в памяти и записывают двумя 4-значными шестн.-и цифрами через двоеточие:

СЕГМЕНТ:СМЕЩЕНИЕ

Пример: 0B000:1F4E (перед буквой в начале всегда необходимо писать – 0).

Рис. 3.2. Фиксировано смещение от начала 3 параграфа.

Назовем сегментной частью адреса – физический адрес начала сегмента (байта) с откинутым 16-м нулем. Положение отдельного байта (номер) в сегменте будем называть

смещением.

Параграфы, сегменты и смещения

На рисунке 3.3 показано, что каждая точка памяти имеет физический адрес и логический, выраженный через смещение от начала сегмента.

36

Рис. 3.3. Расположение сегментов вОП.

1048576 : 16 = 65536 - максимальное количество параграфов для 1 Мбайта

Сегменты физически не выделены в памяти. Сегмент - это логические окна, через которые программы просматривают области памяти по 64 Кбайт. Начальное положение сегмента (логический адрес) определяется программистом и может иметь любое значение от 0000 до FFFF в шестнадцатиричном представлении. Каждое логическое значение сегмента (0, 1, 2, . . ., 65535) соответствует физической границе параграфа (0, 16, 32,..., 1048560). Размеры сегментов могут изменяться от 16 байт до 64 Кбайт. Сегменты не обязательно располагаются физически в памяти один за другим. Сегменты могут перекрываться один другим, поэтому один и тот же байт памяти может иметь различные логические адреса. Но, несмотря на это, каждый байт имеет только единственный 20-битовый физический адрес.

Пример.

Логический адрес при сегментной адресации задан парой сегмент-смещение: а) первый логический адрес 0000:0010 б) второй логический адрес0001:0000

а) физический адрес(0000 х 16) + 16 =16 б) физический адрес(0001 х 16) + 0 = 16

Пара сегмент и смещение обычно записываются через двоеточие шестнадцатиричными числами: 40À7 : 55FC

Запись какого-либо числа в сегментный регистр (например, 1000h) означает: задан сегмент размером в 64 Кбайт (адреса с 1000 : 0000 до 1000 : FFFF). Обращение к памяти всегда происходит с помощью пары регистров.

Запись [ BX ] означает DS : [ BX ]

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

37

3.2. Команда ЭВМ

Формат машинной команды процессора определяет одну из основных характеристик архитектуры центрального процессора ЭВМ. Состав команды определяет содержимое следующих двух ее полей:

Код операции указывает операцию, которая должна выполнить ЭВМ (сложение, вычитание, сравнение и т.п.).

В поле операции хранятся указатели на местоположение операндов (адреса памяти или регистров).

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

Форматы адресных команд.

1) Одноадресная команда.

Схема выполнения одноадресной команды:

а) Выполняется операция в соответствии с кодом операции, первым операндом которой является содержимое внутреннего регистра процессора – аккумулятора, вторым – содержимое памяти по адресу А; б) Результат заносится в аккумулятор.

2) Двухадресная команда.

Схема выполнения:

а) выполнение операций в соответствии с указанным кодом операции над операндами по адресам A1 и A2;

б) Результат заносится по адресу А1; 3) Трехадресная команда.

Схема выполнения:

а) выполнение операций в соответствии с указанным кодом операции над операндами по адресам A1 и A2;

б) Результат заносится по адресу А3;

3.3. Общая структура процессора

Структурная схема учебного 8-разрядного микропроцессора дает возможность наглядно рассмотреть его работу по выполнению двух основных функций: обработке и манипулированию данными.

38

Рис. 3.4. Схема учебного 8-разрядного процессора Согласно рис. 3.4. процессор состоит из трех основных блоков: АЛУ, нескольких

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

3.3.1. Арифметико-логическое устройство (АЛУ)

АЛУ выполняет одну из главных функций процессора – обработку данных. АЛУ имеет два входных порта, обозначенных как “Вход” и один выходной порт – “Выход”. Назначение входного порта – ввод слова данных в АЛУ, а выходного вывод такого слова. Оба входных порта снабжены буферами, роль которых выполняют регистры временного хранения данных (буферные регистры). Каждый порт соединен со своим буферным регистром, способным хранить для АЛУ одно слово данных.

Два входных порта позволяют АЛУ принимать данные или с внутренней шины данных процессора, или специального регистра, именуемого аккумулятором. Единственный выходной порт АЛУ предоставляет последнему возможность пересылать слово данных в аккумулятор.

Аккумулятор предназначен для хранения слова данных, посланного в него из выходного порта АЛУ или извлеченного из памяти. Когда, например, АЛУ складывает два слова данных, одно из них находится в аккумуляторе. После выполнения сложения результат – посылается в аккумулятор на храненение. АЛУ оперирует одним или двумя словами в зависимости от вида выполняемой операции (команды). Перечень функций АЛУ зависит от функций процессора и различен для машин разных типов. Функции АЛУ определяют архитектуру процессора. Типичные операции, выполняемые АЛУ, являются следующие: сложение, вычитание, и, или, исключающее или, инверсия, сдвиг вправо, сдвиг влево, приращение.

3.3.2. Регистры процессора

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

39

многоцелевое. Регистры последнего типа называют регистрами общего назначения и могут использоваться программистом по его усмотрению.

Количество и назначение регистров в процессоре зависит от архитектуры. Однако почти все процессоры имеют шесть основных регистров: состояния, буферные, команд, адреса памяти, счетчик команд, и аккумулятор. В процессе ознакомления с каждым из основных регистров следует обращать внимание на то, какое влияние оказывает именно этот регистр на данные проходящие “сквозь” процессор. Только понимание влияние каждого основного регистра на поток данных в процессоре позволяет получить правильное представление о функционировании процессора.

3.3.3. Аккумулятор

Аккумулятор – главный регистр процессора при различных манипуляциях с данными. Большинство арифметических и логических операций осуществляется путем использования АЛУ и аккумулятора. Любая из таких операций над двумя словами данных (операндами) предполагает размещение одного из них в аккумуляторе, а другого в памяти или еще в каком либо регистре.

Пример 1. При сложении двух слов, А и В, расположенных в аккумуляторе и памяти соответственно. Результирующая сумма С загружается в аккумулятор, замещая слово А.

Аккумулятор является наиболее универсальным регистром процессора. Для выполнения любой операции необходимо поместить их в аккумулятор. Из рис. 3.1. следует, что данные в него поступают с внутренней шины данных процессора. В свою очередь аккумулятор может посылать данные на эту шину. Количество бит аккумулятора соответствует длине слова процессора.

3.3.4. Счетчик команд

Как известно, программа – это последовательность команд, хранимых в памяти ЭВМ и предназначенных для того, чтобы инструктировать машину, как решать поставленную задачу. Для корректного выполнения последней, команды должны поступать в строго определенном порядке. На счетчике команд лежит ответственность следить за тем, какая команда выполняется, а какая полежит выполнению следующей. Часто в ЭВМ счетчик команд имеет больше разрядов, чем остальные регистры. Так в нашем учебном 8-разрядном процессоре, число разрядов счетчика равно – 16, что позволяет адресоваться к памяти 216=65 КБ. Чтобы обратиться к любой ячейки из доступных 65536, т.е. в пределах диапазона значений адресов от 0 до 65535 счетчик должен располагать 16 двоичными разрядами.

Согласно рис. 3.4, счетчик команд соединен с внутренней шинной данных процессора. Теоретически счетчик может получать данные об адресах программы из любого блока процессора, подключенного к внутренней шине. Однако на практике данные обычно поступают в счетчик команд из ОП ЭВМ.

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

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

Перед выполнением программы счетчик команд необходимо загрузить числовым адресом области памяти, содержащей первую команду программы. Обратите внимание на рис. 3.4 регистр адреса памяти расположен ниже счетчика команд. Адрес области памяти, содержащей первую команду программы, посылается из счетчика команд в регистр адреса памяти, после чего содержимое обоих регистров становится одинаковым.

40

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]