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



Download 12,06 Mb.
Pdf ko'rish
bet189/357
Sana22.02.2022
Hajmi12,06 Mb.
#115195
TuriДиплом
1   ...   185   186   187   188   189   190   191   192   ...   357
Bog'liq
assembler uchebnik dlya vuzov 2-e izd YuRXUW1

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


Процедуры в языке ассемблера 333
общую. Транслятор предоставляет специальное средство для организации такой
области памяти. В главе 5 мы разбирали директивы сегментации и их атрибуты.
Один из них — атрибут комбинирования сегментов. Наличие этого атрибута ука-
зывает компоновщику, как нужно комбинировать сегменты, имеющие одно имя.
Значение common означает, что все сегменты, имеющие одинаковое имя в объеди-
няемых модулях, располагаются компоновщиком начиная с одного адреса опера-
тивной памяти. То есть они будут просто перекрываться в памяти и, следователь-
но, совместно использовать выделенную память.
Недостатком этого способа в реальном режиме работы процессора является
отсутствие средств защиты данных от разрушения, так как нельзя проконтролиро-
вать соблюдение правил доступа к этим данным.
Рассмотрим листинг
с примером использования общей области памяти для
обмена данными между модулями. На этот раз программа состоит уже из двух не-
зависимых модулей, находящихся в разных файлах, и поэтому они представляют
собой отдельные единицы трансляции. Функционально эти модули реализуют
несложную задачу, которая заключается в том, что вызываемые процедуры фор-
мируют строку символов и передают ее через общую область, а вызывающая их
процедура main выводит строку на экран.
Листинг
Передача аргументов через общую область памяти (модуль
include
файла с макросами
stk segment stack
db 256
(0)
stk ends
segment para
"data"
общей области памяти
db 15 DUP
;буфер для хранения строки
temp
0
ends
extrn
code segment ;начало сегмента кода
assume
main proc
mov
внешних процедур
PutChar
call PutCharEnd
pushes
pop ds
buf
E x i t
выход
main endp
главной процедуры
code ends
end main
Вызываемые процедуры находятся в другом модуле (листинг 15.5). Обратите
внимание на то, что совсем не обязательно, чтобы данные в сегментах common име-
ли одинаковые имена. Главное,
этим нужно следить с особой тщательностью, —
структура общих сегментов. Она должна быть абсолютно идентичной во всех мо-
дулях программы, обменивающихся данными через общую память.
Листинг
Передача аргументов через общую область памяти (модуль 2)
include
файла с макросами
л


334 Глава 15. Модульное программирование
Листинг
 (продолжение)
stk segment stack
db 256
(0)
stk ends
pdata segment para public "data"
db "Общий
tempi db ?
temp2 dd
dq ?
pdata ends
public
segment para common "data"
общей области памяти
buffer db 15 DUP
для формирования строки
0
ends
code segment
начало сегмента кода
assume
proc far
процедуры
si ,0
irpc
mov
inc si
mov
ret ;возврат из процедуры
PutChar endp ;конец процедуры
PutCharEnd procfar
mov
mov
ret
PutCharEnd endp
code ends
end
Так как в данном примере программа состоит уже из двух модулей, то возника-
ет естественный вопрос: как собрать ее в один исполняемый модуль? Можно пред-
ложить следующую последовательность шагов.
1. Выполнить трансляцию файла
и получить объектный модуль
/zi
2. Выполнить трансляцию файла
и получить объектный модуль
tasm /zi
3. Скомпоновать программу утилитой TLINK командной строкой вида:
/v
+
В итоге будет создан исполняемый файл prgl5_4.exe. Интересно исследовать
его с использованием отладчика. После загрузки prgl5_4.exe в отладчик в окне
Module появится только исходный текст программы из файла
И лишь
после вызова процедуры по команде CALL (нажатием клавиши F7) в окно будет за-
гружен текст вызванной процедуры.

Download 12,06 Mb.

Do'stlaringiz bilan baham:
1   ...   185   186   187   188   189   190   191   192   ...   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