Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / Турбо Ассемблер / Использование Турбо Ассемблера /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Расширенные инструкции - Программирование от RIN.RU
Расширенные инструкции



Вызов процедур с кадрами стека


Турбо Ассемблер поддерживает расширенную форму инструкции CALL, которая позволяет вам непосредственно вызывать процедуры, использующие интерфейсные соглашения языков высокого уровня.


Аргументы процедурам, использующим интерфейсные соглашения языков высокого уровня, передаются через стек в кадре стека. Перед вызовом процедуры вызывающая программа должна занести эти аргументы в стек.


Используемые процедурой интерфейсные соглашения определяют порядок, в котором аргументы должны заноситься в стек. Для процедур Бейсика, Фортрана и Паскаля аргументы заносятся в стек в том порядке, в котором они указываются. Для языков Си и С++ аргументы заносятся в стек в обратном порядке.


Используемые процедурой интерфейсные соглашения определяют также, должна удалять аргументы из стека после вызова процедуры сама процедура или вызывающая программа. Языка Си и С++ требуют, чтобы стек очищала вызывающая программа. Во всех других языках процедура должна сама удалить аргументы из стека перед возвратом управления.


Турбо Ассемблер с помощью расширенной инструкции CALL сам выполняет за вас функции по занесению аргументов в стек в нужном порядке и очисткой стека. Вызов процедуры с параметрами имеет следующий синтаксис:


CALL выражение [язык] [,список_аргументов]


где "выражение" является целью инструкции CALL, "язык" задает используемые при вызове языковые соглашения. Если вы не задаете язык, Турбо Ассемблер использует по умолчанию язык, заданный в директиве MODEL.


Примечание: О директиве MODEL более подробнее рассказывается в здесь.


Аргументы, если они имеются, указываются после идентификатора языка. Синтаксис каждого аргумента в списке совпадает с синтаксисом, который используется в расширенных инструкциях PUSH и POP. Вы можете разделить эти аргументы запятыми, например:


CALL test PASCAL,ax,es OFFSET buffer,blen


Поскольку в данном примере указан Паскаль, Турбо Ассемблер будет заносить аргументы в стек в том порядке, в котором они указаны. Этот пример эквивалентен следующим инструкциям:


PUSH ax
PUSH es OFFSET buffer
PUSH word PTR blen
CALL test


Вызов процедуры Си требует, чтобы аргументы заносились в стек в обратном порядке. Турбо Ассемблер делает это автоматически, поэтому вызов вида:


CALL test C,ax,es OFFSET buffer, word PTR blen


даст в результате следующий код:


PUSH word PTR blen
PUSH es OFFSET buffer
PUSH ax
CALL test
SUB sp,8


При вызове процедуры с аргументами аргументы в списке следует всегда указывать в том порядке, в котором они следуют в заголовке процедуры. При необходимости Турбо Ассемблер изменяет их порядок на обратный.


Нужно не забывать разделять аргументы запятыми, а компоненты аргументов - пробелами. В зависимости от соглашений указанного языка Турбо Ассемблер может заносить аргументы в стек в обратном порядке, но порядок компонентов аргумента он не изменяет.


Если при вызове используются интерфейсные соглашения NOLANGUAGE, Турбо Ассемблер при наличии любого аргумента сообщает об ошибке. Хотя аргументы для процедуры NOLANGUAGE можно задать с помощью директивы ARG, при вызове такой процедуры требуется явное занесение аргументов в стек.


Вызываемые процедуры, содержащие RETURNS


Процедуры, определяющие некоторые из своих аргументов с помощью ключевого слова RETURNS требуют отдельного рассмотрения. Эти аргументы используются для возврата значений в вызывающую программу. Таким образом, вызывающая программа всегда извлекает их из стека. Чтобы способствовать передаче этих аргументов, заданных в описании процедуры после директивы RETURNS, в Турбо Ассемблере нет специальных расширений инструкции CALL. Перед инструкцией CALL вы должны явным образом занести аргументы в стек (PUSH), а потом извлечь их их стека (POP).


<<<  НазадВперед  >>>
 1  2  3  4  5  6 


 8  Комментарии к статье  8 8  Обсудить в чате

8  В тему

Начало работы на Турбо Ассемблере

Использование директив и параметров

Общие принципы программирования

Объектно-ориентированное программирование

Использование выражений и значений идентификаторов

Директивы выбора процессора

Использование моделей памяти программы и сегментации

Определение типов данных

Задание и использование счетчика адреса

Описание процедур

Управление областью действия идентификаторов

Определение данных

Использование макрокоманд

Использование условных директив

Интерфейс с компоновщиком

Генерация листинга

Интерфейс Турбо Ассемблера и Borland C++

Интерфейс Турбо Ассемблера с Турбо Паскалем

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь