Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
kratkie_otvety_ekzamen_CP_2011-12.docx
Скачиваний:
19
Добавлен:
14.04.2019
Размер:
132.13 Кб
Скачать

29.Обработка массивов

В языке ассемблера не существует специальных средств для организации работы с массивами. Массивы описываются в виде последовательности элементов нужной размерности; работа с ними ведется с использованием методов косвенной адресации.

Пример: Задан массив. Вывести на экран сумму его элементов.

1

   

data segment

 

2

 

       

mas db 12, 2, 7, 3, 2, 0, 21, 9, 0, 16 

;исходный массив

3

 

       

len dw $-mas

;размер массива в байтах

4

 

data ends

 

5

 

 

 

 

6

 

code segment

 

7

 

start:

 

8

 

 

assume cs:code, ds: data    

 

9

 

 

mov ax, data

 

10

 

 

mov ds, ax

 

11

 

 

 

 

12

 

 

lea bx, mas

;берём в bx адрес первого элемента

13

 

 

mov cx, len

;счетчик цикла

14

 

 

xor ax, ax

 

15

 

cikl: 

add al, [bx]

;прибавляем к al байт, адрес которого хранится в bx

16

 

 

inc bx

;переходим к следующему элементу

17

 

 

loop cikl

 

18

 

 

 

 

19

 

 

aam

;преобразуем сумму в BCD-код

20

 

 

add ax, 3030h

;затем в ASCII-код

21

 

 

mov bx, ax

;и выводим

22

 

 

mov ah, 02

 

23

 

 

mov dl, bh

 

24

 

 

int 21h

 

25

 

 

mov dl, bl

 

26

 

 

int 21h

 

27

 

 

 

28

 

 

mov ax, 4c00h

 

29

 

 

int 21h

 

30

 

code ends

 

31

 

end start

 

При обработке не байтовых массивов следует учитывать размер элементов. Так в приведенном выше примере в строке 3 вычисляется размер массива в байтах, и в строке 13 он берётся за количество элементов. Для массива слов это значение придется поделить на 2. В строке 16 для перехода к следующему элементу используется простой инкремент адреса, для массива слов эта строка может выглядеть так: add bx, 2.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]