CodeNet / Языки программирования / Ассемблер / СПРАВОЧНИК по системе программирования ТУРБО АССЕМБЛЕР 2.0
СПРАВОЧНИК по системе программирования ТУРБО АССЕМБЛЕР 2.0
Регистры
-----------------------------------------------------------------
В процессоре 8086 имеется несколько быстрых элементов памяти
на интегральных схемах, которые называются регистрами. Регистры
можно рассматривать, как ячейки памяти, к которым процессор 8086
может обращаться быстрее, чем к обычной памяти, но это только
часть особенностей регистров. Каждый из регистров имеет уникаль-
ную природу и предоставляет определенные возможности, которые
другими регистрами или ячейками памяти не поддерживаются.
Регистры разбиваются на четыре категории: регистры флагов,
регистры общего назначения, указатель инструкций и сегментные ре-
гистры (см. Рис. 4.4).
Регистр флагов
15 0
--------------------------------------------------------
FLAGS | |
--------------------------------------------------------
Регистры общего назначения
--------------------------------------------------------
AX | AH | AL |
--------------------------------------------------------
--------------------------------------------------------
BX | BH | BL |
--------------------------------------------------------
--------------------------------------------------------
CX | CH | CL |
--------------------------------------------------------
--------------------------------------------------------
DX | DH | DL |
--------------------------------------------------------
--------------------------------------------------------
SI | |
--------------------------------------------------------
--------------------------------------------------------
DI | |
--------------------------------------------------------
--------------------------------------------------------
BP | |
--------------------------------------------------------
--------------------------------------------------------
SP | |
--------------------------------------------------------
Указатель инструкций
--------------------------------------------------------
IP | |
--------------------------------------------------------
Сегментные регистры
--------------------------------------------------------
CS | |
--------------------------------------------------------
--------------------------------------------------------
DS | |
--------------------------------------------------------
--------------------------------------------------------
ES | |
--------------------------------------------------------
--------------------------------------------------------
SS | |
--------------------------------------------------------
Рис. 4.4 Регистры процессора 8086.
Регистр флагов
-----------------------------------------------------------------
Этот 16-разрядный (16-битовый) регистр содержит всю необхо-
димую информацию о состоянии процессора 8086 и результатах пос-
ледних инструкций (см. Рис. 4.5).
15 0
------------------------------------------------------------
| | | | | O | D | T | S | Z | | A | P | P | | C |
------------------------------------------------------------
Битовые флаги:
O - флаг переполнения;
D - флаг направления;
I - флаг прерывания;
T - флаг перехвата;
S - флаг знака;
Z - флаг нуля;
A - флаг дополнительного переноса;
P - флаг четности;
C - флаг переноса.
Рис. 4.5 Регистр флагов процессора 8086.
Например, если вы хотите знать, получен ли при вычитании ну-
левой результат, непосредственно после этой инструкции вам следу-
ет проверить флаг нуля (бит Z в регистре флагов). Если он уста-
новлен (то есть имеет ненулевое значение), это будет говорить о
том, что результат нулевой. Другие флаги, такие, как флаги пере-
носа и переполнения аналогичным образом сообщают о результатах
арифметических и логических операций.
Другие флаги управляют режимом операций процессора 8086.
Флаг направления управляет направлением, в котором строковые
инструкции выполняют перемещение, а флаг прерывания управляет
тем, будет ли разрешено внешним аппаратным средствам, таким, нап-
ример, как клавиатура или модем, временно приостанавливать теку-
щий код для выполнения функций, требующих немедленного обслужива-
ния. Флаг перехвата используется только программным обеспечением,
которое служит для отладки другого программного обеспечения (от-
ладчики).
Регистр флагов не считывается и не модифицируется непос-
редственно. Вместо этого регистр флагов управляется в общем слу-
чае с помощью специальных инструкций (таких, как CLD, STI и CMC),
а также с помощью арифметических и логических инструкций, модифи-
цирующих отдельные флаги. И наоборот, содержимое отдельных разря-
дов регистра флагов влияет на выполнение инструкций (например,
JZ, RCR и MOVSB). Регистр флагов не используется на самом деле,
как ячейка памяти, вместо этого он служит для контроля за состоя-
нием и управления процессором 8086.
Иначе говоря, другие регистры и память содержат данные, а
регистр флагов содержит информацию о соотношении между данными,
результатах операций и состоянии процессора 8086 в целом.
Регистры общего назначения
-----------------------------------------------------------------
Восемь регистров общего назначения (или общих регистров)
процессора 8086 (каждый размером 16 бит) используются в операциях
большинства инструкций в качестве источника или приемника при пе-
ремещении данных и вычислениях, указателей на ячейки памяти и
счетчиков. Каждый регистр общего назначения может использоваться
для хранения 16-битового значения, в арифметических и логических
операциях, может выполняться обмен между регистром и памятью (за-
пись из регистра в память и наоборот). Например, в данном фраг-
мента программы:
.
.
.
mov ax,5
mov dx,9
add ax,dx
.
.
.
значение 5 загружается в регистр AX, значение 9 - в DX, и эти два
значения складываются вместе. При этом результат (14) сохраняется
в регистре AX. Вместо регистров AX и DX здесь можно использовать
регистр CX, SI или любой другой регистр общего назначения.
Кроме такого общего свойства регистров, как использования их
для хранения значений или в качестве источника и приемника при
работе в инструкциях с данными, каждый регистр общего назначения
имеет свою особенность. Поэтому рассмотрим далее каждый из них
отдельно.
Регистр AX
-----------------------------------------------------------------
Регистр AX называют также накопителем (аккумулятором). Этот
регистр всегда используется в операциях умножения или деления и
является также одним из тех регистров, который можно использовать
для наиболее эффективных операций (арифметических, логических или
операций перемещения данных).
Младшие 8 бит регистра AX называются также регистром AL, а
старшие 8 бит - регистром AH. Это может оказаться удобным при ра-
боте с данными размером в байт. Таким образом, регистр AX можно
использовать, как два отдельных регистра. В следующем фрагменте
программы регистр AH устанавливается в значение 0, это значение
копируется в AL и затем в регистр AL добавляется 1.
.
.
.
mov ah,0
mov al,ah
inc al
.
.
.
В результате в регистре AX будет записано значение 1. Ре-
гистры BX, CX и DX могут аналогичным образом использоваться либо
как один 16-разрядный регистр, либо как два 8-разрядных.
Регистр BX
-----------------------------------------------------------------
Регистр BX может использоваться для ссылки на ячейку памяти
(указатель). Более подробно мы рассмотрим это в Главе 5 "Основные
элементы программы на Ассемблере". Если говорить кратко, то
16-битовое значение, записанное в BX, может использоваться в ка-
честве части адреса ячейки памяти, к которой производится доступ.
Например, следующий код загружает в AL содержимое адреса памяти
9:
.
.
.
mov ax,0
mov ds,ax
mov bx,9
mov al,[bx]
.
.
.
Как можно заметить, перед обращением к ячейке памяти, на ко-
торую указывает BX, мы загрузили в DS значение 0 (через регистр
AX). Это результат сегментной организации памяти процессора 8086,
о которой мы уже ранее упоминали. (К этой теме мы вернемся в раз-
деле "Сегментные регистры".) По умолчанию, когда BX используется
в качестве указателя на ячейку памяти, он ссылается на нее отно-
сительно сегментного регистра DS.
Как и регистры AX, CX и DX, регистр BX может интерпретиро-
ваться, как два восьмибитовых (8-разрядных) регистра - BH и BL.
Оставить комментарий
Комментарии
1.
+1 / -0


29 ноября 2009, 23:21:50
Хм... Так где именно ошибка с битовыми флагами?
I - флаг прерывания; - на картинке не присутствует, зато есть в двойном экземпляре P - флаг четности;
I - флаг прерывания; - на картинке не присутствует, зато есть в двойном экземпляре P - флаг четности;
