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



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

Pascal и ассемблер
Организацию связи языков Pascal и ассемблер рассмотрим на следующем приме-
ре: разработаем программу на языке Pascal, которая выводит символ заданное ко-
личество раз начиная с определенной позиции на экране (листинги 15.12 и 15.13).
Все числовые аргументы определяются в программе на Pascal. Вывод символа осу-
ществляет процедура ассемблера. Очевидно, что основная проблема в этой зада-
че — организация взаимодействия модулей на Pascal и ассемблере.
Листинг
Взаимодействие
(модуль на Pascal)

<2>
вызывающая процедуру на
<3> program ray_pas;
<4>
полной информации для
<5> uses crt;
<6> procedure
external;
<7>
как
<8>
<9> BEGIN
<10> clrscr;
<11>
<12>
<13> END.
Листинг
Взаимодействие
(модуль на ассемблере)
<1>
<2>
на ассемблере, которую вызывает
<3> ;программа на Pascal.
<4>
вывода на экран используются службы BIOS:
<5>
- позиционирование курсора.
<б>
- вывод символа заданное количество раз.
<7>
<8> MODEL
<9> STACK 256


348 Глава
Модульное программирование
Листинг
 (продолжение)
<11>
proc near
<12> PUBLIC asmproc
как внешняя
<13>
;пролог
<14>
<15> mov
строки для вывода
<16>
у - в
<17> mov
столбца для вывода
<18>;символа х - в
<19> mov
службы BIOS
<20>
прерывания BIOS
функции
прерывания BIOS
символа из а\ на экран
<23> mov
службы BIOS
<24> mov
;символ
в
<25> mov
;атрибут символа - в
<26> xor
<27> mov
;копичество "выводов"
<28>;символа - в сх
<29> int
прерывания BIOS
<30> pop bp
bp
<31>;очистка стека и возврат из процедуры
<32> ret 8
endp
процедуры
<34>end
Процесс организации такой связи состоит из нескольких шагов.
1. Написать процедуру на ассемблере дальнего (far) или ближнего типа (near).
Назовем ее для примера asmproc. В программе на языке ассемблера (назовем ее
в которую входит процедура asmproc, необходимо объявить имя
этой процедуры внешним с помощью директивы
PUBLIC asmproc
Для того чтобы процедура на ассемблере при компоновке с программой на Pascal
воспринималась компилятором Borland Pascal 7.0 как far или near, недостаточ-
но просто объявить ее таковой в директиве PROC (строка 11 листинга 15.13).
Кроме того, вам нужно включить или выключить параметр компилятора, дос-
тупный через меню интегрированной среды: Options
Force far calls.
Установка этого параметра заставляет компилятор генерировать дальние вызовы
подпрограмм. Альтернатива данного параметра — ключ
или
(соответ-
ственно, включено или выключено) в программе. Это — локальные ключи, то есть
в исходном тексте программы на Pascal их может быть несколько, и они могут,
чередуясь друг с другом, поочередно менять форму генерируемых адресов пере-
хода: для
подпрограмм — дальние вызовы, для других — ближние.
2. Произвести компиляцию программы
с целью устранения синтак-
сических ошибок и получения объектного модуля
tasm /zi
3. В программе
на Pascal, которая будет вызывать внешнюю процедуру
на ассемблере, следует вставить директиву компилятора
Эта директива заставит компилятор в процессе компиляции программы
загрузить с диска объектный модуль программы
В программе
необходимо объявить процедуру
как внешнюю.
В итоге последние два объявления в программе на Pascal будут выглядеть так:
external;


Связь ассемблера с языками высокого уровня 349
4. Если вы собираетесь исследовать в отладчике работу программы, то необходи-
мо потребовать, чтобы компилятор включил отладочную информацию в гене-
рируемый им исполняемый модуль. Для этого есть две возможности. Первая
заключается в использовании глобального ключа
Этот ключ должен быть
установлен сразу после заголовка программы на Pascal.
альтернативная
возможность заключается в установке параметра компилятора: Options Com-
piler Debug Information.
5. Выполнить компиляцию программы на Pascal. Для компиляции удобно исполь-
зовать интегрированную среду. Для изучения особенностей связки Pascal —
ассемблер удобно прямо в интегрированной среде перейти к работе в отладчи-
ке командой Tools Turbo Debugger (или клавишами
Будет загружен
отладчик. Его среда вам хорошо знакома; в данном случае в окне Module вы уви-
дите текст программы на Pascal. Нажимая клавишу F7, вы в пошаговом режиме
будете исполнять программу на Pascal. Когда очередь дойдет до вызова про-
цедуры на ассемблере, отладчик откроет окно с текстом программы на ассемб-
лере. Но наш совет вам — не ждать этого момента, так как вы пропустите неко-
торые интересные вещи. Дело в том, что отладчик скрывает момент перехода из
программы на Pascal в процедуру на ассемблере. Поэтому лучше всего испол-
нять программу при открытом окне CPU отладчика. И тогда вы станете свидете-
лями тех процессов, которые мы будем обсуждать далее.
Если бы взаимодействие программ ограничивалось только передачей и возвра-
том управления, то на этом обсуждение можно было бы и закончить. Но дело зна-
чительно усложняется, когда требуется передать аргументы (в случае процедуры)
или передать аргументы и возвратить результат (в случае функции). Рассмотрим
процессы, которые при этом происходят.
Передача аргументов при связи модулей на разных языках всегда производит-
ся через стек. Компилятор Pascal генерирует соответствующие команды при обра-
ботке вызова процедуры ассемблера. Это как раз те команды, которые отладчик
пытался скрыть от нас. Они записывают в стек аргументы и генерируют команду
CALL для вызова процедуры ассемблера. Чтобы убедиться в этом, просмотрите на
исполняемый код программы в окне CPU отладчика. После обработки вызова про-
цедуры и в момент передачи управления процедуре asmproc содержимое стека бу-
дет таким, как показано рис.
 а. Для доступа этим аргументам можно приме-
нять различные методы, наиболее удобный из них — использование регистра Р.
Регистр
как уже отмечалось, специально предназначен для организации
произвольного доступа к стеку. Когда мы рассматривали связь ассемблерных мо-
дулей, то говорили о необходимости добавления в текст вызываемого модуля фраг-
ментов, настраивающих его на передаваемые ему аргументы. При объединении
разноязыких модулей также нужно вставлять подобные дополнительные
ты кода. Они, кроме всего прочего, позволят учесть особенности конкретного язы-
ка. Фрагмент, вставляемый в самое начало вызываемого модуля, называется про-

Download 12,06 Mb.

Do'stlaringiz bilan baham:
1   ...   194   195   196   197   198   199   200   201   ...   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