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



Download 12,06 Mb.
Pdf ko'rish
bet201/357
Sana22.02.2022
Hajmi12,06 Mb.
#115195
TuriДиплом
1   ...   197   198   199   200   201   202   203   204   ...   357
Bog'liq
assembler uchebnik dlya vuzov 2-e izd YuRXUW1

Листинг 15.15. Использование директивы MODEL
на Pascal, вызывающая процедуру на
полностью
совпадает с листингом 15.12}
MODEL
12
256


354 Глава 15. Модульное программирование
 (продолжение)
STACK
PUBLIC
mov
mov
int
mov
mov
mov
xor
mov
int
ret
asmproc
end
256
proc near chr
asmproc
ptr у
ptr x
10h
bl,07h
endp
; у в dh
; x в dl
службы BIOS
прерывания BIOS
службы BIOS
;символ - в al
вывода символа
;kol в сх
прерывания BIOS
процедуры
программы
Листинг 15.16. Результат трансляции листинга 15.15
Turbo
4.117/04/98 22:30:57Page 1
256
0000
0000
0000
0000
0000
STACK
asmproc procnear
PUBLIC asmproc
1
1
1
1
1
9
10
11
12
13
14
15
16
17
18
19
20
21
22
24
0000
0001
0003
0006
0009
000B
000D
000F
0012
0014
0016
0019
001B
001C
001F
end
55
8A
8A
B4
CD
B4
8A
B3
32
8B
CD
5D
C2
EC
76
56
02
10
09
46
07
FF
4E
10
PUSH
MOV
06
08
0A
04
0008RET
BP,
mov
mov
mov
int
mov
mov
mov
xor
mov
int
POP
BP
SP
dh,
ah,
bh,
BP
byte
byte
09h
chr
bh
kol
ptr у
ptr x
asmproc endp
у в dh
x в dl
номер службы BIOS
вызов прерывания BIOS
номер службы BIOS
символ - в al
маска
символа
kol в сх
вызов прерывания BIOS
конец процедуры
конец программы
Таковы стандартные способы вызова ассемблерных процедур из программ на
Pascal и
им аргументов. Эти способы будут работать всегда, но, совер-
шенствуясь, компилятор может предоставлять и более удобные средства. Их мы
рассматривать не будем, так как, в конечном счете, они сводятся к рассмотренной
нами процедуре. Остались открытыми два вопроса.
и Как
с передачей данных остальных типов Pascal, ведь мы рассмотрели толь-
ко данные размером в байт и слово?
Как возвратить значение в программу на Pascal?
Что касается ответа на первый вопрос, то необходимо вспомнить, что в языке
Pascal существуют два способа передачи аргументов в процедуру: по ссылке и по
значению.


Связь ассемблера с языками высокого уровня 355
Тип аргументов, передаваемых по ссылке, совпадает с типом ассемблера
и с типом pointer в Pascal. По сути, это указатель из четырех байтов на некоторый
объект. Структура указателя обычная: два младших байта — смещение, два стар-
ших байта — значение сегментной составляющей адреса. С помощью такого указа-
теля в программу на ассемблере передаются адреса следующих объектов:
всех аргументов, объявленных при описании в программе на Pascal как var, не-
зависимо от их типа;
аргументов pointer и
' строк
множеств;
массивов и записей, имеющих размер более четырех байтов.
Аргументы по значению передаются следующим образом:
для типов char и byte как байт;
для типа
— как байт со значением 0 или 1;
для перечисляемых типов со значением 0...255 — как байт; более 255 — как два
байта;
для типов integer и word — как два байта (слово);
для типа
— как шесть байтов (три слова);
массивы и записи, длина которых не превышает четырех байтов, передаются
«как есть».
Заметим, что аргументы таких типов, как single, double, extended и
переда-
ются через стек сопроцессора.
Что касается ответа на второй вопрос, то мы выясним его на конкретном при-
мере. Напомню, что мы рассматриваем вызов из программы на Pascal внешней
процедуры на ассемблере. Понятно, что вызов ради вызова вряд ли нужен — вызы-
ваемая процедура должна иметь возможность вернуть данные в вызывающую про-
грамму. Поэтому такую вызываемую процедуру правильнее рассматривать как
функцию. В связке
для того, чтобы возвратить результат, про-
цедура на ассемблере должна поместить его значение в строго определенное место
(табл. 15.2).
Таблица
Возврат результата из процедуры на ассемблере в программу на Pascal
Тип возвращаемого значения
Байт
Слово
Двойное слово
Указатель
Место записи результата
AL
АХ
DX:AX (старшее
слово)
DX:AX
В листинге 15.17 приведен текст вызывающего модуля на Pascal, а в листин-
ге 15.18 — код вызываемого модуля на ассемблере. Программа на Pascal инициа-
лизирует две переменные, valuel и
после чего вызывает функцию на ассем-
блере AddAsm для их сложения. Результат возвращается в программу на Pascal
и присваивается переменной rez.



Download 12,06 Mb.

Do'stlaringiz bilan baham:
1   ...   197   198   199   200   201   202   203   204   ...   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