A. Массивы. Идентификация массивов. Поиск и сортировка

Массив – это упорядоченный набор однотипных элементов.

Для задания массивов целых чисел удобнее всего использовать оператор дублирования dup.

A. Массивы. Идентификация массивов. Поиск и сортировка - student2.ru

В Ассемблере нет возможности объявления двух- и более мерных массивов. Для организации таких структур данных программисту необходимо самому предусматривать их обработку, то есть определять, как будут храниться элементы массива.

A. Массивы. Идентификация массивов. Поиск и сортировка - student2.ru

;-------------------------------------------------------------------------------------------------------------------------------------------

; поиска максимального элемента в третей строке массива 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


Наши рекомендации