Файл: 9. Обработка массивов.pdf

ВУЗ: Не указан

Категория: Учебное пособие

Дисциплина: Программирование

Добавлен: 30.10.2018

Просмотров: 494

Скачиваний: 12

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

определенном  регистре.  Тогда  можно  динамически  во  время  работы 

программы  загружать  этот  регистр  необходимыми  адресами  и  с  помощью 

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

При  использовании  косвенной  адресации  возникает  ряд  проблем. 

Первая  связана  с  необходимостью  занесения  в  регистр  или  область  памяти 

значения-адреса. Для этого в систему команд введена специальная команда с 

именем  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 адресует байт 


background image

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 элементов) и найти количество появлений заданного числа, 

используя вложенные циклы 

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