русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Возврат значения в программу на Pascal


Дата добавления: 2014-11-27; просмотров: 1270; Нарушение авторских прав


Что касается ответа на второй вопрос, то мы рассмотрим его на конкретном при­мере листингов 6 и 7. Помните, что мы рассматриваем вызов из програм­мы на Pascal внешней процедуры на ассемблере. Понятно, что вызов ради вызова вряд ли нужен - вызываемая процедура должна иметь возможность вернуть дан­ные в вызывающую программу. Поэтому такую вызываемую процедуру правиль­нее рассматривать как функцию. В связке Pascal - ассемблер для того, чтобы воз­вратить результат, процедура на ассемблере должна поместить его значение в строго определенное место.

 

Возврат результата из процедуры на ассемблере в программу на Pascal:
Тип возвращаемого значения Куда записать результат?
Байт AL
Слово AX
Двойное слово DX:AX (старшее слово: младшее слово)
Указатель DX:AX (сегмент: смещение)

 

В листинге 6 приведен текст вызывающего модуля на Pascal, а в листин­ге 7 - код вызываемого модуля на ассемблере. Программа на Pascal инициа­лизирует две переменные valuel и va1ue2, после чего вызывает функцию на ассемб­лере AddAsm для их сложения. Результат возвращается в программу на Pascal и присваивается переменной rez.

 

 

Вызывающая программа на Pascal (листинг 6).

{prg6.pas}

program prg6;

{внешние объявления}

function AddAsm:word; external;

{$L prg7.obj}

var

valuel: word; {здесь как внешние}

va1ue2: word;

rez: word;

begin

va1uel:=2;

va1ue2:=3;

{вызов функции}

rez:=AddAsm;

write1n( "Результат:",rez);

end.

Вызываемая процедура на ассемблере (листинг 7);

;prg7.asm

MASM

MODEL small

data segment word public ;сегмент данных

;объявление внешних переменных

extrn va1uel:WORD

extrn va1ue2:WORD

data ends ;конец сегмента данных

.code

assume ds:data ;привязка ds к сегменту



;данных программы на Pascal

main:

AddAsm proc near

PUBLIC AddAsm ;внешняя

mov cx,ds:va1uel ;va1uel в cx

mov dx,ds:va1ue2 ;va1ue2 в dx

add cx,dx ;сложение

mov ax,cx ;результат в ax, так как - слово

ret ;возврат из функции

AddAsm endp ;конец функции

end main ;конец программы

Как вы, наверное, обратили внимание, здесь была использована еще одна возмож­ность доступа к разделяемым данным — использование сегментов типа public. Совместное использование сегментов данных стало возможным бла­годаря тому, что компилятор Pascal создает внутреннее представление програм­мы в виде сегментов, как и положено для программ, выполняющихся на микро­процессоре Intel. Сегмент данных в этом представлении тоже имеет название data, и директива segment для него выглядит так: data segment word public и т. д.



<== предыдущая лекция | следующая лекция ==>
Передача данных остальных типов Pascal | Команды Enter и Leave


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.232 сек.