Регистры программиста


Предыдущая | Следующая

Регистры программиста
Напомним, что пространство памяти делится на две половины, в одной из которых размещаются код и данные прикладных программ, а во второй — программы операционной системы. Такая организация отражена в регистрах процессора. Имеются отдельные наборы регистров, один из которых предназначен для прикладных программистов, а второй — исключительно для разработчиков операционных систем. Когда процессор 286 работает в R-режиме, регистры операционной системы игнорируются. Однако при
работе в Р-режиме системному программисту доступны все регистры. Однако прикладной программист не использует регистры операционной системы даже в Р-режиме.
Для прикладных программистов имеется 14 регистров, аналогичных регистрам процессора 8086. Для системного программиста предусмотрены пять дополнительных регистров, показанных на рис. 16.8, поэтому в распоряжении системного программиста имеется 19 регистров.

 

Системный программист с помощью пяти регистров готовит компьютер к выполнению прикладных программ. Системные регистры управляют мультизадачностью и огромным адресным пространством Р-режима. Прежде всего необходимо подготовить процессор к переходу в Р-режим. Напомним, что после холодного запуска или рестарта процессор 286 работает в R-режиме до его специального перевода в Р-режим.
Прежде всего необходимо инициализировать регистр глобальной дескрипторной таблицы GDTR и регистр дескрипторной таблицы прерываний IDTR. Затем инициализируется регистр слова состояния машины MSW. В регистре MSW есть бит разрешения защиты РЕ. Компьютер переходит в Р-режим сразу после установки этого бита в единицу.
После перехода в Р-режим процессор 286 начинает выполнение задачи. В случае одной задачи приведенных подготовительных операций достаточно. Для реализации мультизадачное™ необходимо инициализировать также регистр задачи TR и регистр локальной дескрипторной таблицы LDTR.
О деталях практической инициализации регистров можно узнать из книг по процессору 286. Этот процессор предназначен для работы в Р-режиме. После инициализации о системных регистрах можно забыть. Работать с 14 прикладными регистрами тоже не просто.
Отметим, что 14 прикладных регистров аналогичны регистрам процессора 8086. Имеется восемь 16-битовых регистров общего назначения аккумуляторного типа. Обычно в них хранятся и обрабатываются операнды арифметических и логических команд. Большей частью они взаимозаменяемы и оперируют байтами и словами.
Пять общих регистров ВХ, SI, DI, ВР и SP'fpnc. 16.9) могут хранить адреса и данные. При использовании для адресации в регистр ВХ обычно помещается смещение, которое относится к сегменту данных. Сегмент — это совокупность регистров в памяти, которые могут хранить данные или адреса. В связи с этим сегменты называются сегментами данных или сегментами адресов. Два индексных регистра SI и DI также применяются для хранения смещений в сегменте. Регистры указателя стека SP и указателя базы из ВР обычно содержат смещения в сегменте стека.

Когда эти регистры не нужны для хранения смещений, в них можно хранить данные для арифметических и логических команд. Обычно регистры ВХ, SP и ВР привлекаются для адресации, а регистры АХ, DX, CX, SI и DI содержат данные.
Сегментные регистры. Кроме общих регистров, процессор 286 имеет четыре сегментных регистра. Напомним, что сегмент — это группа адресов памяти, которые содержат данные или адреса. Размер сегмента в процессоре 286 составляет 64 Кбайт, и 16 бит в сегментном регистре могут адресовать такое число байтов.
Как и в процессоре 8086, есть четыре сегментных регистра: кода — CS, стека — SS, данных — DS и дополнительных данных — ES. Вычисление любого адреса в процессоре 286 проводится с участием одного из сегментных регистров. Другими словами, код и данные в памяти размещаются (смещены) относительно адресов сегментов.
Сегментные регистры придают процессору 286 ценное программное свойство переместимости. Целые сегменты можно легко перемещать в памяти и изменять адреса. Новый адрес получается с помощью простого изменения базового адреса сегмента. Такое свойство называется позиционной независимостью.
Позиционная независимость сегментов в памяти важна при работе в R- и Р-режиме, но сегментация особенно нужна для Р-режима. Сегменты просто необходимы для организации мультизадачное™ с уровнями привилегий. Без сегментации кода и данных в памяти между ними нет четкого разделения и иногда они могут смешиваться, вызывая крах программы. Кроме того, нет четкого различия между физической памятью и областями памяти, образованными другими носителями, например дисками. Доступ к виртуальной памяти оказывается весьма запутанным.
Указатель команды. Указатель команды IP функционирует аналогично программному счетчику в других процессорах. Он содержит 16-битовое смещение, адресующее команду в текущем сегменте кода. После выборки и выполнения команды регистр IP адресует следующую по порядку команду. Инкремент проводится на один или несколько байтов в соответствии с длиной команды.
Естественный порядок выполнения команд сохраняет до встречи команды перехода, вызова или прерывания, которые изменяют содержимое регистра IP. Команда перехода просто загружает в IP новый адрес, а команда вызова или прерывания проводят больше действий. При выполнении вызова и реакции на прерывание содержимое регистра IP включается в стек, а затем в него загружается новый адрес. Сохраненное содержимое IP можно использовать для возвращения в основную программу после выполнения подпрограммы или обработки прерывания.
Регистр флажков. В процессоре 286 есть 16-битовый регистр флажков, содержащий шесть арифметических и логических флажков, а также пять флажков управления (рис. 16.10). Флажки переноса, паритета, вспомогательного переноса, нуля, знака и переполнения отражают результат последней арифметической или логической операции. По состояниям флажков происходят условные переходы.
С помощью флажков управления осуществляется трассировка, т.е. покомандное выполнение программы, разрешаются прерывания, задается уровень привилегий для проведения ввода-вывода, определяется вложенность задачи и задается направление обработки цепочек в цепочечных командах.

 

 Поиск и устранение неисправностей в персональных компьютерах