Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СПО / Лекции (Assembler).doc
Скачиваний:
389
Добавлен:
07.02.2015
Размер:
968.7 Кб
Скачать

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

В процес­сорах Intel предусмотрено шесть 16-битных регистров – CS, DS, ES, FS, GS, SS, где хранятся селекторы (рис. 1) (регистры FS и GS отсутствовали в 8086, но появились уже в 80286). Это означает, что в любой момент можно изменить параметры, запи­санные в этих регистрах.

Рис. 1. Сегменты команд, данных и стека в памяти

Назначения сегментных регистров следующие:

регистр CS [Code Segment – “сегмент кода”] соответствует сегменту команд, испол­няемых в данный момент;

регистр DS [Data Segment – “сегмент данных”] соответствует сегменту данных, с кото­рыми работает процессор;

регистр ES [Extra Segment – “дополнительный сегмент”] соответствует дополнительному сегменту данных;

регистр SS [Stack Segment – “сегмент стека”] соответствует сегменту стека.

LIFO = Last In First Out

FILO = First In Last Out

В отличие от DS, ES, GS, FS, которые называются регистрами сегментов дан­ных, CS и SS отвечают за сегменты двух особенных типов – сегмент кода и сегмент стека. Первый содержит программу, исполняющуюся в данный момент, следова­тельно, запись нового селектора в этот регистр приводит к тому, что далее будет исполнена не следующая по тексту программы команда, а команда из кода, нахо­дящегося в другом сегменте, с тем же смещением. Смещение очередной выпол­няемой команды всегда хранится в специальном регистре EIP (указатель инст­рукции, 16-битная форма IP), запись в который также приведёт к тому, что далее будет исполнена какая-нибудь другая команда. На самом деле все команды пере­дачи управления – перехода, условного перехода, цикла, вызова подпрограммы и т. п. – и осуществляют эту самую запись в CS и EIP.

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

Регистры-указатели

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

F = 1510 = 11112

Следующие пять регистров процессора служат указателями (то есть определяют смещение в пределах сегмента).

BP – Base Pointer (“указатель базы”);

SI – Source Index (“указатель источника”);

DI – Destination Index (“указатель приёмника”);

SP – Stack Pointer (“указатель стека”);

IP – Instruction Pointer (“указатель инструкции (команды)”).

Например, счётчик команд процессора образуется парой регистров CS и IP, а указатель стека – парой регистров SP и SS. Регистры SI и DI используются в строковых операциях, то есть при последовательной обработке не­скольких ячеек памяти одной командой.

Соседние файлы в папке СПО