Сегменты и передача управления

Сегментом называется область памяти, которая начинается на границе параграфа, то есть в любой точке, адрес которой кратен 16 (восемь младших битов равны нулю).

Существуют три основных типа сегментов:

- сегмент кода - содержит машинные команды, адресуется ре­гистром CS;

- сегмент данных - содержит данные, то есть константы и рабочие области, необходимые программе. Адресуется регистром DS;

- сегмент стека - содержит адреса возврата в точку вызова подпрограмм. Адресуется регистром SS.

Каждый из упомянутых регистров содержит адрес начала сег­мента (базовый адрес). В программе все адреса записаны относи­тельно начала сегмента, и они определяются как смещение (offset) от начала сегмента. Двухбайтовое смещение (одно слово) может принимать значение от 0000 до 0FFFFh. Для того, чтобы вы­полнить обращение по любому адресу процессор выполняет суммиро­вание адреса, записанного в регистре сегмента, со смещением. При этом, содержимое регистра сдвигается на четыре двоичных разряда влево. Результирующий адрес занимает 20 позиций, что и позволяет адресовать 1 Мбайт памяти.

Пример.

Содержимое DS                         045F

+

Смещение                                     0032

Исполнительный                       04622

адрес (EA)

Примечание:                      Адреса шестнадцатиричные.

РЕЖИМЫ АДРЕСАЦИИ

Стандартный сег- Режим адресации  Формат адреса  ментный регистр

===============            =============      =================

Регистровая                            регистр                          Нет

Непосредственная                  данные                          Нет

Косвенная регистровая           [BX]                             DS

[BP]                                                                                  SS

[DI]                                                                                  DS

[SI]                                                                                   DS

По базе со смещением метка [BX]                                  DS

метка [BP]                                                                        SS

Прямая                                 метка [DI]                         DS

с индексированием            метка [SI]                          DS

По базе                            метка [BX + SI]                    DS

с индексированием метка [BX + DI]                             DS

метка [BP + SI]                                                                SS

метка [BP + DI]                                                               SS

Строковые команды исходный адрес                          DS:SI

место назначения                                                          ES:DI

* Метка [...] может быть заменена на [смещение +...].

Следовательно, запись [24 + BX] будет означать адрес 24+ВХ.

===========================================================

Примечание: Многие строковые команды используют ES:DI как место назначения, а DS:SI как адрес источника.

Эта таблица приводит количество временных тактов, требуе­мых для вычисления исполнительного адреса на микропроцессоре

8088. Микропроцессор 80*8* производит эти вычисления быстрее, так что эта таблица содержит "самые медленные" данные.

Каждое обращение к памяти занимает дополнительные 4 такта. Поле обращений в описаниях команд содержит информацию о коли­честве обращений к памяти для каждой команды. Стеки

Во многих случаях программе требуется временно запомнить информацию, а затем считывать ее в обратном порядке. Эта проб­лема в ПК решена посредством реализации стека LIFO ("последний пришел - первый ушел"), называемого также стеком включения/из­влечения (stack - кипа, например, бумаг). Наиболее важное ис­пользование стека связано с процедурами. Стек обычно рассчитан на косвенную адресацию через регистр SP - указатель стека. При включении элементов в стек производится автоматический декре­мент указателя стека, а при извлечении - инкремент, то есть стек всега "растет" в сторону меньших адресов памяти. Адрес последнего включенного в стек элемента называется вершиной сте­ка (TOS).

Физический адрес стека формируется из SP и SS или BP и SS, причем SP служит неявным указателем стека для всех операций включения и извлечения, а SS - сегментным регистром стека. Со­держимое SS является самым младшим адресом (границей) области стека и называется базой стека. Первоначальное содержимое SP считается наибольшим смещением, которого может достигать стек. Регистр BP предназначен, главным образом, для произвольных об­ращений к стеку.

2.5.2 JMP Безусловный переход

Признаки не меняются.

Команда: JMP target.

Условие перехода: переход осуществляется всегда.

Команда JMP всегда передает управление в место, определяе­мое операндом target. В отличие от команды CALL, JMP не запоми­нает значение IP, т.к. появление команды возврата RET не ожида­ется. Переход внутри сегмента может быть задан как операндом типа память, так и через 16-битный регистр. Переход во внешний сегмент может быть задан только через операнд типа память.

Примечания:

Если ассемблер может определить, что в случае перехода внутри сегмента цель перехода находится в пределах 127 байтов от места расположения текущей команды, то ассемблер автомати­чески сгенерирует двухбайтовую команду (короткий переход); в противном случае сгенерируется трехбайтовый NEAR JMP. В целях генерации двухбайтовой команды Вы можете сделать "подсказку" ассемблеру, используя специальный оператор "short":

JMP short near_by

Лекция 8


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: