Tw-city.info

IT Новости
4 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

C al программирование

Программирование на C/AL. User Portal – средство доступа сотрудников к Navision. Commerce Portal – средство доступа клиентов и поставщиков к Navision

Страницы работы

Содержание работы

Технологии Microsoft Navision

  • Семинар по подготовке к экзаменам:
  • «Microsoft Navision — Обзор»
  • «Microsoft Navision — Programming»
  • Требования по сдаче экзамена
  • Структура вопросов
  • Области, затрагиваемые в экзаменах

Требования по сдаче экзаменов

  • Текст вопроса …
    • I. Вариант ответа 1
    • II. Вариант ответа 2
    • Вариант ответа 3
  • В зависимости от вопроса Вы можете указывать один или несколько вариантов ответа.
  • Порядок ответов на вопросы произвольный.
  • Время ответа на отдельные вопросы не ограничено.

Области, затрагиваемые в экзамене «Обзор»

  1. Терминология
  2. Дополнительные средства
  3. Системные требования
  1. C/SIDE – Client/Server Integrated Development Environment
  2. C/AL – Client Application Language
  3. SIFT — Sum-Indexed Field Technology
  1. User Portal – средство доступа сотрудников к Navision
  2. Commerce Portal – средство доступа клиентов и поставщиков к Navision
  3. Commerce Gateway – средство интеграции с партнерскими системами
  4. Для взаимодействия с вышеперечисленными продуктами исползуется:
  5. Браузер — CP, UP
  6. Microsoft BizTalk Server — CG
  7. Navision Application Server – шлюз для взаимодействия с Navision (XML формат) нужен для всех е-решений,
  8. для CP так же необходим Microsoft Commerce Server

Области, затрагиваемые в экзамене «Programming»

  1. Программирование на C/AL
  2. Основные объекты C/SIDE
  3. Системная архитектура и архитектура приложения
  4. Интеграция с внешними приложениями
  5. Сценарий разработки
  1. NAV RU … C-AL
  2. NAV RU … Objects
  3. NAV RU … Architecture
  4. NAV RU … Integration

Программирование на C/AL

Программирование на C/AL – Типы данных

Программирование на C/AL — Операторы

  • Разделители кода:
    • Разделитель строк — ; (точка с запятой)
    • Символ комментария
      • — // однострочный комментарий
    • Операторы и синтаксис их использования
      • Оператор доступа к полю, свойству — . (точка)
      • Оператор диапазона — ..
      • Оператор доступа к значению опции — ::
      • Присваивание — :=
      • Арифметические: +, -, *, /, DIV, MOD
      • Относительные (Relational): , =, =, <>, IN
      • Логические (Logical): NOT; OR; AND; XOR
    • Унарные (Unary) — Бинарные (Binary)
      • Унарные : +, -, NOT
    • Пример: Оператор … соответствует следующему типу…
    • Пример: Сколько будет (2 + 4) / 2, а 2 + 4 / 2 ?
    • Приоритет выполнения операторов
    • () [ ] . ::
    • Унарные + – NOT
    • * / DIV MOD AND
    • + – OR XOR
    • Относительные
    • ..

    Программирование на C/AL – действия

    • Действия над значениями:
      • Тип Дата
        • 050502D – 100502D = — 5 — Тип результата integer, содержит число дней
        • 010102D + (050102D – 100102D) = 271201D – тип результата date
      • Тип Текст
        • Преобразование текстовых значений в результате присваивания переменных типа Code и Text
        • Text := ‘test’;
        • Code := Text;
        • MESSAGE(Code);
        • Результат — сообщение: ‘TEST’;
        • Concatenation – слияние нескольких текстовых значений путем добавления одного в конец другого
          • ‘Hello ’ + ‘World’ + ‘!’ = ‘Hello World!’

    Программирование на C/AL – переменные

    Синтаксис объявления переменных: Максимальная длина имени переменной – 30 символов. Допустимые символы (коды ASCII): 32 – 254 Если в названии переменной есть символы не входящие в множество [ _, A..Z, a..z, 0..9] следует использовать двойные кавычки. Примеры: Customer_Name , “Customer Name”, “Line No.”, LineNo

    Управляющие конструкции C/AL

    • Составной оператор
    • BEGIN … END
    • Управление исполнением
    • EXIT
    • Условные операторы
    • IF … THEN … ELSE …
    • CASE … OF … END
    • Операторы цикла
    • FOR … DO …
    • REPEAT … UNTIL
    • WHILE … DO …

    Синтаксис написания по стандартам Navision

    • Системные функции
    • Работа со строками
      • COPYSTR – получение подстроки
      • STRLEN – длина строки
      • MAXSTRLEN – максимально допустимая длина строки
    • Работа с датой
      • TODAY – системная дата компьютера
      • WORKDATE – рабочая дата в БД Navision
    • Организация диалога
      • MESSAGE, ERROR, CONFIRM
    • Пользовательские функции
    • MyFunction(Parameter)
    • Передача параметра
    • как значения
    • как ссылки – позволяет изменять значение переданного параметра
    • *Список доступных функций в C/AL Symbol Menu ( F5 )

    Оператор CALL

    Содержание

    Синтаксис SQL 2003

    CALL имя_процедуры ([параметр [, …]])

    Ключевые слова

    CALL имя_процедуры

    Указывает имя хранимой процедуры, которую вы хотите вызвать. Это должна быть заранее созданная процедура, доступная в контексте текущего пользователя (в экземпляре, базе данных, схеме и тому подобное).

    Определяет значения входных параметров, необходимых для хранимой процедуры. Нужно, чтобы каждый указанный параметр процедуры находился на своем порядковом месте. Следовательно, параметр, указанный пятым, передает значение пятому аргументу хранимой процедуры. Параметры должны быть заключены в скобки и отделяться друг от друга запятыми. Отметьте, что скобки необходимы даже в том случае, если параметры отсутствуют [то есть даже если нет параметров, вы все равно должны писать CALL ()]. Строки нужно заключать в одинарные кавычки. Если хранимая процедура имеет только выходные (OUT) параметры, помещайте соответствующие переменные или маркеры параметров в скобки.

    Общие правила

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

    В этом примере кода для Oracle создается простая хранимая процедура, а затем выполняется ее вызов.

    Возвращаемое значение хранимой процедуры, как правило, определяется с помощью команды GET DIAGNOSTIC. Эта команда не очень распространена среди платформ баз данных, поэтому подробную информацию ищите в документации платформы.

    Многие платформы также поддерживают альтернативную команду EXECUTE, имеющую те же возможности. В некоторых случаях EXECUTE может оказаться предпочтительнее, чем CALL, поскольку ее можно использовать для запуска любого заранее подготовленного кода SQL, в том числе методов, функций и пакетов кода SQL.

    Платформа DB2 поддерживает оператор CALL с дополнительными возможностями DESCRIPTOR.

    CALL имя_процедуры

    USING DESCRIPTOR имя_дескриптора

    Определяет структуру SQL Descriptor Area (SQLDA), которая содержит описания хост-переменных1. SQLDA представляет собой коллекцию переменных, которые необходимы для выполнения инструкции SQL DESCRIBE. Переменные SQLDA -это опции, которые могут использоваться в инструкциях PREPARE, OPEN, FETCH, EXECUTE и CALL. Значения в SQLDA должны быть определены до запуска команды CALL. В DB2 эта функциональность исчезает. Мы рекомендуем использовать вместо нее стандартный синтаксис CALL proc (param, param).

    Платформа DB2 позволяет везде, где это нужно, заменять хост переменные именем процедуры или параметрами. При использовании предложения USING DESCRIPTOR переменные должны быть строковыми, длиной не более 254 символов.

    В DB2 возвращаемое хранимой процедурой значение помещается в поле SQLERRD в SQLCA (SQL Communication Area). Вы также можете использовать инструкцию GET DIAGNOSTIC для получения значения RETURN’JSTATUS (-1 указывает на ошибку) или числа строк.

    MySQL

    Oracle

    Платформа Oracle позволяет использовать инструкцию CALL для вызова самостоятельных хранимых процедур, функций и методов, а также хранимых процедур и функций, содержащихся внутри типа или пакета. Вот синтаксис Oracle.

    CALL [схема.] [<имя_типа | имя_пакета>.] имя_процедуры [(параметр [, …])] [INTO имя переменной [[INDICATOR] :имя_индикатора]]

    CALL [schema.] [<имя_типа | имя_пакета>.] имя_процедуры

    Вызов именованного объекта. Вы можете указать имя объекта полностью, в том числе схему, тип и тому подобное, или позволить Oracle предположить, что объект находится в текущей схеме и текущем экземпляре базы данных. Если процедура или функция находится в другой базе данных, просто укажите эту базу с помощью имени связи с базой данных (параметр @dblink в синтаксисе). Параметр @dblink должен ссылаться на ранее созданное соединение с базой данных.

    INTO :имя_переменной

    Указывается имя ранее объявленной переменной, которая будет хранить возвращаемое вызванной функцией значение. Параметр INTO используется и является необходимым только в том случае, если вызывается функция.

    INDICATOR :имя_индикатора

    Хранит предложение для хост-переменной — например, равно ли возвращаемое значение NULL для функций, откомпилированных в процедуре.

    В параметры, применяемые в Oracle, нельзя включать псевдостолбцы или функции VALUE и REF. Вы должны использовать хост-переменные для любых параметров, соответствующие аргументу OUTma IN OUT вызванной хранимой процедуры.

    PostgreSQL

    Справочник по командам SQL | 89

    SQL Server

    He поддерживается. Вместо этой команды используется не входящая в стандарт ANSI инструкция EXECUTE.

    Дополнительная информация по теме

    Правила и методы использования оператора LIKE в базах данных на различных платформах

    Правила и методы использования оператора IN в базах данных на различных платформах

    Правила и методы использования оператора IS в базах данных на различных платформах

    Какие основные операторы используются в выражениях и/или инструкциях, ключевые слова

    Navision — технологии как искусство База знаний Microsoft Dynamics NAV

    Экономия своими руками

    Когда проводят презентацию новой системы, связанной с IT областью, часто рассказывают о таком параметре как «стоимость владения», сопровождая обязательным словом «низкая». Обычно если об этом говорят, то это значит, что стоимость покупки сильно завышена, а производитель не сомневается в том, что его технология не потребует больших затрат на сопровождение. По большому счету это не самый …

    Архивация в Dynamics NAV средствами Windows

    Вы когда-нибудь обращали внимание на то, что проводник Windows может показывать содержимое Zip архива? К тому же Вы можете добавлять в архив файлы и извлекать их. Как-то я задался вопросом: как можно использовать эту возможность из Navision? Ведь в этом случае мне не придется заботиться о том, чтобы устанавливать архиватор на каждой машине. Давайте разберемся …

    Отправка почты из Navision так, чтобы она осталась в почтовом клиенте

    В организации используются в качестве почтового клиента Outlook и TheBat. Возникла необходимость отправлять почту так, что бы она оставалась в почтовом клиенте у конкретного пользователя, отправляющего почту из Navision. При этом немаловажным фактором является то, что нужно подключать аттачменты. Порывшись в интернете я понял, что для этого можно использовать протокол MAPI который поддерживают как Outlook …

    Вычисляемое поле обновляется только при срабатывании триггера OnValidate

    Краткое изложение проблемы Предположим, у вас на страцице есть вычисляемое поле («вычисляемое» в свойстве SourceExpression), а часть вычисления включает в себя ссылку на еще одно поле. Так вот, вычисляемое поле не обновится автоматически при изменении во втором поле (это, кстати, начиная с третьей версии навижн так работает – прим.перев.). Вычисляемое поле обновится ТОЛЬКО ЕСЛИ по …

    Как создавать/читать xml-файлы из NAV…

    В своей предыдущей заметке я описал возможности по чтению xml-файлов из NAV. При этом сам файл – просто прикрепил, и не рассказал, как их создавать. Исправляюсь. —— Customers 10000 The Cannon Group PLC …

    Как прочесть xml-документ из Navision при помощи Microsoft XMLDOM automation

    Мне часто задают вопросы типа «Как в Navision читать xml-документы без использования xml-портов?» В основном они связаны с тем, что xml-порты имеют ограничения и не всегда их можно использовать. Вот пример кодеюнита, который считывает xml-узлы из файлы. Просто пример, ничего более… 🙂 OBJECT Codeunit 50050 xml read < OBJECT-PROPERTIES < Date=05.08.12; …

    Как увеличить производительность Microsoft Dynamics NAV за счет уменьшения чтений из базы

    Самый простой (для программиста), но самый медленный (с точки зрения производительности) способ Так пишет большинство. При прогоне цикла по таблице и использовании GET (а также FINDFIRST/FINDLAST) по другой таблице, в которой вам надо получить данные, большиство выполняют эти GET-операторы в каждой итерации цикла, даже если на предыдущей итерации уже получено правильное значение: recItemLedgerEntry.RESET; recItemLedgerEntry.SETCURRENTKEY(«…»); recItemLedgerEntry.SETRANGE(«…»); …

    Связь между оператором FOR-TO и максимальным количеством параметров функции

    Сегодня мне пришлось столкнуться с одним, так и хочется сказать, побочным эффектом работы C/SIDE. После некоторого времени, затраченного на поиски проблемы, пришло понимание, которым я и хочу с вами поделиться. Как это началось Представьте, что у вас есть два куска кода: Пример 1: MyFunction(Param1,Param2,Param3,Param4,Param5,Param6,Param7,Param8,Param9, Param10,Param11,Param12,Param13,Param14,Param14,Param15,Param16,Param17); Пример 2: for j :=1 to 1 do begin MyFunction(Param1,Param2,Param3,Param4,Param5,Param6,Param7,Param8,Param9, …

    Работа с Record. Часть четвертая, практическая

    Предыдущие части можно найти здесь: «1. Основные команды. Чтение данных без блокировок», «2. Modify», «3. FILTERGROUP. Другие фирмы». Примеры из практики Navision Вам необходимо получить остатки определенного товара на определенном складе. Есть два способа сделать это. У обоих способов есть свои за и против. ПРАВИЛЬНО — (ЗА — вам не нужно заботиться об индексах. ПРОТИВ …

    Работа с переменными Record — 3. FILTERGROUP. Чтение в другой фирме.

    Предыдущие части можно найти здесь: «Основные команды. Чтение без блокировок», «Работа с Modify». Использование групп фильтров – FILTERGROUP Группы фильтров полезны для накладывания нескольких фильтров на одно и то же поле, а также для скрытия фильтров от пользователей. Пара советов: используйте группы от 10 и выше. Группы фильтров от 0 до 6 зарезервированы (подробности — см. справку …

    Работа с переменными Record – 2. Modify.

    С первой частью статьи можно ознакомиться здесь – «Основные команды. Чтение без блокировок». Примеры изменения записей Общие советы по записи в БД Начинайте транзакцию как можно позже (т.е. сначала считайте нужные данные без блокировок таблиц, и только после этого начинайте запись). Блокируйте как можно меньше (при внесении изменений в одну запись таблицы размером в 10 млн.записей, зачем …

    Работа с переменными типа Record в Navision

    Надпись на аквариуме в зоомагазине: «Не стучите – они не откроют». Много раз я видел, как множество людей для получения данных из БД пользуются не похожими друг на друга, но совершенно неэффективными способами. Либо они пишут ненужные команды, и таким образом устраивают в коде бардак. Это сподвигло меня на написание статьи, где бы на пальцах …

    Как вычислить размер места, используемого БД Navision

    Как мы все знаем, у базы Navision есть два главных параметра — это 1) размер и 2) используемая площадь, т.е. место. Встречаются такие жизненные ситуации, в которых необходимо иметь предупреждение о том, что используемое место вплотную приближается к размеру самой базы. Например, становится практически невозможно выполнить какие-нибудь пакетные операции, связанные с движением больших объемов данных, …

    Работа с диалогами

    Одно из железных правил проектирования интерфейсов – пользователь не должен чувствовать себя покинутым. Он может нажать кнопку, подождать 5 секунд (максимум!), но если не видит реакцию системы – начинается паника. Для этих случаев в Navision есть диалоги, спец.окошки для вывода текущего состояния системы. В них можно выводить счетчики, проценты, прогресс-бары – все, что угодно. Есть одно НО. Dialog.UPDATE работает очень медленно …

    Олимпиадная задачка – пересечение в NAV

    «Мне нужно вывести на экран не все записи. Причем просто фильтрами не обойдешься. Менеджер видит свои сделки + все сделки, подчиненных где он босс. Грубо говоря, юзер должен видеть все сделки, в которых он фигурирует как менеджер + если ты начальник, то должен видеть все сделки подчиненных менеджеров и менеджеров нижестоящих депратаментов. Департаменты могут быть …

    Оператор CALL

    Содержание

    Синтаксис SQL 2003

    CALL имя_процедуры ([параметр [, …]])

    Ключевые слова

    CALL имя_процедуры

    Указывает имя хранимой процедуры, которую вы хотите вызвать. Это должна быть заранее созданная процедура, доступная в контексте текущего пользователя (в экземпляре, базе данных, схеме и тому подобное).

    Определяет значения входных параметров, необходимых для хранимой процедуры. Нужно, чтобы каждый указанный параметр процедуры находился на своем порядковом месте. Следовательно, параметр, указанный пятым, передает значение пятому аргументу хранимой процедуры. Параметры должны быть заключены в скобки и отделяться друг от друга запятыми. Отметьте, что скобки необходимы даже в том случае, если параметры отсутствуют [то есть даже если нет параметров, вы все равно должны писать CALL ()]. Строки нужно заключать в одинарные кавычки. Если хранимая процедура имеет только выходные (OUT) параметры, помещайте соответствующие переменные или маркеры параметров в скобки.

    Общие правила

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

    В этом примере кода для Oracle создается простая хранимая процедура, а затем выполняется ее вызов.

    Возвращаемое значение хранимой процедуры, как правило, определяется с помощью команды GET DIAGNOSTIC. Эта команда не очень распространена среди платформ баз данных, поэтому подробную информацию ищите в документации платформы.

    Многие платформы также поддерживают альтернативную команду EXECUTE, имеющую те же возможности. В некоторых случаях EXECUTE может оказаться предпочтительнее, чем CALL, поскольку ее можно использовать для запуска любого заранее подготовленного кода SQL, в том числе методов, функций и пакетов кода SQL.

    Платформа DB2 поддерживает оператор CALL с дополнительными возможностями DESCRIPTOR.

    CALL имя_процедуры

    USING DESCRIPTOR имя_дескриптора

    Определяет структуру SQL Descriptor Area (SQLDA), которая содержит описания хост-переменных1. SQLDA представляет собой коллекцию переменных, которые необходимы для выполнения инструкции SQL DESCRIBE. Переменные SQLDA -это опции, которые могут использоваться в инструкциях PREPARE, OPEN, FETCH, EXECUTE и CALL. Значения в SQLDA должны быть определены до запуска команды CALL. В DB2 эта функциональность исчезает. Мы рекомендуем использовать вместо нее стандартный синтаксис CALL proc (param, param).

    Платформа DB2 позволяет везде, где это нужно, заменять хост переменные именем процедуры или параметрами. При использовании предложения USING DESCRIPTOR переменные должны быть строковыми, длиной не более 254 символов.

    В DB2 возвращаемое хранимой процедурой значение помещается в поле SQLERRD в SQLCA (SQL Communication Area). Вы также можете использовать инструкцию GET DIAGNOSTIC для получения значения RETURN’JSTATUS (-1 указывает на ошибку) или числа строк.

    MySQL

    Oracle

    Платформа Oracle позволяет использовать инструкцию CALL для вызова самостоятельных хранимых процедур, функций и методов, а также хранимых процедур и функций, содержащихся внутри типа или пакета. Вот синтаксис Oracle.

    CALL [схема.] [<имя_типа | имя_пакета>.] имя_процедуры [(параметр [, …])] [INTO имя переменной [[INDICATOR] :имя_индикатора]]

    CALL [schema.] [<имя_типа | имя_пакета>.] имя_процедуры

    Вызов именованного объекта. Вы можете указать имя объекта полностью, в том числе схему, тип и тому подобное, или позволить Oracle предположить, что объект находится в текущей схеме и текущем экземпляре базы данных. Если процедура или функция находится в другой базе данных, просто укажите эту базу с помощью имени связи с базой данных (параметр @dblink в синтаксисе). Параметр @dblink должен ссылаться на ранее созданное соединение с базой данных.

    INTO :имя_переменной

    Указывается имя ранее объявленной переменной, которая будет хранить возвращаемое вызванной функцией значение. Параметр INTO используется и является необходимым только в том случае, если вызывается функция.

    INDICATOR :имя_индикатора

    Хранит предложение для хост-переменной — например, равно ли возвращаемое значение NULL для функций, откомпилированных в процедуре.

    В параметры, применяемые в Oracle, нельзя включать псевдостолбцы или функции VALUE и REF. Вы должны использовать хост-переменные для любых параметров, соответствующие аргументу OUTma IN OUT вызванной хранимой процедуры.

    PostgreSQL

    Справочник по командам SQL | 89

    SQL Server

    He поддерживается. Вместо этой команды используется не входящая в стандарт ANSI инструкция EXECUTE.

    Дополнительная информация по теме

    Правила и методы использования оператора LIKE в базах данных на различных платформах

    Правила и методы использования оператора IN в базах данных на различных платформах

    Правила и методы использования оператора IS в базах данных на различных платформах

    Какие основные операторы используются в выражениях и/или инструкциях, ключевые слова

    ProgrammWS

    Все для начинающего программиста

    Меню сайта

    Информация

    Programm.ws — это сайт, на котором вы можете почитать литературу по языкам программирования , а так-же посмотреть примеры работающих программ на С++, ассемблере, паскале и много другого..

    Программирование — в обычном понимании, это процесс создания компьютерных программ.
    В узком смысле (так называемое кодирование) под программированием понимается написание инструкций — программ — на конкретном языке программирования (часто по уже имеющемуся алгоритму — плану, методу решения поставленной задачи). Соответственно, люди, которые этим занимаются, называются программистами (на профессиональном жаргоне — кодерами), а те, кто разрабатывает алгоритмы — алгоритмистами, специалистами предметной области, математиками.
    В более широком смысле под программированием понимают весь спектр деятельности, связанный с созданием и поддержанием в рабочем состоянии программ — программного обеспечения ЭВМ. Более точен современный термин — «программная инженерия» (также иначе «инженерия ПО»). Сюда входят анализ и постановка задачи, проектирование программы, построение алгоритмов, разработка структур данных, написание текстов программ, отладка и тестирование программы (испытания программы), документирование, настройка (конфигурирование), доработка и сопровождение.

    Приложение. Система команд процессоров Intel

    CALL Вызов подпрограммы

    Команда call передает управление подпрограмме, сохранив перед этим в стеке смещение к точке возврата. Команда ret, которой обычно заканчивается подпрограмма, забирает из стека адрес возврата и возвращает управление на команду, следующую за командой call. Команда не воздействует на флаги процессора.
    Команда call имеет четыре модификации:
    — вызов прямой ближний (в пределах текущего программного сегмента);
    — вызов прямой дальний (вызов подпрограммы, расположенной в другом программном сегменте);
    — вызов косвенный ближний;
    — вызов косвенный дальний.
    Все разновидности вызовов имеют одну и ту же мнемонику call, хотя и различающиеся коды операций. Во многих случаях транслятор может определить вид вызова по контексту, в тех же случаях, когда это невозможно, следует использовать атрибутные операторы:

    near ptr — прямой ближний вызов;

    far ptr — прямой дальний вызов;

    word ptr — косвенный ближний вызов;

    dword ptr — косвенный дальний вызов.

    Команда call прямого ближнего вызова заносит в стек относительный адрес точки возврата в текущем программном сегменте и модифицирует IP так, чтобы в нем содержатся относительный адрес точки перехода в том же программном сегменте. Необходимая для вычисления этого адреса величина смещения от точки возврата до точки перехода содержится в коде команды, который занимает 3 байт (код операции E8h и смещение к точке перехода).
    Команда call прямого дальнего вызова заносит в стек два слова — сначала сегментный адрес текущего программного сегмента, а затем (выше, в слово с меньшим адресом) относительный адрес точки возврата в текущем программном сегменте. Далее модифицируются регистры IP и CS: в IP помещается относительный адрес точки перехода в том сегменте, куда осуществляется переход, а в CS — сегментный адрес этого сегмента. Обе эти величины берутся из кода команды, который занимает 5 байтов (код операции 9А1г, относительный адрес вызываемой подпрограммы и ее сегментный адрес).
    Косвенные вызовы отличаются тем, что адрес перехода извлекается не из кода команды, а из ячеек памяти; в коде команды содержится информация о том, где находится адрес вызова. Длина кода команды зависит от используемого способа адресации.

    Примеры прямого ближнего вызова

    call near ptr subl ;Вызов подпрограммы subl

    ;из того же сегмента

    call subl ;To же самое

    Косвенные ближние вызовы

    mov BX,offset subl ;ВХ=адрес подпрограммы

    call BX ;Вызов подпрограммы

    addr dw subl ;Ячейка с адресом подпрограммы

    ;В программном сегменте:

    call DS:addr ;Вызов подпрограммы

    call word ptr addr ;To же самое

    addr dw subl ;Ячейка с адресом подпрограммы

    ;В программном сегменте:

    mov SI,offset addr ;SI=адрес ячейки с адресом

    call [SI] ;Вызов подпрограммы

    ;В полях данных:
    tbl dw subl ;Ячейка с адресом
    ;подпрограммы 1
    dw sub2 ;Ячейка с адресом
    ;подпрограммы 2
    dw sub3 ;Ячейка с адресом
    ;подпрограммы 3
    ;В программном сегменте:
    mov BX,offset tbl ;ВХ=адрес таблицы адресов
    ;подпрограмм
    mov SI, 2 ;SI=смещение к адресу sub2
    call [BX] [SI] ;Вызов подпрограммы 2

    Пример прямого дальнего вызова

    call far ptr subl ;Вызов подпрограммы sub2,
    ;расположенной в другом

    Косвенные дальние вызовы

    ;В полях данных:
    addr dd subl ;Поле с двухсловным
    ;адресом подпрограммы
    ;В программном сегменте:
    call DS:addr ;Вызов подпрограммы
    call dword ptr addr;To же самое

    ;В полях данных:
    addr dd subl ;Поле с двухсловным
    ;адресом подпрограммы
    ;В программном сегменте:
    mov DI,offset addr ;В1=адрес поля с адресом
    ;подпрограммы
    call [DI] ;Вызов подпрограммы

    ; В полях данных:
    tbl dd subl ;Адрес подпрограммы 1
    dd sub2 ;Адрес подпрограммы 2
    dd sub3 ;Адрес подпрограммы 3
    ;В программном сегменте:
    mov SI,offset tbl ;DI=адрес таблицы адресов
    mov DI,8 ;Смещение к адресу sub3
    call [SI] [DI] ;Вызов подпрограммы sub3

    Допустимо использование дополнительных режимов адресации 32-разрядных процессоров. В 32-разрядных приложениях допустимо использование 32-битовых операндов. В защищенном режиме роль сегментного адреса выполняет селектор.

    Читать еще:  С чего лучше начать изучать программирование
Ссылка на основную публикацию
Adblock
detector