Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ПТСПЦУВСБ / 7. Режим адрессации в память и микропроцессоре INtel86

.docx
Скачиваний:
48
Добавлен:
27.12.2015
Размер:
42.17 Кб
Скачать

7.Режим адресации в памяти и микропроцессоре Intel 86.

Режимом или способом адресации называют процедуру нахождения операндов.

Операнды в программе могут задаваться в:

  1. РОНах

  2. Непосредственно в коде программы

  3. Ячейках памяти (прямо или косвенно)

  4. В портах ввода/вывода

Режим

адресации

Обозначение в

ассемблере

Регистр. сегмент.

по умолчанию

Пример использования

регистровый

AX/AL (16/8)

-----

Mov AX,CX;

Mov AL,BH

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

Const (16/8)

-----

Mov AX,100H;

Mov BL,-24H

Прямая адресация

Метка, задающая смещение относительно данных.

DS

Mov Ax,TAB (обычно используется для задания статических переменных)

Косвенная адресация

[BX], [BP]

[DI], [SI]

(>i386 можно исп.

все регистры)

DS, SS

DS (ES), SS

Mov AL,[DI]

Mov AX, ES:[BX]

Базовая адресация

[BX]+смещение

[BP]+ смещение

DS

ES

Mov AX, 4[BP] (означает 4+BP)

Mov CX, [BP]+2

Mov AX, CS:[BX]+4

Индексная адресация

[SI]+смещение

[Di]+ смщение

DS

DS (ES)

Mov AL,B, TAB

(исп. для строк или массивов)

Базово – индексная адресация

[BX]:[DI]+смещение

[BX]:[SI]+смещение

[BX]:[BP]+смещение

DS, SS

DS, SS

Mov AX,ES:VALUE [BX]:[DI] (VALUE+BX+DI)

Базово – индексная с масштабированием (начиная с i386)

[EAX][ESX*m]+смещение

m=1, 2, 4, 8

Mov Ax,4*[BP]

Mov CX,[BP]*2+2

  1. Операнды могут располагаться в любых РОНах и сегментных регистрах. В тексте программы указывается название соответствующего регистра.

  2. Все арифметические команды (кроме деления) позволяют указывать один из операндов непосредственно в тексте программы.

  3. Если известен адрес операнда в памяти, можно использовать этот адрес. Прямая адресация иногда называется адресацией по смещению (Mov AX,ES:2CH – из ячейки с адресом 2СН сегмента EXTRA содержимое пересылается в AX).

  4. Адрес операнда в памяти можно хранить в любом из указанных регистрах ([BX]:[BP]; [DI]:[SI]). После i386 в любых регистрах.

Mov AX,ES:[DI] – из регистра [DI] выбирается адрес операнда, ищем его в сегменте EXTRA и пересылаем в AX.

  1. Базовую адресацию используем, когда в регистре находится адрес начала структуры данных (вектора, строки и т.д.), а доступ надо осуществить к какому либо элементу этой структуры (Mov AX,4[BP] – содержимое является адресом операнда в AX). Другое применение – это доступ из подпрограмм к параметрам, переданных в STACK.

  2. Для нахождения элементов массива

  3. Для двумерных массивов и массивов записи

  4. Расширенный режим (используется в процессорах выше i386).

Определение физического адреса.

216=1024*64=65536

Размер адресуемой памяти ограничен возможностями адресной шины процессора.

I86/88 – 20 разрядов, тогда адресовать можно 220=(210)2=1 МБ

FFFFF – максимально возможный адрес

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