36. Программная модель i8086
Состоит из РОН, сегментных регистров, IP и регистров флага.
РОН делятся на: регистры данных и регистры указателей.
Регистры данных |
Регистры указатели |
|||
|
15…8 |
7…0 |
|
15…8 |
AX |
АH |
AL |
SP |
|
BX |
BH |
BL |
BP |
|
CX |
CH |
CL |
SI |
|
DX |
DH |
DL |
DI |
Сегменты данных |
|
Указатель команд |
15…0 |
15…0 |
|
CS |
IP |
|
DS |
Регистр флагов |
|
SS |
15…0 |
|
ES |
X/X/X/X/OF/DF/IF/TF/ST/ZF/X/AF/X/PF/X/CF |
OF-11; SP – указатель стека
DF=10; BP – базовый регистр
IF-9; SI – индекс источника
TF-8; DI – индекс назначения
SF-7; CS – сегмент кодов
ZF-6; DS – сегмент данных
AF-4; SS – сегмент стека
PF-2; ES – дополнительный сегмент данных
CF-0;
РОН делятся на регистры данных и указателя . К регистрам данных относятся 4е 16ти разрядные регистры, любой из которых состоит из 2х-8ми разрядных регистров, которые можно независимо адресовать символическими именами AH, BH, CH, DH соответственно AL, BL, CL, DL, регистры указателей 16ти разрядны и предназначены для хранения адресов операндов при косвенной адресации. Все РОН можно использовать для хранения данных, но в некоторых командах допускается использование определенного регистра по умолчанию.
AX – при умножении и делении, в воде и выводе слов (16разрядов);
AL – умножение-деление, ввод-вывод байтов, десятичной коррекции;
AH – умножение-деление битов;
BX – используется при трансляции;
CX – счетчик циклов и указатель длины слов в строчных командах;
CL – хранение числа сдвигов в командах;
DX – умножение и деление слов, ввод и вывод с косвенной адресацией;
SP – операции со стеком;
SI/DI – при строковых операциях.
В отличии от 8ми разрядного МП в регистре SP хранится смещение последней занятой ячейки стека, а полный адрес стека определяется SS:SP. Сегментных регистры определяют начальные адреса 4х сегментов памяти в зависимости от типа обращения к памяти (выборка команд, адресация переменной, стековые операции и т.д.).
Регистр флагов хранит признаки результата выполнения арифметических и логических операций и управляющие признаки, которые можно установить и сбросить программно.
AF – флаг вспомогательного переноса или заема из младшей тетрады в старшую из разряда F3 в F4, используется в командах обработки двоично-десятичных чисел.
CF – флаг переноса или заема устанавливается (1) при выходе результата суммирования (вычитания) без знаковых операндов за границу диапазона. В командах сдвига фиксирует значение старшего бита.
OF – флаг переполнения устанавливается при выходе знакового результата за границу диапазона.
CF – флаг знаки. Для положительных чисел CF=0, для отрицательных CF=1.
PF – флаг четности, устанавливается при четном количестве единиц в результате операции.
ZF – флаг результата = 0. Устанавливается при 0ом результате операции.
DF – флаг управления направлением обработки массивов данных в строковых командах. При DF=1 индексные регистры SI и DI, которые принимают участие в строковых командах автоматически декрементируются, а при DF=0 инкрементируются.
IF – флаг разрешения прерывания IF=1, разрешается выполнение маскированных аппаратных прерываний.
TF – флаг трассировки (пошагового режима) при его установке после выполнения каждой команды вызывается внутреннее прерывание.
Для формирования 20ти разрядного адреса в 16ти разрядном процессоре используют информацию 2х-16ти разрядных регистров.
В МП i8086 20ти разрядный адрес формируется из 2х-16ти разрядных адресов, которые называются логическими. Первый логический адрес 16ти разрядный, заполненный 0000 представляет собой начальный адрес сегмента емкостью 64 Кбайта.
Второй логический адрес определяет смещение в сегменте, т.е. расстояние от начала сегмента до адресованной ячейки, если это расстояние = 0000, то адресуется первая ячейка сегмента, т.о. логическое адресное пространство разделено на блоки соседних адресов емкостью 64 Кбайта.
Получают 20ти разрядный физический адрес.
Пример:
Сегментный подход к организации памяти удобен еще и потому, что память обычно логически делится на области кода (программная память) данных и стека.
Физический 20ти разрядный адрес ячейки памяти формирется из 2х-16ти разрядных адресов: адреса сегмента (seg) и исполнительного адреса (смещение EA), которые суммируются со смещение на 4 разряда влево.
Смещение адреса сегмента на 4 разряда влево эквивалентно уменьшению на 2^4, т.е. физический адрес: 16*Seg+EA.
В качестве первого логического адреса сегмента используется содержимое одного из 4х сегментных регистров: CS, SS, DS, ES.
CS: Второй логический адрес EA зависит от сегмента, так в сегменте кодов используется содержимое указателя команд (CS, IP). В сегменте данных значение EA зависит от средства адресации операнда. В сегменте стека для указания 2го логического адреса используется содержимое (SS:SP, SS:BP).
Преобразованиелогических адресов в физические всегда однозначно, т.е. в паре сегмент: EA соответствует единственный адрес.
Обратное преобразование не является однозначным. Физический адрес можно использовать: 64Кб/16=4086