Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебн пособ по арх и прогр МП.doc
Скачиваний:
64
Добавлен:
10.12.2013
Размер:
1.59 Mб
Скачать

3.2. Способ адресации ячеек сегментированной памяти

С учетом сегментной адресации памяти, адрес любой ячейки памяти определяется в МП суммированием двух составляющих (логических адресов). Первая составляющая – это адрес сегмента, в котором находится искомая ячейка. Вторая – это адрес ячейки, отсчитываемый от начала этого сегмента, и называемый поэтому адресом смещения ячейки в сегменте. Кратко будем называть эти адреса Асегм и Асмещ. Покажем в карте памяти размещение некоторого сегмента и его содержимого. Следует помнить, что нумерация в ЭВМ принята с цифры 0.

На рис. 3.1 выделена ячейка с номером 5, содержащая байт, то есть Асмещ1=5. Если в памяти размещено слово (рис.3), оно указывается (адресуется) через свой младший байт: Асмещ2 слова в памяти = 3.

Память имеет байтовую организацию – двухбайтовое слово размещается в смежных ячейках, причем старший байт занимает ячейку с большим номером. Адресом слова служит адрес младшего байта.

Рис. 3.1. Размещение в памяти байта. Рис. 3.2. Размещение в памяти слова.

Такой способ адресации ячеек памяти удобен тем, что при смене Асегм не требуется изменять Асмещ: значения адресов смещений всегда отсчитываются от начала сегмента и не зависят от значения адреса сегмента.

ЕслиАсегм является постоянной величиной для программы, то в адресных полях А1 и А2 команды достаточно указывать только Асмещ (данных и результата). Напомним форматы команд:

Рис. 3.3. Форматы команд а) с двумя операндами; б)с одним операндом.

Таким образом, в МП должны храниться адреса всех сегментов исполняемой программы. При каждом обращении к памяти с целью прочитать команду или операнд или записать результат, в МП должен быть сформирован исполнительный адрес требуемой ячейки как сумма Асегм и Асмещ, который МП выбирает из команды или вычисляет по данным команды.

3.4. Программистская модель мп i8086. Назначение регистров.

Совокупность регистров, доступных программисту и используемых им при составлении программ на языке АССЕМБЛЕР или другом машинно-ориентированном языке, называется программистской моделью.

На рис. 3.4 представлена программистская модель МП i8086, содержащая программно-доступные регистры. К их числу относятся регистры общего назначения, сегментные регистры, регистр – указатель команд и регистр признаков - флагов. Все они являются 16-разрядными регистрами.

Регистры общего назначения – это те регистры, которые могут использоваться в любых арифметических, логических и т.п. машинных операциях.

Регистры данных AX, BX, CX, DX служат для хранения операндов и результатов операций. Возможна адресация как целых регистров, так и их младшей и старшей частей, называемых L и H соответственно. Некоторым регистрам наряду с общим назначениями придаются и специальные. В последнем случае в соответствующих командах эти регистры указываются неявно самим кодом операции. Так, в некоторых командах

  • регистр АХ используется в качестве аккумулятора т.е. регистра, в котором находится один из операндов и в который помещается результат операции;

  • Регистр ВХ – как базовый регистр, используется при косвенной адресации;

  • Регистр СХ – как счетчик количества сдвинутых бит в командах сдвига, счетчик числа повторов в командах управления вычислительными циклами и в операциях с цепочками байт;

  • РегистрDX неявно адресуется в командах умножения и деления, а в некоторых операциях ввода-вывода хранит адрес порта ввода-вывода.

Рис. 3.4. Программистская модель МП i8086.

Как отмечалось выше, любая программа может использовать четыре типа сегмента:

  • кодов (где хранятся машинные коды команд);

  • данных;

  • дополнительных данных;

  • стека.

Хотя все регистры смещений и сегментов являются 16-разрядными, МП выдает на шину адреса при обращениях к оперативной памяти (ОП) 20-разрядные исполнительные (физические) адреса, позволяющие обращаться к ОП емкостью 1 Мбайт. Это становится возможным благодаря механизму сегментации памяти. Размер сегмента не может превышать 64 Кбайта. Допускается перекрытие сегментов. Базовые (начальные) 16-разрядные адреса сегментов, хранящиеся в соответствующих сегментных регистрах, трактуются как 20-разрядные с нулями в четырех младших разрядах. Другими словами, начальные адреса должны быть кратны 16.

Физический адрес операнда или команды формируется, как это показано на рис. 3.4, суммированием начального адреса соответствующего сегмента (содержимого сегментного регистра, сдвинутого на четыре разряда влево, т.е. дополненного нулями в четырех младших разрядах) и адреса смещения, так же называемого эффективным адресом ЕА. Адрес смещения вычисляется в МП на основе содержащейся в команде информации о способе формирования адреса операнда.

Рис. 3.5. Формирование физического адреса.

МП i8086 имеет для хранения адресов сегментов текущей программы 4 сегментных регистра: CS – для сегмента кода, DS, - для сегмента данных, SS – для сегмента стека, ES – для дополнительного сегмента. Ни в каких арифметических, логических и т.п. машинных операциях эти регистры участвовать не могут. Можно лишь записывать в них и считывать из них, да и то есть определенные ограничения.

Группу указательных и индексных регистров, задающих внутрисегментные смещения, образуют следующие регистры: указателя стека (SP), указателя базы стека (BP), индекса операнда (источника) (SI) и индекса результата (приемника) (DI). К этой группе можно отнести и регистр указателя (счетчика) команд - IP, часто называемого счетчиком команд. Причем сегментные, индексные и указательные регистры применяются попарно, в соответствии с сегментной адресацией следующим образом:

CS и IP- адресуют вместе содержимое сегмента кода программы;

SS и BP или SS и SP- адресуют сегмент стека;

DS и один из регистров BX, SI, DI - адресуют сегмент данных;

Специальное назначение регистров приведено ниже.