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



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

Доступ к
 массива
При работе с массивами
четко представлять
что
массива располагаются в
Само по себе та-
не говорит о
порядке
И только лишь
с, помощью
им
обработки определяет, как
трактовать последовательность
ляющих массив. Так,
и ту
область памяти
но и как
и как двухмерный
Все
только от
обработки этих данных в
программе. Сами по себе
никакой информации о своем «смысловом», или логическом, типе.
об
этом
моменте.
Те же соображения можно распространить и на индексы
массива.
Ассемблер
подозревает пи об их существовании, пи об их
вых значениях.
того чтобы локализовать определенный элемент массива, к его
имени
добавить
Так как мы
массив, то должны
титься и о моделировании индекса. В языке ассемблера
массивов — это
обычные адреса, но с
работают особым образом.
когда при
программировании на ассемблере мы говорим об
то,
подразуме-
ваем под этим не номер элемента в массиве, а некоторый адрес.
еще раз
обратимся к описанию массива. К примеру, пусть в программе
опреде-
лена последовательность
mas d w
Пусть эта последовательность чисел
как
массив.
мерность каждого элемента определяется директивой DW, то есть она
двум
байтам. Чтобы
доступ к третьему
адресу


272 Глава
Сложные структуры данных
бавить 6. Нумерация элементов массива в ассемблере начинается с нуля. То есть
в нашем случае речь, фактически, идет о 4-м элементе массива — 3, но об этом зна-
ет только программист; процессору в данном случае все равно — ему нужен только
адрес. В общем случае для получения адреса элемента в массиве необходимо на-
чальный (базовый) адрес массива сложить с произведением индекса (номер эле-
мента минус единица) этого элемента на размер элемента массива:
база + (индекс • размер элемента).
Архитектура процессора предоставляет довольно удобные программно-аппа-
ратные средства для работы с массивами. К ним относятся базовые и индексные
регистры, позволяющие реализовать несколько режимов адресации данных. Ис-
пользуя данные режимы адресации, можно организовать эффективную работу
с массивами в памяти. Вспомним эти режимы.
• Индексная адресация со смещением — режим адресации, при котором эффек-
тивный адрес формируется из двух компонентов:
постоянный (базовый) компонент формируется указанием прямого адреса
массива в виде имени идентификатора, обозначающего начало массива;
П переменный (индексный) компонент формируется указанием имени индекс-
ного регистра.
К примеру,
mas
si ,4
3-й элемент массива mas в регистр ах:
mov
Базовая индексная адресация со смещением — режим адресации, при котором
эффективный адрес формируется максимум из трех компонентов:
D в качестве постоянного (необязательного) компонента может выступать
прямой адрес массива в виде имени идентификатора, обозначающего нача-
ло
или непосредственного значения;
переменный (базовый) компонент формируется указанием имени базового
регистра;
Р переменный (индексный) компонент формируется указанием имени индекс-
ного регистра.
Этот вид адресации удобно использовать при обработке двухмерных массивов.
Пример использования этой адресации мы рассмотрим далее при изучении осо-
бенностей работы с двухмерными массивами.
Напомним, что в
базового регистра может использоваться любой из
восьми регистров общего назначения. В качестве индексного регистра также мож-
но использовать любой регистр общего назначения, за исключением ESP/SP.
Процессор позволяет
 индекс. Это означает, что если указать
после имени индексного регистра символ звездочки (*) с последующей цифрой 2,
4 или 8, то содержимое индексного регистра будет умножаться на
или 8, то есть
масштабироваться. Применение масштабирования облегчает работу с массивами,
которые имеют размер элементов, равный 2, 4 или 8 байт, так как процессор сам


Массивы 273
производит коррекцию индекса для получения адреса очередного элемента масси-
ва. Нам нужно лишь загрузить в индексный регистр значение требуемого индекса
(считая от 0). Кстати сказать, возможность масштабирования появилась в процес-
сорах Intel, начиная с модели i486. По этой причине в рассматриваемом далее при-
мере программы стоит директива
Ее назначение, как и ранее использовав-
шейся директивы .386, — в том, чтобы указать ассемблеру на необходимость учета
дополнительных возможностей новых процессоров при формировании машинных
команд.
В качестве примера масштабирования рассмотрим листинг 13.2, в котором про-
сматривается массив, состоящий из слов, и производится сравнение этих элемен-
тов с нулем. Выводится соответствующее сообщение.
Листинг
Просмотр массива слов с использованием масштабирования
;prg 13
;tlink /v /3 prg 12 2.
MODEL
STACK
сообщений:
db "не равен
raes2 db "равен 0!$
;начало сегмента данных
db
$'
mas
.486
main:
mov
mov
xor
prepare:
mov
mov
compare:
mov
dx,0
equal
mov
lea dx,mes3
int 21h
mov
mov
add dl,30h
int 21h
mov
lea
int 21h
inc esi
dec
jcxz exit
jmp compare
mov
lea dx,mes3
int 21h
mov
mov
add
6,0,8
массив
обязательно
ds с сегментом данных
;обнуление ах
;значение счетчика цикла в сх
в esi
элемент массива в dx
dx с 0
;переход, если равно
;не равно
сообщения на экран
номера элемента массива на экран
на следующий элемент
условие для выхода из цикла
сх=0? Если да - на выход
нет - повторить цикл
равно 0
вывод сообщения mes3 на экран
продолжение


274 Глава
Сложные структуры данных
Листинг
int 21h
сообщения
на экран
lea
int 21h
inc esi
следующий элемент
dec
элементы обработаны?
jcxz exit
compare
mov
выход
int 21h
end main , ;конец программы
Еще несколько слов о соглашениях.
it Если для описания адреса используется только один регистр, то речь идет о ба-
зовой адресации, и этот регистр рассматривается как базовый:
;переслать байт из области данных,
которой находится в регистре ebx:
mov
Если для задания адреса в команде используется прямая адресация (в виде иден-
тификатора) в сочетании с одним регистром, то речь идет об индексной адреса-
ции. Регистр считается индексным, и поэтому для получения адреса нужного
элемента массива можно выполнить масштабирование:
add
содержимое еах с двойным словом
;в памяти по адресу mas +
Если для описания адреса используются два регистра, то речь идет о базово-
индексной адресации. Левый регистр рассматривается как базовый, правый —
как индексный. В общем случае это не принципиально, но если масштабирова-
ние применяется к одному из регистров, то он всегда является индексным. Од-
нако лучше придерживаться определенных соглашений. Помните, что приме-
нение регистров ЕВР/ВР и ESP/SP по умолчанию подразумевает, что сегментная
составляющая адреса находится в регистре SS.
Заметим, что
адресацию не возбраняется сочетать с прямой
адресацией или указанием непосредственного значения. Адрес тогда будет фор-
мироваться как сумма всех компонентов.
К примеру,
mov
;адрес операнда равен
sub
;адрес операнда равен
Следует заметить, что масштабирование эффективно лишь тогда, когда размер-
ность элементов массива равна 2, 4 или 8 байт. Если же размерность элементов
другая, то организовывать обращение к элементам массива нужно обычным спо-
собом, как описано ранее.
Рассмотрим пример работы с массивом из пяти трехбайтовых элементов (лис-
тинг 13.3). Младший байт в каждом из этих элементов представляет собой некий
счетчик, а старшие два байта — что-то еще, для нас не имеющее никакого


Массивы 275
ния. Необходимо последовательно обработать элементы данного массива, увели-
чив значения счетчиков на
Листинг
Обработка массива элементов с нечетной длиной
MODEL small ;модель памяти
STACK 256
стека
;начало сегмента данных
элементов массива
mas
5
(3 dup
;сегмент кода
m a i n : ;точка входа в
mov
xor
;обнуление ах
mov si ,0 ;0 в si
mov
;N в сх
mov
байт поля в
dl
dl на 1 (по условию)
mov mas[si],dl ;заслать обратно в массив
add
;сдвиг на следующий элемент массива
loop go ;повтор цикла
mov
к выводу на экран
mov cx,N
show:
на экран содержимого
байтов полей
mov
add si , 3
add
mov
loop show
exi
mov ax
выход
int
end m a i n ;конец программы

Download 12,06 Mb.

Do'stlaringiz bilan baham:
1   ...   152   153   154   155   156   157   158   159   ...   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