"Организация и функционирование ЭВМ"
Лабораторная работа №2
«Способы адресации»
1. Изучить теоретический материал «Способы адресации».
2. Получить у преподавателя вариант выбора значений исходных данных (массивов) vec1, vec2 и matr из таблицы индивидуальных заданий и занести свои данные вместо значений, указанных в приведенной программе lab2.asm.
3. Протранслировать программу с созданием файла диагностических сообщений, исправить и объяснить обнаруженные ошибки.
4. Снова протранслировать программу и скомпоновать загрузочный модуль.
5. Выполнить программу в пошаговом режиме под управлением отладчика с фиксацией содержимого используемых регистров и ячеек памяти до и после выполнения команды. Результаты прогона программы должны быть представлены в отчете.
Способы адресации МП Intel 8086
Для адресации данных в процессоре 8086 несколько способов. Данные хранятся в сегменте данных. Сегмент данных определяется программистом, а адреса данных задаются им с помощью меток. Пусть в сегменте данных меткой Mas задан массив чисел каждое размером в один байт. Этой меткой мы будем пользоваться ниже при рассмотрении способов адресации со смещением.
Непосредственная адресация
Вместо адреса в поле операнда команды указывается сам операнд, например: 25, -6, 100. В общем виде операнд записывается как числовая константа.
Прямая адресация
Адрес операнда задается в явном виде меткой. Адрес первого элемента массива Mas будет выглядеть так: Mas. Адрес четвертого элемента можно записать как Mas+3 (так как адрес 1-го эл-та – Mas+0, 2-го – Mas+1 и т. д.). В общем виде адрес записывается как <метка>±<константа>.
- Прямая регистровая адресация
В поле операнда указывается имя регистра. Примеры: AX, DL, SP.
MOV DS, AX
- Прямая с индексированием Aисп=Асмещ+Аинд, причем Аинд находится в индексном регистре, например:
MOV AX, SOURCE[SI]
- Прямая с базированием Aисп=Асмещ+Абазы, адрес Абазы находится в базовом регистре, например:
MOV AX, SOURCE[ВХ].
Прямая с индексированием и базированием
Прямая с индексированием часто применяется для обработки двумерных массивов. Смещение операнда вычисляется процессором как сумма содержимого базового и индексного регистра. При этом базовыми являются регистры BX, BP, а индексными SI, DI. Применение других регистров недопустимо. Примеры такой адресации: [BX][SI], [BP][DI]. Индексная адресация с базовым регистром BX обращается в сегмент данных, а с BP – в стек. Возможна замена сегмента, она выполняется аналогично косвенной адресации. Рассмотрим методику работы с двумерным массивом. В BX (или BP) заносится адрес начала строки массива, а в SI (DI) – смещение операнда внутри строки. Общий вид: {<сегмент>:}[<Баз. рег>][<Инд. регистр>].
Косвенная адресация
В случае косвенной адресации адрес смещение операнда в сегменте данных находится в одном из регистров BX, SI, DI. Другие регистры при косвенной адресации недопустимы. Имя регистра заключается в квадратные скобки. Примеры: [SI], [DI], [BX]. Если необходимо обратиться к данным из другого сегмента, например ES, необходимо использовать так называемую замену сегмента. Для этого перед [Рег] указывают имя сегментного регистра и ставят двоеточие, например так: ES:[DI]. Общий вид: {<сегмент>:}[<регистр>]. Фигурные скобки означают, что замена сегмента не обязательна.
Косвенная адресация с индексированием
К смещению, полученному с помощью косвенной адресации, прибавляется дополнительное смещение, и по этому новому адресу и находится в оперативной памяти операнд. Существует несколько форм записи этой адресации, приведем две из них: Mas[SI] (эквивалентно [SI+смещение Mas]), [SI+4]. Смещение Mas можно найти с помощью директивы OFFSET Mas, то есть Mas[SI]º[SI+OFFSET Mas]. В этом способе адресации можно применять еще и регистр BP, например: [BP+16]. При использовании этого регистра процессор воспринимает смещение как смещение в сегменте стека. Пример: DS:[BP-12]. Общий вид: {<сегмент>:}[<Регистр>+<Смещение>].
Таблица индивидуальных заданий
Вариант | Массивы | Значения элементов |
1 | vec1 vec2 matr | 1,2,3,4,8,7,6,5 -10,-20,10,20,-30,-40,30,40 1,2,3,4,-4,-3,-2,-1,5,6,7,8,-8,-7,-6,-5 |
2 | vec1 vec2 matr | 5,6,7,8,12,11,10,9 -20,-30,20,30,-40,-50,40,50 -5,-6,-7,-8,4,3,2,1,-1,-2,-3,-4,8,7,6,5 |
3 | vec1 vec2 matr | 8,7,6,5,1,2,3,4 -30,-40,30,40,-10,-20,10,20 -1,-2,-3,-4,8,7,6,5,-5,-6,-7,-8,4,3,2,1 |
4 | vec1 vec2 matr | 12,11,10,9,5,6,7,8 -40,-50,40,50,-20,-30,20,30 5,6,7,8,-8,-7,-6,-5,1,2,3,4,-4,-3,-2,-1 |
5 | vec1 vec2 matr | 11,12,13,14,18,17,16,15 10,20,-10,-20,30,40,-30,-40 1,2,-4,-3,3,4,-2,-1,5,6,-8,-7,7,8,-6,-5 |
6 | vec1 vec2 matr | 18,17,16,15,11,12,13,14 30,40,-30,-40,10,20,-10,-20 -4,-3,1,2,-2,-1,3,4,5,6,7,8,-8,-7,-6,-5 |
7 | vec1 vec2 matr | 21,22,23,24,28,27,26,25 40,50,-40,-50,20,30,-20,-30 5,6,-8,-7,7,8,-6,-5,1,2,-4,-3,3,4,-2,-1 |
8 | vec1 vec2 matr | 28,27,26,25,21,22,23,24 20,30,-20,-30,40,50,-40,-50 -8,-7,3,4,-6,-5,1,2,-4,-3,7,8,-2,-1,5,6 |
9 | vec1 vec2 matr | 31,32,33,34,38,37,36,35 50,60,-50,-60,70,80,-70,-80 -4,-3,7,8,-2,-1,5,6,-8,-7,3,4,-6,-5,1,2 |
10 | vec1 vec2 matr | 38,37,36,35,31,32,33,34 70,80,-70,-80,50,60,-50,-60 -2,-1,5,6,-8,-7,3,4,-4,-3,7,8,-6,-5,1,2 |
11 | vec1 vec2 matr | 1,3,5,7,9,11,13,15 20,30,40,50,-50,-40,-30,-20 -1,-2,-3,-4,4,3,2,1,-1,-2,-3,-4,4,3,2,1 |
12 | vec1 vec2 matr | 9,11,13,15,1,3,5,7, -50,-40,-30,-20,20,30,40,50 4,3,2,1, -1,-2,-3,-4,-1,-2,-3,-4,4,3,2,1 |
13 | vec1 vec2 matr | 28,27,26,25,21,22,23,24 20,-20,30,-30,40,-40,50,-50, 1,2,-4,-3,3,4,-2,-1,5,6,-8,-7,7,8,-6,-5 |
14 | vec1 vec2 matr | 31,32,33,34,35,36,37,38 50,-50,60,-60,70,-70,80,-80 5,6,-8,-7,7,8,-6,-5,1,2,-4,-3,3,4,-2,-1, |
15 | vec1 vec2 matr | 1,2,3,4,8,7,6,5 -1,-2,-3,-4,-8,-7,-6,-5 -1,2,-3,4,-4,3,-2,1,-5,6,-7,8,-8,7,-6,5 |
16 | vec1 vec2 matr | 18,17,16,15,11,12,13,14 -10,-20,10,20,-30,40,-30,40 1,2,-4,-3,3,4,-8,-7,7,8,-6,-5,-2,-1,5,6 |
17 | vec1 vec2 matr | 8,7,6,5,1,2,3,4 30,40,-30,-40,10,20,-10,-20 -1,-2,-3,-4,8,7,6,5,-5,-6,-7,-8,4,3,2,1 |


