Массив – это упорядоченный набор однотипных элементов.
Для задания массивов целых чисел удобнее всего использовать оператор дублирования dup.
В Ассемблере нет возможности объявления двух- и более мерных массивов. Для организации таких структур данных программисту необходимо самому предусматривать их обработку, то есть определять, как будут храниться элементы массива.
;-------------------------------------------------------------------------------------------------------------------------------------------
; поиска максимального элемента в третей строке массива 2×10
; двухбайтных элементов
data segment
; задание и инициализация массива arr
arr dw 438,4,76,87,34,67,234,90,48,0
dw 34,-15,2451,6125,864,92,238,4769,1237,6281
dw 10,59,251,125,64,2,8,49,37,81
data ends
stack1 segment stack
db 100h dup(?)
stack1 ends
code segment
assume cs:code,ds:data,ss:stack1
begin:
mov ax,data
mov ds,ax; занесение в ds адреса начала сегмента данных data
; позиционирование в массиве на первый элемент ретей строки
mov ax,2; нумерация начинается с 0
mov cl,10*type arr; десять двухбайтных элементов
mul cl; в ax – позиция первого элемента третей строки
mov bx,ax; занесение в bx значения из ax, так как регистр ax не
; может быть использован для косвенной адресации
mov ax,arr[bx]; занесение в ax первого элемента третей строки
; поиск максимума
mov cx,10-1; будет сравниваться 9 элементов
L1:
add bx,type arr; увеличение на 2 индекса массива
cmp ax,arr[bx]; в ax – текущий максимум
jge no_new_max; если в ax число, меньшее элемента массива, то
mov ax,arr[bx]; занесение нового максимума в ax
no_new_max:
loop L1; цикл, после выполнения которого в ax будет
; находится число 251
mov ah,4ch
int 21h; выход из программы
code ends
end begin
;-------------------------------------------------------------------------------------------------------------------------------------------
;сортировка одномерного массива методом пузырька
data segment
array dw 10 dup (4,3,2,5,0)
n dw?
data ends
stack1 segment stack
db 100h dup(?)
stack1 ends
code segment
assume cs:code,ds:data,ss:stack1
begin:
mov ax,data
mov ds,ax
mov n,10
mov bx, offset array
mov cx, n
for_i:
dec cx
xor dx, dx
for_j:
cmp dx, cx
jae exit_for_j
jbe no_swap
mov ah, byte ptr bx[di]
mov byte ptr bx[di], al
mov byte ptr bx[si], ah
no_swap:
inc dx
jmp for_j
exit_for_j:
loop for_i
mov ah,4ch
int 21h
code ends
end begin