Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
устройство комп.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
5.64 Mб
Скачать

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

Регистры – это ячейки памяти расположенные в процессоре. Их достоинство заключается в гораздо большем быстродействии, чем у оперативной памяти. Недостаток – их очень мало, всего чуть больше десятка. На рисунке ниже представлены регистры процессора 8086. Такие же самые регистры имеются во всех старших моделях процессоров - 286, 386, 486 и Pentium (хотя старшие процессоры имеют дополнительные регистры и расширения). Если использовать при написании программ только эти регистры, то программы (по идее) будут исполнятся на всех компьютерах с Intel совместимыми процессорами.Регистры делятся на пять категорий:

  • Регистры общего назначения (ax, bx, cx, dx)

  • Регистровые указатели и индексные регистры (sp, bp, si, di)

  • Сегментные регистры (cs, ds, ss, es)

  • Регистр командного указателя (ip)

  • Регистр флагов

Все регистры процессора 8086 являются 16-битовыми. Кроме того, четыре регистра общего назначения – ax, bx, cd, dx - разделены на старшую (high) и младшую (low) 8-битовые половины. Это позволяет оперировать либо всем 16-битовым регистром (например, ax), либо обращаться отдельно к старшей (ah) или младшей (al) половинам регистра.

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

  • регистр AX (accumulator) — умножение, деление, обмен с устройствами ввода/вывода (команды ввода и вывода);

  • регистр BX (base) — базовый регистр в вычислениях адреса, часто указывает на начальный адрес (называемый базой) структуры в памяти;

  • регистр CX (count) — счетчик циклов, определяет количество повторов некоторой оперции;

  • регистр DX (data) — определение адреса ввода/вывода, так же может содержать данные, передаваемые для обработки в подпрограммы.

Эти определения, ни коим образом, не являются полными, и большую часть времени вы сами решаете, как использовать эти регистры общего назначения. Например, несмотря на то, что cx назван регистром-счетчиком, ни что не мешает использовать для подсчета регистр bx. Однако в ряде случаев некоторые команды процессора 8086 требуют строго определенных регистров. Регистровые указатели и индексные регистры тесно связаны сопределенными операциями. Регистровые указатели SP и BP обеспечивают доступ к данным в сегменте стека.

  • регистр SP (Stack Pointer) – всегда указывает на вершину стека, позволяет временно хранить адреса и иногда данные;

  • регистр BP (Base Pointer) – обычно адресует переменные, хранимые в стеке, облегчает доступ к параметрам (данным и адресам), переданным через стек.

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

  • регистр SI (Source Index) – является индексом источника и применяется для некоторых операций над строками (обычно связан с регистром DS);

  • регистр DI (Destination Index) – является индексом назначения и применяется так же для строковых операций (обычно связан с регистром ES).

Сегментные регистры (CS, DS, SS, ES) определяют в памяти начала четырех 64 Кбайтовых сегментов, которые называются текущими сегментами. Программа может распределять более четырех сегментов, но при этом для адресации дополнительных сегментов она должна перемещать, соответствующие им правильные значения адресов между одним или несколькими сегментными регистрами. Сегментные регистры строго специализированны. С помощью них нет возможности выполнять математические вычисления или хранить в них результаты других операций. Действительный порядок сегментов не обязательно совпадает с порядком, показанным на рисунке. Сегменты могут в любом порядке храниться в произвольных местах памяти.

  • регистр CS (Code Segment) – содержит начальный адрес сегмента когда (начало машинного кода программы). Этот адрес плюс значение смещения в командном указателе (IP) определяет адрес команды, которая должна быть выбрана для выполнения;

  • регистр DS (Data Segment) – содержит начальный адрес сегмента данных (переменных, строк и т.п. данных, которыми оперирует программа);

  • регистр SS (Stack Segment) – содержит начальный адрес сегмента стека;

  • регистр ES (Extra Segment) – является вспомогательным регистром, используется при некоторых операциях над строками. В большинстве программ в ES и DS содержатся одинаковые адреса, но он может упрощать некоторые операции связанные с этими регистрами.

Регистр командного указателя IP (Instruction Pointer) содержит смещение на команду, которая должна быть выполнена. Обычно при программировании этот регистр не используют. Но очень удобно наблюдать за изменениями его значений при отладке программы в различных отладчиках, например debug.exe, TurboDebugger и т.п. Регистр флагов так же состоит из 16 бит, из них используются только 9. Это регистр состояния процессора. Биты регистра состояния устанавливаются или очищаются в зависимости от результата исполнения предыдущей команды и используются некоторыми командами процессора. Биты регистра состояния могут также устанавливаться и очищаться специальными командами процессора. Отдельные биты флагов представляют одиночными буквами o, d, i, t, s, z, a, p, c или двумя буквами of, df, if, tf, sf, zf, af, pf и cf. CF (Carry Flag) — флаг переноса при арифметических операциях. Содержит перенос из старшего бита после арифметических операций, а так же последний бит при сдвигах или циклических сдвигах. PF (Parity Flag) — флаг четности результата, показывает четность младших восьмибитовых данных (1 – четное, 0 – нечетное). AF (Auxiliary Flag) — флаг дополнительного переноса. Содержит перенос из 3 бита для 8-битовых данных, используется для специальных арифметических операций. ZF (Zero Flag) — флаг нулевого результата. Показывает результат арифметических операций и операций сравнения (0 – ненулевой, 1 – нулевой результат). SF (Sign Flag) — флаг знака (совпадает со старшим битом результата, 0 – плюс, 1 - минус). TF (Trap Flag) — флаг пошагового режима (используется при отладке). IF (Interrupt-enable Flag) — флаг разрешения аппаратных прерываний. DF (Direction Flag) — флаг направления при строковых операциях. Обозначает левое или правое направление пересылки или сравнения строковых данных. OF (Overflow Flag) — флаг переполнения. Указывает на переполнение старшего бита при арифметических командах.

Регистры состояния и управления

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

  • регистр флагов eflags/flags;

  • регистр указателя команды eip/ip.

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

eflags/flags (flag register) - регистр флагов. Разрядность eflags/flags - 32/16 бит. Отдельные биты данного регистра имеют определенное функциональное назначение и называются флагами. Младшая часть этого регистра полностью аналогична регистру flags для микропроцессора i8086. На рисунке показано содержимое регистра eflags.

 

Регистры процессора В процессоре имеется набор регистров, представляющих собой область памяти быстрого доступа, но намного меньшей емкости, чем основная память. Регистры процессора выполняют две функции. Регистры, доступные пользователю. Эти регистры позволяют программисту сократить число обращений к основной памяти, оптимизируя использование регистров с помощью машинного языка или ассемблера. В состав языков высокого уровня входят оптимизирующие компиляторы, построенные на алгоритмах, которые, в частности, позволяют определить, какие переменные следует заносить в регистры, а какие — в основную память. Некоторые языки высокого уровня, такие, как С, предоставляют программисту возможность предложить компилятору хранить те или иные данные в регистрах. Регистры управления и регистры состояния. Используются в процессоре для контроля над выполняемыми операциями; с их помощью привилегированные программы операционной системы могут контролировать ход выполнения других программ. Для разделения регистров на эти две категории не существует определенного признака. Например, на некоторых машинах оператор имеет возможность следить за состоянием программного счетчика, а на других — нет. Однако такое разделение удобно при дальнейшем рассмотрении.  

  Регистры процессора, доступные пользователю К доступным регистрам пользователь может обращаться с помощью команд машинного языка. К этим регистрам, как правило, имеют доступ все программы — как приложения, так и системные. Обычно среди доступных регистров есть регистры данных, адресные регистры и регистры кода условия. Регистры данных. Программист может применять их в различных целях. В ряде случаев они имеют общее назначение и могут использоваться любой машинной командой для операций с данными. Однако зачастую при этом накладываются определенные ограничения. Например, некоторые регистры предназначены для операций над числами с плавающей точкой, в то время как остальные — для хранения целых чисел. Адресные регистры. В них заносятся адреса команд и данных в основной памяти; в этих регистрах может быть записана только часть адреса, использующаяся при вычислении полного или эффективного адреса. Рассмотрим следующие примеры. Индексный регистр. Используется в обычном режиме адресации, когда адрес получается в результате сложения содержимого индексного и базового регистра. Сегментный регистр. При сегментной адресации память разделяется на блоки (сегменты), состоящие из различного количества машинных слов. Адрес ячейки памяти складывается из адреса сегмента и смещения относительно начала сегмента. Имея представление о таком режиме адресации, легче будет усвоить материал, изложенный в главе 7, "Управление памятью", в которой обсуждаются методы управления памятью. При этом режиме адресации базовый адрес сегмента (его начало) хранится в одном из регистров. Таких регистров может быть несколько; например, один — для операционной системы (т.е. использующийся при выполнении процессором кода операционной системы), другие — для исполняющихся в данный момент приложений. Регистр стека. При стековой адресации1 выделяется специальный регистр, в котором размещен указатель на вершину стека. Этот режим адресации позволяет использовать некоторые команды, в которых отсутствует поле адреса, например push и pop. В некоторых машинах вызов процедуры или подпрограммы приводит к автоматическому сохранению содержимого всех доступных пользователю регистров, чтобы по возвращении их можно было восстановить. Процедура сохранения и восстановления, являющаяся составной частью команды вызова и возврата, выполняется процессором. Такой подход позволяет процедурам использовать регистры независимо друг от друга. Стек размещается в основной памяти в виде последовательности ячеек. Он похож на стопку бумаг, в которой листы с данными можно брать и класть только сверху. В других машинах операция сохранения содержимого регистров, выполняемая при вызове процедуры, является обязанностью программиста, который должен включить в программу необходимые команды. Таким образом, в зависимости от типа машины функция сохранения и восстановления может выполняться либо аппаратно, либо программно.   Управляющие регистры процессора и регистры состояния Для контроля над работой процессора используются различные регистры. В большинстве машин эти регистры в основном не доступны пользователю. Некоторые из них могут быть доступны для машинных команд, исполняемых в так называемом режиме управления или режиме операционной системы. Конечно, у разных типов машин организация регистров отличается; для их классификации также используется различная терминология. Здесь приводится довольно полный список типов регистров и дается их краткое описание. Кроме ранее упомянутых регистров, MAR, MBR, I/OAR и I/OBR, важными для выполнения команд являются следующие.

Программный счетчик (program counter — PC). Содержит адрес команды, которая должна быть выбрана из памяти. Регистр команд (instruction register — IR). Содержит последнюю выбранную из памяти команду. В состав всех процессоров входит также регистр (или набор регистров), известный под названием регистра слова состояния программы (program status word — PSW). В нем, как правило, содержатся коды условий и другая информация о состоянии, например бит разрешения/запрещения прерываний или бит режима системный/пользовательский. Коды условий (известные также как флаги) — это последовательность битов, устанавливаемых или сбрасываемых процессором в зависимости от результата выполненных операций. Например, в результате выполнения арифметического действия может получиться положительное число, отрицательное, ноль, или может произойти переполнение. В дополнение к сохранению полученного значения в памяти или регистре в результате арифметических операций устанавливаются также соответствующие коды условий. Впоследствии они могут быть проверены условной операцией ветвления. Биты кодов условий группируются в один или несколько регистров (обычно они составляют часть регистра управления). Вообще говоря, есть машинные команды, позволяющие прочитать содержимое этих битов с помощью явных обращений к регистрам; однако изменять их содержимое явным образом нельзя, поскольку эти биты предназначены для отображения результатов выполнения команд. В машинах, в которых используются различные виды прерываний, может быть предусмотрено несколько регистров прерываний с указателями на каждую программу обработки прерываний. Если при реализации некоторых функций (например, вызова процедуры) используется стек, процессор должен иметь регистр — указатель стека. Для аппаратного обеспечения управления памятью (см. главу 7, "Управление памятью") нужны свои регистры. И, наконец, регистры часто используются при управлении операциями ввода-вывода. На устройство и организацию управляющих регистров и регистров состояния влияют несколько факторов. Одним из них является поддержка операционной системы. Различные виды управляющей информации используются операционной системой по-разному. Если разработчик процессора имеет ясное представление об операционной системе, которая будет работать с этим процессором, он сможет так спланировать организацию регистров, чтобы обеспечить аппаратную поддержку ряда возможностей, таких, как защита памяти или переключение пользовательских программ. Еще одним ключевым конструкторским решением является распределение управляющей информации между регистрами и памятью. Общепринятым подходом является выделение для нее нескольких первых сотен или тысяч слов памяти. Конструктор должен решить, какая часть информации будет находиться в более дорогих, но более быстрых регистрах, а какая часть — в более дешевой, но медленной основной памяти.