Дипломированных специалистов «Информатика и вычислительная техника»



Download 12,06 Mb.
Pdf ko'rish
bet157/357
Sana22.02.2022
Hajmi12,06 Mb.
#115195
TuriДиплом
1   ...   153   154   155   156   157   158   159   160   ...   357
Bog'liq
assembler uchebnik dlya vuzov 2-e izd YuRXUW1

Двухмерные массивы
С представлением
массивов в программе на ассемблере и организа-
цией их обработки все достаточно просто. А как быть, если программа должна об-
рабатывать двухмерный массив? Все проблемы возникают по-прежнему из-за того,
что специальных средств для описания такого типа данных в ассемблере нет. Двух-
мерный массив нужно моделировать. На описании самих данных это почти никак
не отражается — память под массив выделяется с помощью директив резервиро-
вания и инициализации памяти. Непосредственно моделирование обработки мас-
сива производится в сегменте кода, где программист, описывая алгоритм обработки
на ассемблере, определяет, что некоторую область памяти необходимо трактовать
как двухмерный массив. При этом вы вольны в выборе
как понимать распо-
элементов двухмерного массива в памяти: по строкам или по столбцам.
Если последовательность однотипных элементов в памяти трактуется как двух-
мерный массив, расположенный по
то адрес элемента (i, вычисляется
по формуле
(база +
• i + j) • размер_элемента).


276 Глава
Сложные структуры данных
Здесь i =
— номер строки, aj
— номер столбца. Например, пусть
имеется массив чисел (размером в 1 байт)
j) с размерностью 4 • 4 (г 0...3,
23040567
05060799
67080923
87090008
В памяти элементы этого массива будут расположены в следующей последова-
тельности:
23 04 05 67 05 06 07 99 67 08 09 23 87 09 00 08
Если мы хотим трактовать эту последовательность как двухмерный массив,
приведенный раньше, и извлечь, например, элемент
3) = 23, то, проведя не-
хитрый подсчет, убедимся в правильности наших рассуждений:
Эффективный адрес
3) mas + (4 • 2 + 3) • 1= mas + 22.
Посмотрите на представление массива в памяти и убедитесь,
по этому сме-
щению действительно находится нужный элемент массива.
Логично организовать адресацию двухмерного массива, используя рассмотрен-
ную нами ранее базово-индексную адресацию. При этом возможны два основных
варианта выбора компонентов для формирования эффективного адреса:
* сочетание прямого адреса как базового компонента адреса и двух индексных
регистров для хранения индексов:
mov
сочетание двух индексных регистров, один из которых является и базовым, и ин-
дексным одновременно, а другой — только индексным:
mov
В программе это будет выглядеть примерно так:
программы выборки элемента
и его обнуления
mas db
i=2
]=3
el_size=l
mov
mov
*el_size
mov
al элемент m a s ( 2 , 3 )
В качестве законченного примера рассмотрим программу поиска элемента в двух-
мерном массиве чисел (листинг 13.4). Элементы массива заданы статически.
Листинг
Поиск элемента в двухмерном массиве
MODEL
STACK 256


Массивы 277
размером 2x5 - если ее не
для наглядности она может быть описана так:
;аггау
2
(5 DUP (?))
мы ее инициализируем:
array dw
это будет выглядеть так:
2}
3}
6}
3}
0}
элемента
3
для поиска
failed db
такого элемента в
success db
элемент в массиве присутствует
db
fnd db '
main:
xor
mov s 0
mov
bx,0
mov
push
mov
mov s 0
наиденных элементов
в матрице
;Ьх=строки в матрице
;число для внешнего цикла (по строкам)
;внешний цикл по строкам
в стеке счетчика внешнего цикла
для внутреннего цикла (по столбцам)
цикл по строкам
mov
ах первый (очередной) элемент матрицы
add
на следующий элемент в строке
содержимое текущего элемента в ах с искомым элементом:
;если текущий совпал с искомым, то переход на here для обработки,
- цикл продолжения поиска
foundtime
счетчик совпавших
loop iternal
pop
add
loop external
cmp
mov
mov
failed
21h
в матрице
СХ из стека (5)
на следующую строку
;цикл (внешний)
числа совпавших с 0
больше 0, то переход
совпавших с искомым
сообщения на экран
eql:
exit:
end
mov
;
mov
success
int
mov
mov
add
int 21h
mov
mov
fnd
mov
int
main
на выход
есть элементы, совпавшие с искомым
вывод сообщений на экран
выход
стандартное завершение программы
конец программы


278 Глава
Сложные структуры данных
Анализируя работу программы, не забывайте, что при написании программ на
языке ассемблера нумерацию элементов массива удобнее производить с 0. При
поиске определенного элемента массив просматривается от начала и до конца.
Программа сохраняет в поле
количество вхождений искомого элемента
в массив. В качестве индексных используются регистры SI и ВХ.

Download 12,06 Mb.

Do'stlaringiz bilan baham:
1   ...   153   154   155   156   157   158   159   160   ...   357




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish