Учебное пособие Санкт-Петербург Издательство спбгэту «лэти» 2006

Вид материалаУчебное пособие

Содержание


2.3. Организация процессора и памяти в Intel 8086
2.4. Программно доступные регистры процессора
Регистры общего назначения
Сегментные регистры
Регистр флагов
2.5. Организация стека в Intel 8086
Sp)-2sp [sp]ax
Подобный материал:
1   2   3   4   5   6   7   8   9   ...   26

2.3. Организация процессора и памяти в Intel 8086


В данном процессоре длина слова составляет 16 бит, что равно 2 байт. Минимально адресуемой и обрабатываемой единицей информации является байт, при этом адрес слова совпадает с адресом младшего байта и является четным. При разрядности адреса 16 бит максимальная емкость прямо адресуемой памяти составляет
216 = 64 Кбайт. Для расширения адресуемого пространства памяти используется ее разбиение на блоки – сегменты, называемое сегментированием памяти. Каждый сегмент имеет произвольную длину, не превышающую
64 Кбайт. Адрес байта в сегментированной памяти задается двумя составляющими: сегментная часть (16 бит), определяющая адрес начала сегмента, и смещение (16 бит) байт в пределах сегмента. Обычно адрес представляется в виде пары Сегмент (Segment) : Смещение (Offset). Начало размещения сегмента выравнивается на границу блока памяти из 16 байт, называемого «параграфом». Соответственно, физический адрес памяти получается путем суммирования сегмента, сдвинутого на 4 бита влево, со значением смещения. Результатом такого суммирования является 20-битный физический адрес, чем обеспечивается адресация 1 Мбайт памяти.

Пример. Пусть Segment = DCBA, Offset = 5678.

Физический адрес Adr будет определяться суммой: DCBA0 + 5678 = E2218.


2.4. Программно доступные регистры процессора


Начиная с 80386, процессоры Intel предоставляют 16 основных регист­ров для пользовательских программ плюс еще 11 регистров для работы с числами с плавающей запятой (FPU/NPX) и мультимедийными при­ложениями (ММХ). Все команды так или иначе изменяют значения ре­гистров, и всегда быстрее и удобнее обращаться к регистру, чем к памяти.


Регистры общего назначения

16-битные регистры АХ (аккумулятор), ВХ (база), СХ (счетчик), DX (регистр данных) могут использоваться без ограничений для любых це­лей – временного хранения данных, аргументов или результатов различ­ных операций. На самом деле, начиная с процессора 80386, все эти регистры имеют размер 32 бита и называ­ются они ЕАХ, EВХ, EСХ, EDX. Кроме этого, отдельные байты в 16-бит­ных регистрах АХ - DX тоже имеют свои имена и могут использоваться как 8-битные регистры. Старшие байты этих регистров называются АН, ВН, СН, DH, а младшие - AL, DL, CL, DL.

Другие четыре регистра общего назначения (РОН) – SI (индекс источни­ка), DI (индекс приемника), BP (указатель базы), SP (указатель сте­ка) – имеют более конкретное назначение и могут применяться для хра­нения всевозможных временных переменных, только когда они не используются по назначению. Регистры SI и DI используются в стро­ковых операциях, ВР и SP используются при работе со стеком. Так же как и для регистров АХ - DX, начиная с процессора 80386, эти четыре регистра являются 32-битными, называются ESI, EDI, EВР и ESP соответственно и могут использоваться как универсальные РОН.


Сегментные регистры

При использовании памяти для формирования любого адреса применяются два числа – адрес начала сегмента и смещение искомого байта относительно этого начала. Для хранения адреса начала сегмента в процессорах Intel8086 предусмотрены следующие сегментные регистры – CS (сегмент кода), DS (сегмент данных), ES (дополнительный сегмент), SS(сегмент стека). Начиная с 80286, появились регистры FS и GS.

Смещение следующей выполняемой команды всегда хранится в специальном регистре – IP (указатель инструкции), запись в кото­рый приведет к тому, что следующей будет исполнена какая-ни­будь другая команда, а не команда, расположенная сразу за данной. На самом деле, все команды передачи управления – перехода, условного перехода, цикла, вызова подпрограммы и т. п. – осуществляют запись в CS и IP.


Регистр флагов (Рис. 2.3)


Х

Х

Х

Х

OF

DF

IF

TF

SF

ZF

0

AF

0

PF

1

CF


15

8

7

0

Н
Рис. 2.3
а рис. 2.3 приняты следующие обозначения:

CF- флаг переноса (CARRY);

PF- флаг четности (PARITY);

AF- дополнительный флаг переноса (AUXILARY);

ZF- флаг нуля (ZERO);

SF- знаковый флаг (SIGN);

TF- флаг слежения, ловушка (TRAP);

IF- флаг прерываний (INTERRUPTION);

DF- флаг направления (DIRECTION);

OF- флаг переполнения (OVERFLOW).

2.5. Организация стека в Intel 8086


Стек – специальная область памяти, достуная для записи (заполнения) и выборки (выталкивания) данных только с одного конца, называемого верхушкой стека. В процессоре Intel 8086 на верхушку стека указывает РОН указатель стека (SP – stack pointer), стек может работать только со словами, заполнение стека происходит в сторону уменьшения адресов с помощью команды PUSH, а освобождение стека (выталкивание данных из стека) – в сторону увеличения адресов командой РОР.

По существу команда PUSH AX и POP AX, соответственно сохраняющая содержимое РОН AX в стеке и восстанавливающая содержимое РОН AX из стека, выполняется в два приема:

PUSH AX: POP AX:

(SP)-2SP [SP]AX

(AX)[SP] (SP)+2SP


Использование стека:
  • промежуточное хранение содержимого регистра или группы регистров;
  • обмен содержимого регистров;
  • сохранение адресов возврата при вызове подпрограмм;
  • передача параметров между вызываемой и вызывающей программами;
  • сохранение адресов возврата и регистра флагов при обработке прерываний.