русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Типовые операции с массивами


Дата добавления: 2013-12-23; просмотров: 998; Нарушение авторских прав


...

Code

J=3

I=2

Mas dw 23,4,5,67,5,6,1,99,67,8,9,23,87,9,0,8

Data

...

Code

J=3

I=2

Mas db 23,4,5,67,5,6,1,99,67,8,9,23,87,9,0,8

Data

23 04 05 67 05 06 07 99 67 08 09 23 87 09 00 08

87 09 00 08

67 08 09 23

05 06 07 99

23 04 05 67

В памяти элементы этого массива будут расположены в следующей последовательности:

Если необходимо трактовать эту последовательность как двумерный массив и извлечь, например, элемент mas(2, 3) = 23, то, убедимся что:

Полный адрес mas(2, 3) = mas + 4 * 1 * 2 + 3*1 = mas + 11

 

Организовывают адресацию двумерного массива, используя базово-индексную адресацию. При этом возможны два основных варианта выбора компонентов для формирования полного адреса:

4) сочетание прямого адреса, как базового компонента адреса, и двух индексных регистров для хранения индексов:

mov ax,mas[ebx][esi]

5) сочетание двух индексных регистров, один из которых является и базовым, и индексным одновременно, а другой — только индексным:

mov ax,[edi][esi]

 

Пример 1: Фрагмент программы выборки элемента массива mas(2,3) и запись его значения в регистр al.

; 23 04 05 67

; 05 06 01 99

; 67 08 09 23

; 87 09 00 08

mov si,4*1*i ; 1 – размер элемента массива 1 байт

mov di,j*1 ; 1 - размер элемента массива 1 байт

mov al,mas[si][di] ;в аl элемент mas(2,3)=23

Пример 2: Фрагмент программы выборки элемента массива mas(2,3) и его обнуления



; 00 23 00 04 00 05 00 67

; 00 05 00 06 00 01 00 99

; 00 67 00 08 00 09 00 23

; 00 87 00 09 00 00 00 08

mov si,4*2*i ; =16; 2 – размер элемента массива 2 байта

mov di,j*2 ; =6

mov ах,mas[si][di] ; в аx элемент mas(2,3)=mas+16+6=mas+22

; ax=0023


 

Пример 8. Поиск элемента в двумерном массиве. Элементы массива размером в слово. Размер массива 2х5. Искомый элемент 333. (find.asm)

.386

.model flat, stdcall

includelib import32.lib

extrn ExitProcess:PROC

extrn MessageBoxA:PROC

.data

 

Ttl db 'Find in massiv: ',0h

Msg db 150 dup (?)

 

;матрица размером 2х5 - если ее не инициализировать,

;то для наглядности она может быть описана так:

;array dw 2 DUP (5 DUP (?))

;но мы ее инициализируем:

 

array dw 333,333,333,45,55,333,333,2,333,333

 

;логически это будет выглядеть так:

;аггау= {333 333} 01 4D 01 4D

; {333 45} 01 4D 00 2D

; {55 333} 00 37 01 4D

; {333 2} 01 4D 00 02

; {333 333} 01 4D 01 4D

elem dw 333 ;элемент для поиска 01 4D

failed db 0ah,0dh,'Net takogo elementa v massive!',0h

success db 0ah,0dh,'Takou element prisytstvyet v massive '

foundtime db ? ;количество найденных элементов

fnd db " raz(a)",0ah,0dh,0h

 

.code

start:

xor ax,ax

mov esi,0 ;esi=столбцы в матрице

mov ebx,0 ;ebx=строки в матрице

mov ecx,5 ;число для внешнего цикла (по строкам)

 

external: ; внешний цикл по строкам

push ecx ; сохранение в стеке значение

; счетчика внешнего цикла

mov ecx,2 ;число для внутреннего цикла (по столбцам)

mov esi,0

 

iternal: ;внутренний цикл по столбцам

 

mov ax,array[ebx][esi] ;сравниваем содержимое текущего элемента в

; ax с искомым элементом:

inc esi ;передвижение на следующий элемент в строке

inc esi

cmp ax,elem ;если текущий совпал с искомым, то переход на

; here для обработки, иначе - цикл продолжения

; поиска

je here

;иначе - цикл по строке cx=2 раз

loop iternal

jmp move_next

here:

inc foundtime ;иначе - увеличиваем счетчик совпавших

sub ecx,1

cmp esi,4 ;просмотрели строку?

je move_next

jmp iternal

move_next: ;продвижение в матрице

pop ecx ;восстанавливаем CX из стека (5)

add ebx,4 ;передвигаемся на следующую строку

loop external ;цикл (внешний)

;______________________________________________________Конец поиска

cmp foundtime,0h ;сравнение числа совпавших с 0

ja eql ;если больше 0, то переход

not_equal: ;нет элементов, совпавших с искомым

push 0h

push offset Ttl

push offset failed

push 0h

call MessageBoxA

jmp exit ;на выход

 

eql: ;есть элементы, совпавшие с искомым

xor eax,eax

mov al,foundtime

add al,30h

mov foundtime,al

push 0h

push offset Ttl

push offset success

push 0h

call MessageBoxA

 

exit:

push 0h

call ExitProcess

end start

 

При анализе работы программы принято, что элементы массива нумеруются с 0. При поиске определенного элемента массив просматривается от начала и до конца. Программа сохраняет в поле foundtime количество вхождений искомого элемента в массив. В качестве индексных регистров используются si и bx.

_____________________________________________________________

Самостоятельно на практике: Разработать программу для работы с двумерным массивом размерностью 3х5. В массиве определить количество элементов, которые больше среднего арифметического всех элементов массива. Элементы массива размером в слово. Для подсчёта среднего арифметического можно использовать сопроцессор.

 




<== предыдущая лекция | следующая лекция ==>
Двумерные массивы | Определение данных с типом структуры


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.004 сек.