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 - флаг четности;