Представление данных в ЦП




Регистры общего назначения

         
         
     
             

 

AX – accumulator, аккумулятор;

 

BX – base, база;

 

CX – counter, счетчик;

 

DX – data, данные;

 

X – eXtended, расширенный

 

SI – source index, индекс источника;

 

DI – destination index, индекс приемника;

 

BP – base pointer, указатель базы;

 

SP – stack pointer, указатель стека.

 

Эти регистры можно использовать в любых арифметических, логических и т. п. машинных операциях. Так, можно сложить число из DI с числом из регистра SP, вычесть из содержимого регистра ВР содержимое регистра СХ.

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

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

Регистры АХ, ВХ, СХ, DX состоят из двух 8-битных половин, к которым можно обращаться по именам АН, ВН, СН, ОН (старшие байты – High) и AL, BL, CL, DL (младшие байты – Low).

 

В РС модификаторами адреса (замены адреса, указанного в команде, на исполнительный адрес) могут быть только регистры ВХ, ВР, SI и DI.

 

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

 

Сегментные регистры

 
 

 

 


СS – code segment, сегмент команд;

DS – data segment, сегмент данных;

SS – stack segment, сегмент стека;

 

ES – extra segment, дополнительный сегмент.

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

В соответствии с принятыми соглашениями в регистре CS должен находиться начальный адрес сегмента команд - той области памяти, где расположены команды программы.

Регистр DS должен указывать на начало сегмента данных, в котором размещаются данные программы.

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

 

Регистр “Указатель команд”

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

Это адрес, отсчитанный на d от начала сегмента команд, на начало которого указывает регистр CS.

 
 
d


IP instruction pointer, указатель команд

CS

Сегмент команд

d

 

IP

Текущая команда

 

 

В результате абсолютный адрес этой следующей команды определяется содержимым регистров CS и IP. Изменение любого из этих регистров есть переход.

Поэтому содержимое регистра IP
(как и регистра CS) можно менять только командами перехода.

 

 

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

Flags

 

 


Флаг - это бит со значением 1 (флаг установлен), если выполнено некоторое условие, и значение 0 (флаг сброшен), если нет.

В РС 9 флагов, собранных в один 16-разряд-ный регистр флагов, обозначаемый Flags. Каждый флаг - это один из разрядов данного регистра.

Есть флаги условий; они автоматически меняются при выполнении команд и фиксируют те или иные свойства их результата (например, равен ли он нулю). Проверка этих флагов позволяет проанализировать результаты команд.

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

 

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

CF (carry flag) – флаг переноса.
Если при сложении беззнаковых чисел получилась большая сумма – с единицей переноса, которой нет места в ячейке, тогда флаг CF принимает значение 1,
а если сумма "укладывается" в размер ячейки, то значением CF будет 0.

OF (overflow flag) – флаг переполнения.
Если при сложении или вычитании знаковых чисел получился результат, по модулю превосходящий допустимую величину (произошло переполнение мантиссы), тогда флаг OF получает значение 1, а если переполнения мантиссы не было - значение 0.

ZF (zero flag) - флаг нуля. Устанавливается в 1, если результат команды оказался нулевым.

SF (sign flag) - флаг знака. Устанавливается в 1, если в операции над знаковыми числами получился отрицательный результат.

PF (parity flag) - флаг четности. Равен 1, если в 8 младших битах результата очередной команды содержится четное количество двоичных единиц. Учитывается обычно в операциях ввода-вывода.

AF (auxiliary carry flag) - флаг дополнительного переноса. Фиксирует особенности выполнения операций над двоично-десятичными числами.

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

DF (direction flag) - флаг направления.
Устанавливает направление просмотра строк в строковых командах: при DF=0 строки просматриваются "вперед" (от начала к концу), при DF=1 – в обратном направлении.

IF (interrupt flag) - флаг прерываний. При IF=0 процессор перестает реагировать на поступающие к нему прерывания, а при IF=1 блокировка прерываний снимается.

TF (trap flag) - флаг трассировки. При TF=1 после выполнения каждой команды процессор делает прерывание, чем можно воспользоваться при отладке программы - для ее трассировки.

 

Представление данных в ЦП

Числа размером в слово и двойное слово хранятся в памяти в "перевернутом" виде". Старшие (левые) 8 битов числа размещаются во втором байте слова, а младшие (правые) 8 битов - в первом байте.

В терминах шестнадцатеричной системы: первые две цифры числа хранятся во втором байте слова, а две последние цифры - в первом байте.

Например, число 98 = 0062h хранится в памяти так (А - адреса слова):

       
 
 
   

 

 


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

"Перевернутое" представление чисел появилось в первых 8-разрядных ЦП. В них за раз можно было считать из памяти только один байт. Сложение же и вычитание многозначных чисел начинают с действий над младшими цифрами. Многозначное число нельзя считать из памяти сразу целиком, и в первую очередь приходится считывать байт, где находятся младшие цифры числа. Для этого надо, чтобы такой байт хранился в памяти первым.

 

Адресация ввода/вывода

Для обращения к устройства ввода/вывода ЦП имеет инструкции IN и OUT. При выполнении формируются шинные сигналы IORD# (Input/Output Read) и IOWR# (Input/Output Write) для чтения или записи 1 или 2 байт. Данные при чтении могут помещаться только в регистр AL или АХ и выводятся из этих же регистров.

В циклах ввода/вывода используется 16 младших бит шины адреса (старшие биты при этом нулевые), что позволяет адресовать до 64К байт регистров ввода/вывода. Адрес устройства задается в команде (только младший байт, а старший – нулевой), либо берется из регистра DX (полный 16-битный адрес).

 

Прерывания ЦП

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

Процессор может выполнять 256 типов (номеров) прерываний, каждому из которых соответствует свой вектор прерывания – двойное слово, содержащее дальний адрес (CS:IP) вызываемой подпрограммы (процедуры). Под векторы (указатели) прерываний в общем пространстве адресов памяти зарезервирована область 0 – 3FFh.

 

Программные прерывания

Вызываются исполнением команды INT хх.
По действиям ЦП они аналогичны дальним вызовам подпрограмм (сохранение в стеке адреса возврата – регистров CS и IP – и передача управления по указанному адресу), но имеют некоторые отличия:

1. В начале выполнения прерывания процессор помещает в стек регистр флагов и сбрасывает бит разрешения прерывания IF (Interrupt Flag).

2. Вместо адреса вызываемой подпрограммы аргументом вызова (хх) является номер вектора прерывания (0-255).

3. По окончании выполнения процедуры по инструкции IRET ЦП извлекает из стека кроме адреса возврата (инструкции, следующей за INT) и сохраненное значение регистра флагов.

Сброс бита прерывания не позволяет прервать выполнение процедуры прерывания до ее окончания или явного разрешения командой El (Enable Interrupt).

Само программное прерывание исполняется независимо от состояния флага IF. Программные прерывания позволяют легко и быстро вызывать общеупотребимые процедуры (сервисы BIOS и DOS) из любого сегмента без применения дальних вызовов.

Прерывание INT 3 (код 0ССh) обычно используется в целях отладки программ для создания точки останова.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-02-10 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: