Практическая работа ОПРЕДЕЛЕНИЕ ЭФФЕКТИВНОГО АДРЕСА ДЛЯ РЕЖИМА АДРЕСАЦИИ
учебно-методический материал на тему

Родионов Владимир Иванович

Научиться определять эффективный и физический адрес для режимов адресации.

Скачать:

ВложениеРазмер
Microsoft Office document icon pr_rab_efadr.doc109 КБ

Предварительный просмотр:

Практическая работа

ОПРЕДЕЛЕНИЕ ЭФФЕКТИВНОГО АДРЕСА ДЛЯ РЕЖИМА АДРЕСАЦИИ
 

1. Цель работы : Научиться определять эффективный и физический адрес для режимов адресации.

  2. Порядок выполнения работы :

2.1. Повторить теоретический материал.

2.2. Решить примеры согласно номеру варианту.

2.3. В соответствии со своим вариантом выполнить демонстрацию использования режимов адресации в отладчике debug. (см. Пример - Адресация одномерных массивов данных - Протокол 3 ).

Адресация одномерных массивов данных

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

ris1.gif

Рис. 1. Организация памяти в виде одномерного массива

Как отчетливо видно из рис. 1, адрес начального байта любого числа легко вычислить по формуле:

Ai = A0 + Di = A0 + 2i;

в нашем эксперименте выберем A0 = 200, а индекс i = 0, 1, …, 8.

Обязательно обратите внимание на тот факт, что нумерацию в массиве удобно начинать с нуля: именно в этом случае расчетная формула выглядит наиболее просто. Простота объясняется тем, что фактически для адресации необходимого элемента приходится вычислять объем памяти, занятый всеми предшествующими ему элементами. Таким образом, например, пятому элементу удобнее всего ставить в соответствие номер 4, тогда первому, соответственно 0 (т.е. ему «ничего не предшествует»).

В языках программирования высокого уровня для удобства человека индексы часто все-таки начинают с единицы. В наиболее развитых версиях языка BASIC даже предусмотрен специальный оператор OPTION BASE, который позволяет устанавливать начальное значение индексов массива 0 или 1 (по умолчанию всегда действует 0). В случае, когда индексы начинаются не с 0, а с 1, при вычислении смещения Di следует вместо переменной i написать i–1.

Мы в нашем сегодняшнем эксперименте ради простоты реализации везде будем начинать отсчет индексов с нуля.

Итак, пусть в памяти, начиная с адреса 200h, располагается массив из 9 двухбайтовых целых чисел, который изображен на рис. 1. Значения чисел, разумеется, можно было задать произвольно, но для удобства проверки правильности работы программ мы занесем в элементы массива их индексы от 0 до 8.

Поставим задачу найти в массиве и извлечь в регистр AX пятый элемент (на рис. 1 он обведен пунктиром; как вы, конечно, поняли из предыдущих рассуждений, этот элемент имеет номер 4).

Для доступа к элементам массива в процессорах фирмы Intel предусмотрен большой ассортимент методов адресации. Доступ к массивам основывается на двух методах – базовом и индексном, остальные являются их модификациями. Пока познакомимся с индексным способом адресации.

Для хранения индексов в рассматриваемом семействе процессоров предусмотрены специальные индексные регистры SI и DI.  Хранящееся в любом из них значение индекса может автоматически складываться с начальным адресом массива, который должен быть указан явным образом в виде константы. Запись 200[SI], например, означает, что при обращении к памяти будет выбран адрес, равный сумме начального адреса массива 200 и индексного смещения, находящегося в данный момент в регистре SI. Подчеркнем, что величина смещения не есть значение индекса: в нашем примере она вдвое превышает последнее, поскольку каждое число занимает 2 байта. Вместо умножения на 2 хорошие программисты, как правило, используют сдвиг на один бит влево; в частности, в нашей программе второй командой стоит SHL SI,1, что как раз и обеспечивает требуемый сдвиг влево (по-английски SHift Left).

Примечание. Сдвиг влево формально эквивалентен приписыванию после числа дополнительного нуля. В повседневной десятичной системе это приводит к увеличению значения в 10 раз (из 12 получается 120!), а в двоичной, соответственно, вдвое.

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

Протокол 3

-a
1423:0100 mov si,4
1423:0103 shl si,1
1423:0105 mov ax,200[si]
1423:0109
-
u
1423:0100 BE0400        MOV     SI,0004
1423:0103 D1E6          SHL     SI,1
1423:0105 8B840002      MOV     AX,[SI+0200]
1423:0109 0000          ADD     [BX+SI],AL
...
-
e200 0 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0
-d200

1423:0200  00 00 01 00 02 00 03 00-04 00 05 00 06 00 07 00   ................
1423:0210  08 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
...
-
t3

AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=
0004  DI=0000
DS=
1423  ES=1423  SS=1423  CS=1423  IP=0103   NV UP EI PL NZ NA PO NC
1423:0103 D1E6          SHL     SI,1

AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=
0008  DI=0000
DS=
1423  ES=1423  SS=1423  CS=1423  IP=0105   NV UP EI PL NZ AC PO NC
1423:0105 8B840002      MOV     AX,[SI+0200]                       DS:0208=0004

AX=
0004  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0008  DI=0000
DS=
1423  ES=1423  SS=1423  CS=1423  IP=0109   NV UP EI PL NZ AC PO NC
1423:0109 0000          ADD     [BX+SI],AL                         DS:0008=1D

При разборе протокола 2 непременно обратите внимание на следующие детали (соответствующие места в тексте, как обычно, подчеркнуты).

  • Индексный операнд 200[SI] Debug расшифровывает «по-своему»: [SI+200].
  • Сдвиг влево преобразует значение SI из 4 в 8, т.е действительно удваивает.
  • В случае, когда выводимая на экран команда работает с памятью, Debug вычисляет адрес данных с учетом текущего значения регистров (в нашем случае SI) и выводит соответствующее содержимое справа от ассемблерного представления инструкции.

Вот мы и научились пользоваться индексной адресацией.

Пример: найти в массиве и извлечь в регистр AX пятый элемент в соответствии с вариантом (см.таблица1).

Таблица 1

tabl1.JPG

2.4. Подготовить отчет.

Режимы адресации данных

Пусть (ВХ)=А, (SI)=B, смещение =С, DS=2100.

Определить эффективный и физический адрес (если это возможно) для следующих режимов адресации:

  1. непосредственный;
  2. прямой;
  3. регистровый;
  4. регистровый косвенный с участием ВХ;
  5. регистровый относительный с использованием ВХ;
  6. базовый индексный;
  7. относительный базовый индексный.

Вариант 

1

2

3

4

5

6

7

8

9

10

А=632D

B=2A9B

C=C237

A=700D

B=3BAC

C=D348

A=742E

B=4CBD

C=E459

A=853F

B=5DCE

C=F56A

A=9640

B=6EDF

C=067B

A=A751

B=7DE0

C=178C

A=B862

B=8EF1

C=289D

A=C973

B=9F12

C=39AF

A=DA84

B=A123

C=4FBF

A=EB95

B=A123

C=4ABF

11

12

13

14

15

16

17

18

19

20

A=EB95

B=C345

C=6CD2

A=A123

B=4BC5

C=CC5F

A=B234

B=3CD6

C=BB6E

A=C345

B=2DE7

C=AA8F

A=D456

B=1EF8

C=999D

A=E567

B=5FA9

C=88D8

A=F678

B=6AF6

C=77C7

A=A789

B=7BE7

C=66B6

A=B891

B=8CD8

C=55C5

A=C912

B=9DC9

C=4EFE

21

22

23

24

25

26

27

28

29

30

А=623D

B=29AB

C=C327

A=722D

B=3ABC

C=D438

A=724E

B=4BCD

C=E549

A=835F

B=5CDE

C=F65A

A=9460

B=6DEF

C=076B

A=A571

B=7ED0

C=187C

A=B682

B=8FE1

C=298D

A=C793

B=91F2

C=3A9F

A=D8A4

B=A213

C=4BFF

A=E9B5

B=A213

C=4BAF

31

32

33

34

A=E9B5

B=C435

C=6DC2

A=A213

B=4CB5

C=C5CF

A=B324

B=3DC6

C=B6BE

A=C435

B=2ED7

C=A8AF


По теме: методические разработки, презентации и конспекты

Практическая работа. Определение освещенности на рабочем месте

Методическая разработка по дисциплине "Охрана труда и техника безопасности" для студентов СПО....

Кузьмакова Татьяна Сергеевна. Практическая работа. Определение этапов проведения маркетингового исследования

Практическая работа. Определение этапов проведения маркетингового исследования. Методические указания для выполнения практических работ по МДК.04.01. "Маркетинговые исследования".Цель данной практичес...

Презентация практической работы "Определение осадки цилиндрической винтовой пружины"

Урок- презентация на тему "Определение осадки цилиндрической винтовой пруж ины"...

Практическая работа. Определение массы 1000 семян.

Практическая работа для студентов 1 курса по специальности "Агрономия"Цель: Определить массу 1000 штук семян любой культуры.Материалы и оборудование: семена любой культуры, шпатели, технические весы с...

САПР КОМПАС. Практическая работа. Начертить фигуру в ортогональном режиме черчения.

САПР КОМПАС. Практическая работа. Начертить фигуру в ортогональном режиме.  Небольшая работа на 10-15 минут. Эту работу можно дать на 1 или 2 уроке. Обучающиеся хорошо ее выполняют и у них появля...

Практическая работа ОПРЕДЕЛЕНИЕ ФИЗИЧЕСКОГО АДРЕСА ПЕРЕХОДА И ЗНАЧЕНИЙ ФЛАГОВ ПРИ ВЫПОЛНЕНИИ АРИФМЕТИЧЕСКИХ ОПЕРАЦИЙ.

Научиться определять физический адрес перехода и значения флагов при выполнении арифметических операций....

МЕТОДИЧЕСКИЕ УКАЗАНИЯ К ВЫПОЛНЕНИЮ ПРАКТИЧЕСКОЙ РАБОТЫ «РАСЧЁТ IP АДРЕСА ПОДСЕТИ.»

ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ.ОТЧЁТ ПО РАБОТЕ ДОЛЖЕН СОДЕРЖАТЬ :Класс исходного IP адресаЗапись стандартной маски сети в десятичной форме и в компактной формеРасчёт количества бит для адресации подсетей.К...