C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 __emit__ / e / Библиотечн. функции Borland C++

__emit__

Функция            Вставляет значение литерала непосредственно в код.

Синтаксис          #include<dos.h>
                   void __emit__(argument,...);

Файл, содержащий   dos.h
прототип

Описание           Функция __emit__  позволяет  вам  вставить значение
                   литерала непосредственно в объектный код,  как если
                   бы  он  был  откомпилирован.  Она  используется для
                   генерирования машинных инструкций без использования
                   встроенных операторов ассемблера.

                   Обычно аргументы  __emit__  представляют  из   себя
                   однобайтовые  машинные команды.  Однако возможности
                   данной  функции  позволяют  строить  более  сложные
                   команды, вплоть до ссылок на переменные С.

                   Предупреждение! Этой функцией могут воспользоваться
                   только  программисты,  хорошо   ориентирующиеся   в
                   машинном  языке  процессоров  семейства  80х86.  Вы
                   можете использовать данную  функцию  для  помещения
                   произвольных  байтов  в машинный код функции.  Если
                   эти  байты  будут  неправильными,  то   это   может
                   привести к  неисправимой  ошибке.  Borland  C++  не
                   анализирует код, помещаемый таким образом. Если эти
                   машинные  команды  изменяют  значение регистров или
                   переменных,  то Borland C++ не знает об этом  и  не
                   сохраняет их перед использованием данного кода, как
                   он делает это при работе со встроенным ассемблером,
                   где    он,   например,   распознает   использование
                   регистров SI и DI  и  сохраняет  их.  Здесь  же  вы
                   предоставлены сами себе.

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

                   Имеется специальное  ограничение  формы  аргументов
                   __emit__.  Они  должны  иметь   форму   константных
                   выражений, т.е.  чтобы  их  можно было использовать
                   для   инициализации   статических   объектов.   Это
                   означает, что в выражениях можно использовать целые
                   константы,  константы с плавающей точкой  и  адреса
                   статических объектов. Значение записывается в точке
                   вызова функции также, как если они используются для
                   инициализации   данных.  Можно  также  использовать
                   адреса параметров и автоматических переменных, плюс
                   или минус константное смещение. Для этих аргументов
                   запоминается смещение переменной в BP.

                   Количество байт,  помещаемых   в   объектный   код,
                   определяется   типом   аргумента,   за  исключением
                   следующих случаев:

                   - знаковая целая константа (например 0х90) значение
                     которой   лежит   в   диапазоне   от   0  до  255
                     рассматривается как символ.

                   - Когда    используется    адрес     автоматической
                     переменной   или   параметра,  то  если  смещение
                     переменной в BP лежит в диапазоне от -128 до  127
                     то записывается байт, иначе слово.

                   Просто байты записываются следующим образом:

                   __emit__(0x90);

                   Если вы хотите записать слово,  однако его значение
                   меньше 255, то просто преобразуйте его в unsigned:

                   __emit__(0xB8,(unsigned)17);

                   или

                   __emit__(0xB8, 17u);

                   Двух- или  четырехбайтовые   адреса   можно   прямо
                   указать с помощью типов:  void near * и void far *,
                   соответственно.

Возвращаемое       Нет.
значение

Переносимость      __emit__ уникальна для семейства машин 80х86.

Пример:

#include<dos.h>

int main()
{
   /* вставить код, который генерирует печать экрана, через
      прерывание int 5 */
   __emit__(0xcd,0x05);  /* INT 05h */
   return 0;
}