__emit__

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

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

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

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

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

                    Предупреждение! Этой функцией могут воспользовать-
                    ся только программисты, хорошо ориентирующиеся в
                    машинном языке процессоров семейства 80х86. Вы мо-
                    жете использовать данную функцию для помещения
                    произвольных байтов в машинный код функции. Если
                    эти байты будут неправильными, то это может при-
                    вести к неисправимой ошибке. Turbo C++ не анализи-
                    рует код, помещаемый таким образом. Если эти ма-
                    шинные команды изменяют значение регистров или пе-
                    ременных, то Turbo 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

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