понедельник, 4 мая 2009 г.

Регистры процессора 8086

Регистры – это ячейки памяти расположенные в процессоре. Их достоинство заключается в гораздо большем быстродействии, чем у оперативной памяти. Недостаток – их очень мало, всего чуть больше десятка.
На рисунке ниже представлены регистры процессора 8086. Такие же самые регистры имеются во всех старших моделях процессоров - 286, 386, 486 и Pentium (хотя старшие процессоры имеют дополнительные регистры и расширения). Если использовать при написании программ только эти регистры, то программы (по идее) будут исполнятся на всех компьютерах с Intel совместимыми процессорами.Регистры делятся на пять категорий:
  • Регистры общего назначения (ax, bx, cx, dx)
  • Регистровые указатели и индексные регистры (sp, bp, si, di)
  • Сегментные регистры (cs, ds, ss, es)
  • Регистр командного указателя (ip)
  • Регистр флагов
Все регистры процессора 8086 являются 16-битовыми. Кроме того, четыре регистра общего назначения – ax, bx, cd, dx - разделены на старшую (high) и младшую (low) 8-битовые половины. Это позволяет оперировать либо всем 16-битовым регистром (например, ax), либо обращаться отдельно к старшей (ah) или младшей (al) половинам регистра.

Регистры общего назначения — это регистры данных, каждый из которых помимо хранения операндов и результатов операций имеет еще и свое специфическое назначение:
  • регистр AX (accumulator) — умножение, деление, обмен с устройствами ввода/вывода (команды ввода и вывода);
  • регистр BX (base) — базовый регистр в вычислениях адреса, часто указывает на начальный адрес (называемый базой) структуры в памяти;
  • регистр CX (count) — счетчик циклов, определяет количество повторов некоторой оперции;
  • регистр DX (data) — определение адреса ввода/вывода, так же может содержать данные, передаваемые для обработки в подпрограммы.
Эти определения, ни коим образом, не являются полными, и большую часть времени вы сами решаете, как использовать эти регистры общего назначения. Например, несмотря на то, что cx назван регистром-счетчиком, ни что не мешает использовать для подсчета регистр bx. Однако в ряде случаев некоторые команды процессора 8086 требуют строго определенных регистров.

Регистровые указатели и индексные регистры тесно связаны с определенными операциями.

Регистровые указатели SP и BP обеспечивают доступ к данным в сегменте стека.
  • регистр SP (Stack Pointer) – всегда указывает на вершину стека, позволяет временно хранить адреса и иногда данные;
  • регистр BP (Base Pointer) – обычно адресует переменные, хранимые в стеке, облегчает доступ к параметрам (данным и адресам), переданным через стек.
Индексные регистры SI и DI могут применятся для расширенной адресации, для использования в операциях сложения и вычитания, а так же для операций над байтовыми строками (в языке ассемблера байтовая строка представляет собой просто ряд последовательных байт).
  • регистр SI (Source Index) – является индексом источника и применяется для некоторых операций над строками (обычно связан с регистром DS);
  • регистр DI (Destination Index) – является индексом назначения и применяется так же для строковых операций (обычно связан с регистром ES).
Сегментные регистры (CS, DS, SS, ES) определяют в памяти начала четырех 64 Кбайтовых сегментов, которые называются текущими сегментами.
Программа может распределять более четырех сегментов, но при этом для адресации дополнительных сегментов она должна перемещать, соответствующие им правильные значения адресов между одним или несколькими сегментными регистрами. Сегментные регистры строго специализированны. С помощью них нет возможности выполнять математические вычисления или хранить в них результаты других операций. Действительный порядок сегментов не обязательно совпадает с порядком, показанным на рисунке. Сегменты могут в любом порядке храниться в произвольных местах памяти.
  • регистр CS (Code Segment) – содержит начальный адрес сегмента когда (начало машинного кода программы). Этот адрес плюс значение смещения в командном указателе (IP) определяет адрес команды, которая должна быть выбрана для выполнения;
  • регистр DS (Data Segment) – содержит начальный адрес сегмента данных (переменных, строк и т.п. данных, которыми оперирует программа);
  • регистр SS (Stack Segment) – содержит начальный адрес сегмента стека;
  • регистр ES (Extra Segment) – является вспомогательным регистром, используется при некоторых операциях над строками. В большинстве программ в ES и DS содержатся одинаковые адреса, но он может упрощать некоторые операции связанные с этими регистрами.
Регистр командного указателя IP (Instruction Pointer) содержит смещение на команду, которая должна быть выполнена. Обычно при программировании этот регистр не используют. Но очень удобно наблюдать за изменениями его значений при отладке программы в различных отладчиках, например debug.exe, TurboDebugger и т.п.

Регистр флагов так же состоит из 16 бит, из них используются только 9.

Это регистр состояния процессора. Биты регистра состояния устанавливаются или очищаются в зависимости от результата исполнения предыдущей команды и используются некоторыми командами процессора. Биты регистра состояния могут также устанавливаться и очищаться специальными командами процессора. Отдельные биты флагов представляют одиночными буквами o, d, i, t, s, z, a, p, c или двумя буквами of, df, if, tf, sf, zf, af, pf и cf.

CF (Carry Flag) — флаг переноса при арифметических операциях. Содержит перенос из старшего бита после арифметических операций, а так же последний бит при сдвигах или циклических сдвигах.
PF (Parity Flag) — флаг четности результата, показывает четность младших восьмибитовых данных (1 – четное, 0 – нечетное).
AF (Auxiliary Flag) — флаг дополнительного переноса. Содержит перенос из 3 бита для 8-битовых данных, используется для специальных арифметических операций.
ZF (Zero Flag) — флаг нулевого результата. Показывает результат арифметических операций и операций сравнения (0 – ненулевой, 1 – нулевой результат).
SF (Sign Flag) — флаг знака (совпадает со старшим битом результата, 0 – плюс, 1 - минус).
TF (Trap Flag) — флаг пошагового режима (используется при отладке).
IF (Interrupt-enable Flag) — флаг разрешения аппаратных прерываний.
DF (Direction Flag) — флаг направления при строковых операциях. Обозначает левое или правое направление пересылки или сравнения строковых данных.
OF (Overflow Flag) — флаг переполнения. Указывает на переполнение старшего бита при арифметических командах.

8 комментариев:

Анонимный комментирует...

Спасибо! завтра зачёт! то что нужно!

Анонимный комментирует...

У меня уже мозг кипит от такой инфы ))))

Анонимный комментирует...

"У меня уже мозг кипит от такой инфы ))))" да потому что ты тупое быдло. иди учи мат часть вафля ты апарафиненная

Анонимный комментирует...

Задроты :DDDDD

Анонимный комментирует...


"У меня уже мозг кипит от такой инфы ))))" да потому что ты тупое быдло. иди учи мат часть вафля ты апарафиненная
16 января 2012 г., 21:51"

Вам бы не помешало изучить нормальный русский язык... Здесь ведете себя как быдло только вы!

Анонимный комментирует...

http://torrentins.ru

Анонимный комментирует...

Нормальная статья

-=*=- комментирует...

на здоровье