
- •36 Вопрос
- •15 Вопрос
- •9Вопрос
- •5 Вопрос
- •8 Вопрос
- •9 Вопрос
- •10Вопрос
- •14 Вопрос
- •15 Вопрос
- •16Вопрос
- •22 Вопрос
- •12 Вопрос
- •13 Вопрос
- •15 Вопрос
- •16 Вопрос
- •17 Вопрос
- •1 Вопрос
- •19 Вопрос
- •52 Вопрос
- •21 Вопрос
- •30 Вопрос
- •21 Вопрос
- •25 Вопрос
- •22 Вопрос
- •23 Вопрос
- •24 Вопрос
- •25 Вопрос
- •26 Вопрос
- •27 Вопрос
- •32 Вопрос
- •29 Вопрос
- •30 Вопрос
- •35 Вопрос
- •37 Вопрос
- •34 Вопрос
- •35 Вопрос
- •40 Вопрос
- •37 Вопрос
- •46 Вопрос
- •50Вопрос
- •42Вопрос
- •43 Вопрос
- •44 Вопрос
- •44 Вопрос
- •42 Вопрос
- •54 Вопрос
15 Вопрос
Микропроцессор 8088 имеет четыре сегментных регистра: CS, DS, SS и ES для доступа к памяти в сегментах кодов, данных, стека и дополнительного сегмента, соответственно. Каждый из них используется по своему назначению, но их использование может изменяться в соответствии с требованиями программы. Микропроцессор использует сегментный регистр команд для определения сегмента, содержащего выполняемую программу. Этот регистр комбинируется с указателем команд для получения ссылки на текущую команду. Выборка команды происходит из памяти по адресу, заданному парой регистров CS:IP. Комбинация сегментного регистра с регистром смещения, порождающая физический адрес, записывается как сегмент: смещение, например, CS:IP. Значение сегмента предшествует двоеточию, значение смещения следует за ним.
Такая запись используется как для регистров, так для абсолютных величин. Вы можете записывать адреса как CS:100, DS:BX, S70:100 или 630:DI. Микропроцессор использует сегментный регистр данных DS для обычного доступа к данным. Схемы адресации операндов, которые мы обсудили в предыдущем разделе, дают 16=битовое смещение, и в большинстве случаев микропроцессор объединяет это смещение с регистром DS для формирования абсолютного адреса памяти. Сегментный регистр стека задает системный стек. Команды PUSH, POP, CALL и RET обрабатывают данные в стеке, находящиеся в месте, определяемом парой регистров SS:SP. Регистр SP - это указатель стека, он служит указателем в стековом сегменте. Всякий раз, когда при адресации используется регистр BP, по умолчанию используется сегментный регистр стека. Это позволяет программе иметь доступ к данным в стеке, используя регистр BP в качестве указателя. В следующей главе есть раздел, посвященный работе со стеком и демонстрирующий, как адресация с помощью регистра BP упрощает ссылки к данным в стеке. Наконец, микропроцессор 8088 использует дополнительный сегментный регистр ES для ссылок к данным в случаях, когда требуется более одного сегмента. Обычной операцией в программе является копирование информации из одной области памяти в другую. Если эти области расположены не внутри одного поля размером 64K, то переместить данные, используя единственный сегментный регистр, невозможно. С помощью дополнительного сегментного регистра программа может одновременно определить сегменты источника и результата (рис.3.7). Регистр DS локализует область исходных данных, а регистр ES указывает на сегмент результата. Существуют специальные команды обработки строк для пересылки данных, которые автоматически используют DS и ES как сегменты источника и результата. Эти команды описаны в следующей главе.
16Вопрос
В регистре каждый бит является флагом, то есть устанавливается в 1 при определенных условиях или установка его в 1 изменяет поведение процессора. Все флаги, расположенные в старшем слове регистра EFLAGS, имеют отношение к управлению защищенным режимом
CF — флаг переноса. Устанавливается в 1, если результат предыдущей операции не уместился в приемнике и произошел перенос из старшего бита или если требуется заем (при вычитании), иначе устанавливается в 0. Например, после сложения слова 0FFFFh и 1, если регистр, в который надо поместить результат, — слово, в него будет записано 0000h и флаг CF = 1.
PF — флаг четности. Устанавливается в 1, если младший байт результата предыдущей команды содержит четное число бит, равных 1; устанавливается в 0, если число единичных бит нечетное. (Это не то же самое, что делимость на два. Число делится на два без остатка, если его самый младший бит равен нулю, и не делится, если он равен 1.)
AF — флаг полупереноса или вспомогательного переноса. Устанавливается в 1, если в результате предыдущей операции произошел перенос (или заем) из третьего бита в четвертый. Этот флаг используется автоматически командами двоично-десятичной коррекции.
ZF — флаг нуля. Устанавливается в 1, если результат предыдущей команды — ноль.
SF — флаг знака. Этот флаг всегда равен старшему биту результата.
TF — флаг ловушки. Этот флаг был предусмотрен для работы отладчиков, не использующих защищенный режим. Установка его в 1 приводит к тому, что после выполнения каждой команды программы управление временно передается отладчику (вызывается прерывание 1 — см. описание команды INT).
IF — флаг прерываний. Установка этого флага в 1 приводит к тому, что процессор перестает обрабатывать прерывания от внешних устройств (см. описание команды INT). Обычно его устанавливают на короткое время для выполнения критических участков кода.
DF — флаг направления. Этот флаг контроллирует поведение команд обработки строк — когда он установлен в 1, строки обрабатываются в сторону уменьшения адресов, а когда DF = 0 — наоборот.
OF — флаг переполнения. Этот флаг устанавливается в 1, если результат предыдущей арифметической операции над числами со знаком выходит за допустимые для них пределы. Например, если при сложении двух положительных чисел получается число со старшим битом, равным единице (то есть отрицательное) и наоборот.