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
.
В общем случае для получения адреса элемента в одномерном массиве необходимо базовый адрес массива сложить с произведением индекса этого элемента (начиная с нуля) на размер элемента массива.
Адрес = База + (Индекс * Размер элемента массива).
Для работы с массивами используются базовые и индексные регистры, позволяющие реализовать несколько режимов адресации данных.
Индексная адресация со смещением.
Эффективный адрес формируется из двух компонент:
постоянного (базового), указывающего на прямой адрес массива в виде имени идентификатора;
переменного(индексного), указывающего на имя индексного регистра.
Пример:
……………..