Добавлен: 30.10.2018
Просмотров: 494
Скачиваний: 12
определенном регистре. Тогда можно динамически во время работы
программы загружать этот регистр необходимыми адресами и с помощью
косвенной адресации работать с разными областями памяти.
При использовании косвенной адресации возникает ряд проблем.
Первая связана с необходимостью занесения в регистр или область памяти
значения-адреса. Для этого в систему команд введена специальная команда с
именем LEA (от Load Effective Address, т.е. Загрузить Исполнительный
Адрес). Команда имеет формат
LEA регистр, операнд
и она вычисляет исполнительный адрес операнда и записывает его в регистр.
Рассмотрим пример.
X1
DW 1, 2, 3 ; объявление трех чисел-слов со значением 1, 2 и 3
. . . . . . . . . . . . . . . .
MOV BX, X1 ; в BX – значение по адресу Х1, т.е. число 1
LEA BX, X1 ; в BX – адрес области с именем Х1
MOV SI, 2 ; загрузка индексного регистра SI значением 2
LEA AX, X1[SI] ; в AX – адрес области Х1 + 2, т.е. адрес числа 2
Из последнего примера видно, что косвенная адресация может
комбинироваться с индексной.
Вторая проблема связана с тем, что адрес, который хранится в
регистре, никак не определяет размер адресуемой области (байт? слово?
двойное слово?). Поэтому часто в командах с косвенной адресацией
приходится уточнять размер адресуемой области. Для этого есть
специальный оператор указания типа PTR:
<тип> PTR <выражение>
Например:
BYTE PTR 0 ; взять 0 как байт (т.е. 00 h)
WORD PTR 0 ; взять 0 как слово (т.е. 00 00 h)
DWORD PTR 0 ; взять 0 как двойное слово (т.е. 00 00 00 00 h)
BYTE PTR А1 ; имя А1 адресует байт
WORD PTR А2 ; имя А2 адресует слово
BYTE PTR 500 ; ОШИБКА!!!
С помощью оператора PTR можно не только уточнять тип операнда,
но и изменять его. Для правильного использования косвенной адресации
надо с помощью оператора PTR указывать тип косвенно-адресуемой памяти:
MOV BYTE PTR [BX], 0 ; обнуление байта по адресу (BX)
MOV WORD PTR [BX], 0 ; обнуление слова по адресу (BX)
Практические задания к теме №9.
Обработка массивов с помощью индексной адресации
Задание 1.
Вычисление суммы элементов в 10-элементом числовом
массиве
Задание 2.
Вычисление суммы произведений элементов двух
числовых 10-элементных массивов
Задание 3.
Нахождение максимального числа и его номера в 10-
элементом числовом массиве
Задание 4.
Круговая перестановка элементов массива, содержащего
10 чисел
Задание 5.
Задать текстовую строку длиной 15-20 символов и
подсчитать число появлений в ней какого-либо символа
Задание 6.
Задать текстовую строку, содержащую несколько слов и
заменить все пробелы символом *
Задание 7.
Определить строку, содержащую 20-30 букв и цифр и
подсчитать число цифр (код нуля 30h, код девятки 39h)
Задание 8.
Определить небольшой числовой двухмерный массив (3
строки по 5 элементов) и найти количество появлений заданного числа,
используя вложенные циклы
Выполнить все задания с использованием косвенной адресации