Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
5. CPU i86.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
238 Кб
Скачать
☆

Сегментные регистры, трансляция сегментов

Адрес объекта в сегментированной памяти задается 2 компонентами:

1) базовым адресом сегмента:

- косвенно (в связке с bx или bp),

- явно - в префиксе замены сегмента;

2) смещением в сегменте.

CPU i86 содержит 4 сегментных регистра по 2 байта:

Регистр

Регистр задает

Назначение

CS

сегмент кода

выборка команд, адреса которых задаются ip

SS

сегмент стека

выборка данных, адреса которых задаются базой bp

DS

сегмент данных

выборка данных, адреса которых задаются базой bx

ES

дополнительный сегмент данных

в командах обработки строк

Можно обращаться к другим сегментам:

- существует 16 сегментов;

- но одновременно можно использовать только 4;

- применяются команды перегрузки сегментных регистров:

- команду MOV,

- команды загрузки сегментных регистров (LES, LDS и LSS).

Значения указателя стека sp и сегментного регистра SS:

- должны быть четными;

- так как работа со стеком выполняется переменными, кратными 2.

Преобразование математической адреса в линейный адрес выполняется по формуле (процедура трансляции адреса) (рис.4):

"линейный адрес" ←

← "значение сегмента" × 16 + "адрес операнда в сегменте",

где

"адрес операнда в сегменте" ←

← "B (база)" + "X (индекс)" + "disp (смещение)",

B, X, disp - компоненты адреса аргумента текущей команды.

0

Получение ячейки памяти при косвенной адресации

Для разных смещений используются обозначения:

- disp - смещение в сегменте относительно параметров B и X;

- offset - полное смещение в сегменте;

- линейный адрес - полный адрес в физической памяти.

Существует проблема трансляции сегментов:

- связана с 20-ти адресной шиной;

- старший сегмент размешается по адресу 220 -24 -1;

- может содержать только 16 байт;

- обращение к большим адресам автоматически будет переадресовано в 0-й сегмент (к 0-му адресу);

- при эмуляции CPU i86 используется программный "заворот".

В CPU i86 виртуальная память не реализована.

Указатель команд ip

- 16-ти разрядный регистр-счетчик,

- вычисляющий адрес команды в сегменте CS по длине предыдущей команды;

- прямое изменение невозможно;

- можно изменять косвенно:

- в командах передачи управления,

- при сохранении/восстановления контекста ПО через стек.

Регистр флагов cpu

16-ти разрядный регистр Flags содержит:

- управляющие сигналы CPU;

- флаги для условных команд передач управления:

- CF - арифметический перенос в старшие разряды,

- PF - результат кратен 2-м (чётен),

- ZF - нулевой результат,

- SF - знак результата (отрицательный ли результат),

- OF - переполнение,

- TF - остановка после каждой команды при отладке,

- IF - разрешение прерывания,

- DF - направление обработки строк.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]