Иванова Г.С., Ничушкина Т.Н. - Основы программирования на ассемблере IA-32 (1075571), страница 2
Текст из файла (страница 2)
Сначала к сегментномуадресу аппаратно дописываются 4 двоичных нуля. В результате получается 20-ти битовый физический адрес начала сегмента. Затем выполняется сложение 20-ти битового базового адреса сегмента и 16-ти битового смещения. Откуда получается 20-ти битовыйфизический адрес данных (см. рисунок 3).Рисунок 3 – Формирование 20-ти разрядного физического адресаТаким образом, для адресации основной памяти в микропроцессоре i8086 предусматриваются 20-битовые адреса, что позволяет работать с основной памятью до 1 Мб.Оглавление9Если программа включает более чем в один сегмент кодов, данных и стека, то сегментные регистры в процессе ее работы перегружаются.Смещение для каждого типа сегмента формируется по своим правилам (см.
рисунок4). Для стека смещение хранится в регистре SP, для сегмента кодов – в IP, а для сегментов данных – рассчитывается в соответствие с форматом команды, как исполнительныйадрес.Рисунок 4 – Адресация различных сегментов сегментными регистрамиСтек при 16-ти разрядной адресации представляет собой специальным образоморганизованную область памяти, осуществляющую последовательную запись элементовданных длиной 2 байта (слово) и чтение их в порядке, обратном порядку записи. Для хранения адреса последнего слова, занесенного в стек, служит регистр-указатель стека SР.Каждый раз при записи данных значение SP уменьшается на 2, а при чтении – увеличивается на 2 (см.
рисунок 5). Таким образом, стек растет в область младших адресов, и в начальный момент времени указатель SP должен содержать максимально возможное дляконкретного размера стека смещение.Рисунок 5 – Процессы записи в стек и чтения из стека:а – текущее состояние стека, б – запись X, в – чтение XСтек используется для временного хранения данных и адресов, например при вызове подпрограмм, когда в стек заносится адрес возврата и значения параметров, передаваемых в подпрограмму.Оглавление10Формат команд процессора i8086 позволяет указывать в команде только одиноперанд, размещенный в основной памяти, т.е. одной командой нельзя, например,сложить содержимое двух ячеек памяти.Принципиально допускается 8 способов задания исполнительного адреса операндов, размещенных в основной памяти:1)SI + <смещение, заданное в команде>;2)DI + <смещение, заданное в команде>;3)BP + <смещение, заданное в команде>;4)BХ + <смещение, заданное в команде>;5)BP + SI + <смещение, заданное в команде> ;6)BP + DI +<смещение, заданное в команде> ;7)BX + SI + <смещение, заданное в команде>;8)BX + DI + <смещение, заданное в команде>.Во всех случаях исполнительный адрес операнда определяется как сумма содержи-мого указанных регистров и смещения, заданного в команде и представляющего собойодно- или двухбайтовое число.Оглавление111.2.3 Выполнение программыСодержимое регистров СS и IP, в которых хранятся базовый адрес сегмента кодов исмещение очередной команды относительно начала сегмента, определяет физический адрес команды, которая должна быть выполнена на следующем шаге.По указанному адресу из основной памяти считывается команда и пересылается впроцессор.
Код команды длиной от 1 до 8 байт поступает в очередь команд, откуда передается в устройство управления для дешифрации.Если при выполнении команды требуются данные, расположенные в основной памяти, то в специальном поле кода команды указывается способ адресации, согласно которому вычисляется исполнительный, а затем и физический адрес данных (см. далее).Данные, считанные из основной памяти по указанному адресу, пересылаются врегистр данных или в арифметико-логическое устройство и обрабатываются в соответствии с кодом команды. Результат помещается в соответствии с командой либо в регистры, либо в заданную область основной памяти.Если выполненная команда не являлась командой передачи управления, то содержимое регистра IP увеличивается на длину выполненной команды, в противном случае врегистр IP заносится исполнительный адрес следующей команды.Затем процесс повторяется.Флажковый регистр.
На рисунке 6 представлен флажковый регистр Flags процессора i8086, в котором в виде однобитовых признаков по принципу ДА – НЕТ (ВКЛЮЧЕНО – ВЫКЛЮЧЕНО) фиксируется информация о результатах выполнения машинныхкоманд, например арифметических.Рисунок 6 – Флажковый регистрОсновные флаги флажкового регистра имеют следующее значение:ОF – переполнение разрядной сетки;DF – направление обработки строк: 0 – от младших адресов к старшим, 1 – от старших к младшим;Оглавление12IF – разрешение прерывания;SF– признак знака: 1 – результат < 0, 0 – результат > 0ZF – признак нуля: 1 – результат = 0АF – признак наличия переноса из тетрады;СF – признак переноса.В последующем эта информация может использоваться, например, командамиусловной передачи управления.Оглавление131.3Программная модель процессора IA-32Структура процессора семейства IA-32 очень сложна, поскольку в них аппаратнореализована совокупность параллельных конвейеров (конвейерная и суперскалярная архитектура).
На рисунке 7 процессор IA-32 представлен в виде набора основных блоков.Блок интерфейса с магистралью управляет передачей команд и данных из памяти впроцессор и результатов – обратно в оперативную память. Блок предвыборки команд отвечает за чтение последующих команд из сегмента кодов. Блок декодирования командосуществляет расшифровку команды и формирование последовательности управляющихсигналов для ее выполнения (аналог УУ). Исполнительный блок согласно названию выполняет команду (аналог АЛУ).Исполнительный блокБлокуправлениясегментамиБлокразбиенияна страницыБлокдекодирования командБлокпредвыборкикомандБлокинтерфейса смагистралью32-разряднаяшина адреса32-разряднаяшина данныхРисунок 7 – Структура процессора семейства IA-32Блоки управления сегментами и страницами обеспечивают формирование физического адреса следующих команд и необходимых данных.
При этом ограничение на нахождение не более одного операнда в оперативной памяти сохраняется.Оглавление141.3.1 Регистры общего назначенияБольшинство регистров процессоров семейства IA-32 – 32-х разрядные. Они включают 16-ти разрядные регистры адресов и данных, имевшиеся в прародителе i8086, какмладшую часть (см. рисунок 8), и обеспечивают доступ к ним по указанным именам.3115AH AXBH BXCH CXDH DXSIDIBPSPIPFLAGS0ALBLCLDLEAXEBXECXEDXESIEDIEBPESPEIPEFLAGSРисунок 8 – Регистры адресов и данных IA-32Сегментные регистры остались 16-ти разрядными, но их количество увеличилось до6. Добавленные регистры позволяют адресовать еще два сегмента данных.
В защищенном режиме IA-32 сегментные регистры хранят не адрес сегмента, а номер (индекс) специального дескриптора, который содержит базовый адрес сегмента, его размер и атрибуты (см. далее).Кроме того было добавлено еще несколько специализированных регистров, используемых в защищенном режиме:а) управляющие регистры С0..С3;б) регистры системных адресов:GDTR – регистр адреса таблицы глобальных дескрипторов;LDTR – регистр адреса таблицы локальных дескрипторов;IDTR – регистр адреса таблицы дескрипторов прерываний;TR – регистр состояния задачи;в) отладочные регистры;г) тестовые регистры.Оглавление151.3.2 Режимы адресации. Схема адресации защищенного режимаПроцессоры IA-32 поддерживают три режима адресации:1.1реальный – в этом режиме адрес формируется аналогично i8086, т.е.
при фор-мировании адреса используются 16-ти разрядные смещения и 16-ти разрядные сегментные адреса, которые хранятся в сегментных регистрах. При их сложении по приведеннойвыше схеме получаются 20-ти разрядные физические адреса, поэтому в этом режиме доступен только первый мегабайт оперативной памяти;1.2защищенный – в этом режиме используется 32-х разрядная адресация, преду-сматривающая несколько вариантов защиты, откуда и появилось название этого режима;1.3виртуальный – в этом режиме процессор моделирует псевдоодновременную ра-боту нескольких виртуальных процессоров i8086.
В настоящее время режим устарел ипрактически не используется.Требование сохранить возможность выполнения программ, использующих 16-тиразрядную адресацию, привело к тому, что схема 32-х разрядной адресации являетсямногокомпонентной (см. рисунок 9).Эффективный адресИндексБазаНепосредственноесмещениеxСтраницыпо 4 КбМасштаб+Эффективныйадрес (32)Виртуальныйадрес (46)Блок сегментацииИндекссегмента (14)Линейныйадрес (32)Селектор 2Блокразбивкина страницы0Физическийадрес (32)(Сегментный регистр)СелекторТаблицалокальныхСелектордескрипторовСелекторТаблицаглобальныхСелектордескрипторовРисунок 9 – Схема 32-х разрядной адресации в защищенном режимеОглавлениеОП16В этом режиме по-прежнему используется сегментная организация памяти, но размер сегмента уже не ограничивается 64 Кб, а теоретически может достигать 4 Гб.