Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Моделирование одномерных массивов




Массив во внутреннем представлении - это последовательность элементов в памяти, например:

A dw 10,13,28,67,0,-1; массив из 6 чисел длиной слово.

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

Пример.

Написать процедуру, выполняющую суммирование массива из 10 чисел размером слово.

Вариант 1 (используется адрес):   Вариант 2 (используется смещение):
summas proc   summas proc
mov ax, 0   mov ax, 0
lea bx, MAS   mov bx, 0
mov cx, 10   mov cx, 10
cycl: add ax, [bx]   cycl: add ax, MAS [bx]
add bx, 2   add bx, 2
loop cycl   loop cycl
ret   ret
summas endp   summas endp

 

 

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

В том случае, если элементы просматриваются непоследовательно, адрес элемента может рассчитываться по его номеру: Aисп=Aначала+(<номер>-1)*<длина элемента>. Полученный по формуле адрес записывается в один из адресных регистров (BX, BP, DI, SI) и используется для доступа к элементу.

Пример.

Написать процедуру, которая извлекает из массива, включающего 10 чисел размером слово, число с номер n (n£10).

N_mas proc

mov bx, N; номер числа

dec bx; вычитаем 1

sal bx, 1; умножили на длину (сдвинули влево на 1)

mov ax, MAS [bx]; результат в ax

Ret

N_mas endp

Моделирование матриц

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

При моделировании обработки матрицы следует различать просмотр по строкам, просмотр по столбцам, просмотр по диагоналям и произвольный доступ.

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

Пример.

Написать процедуру определения максимального элемента матрицы A(3,5).

Mахмatr proc

mov bx, 0; смещение 0

mov cx, 14; счетчик цикла

mov ax, A; заносим первое число

cycl: cmp ax, A[bx+2]; сравниваем числа

jge next; если больше, то перейти к следующему

mov ax, A[bx+2]; если меньше, то запомнить

next: add bx, 2; переходим к следующему числу

Loop cycl

ret; результат в ax

Mахмatr endp

Просмотр по строкам при необходимости фиксировать завершение строки и просмотр по стобцам выполняются в двойном цикле: по строкам - во внешнем цикле, по столбцам - во внутреннем или наоборот. В этом случае обычно отдельно формируются смещения строки и столбца.

Пример.

Определить сумму максимальных элементов столбцов матрицы A(3,5).

Mахмatr proc

mov ax, 0; обнуляем сумму

mov bx, 0; смещение элемента столбца в строке

mov cx, 5; количество столбцов

cycl1: push cx; сохраняем счетчик

mov cx, 2; счетчик элементов в столбце

mov dx, A[bx]; заносим первый элемент столбца

mov si, 10; смещение второго элемента столбца

cycl2: cmp dx, A[bx]+ [si]; сравниваем

jge next; если больше или равно - к следующему

mov dx, A[bx]+[si]; если меньше, то сохранили

next: add si, 10; переходим к следующему элементу

loop cycl2; цикл по элементам столбца

add ax, dx; просуммировали макс. элемент

pop cx; восстановили счетчик

add bx, 2; перешли к следующему столбцу

loop cycl1; цикл по столбцам

ret; результат в ax

Mахмatr endp





Поделиться с друзьями:


Дата добавления: 2016-11-02; Мы поможем в написании ваших работ!; просмотров: 567 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Наглость – это ругаться с преподавателем по поводу четверки, хотя перед экзаменом уверен, что не знаешь даже на два. © Неизвестно
==> читать все изречения...

2610 - | 2184 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.012 с.