Mas dw 0,1,2,3,4,5

Data

Endm

Rept 4

Masw label word

Masb label byte

Массивы

End start

Int21h

Mov ax,4c00h

Loop cycl1

Add bx,10

Pop cx

Loop cycl2

Inc si

Jne nozero

Mov cx,10

Xor si,si

Push cx

Mov cx,5

Lea bx,mas

Xor ax,ax

Mov ds,ax

Code

Db 1,0,9,8,0,7,8,0,2,0

Db 1,0,9,8,0,7,8,0,2,0

Db 1,0,9,8,0,7,8,0,2,0

Db 1,0,9,8,0,7,8,0,2,0

Mas db 1,0,9,8,0,7,8,0,2,0

Data

Stack 100h

Model small

Пример использования вложенных циклов

End start

Mov ax,4c00h

Mov ah,9

Loopne cicl

Inc si

Mov si,-1

Xor si,si

Xor ax,ax

Mov cx,len

Mov ds,ax

Code

Mas db 1,0,9,8,0,7,8,0,2,0

Len equ 10

Data

Inc si

Mov cx, 10

Mov si, 0

Mov bx, offset mas

Code

………….

nul:

mov [bx] [si], 0 ; обнуление

loop nul; управление на метку nul и cx уменьшается на 1

;выход из цикла, когда CX=0

…………….

Пример использования в цикле команды loopne.

 

В данном примере программа находит в массиве нулевой байт и выходит из цикла.

mes db “Нет нулевых элементов $”

start:

mov ax,@data

cicl:

cmp mas[si],0

jz exit;если найден 0, то выход

mov dx,offset mes;иначе – нет нулей в строке

int 21h

exit:

int 21h

Программа заменяет все нулевые байты в области памяти на значение 0ffh

 

start:

mov ax,@data

cycl1:

cycl2:

cmp byte ptr [bx+si],0

mov byte ptr [bx+si],0ffh

nozero:

 

Массив – структурированный тип данных, состоящий из некоторого числа элементов одного типа.

Специальных средств описания массивов в ассемблере не существует, поэтому программист должен знать:

o как в программах на ассемблере описать массив,

o как инициализировать массив,

o как организовать доступ к элементам массива,

o как организовать выполнение типовых операций с массивами.

 

Массив в программе можно смоделировать одним из следующих способов:

 

1) перечисление элементов массива

mas dd 1, 2, 3, 4, 5;массив из 5 двойных слов

 

2) используя оператор повторения

mas dw 10 dup (0);массив из 10 нулевых слов

 

3) используя директивы labelиrept

Директива rept относится к макросредствам языка ассемблера и вызывает повторение указанное число раз строк, заключенных между rept и endm.

В качестве метки одной области памяти можно использовать разные имена. Каждому имени соответствует указанный тип данных. В примере можно обращаться к массиву байт по метке masb, либо к массиву слов по метке masw.

 

dw 0f1f0h;массив из 4 повторяющихся слов 0f1f0h

.

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

Адрес = База + (Индекс * Размер элемента массива).

Для работы с массивами используются базовые и индексные регистры, позволяющие реализовать несколько режимов адресации данных.

 

Индексная адресация со смещением.

Эффективный адрес формируется из двух компонент:

постоянного (базового), указывающего на прямой адрес массива в виде имени идентификатора;

переменного(индексного), указывающего на имя индексного регистра.

 

Пример:

……………..