русс | укр

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

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

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

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


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

Двумерные массивы


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


Масштабирование эффективно только, когда размерность элементов массива равна 2, 4 или 8 байтам. Если же размерность элементов другая, то организовывать обращение к элементам массива нужно обычным способом.

...

sub dx,[ebx+8][ecx*4]

;адрес операнда равен [(ebx)+8+(ecx)*4]

 


Пример 7:Обработка массива элементов с нечетной длиной. Размер элемента массива в три байта. Массив сформировать самостоятельно, следующим образом: первый элемент массива равен Е3 1111h=14 881 041d, все последующие трёхбитные элементы массива равны inc(E3 1111h). В памяти сформировать массив из 16 трёхбитных элемента. Увеличить на единицу в каждом элементе массива значение первого байта. Вывести измененный массив на экран в одну строку. Примечание: Е4 1111h=14 946 577d.

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

; Версия для Win32 (tri.asm)

.386

.model flat, stdcall

includelib import32.lib

extrn ExitProcess:PROC

extrn MessageBoxA:PROC

.data

Ttl db 'Massiv',0h

mas db 16 dup (3 dup (0)) ; 48 элементов в массиве

; следующую строчку 2 байта 0ah,0dh

mes1 db 'Massiv: ',0ah,0dh

Msg db 150 dup (?)

 

masVivod db 85 dup (?) ;

var dd 0E31111h

var2 dd ?

var3 dd 00000000h

i db 1

N db 16

tabl db 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h

k dd 0

 

.code

start:

xor ecx,ecx ;обнуление есx

xor edx,edx

mov cl,N ;значение счетчика цикла в cl

mov esi, 0 ;индекс начального элемента в si

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

; Заполнение элементов массива значениями var E31111h++

mov eax,var

mov var2,eax

go2:

xor eax,eax

mov al,byte ptr [var+2] ; al=E3h

mov mas[esi],al



inc esi

mov al,byte ptr [var+1] ; al=11h

mov mas[esi],al



inc esi

mov al,byte ptr [var] ; al=11h

mov mas[esi],al



inc esi

inc var

loopnz go2

 

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

; Изменение первого байта в каждом элементе массива

mov esi,0 ;0 в si

xor ecx,ecx

mov cl,N

go:

mov dl,mas[esi] ;первый байт поля в dl

inc dl ;увеличение dl на 1 (по условию)

mov mas[esi],dl ;заслать обратно в массив

add esi,3 ;сдвиг на следующий элемент массива

loop go ;повтор цикла

 

mov cl,N

mov edi,0

mov esi,0

 

go1:

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

; Переносим трёхбитное число из массива mas в регистр еах для перевода в

; десятичное число

xor eax,eax

xor ebx,ebx

mov ah,mas[esi]

mov al,mas[esi+1]

mov bl,mas[esi+2]

shl eax,8

add eax,ebx

add esi,3

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

; Перевод в десятичную систему исчисления трёхбайтного числа из eax и

; запись десятичного числа в память

push esi

mov ebx,eax

xor eax,eax

xor edx,edx

xor edi,edi

mov dl,i

mov al,8

mul dl

add eax,k

mov edi,eax

xor esi,esi

mov esi,10

push edi

mov eax,ebx

lp2: xor edx,edx

div esi

xchg eax,edx

add al,'0'

mov byte ptr [Msg+edi],al

xchg eax,edx

dec edi

or eax,eax

jne lp2

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

; Ставим символ ";" в качестве разделителя после каждого числа

pop edi

mov byte ptr [Msg+edi+1],';'

inc i

inc k

pop esi

loopnz go1

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

;вывод на экран получившегося массива

push 0h

push offset Ttl

push offset [Msg+1]

push 0h

call MessageBoxA

push 0h

call ExitProcess

end start

 

Результат:

_______________________________________________________________

Самостоятельно на практике:Создать массив с элементами нечетной длины. Размер элемента массива в три байта. Массив сформировать самостоятельно, следующим образом: первый элемент массива равен Е3 1111h=14 881 041d, все последующие трёхбайтные элементы массива равны inc(E3 1111h). В памяти сформировать массив из 16 трёхбайтных элемента. Увеличить на единицу в каждом элементе массива значение второго байта. Вывести измененный массив на экран построчно так, чтобы в строке было 4 элемента массива.

 


Обращение к элементам двумерного массива в памяти как к строкам или как к столбцам зависит от алгоритма обработки двумерного массива.

Если последовательность однотипных элементов в памяти трактуется как двумерный массив, расположенный по строкам, то адрес элемента (i, j) вычисляется по формуле:

(база + количество_элементов_в_строке * размер_элемента * i+

+j* размер_элемента)

 

Здесь i = 0...n-l указывает номер строки, a j = 0...m-l указывает номер столбца.

Например, пусть имеется массив чисел (размером в 1 байт) mas(i,j) с размерностью 4 X 4 (i = 0...3, j = 0...3):



<== предыдущая лекция | следующая лекция ==>
Микропроцессор позволяет масштабировать индекс. Необходимость в масштабировании возникает при работе с массивами, которые имеют размер элементов, равный 2, 4 или 8 байтам. | Типовые операции с массивами


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


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

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

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


 


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

 
 

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

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