Регистры процессора
Как уже отмечалось выше, внутренняя архитектура микропроцессоров Intel практически совпадает, если не рассматривать имеющихся в старших моделях процессоров (начиная с МП 80286)' схем организации защищенного режима. Поэтому ниже все эти микропроцессоры будут рассматриваться вместе под общим названием "процессор". Процессор содержит двенадцать 16-разрядных программно - адресуемых регистров, которые принято объединять в три группы: регистры данных, регистры-указатели и сегментные регистры. Кроме того, в состав процессора входят счетчик команд и регистр флагов (рис. 1.2). В группу регистров данных включаются регистры АХ, ВХ, СХ и DX. Программист может использовать их по своему усмотрению для временного хранения любых объектов (данных или адресов) и выполнения над ними требуемых операций. При этом регистры допускают независимое обращение к старшим (АН, ВН, СН и DH) и младшим (AL, BL, CL и DL) половинам. Так команда mov BL, AH пересылает старший байт регистра АХ в младший байт регистра ВХ, не затрагивая при этом вторых байтов этих регистров. Заметьте, что сначала указывается операнд-приемник, а после запятой - операнд-источник. Во многих случаях регистры данных вполне эквивалентны, однако предпочтительнее пользоваться регистром АХ, поскольку многие команды занимают в памяти меньше места и выполняются быстрее, если их операндом является регистр АХ (или его половины AL или АН). С другой стороны, ряд команд использует определенные регистры неявным образом. Так, все команды циклов используют регистр СХ в качестве счетчика числа повторений; в командах умножения и деления регистры АХ и DX выступают в качестве неявных операндов; операции ввода-вывода можно осуществлять только через регистр АХ (или AL) и т.д. Индексные регистры SI и DI так же, как и регистры данных, могут использоваться произвольным образом. Однако их основное назначение - хранить индексы (смещения) относительно некоторой базы (т.е. начала массива) при выборке операндов из памяти. Адрес базы при этом может находиться в базовых регистрах ВХ или ВР. Специально предусмотренные команды работы со строками используют регистры SI и DI в качестве неявных указателей в обрабатываемых строках. Регистр ВР служит указателем базы при работе с данными в стековых структурах, но может использоваться и произвольным образом в большинстве арифметических и логических операций. Последний из группы регистров-указателей, указатель стека SP, стоит особняком от других в том отношении, что используется исключительно как указатель вершины стека, обеспечивая выполнение стековых команд (PUSH, POP и др). Однако это не исключает его использование в качестве операнда в арифметических операциях или операциях пересылки, если требуется изменить положение вершины стека. Регистры SI, DI, ВР и SP, в отличие от регистров данных, не допускают побайтовую адресацию. Четыре сегментных регистра CS, DS, ES и SS являются важнейшим элементом архитектуры процессора, обеспечивая адресацию 20-разрядного адресного пространства с помощью 16-разрядных операндов.
Рис.1.1. Регистры процессора.
Обращение к памяти (как к стандартной памяти в пределах 640 Кбайт, так и к буферам или ПЗУ в области 640 Кбайт -1 Мбайт) осуществляется исключительно посредством сегментов - логических образований, накладываемых на любые участки физического адресного пространства. Размер сегмента должен находиться в пределах 0 байт - 64 Кбайт (допустимы и иногда используются сегменты нулевой длины). Начальный адрес сегмента, деленный на 16, т.е. без младшей 16-ричной цифры, заносится в один из сегментных регистров. Как правило, это действие выполняет программист с помощью соответствующих программных строк. При обращении к памяти процессор извлекает из сегментного регистра сегментный базовый адрес, умножает его на 16 сдвигом влево на 4 двоичных разряда и складывает с заданным каким-либо образом относительным адресом (смещением), получая 20-разрядный физический адрес адресуемой ячейки памяти (слова или байта). Этот процесс проиллюстрирован на рис. 1.3 на конкретном примере команды inc meml. Оперативная память слова
Код команды inc meml Смещение к ячейке meml I—— Содержимое DS - 10E2h 10E20h Базовый адрес сегмента (на границе параграфа) lDE22h lDE24h lDE26h Физический адрес ячейки meml 10Е28П Вычисление физического адреса: lDE2h * 10h = lDE20h + ООО6h =1DE26h
Рис. 1.2. Формирование физического адреса В примере предполагается, что сегмент данных, адресуемый через регистр DS, имеет базовый адрес lDE20h, а ячейка meml расположена в байтах 6 и 7 этого сегмента (смещение meml относительно начала сегмента равно 6). Поскольку младшая 16-ричная цифра базового адреса сегмента должна быть равна 0, сегмент всегда начинается с адреса, кратного 16, т.е. на границе 16-байтового блока памяти (параграфа). Число, хранящееся в сегментном .регистре, называют сегментным адресом. Следует помнить, что сегментный адрес в 16 раз меньше физического; его можно рассматривать, как номер параграфа, с которого начинается данный сегмент. Регистр CS обеспечивает адресацию к сегменту, в котором находятся программные коды, регистры DS и ES - к сегментам с данными (таким образом, в любой момент времени программа может иметь доступ к 128 Кбайт данных), а регистр SS -к сегменту стека, который на машинах типа IBM PC, в отличие от других вычислительных систем, может быть очень большим и достигать 64 Кбайт. Сегментные регистры, естественно, не могут выступать в качестве регистров общего назначения. Указатель команд IP "следит" за ходом выполнения программы, указывая в каждый момент относительный адрес команды, следующей за исполняемой. Регистр IP программно недоступен (IP - это просто его сокращенное название, а не мнемоническое обозначение, используемое в языке программирования); наращивание адреса в нем выполняет микропроцессор, учитывая при этом длину текущей команды. Команды переходов, прерываний, вызова подпрограмм и возврата из них изменяют содержимое IP, осуществляя тем самым переходы в требуемые точки программы. Регистр флагов, эквивалентный регистру состояния процессора других вычислительных систем, содержит информацию о текущем состоянии процессора (рис. 1.4). Он включает 6 флагов состояния и 3 бита управления состоянием процессора, которые, впрочем, тоже называются флагами. 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 Разряды
Рис. 1.3. Регистр флагов. Флаг переноса CF (Carry Flag) индицирует перенос или заем при выполнении арифметических операций, а также служит индикатором ошибки при обращении к системным функциям. Флаг паритета PF (Parity Flag) устанавливается в 1, если результат операции содержит четное число двоичных единиц. Флаг вспомогательного переноса AF (Auxiliary Flag) используется в операциях над упакованными двоично-десятичными числами. Он индицирует перенос или заем из старшей тетрады (бита 3). Флаг нуля ZF (Zero Flag) устанавливается в 1, если результат операции равен 0. Флаг знака SF (Sign Flag) показывает знак результата операции, устанавливаясь в 1 при отрицательном результате. Управляющий флаг трассировки (ловушки) TF (Trace Flag) используется для осуществления пошагового выполнения программы. Если TF«1, то после выполнения каждой команды процессор реализует процедуру прерывания типа 1 (через вектор, расположенный по адресу 04). Управляющий флаг разрешения прерываний IF (Interrupt Flag) разрешает (если равен 1) или запрещает (если равен 0) процессору реагировать на прерывания от внешних устройств. Управляющий флаг направления DF (Direction Flag) используется командами обработки строк. Если DF-0, строка обрабатывается в прямом направлении, от меньших адресов к большим; если DF*1, обработка строки идет в обратном направлении. Флаг переполнения OF (Overflow Flag) фиксирует переполнение, т.е. выход результата за пределы допустимого диапазона значений. Для работы с регистром флагов предусмотрен ряд команд. Установка и сброс флагов CF, DF и IF осуществляется командами STC, STD и STI (установка) и CLC, CLD и CLI (сброс). Все содержимое регистра флагов можно сохранить в стеке командой PUSHF и извлечь из стека командой POPF; кроме того, младший байт регистра флагов (флаги CF, PF, AF, ZF и SF) можно переслать в регистр АН командой LAHF или загрузить в регистр флагов из АН командой SAHF.
©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|