
Сегментные регистры
Если мы вспомним, что программа в любой момент может обратиться к одному из четырех сегментов: к текущему сегменту кода, данных, стека или к дополнительному (сегменту данных), то нас вряд ли удивит, что в состав процессора входят четыре 16-разрядных регистра, являющихся указателями адресов текущих Сегментов. Их функции строго дифференцированы, а потому каждый регистр имеет свою "профессию": CS определяет сегмент кода, DS — сегмент данных, SS — сегмент стека и ES — дополнительный сегмент (рис. 6).
Теперь для того, чтобы, к примеру, произвести выборку слова данных из стека, программе достаточно обратиться к регистрам SS и SP, сложить находящиеся в них числа по уже известному нам правилу и в качестве результата получить реальный адрес вершины стека.
Флажки
Не знаю как для вас, а для нас более привычно звучит термин "слово состояния", ведь, собственно говоря, совокупность значений флажков и определяет состояние процессора во время его работы. В самом общем случае слово состояния — это двоичное число, каждый бит которого отражает строго определенный параметр состояния устройства. Что касается 80286, то здесь биты слова состояния называются флажками, всего их девять, причем шесть из них регистрируют состояние процессора, а три — применяются для управления его работой (рис. 7).
К флажкам состояния относятся: флажок переноса CF (имеет значение равное 1 при переносе из старшего бита) флажок вспомогательного переноса AF (индицирует перенос из младших 4-х бит) флажок переполнения OF (устанавливается равным единице при выходе знакового результата за границу диапазона) флажок нуля ZF (фиксирует нулевой результат выполнения команды) флажок знака SF (фиксирует отрицательный результат выполнения команды) флажок четности PF (фиксирует четное число единиц в последнем байте, полученном в результате выполнения команды)
К флажкам управления относятся: флажок направления DF (указывает направление прохождения строк в строковых командах) флажок разрешения прерывания IF (разрешает или запрещает прерывание по входу INTR) флажок трассировки TF (переводит процессор в пошаговый режим)
Таблица 6.2. |
|||||
r/m |
md |
||||
00 |
01 |
10 |
11 |
||
w=1 |
w=0 |
||||
000 |
(BX)+(SI) (DS) |
(BX)+(SI)+disp 8 (DS) |
(BX)+(SI)+disp 16 (DS) |
AX |
AL |
001 |
(BX)+(DI) (DS) |
(BX)+(DI)+disp 8 (DS) |
(BX)+(DI)+disp 16 (DS) |
CX |
CL |
010 |
(BP)+(SI) (SS) |
(BP)+(SI)+disp 8 (SS) |
(BP)+(SI)+disp 16 (SS) |
DX |
DL |
011 |
(BP)+(DI) (SS) |
(BP)+(DI)+disp 8 (SS) |
(BP)+(DI)+disp 16 (SS) |
BX |
BL |
100 |
(SI) (DS) |
(SI)+disp 8 (DS) |
(SI)+disp 16 (DS) |
SP |
AH |
101 |
(DI) (DS) |
(DI)+disp 8 (DS) |
(DI)+disp 16 (DS) |
BP |
CH |
110 |
disp16 (DS) |
(BP)+disp 8 (SS) |
(BP)+disp 16 (SS) |
SI |
DH |
111 |
(BX) (DS) |
(BX)+disp 8 (DS) |
(BX)+disp 16 (DS) |
DI |
BH |
В этой таблице помимо определения режима адресации оперативной памяти указан также сегментный регистр, используемый по умолчанию для получения физического адреса. Использование другого сегментного регистра возможно введением специального префикса (дополнительного байта, который записывается перед командой).