Russian Belarusian English German Japanese Ukrainian

__emit__

CuBook05

Функция

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

#include<dos.h>
void __emit__(argument,...);
 
Прототип

dos.h
 
Описание

Функция __emit__ позволяет вам вставить значение литерала непосредственно в объектный код, как если бы он был откомпилирован. Она используется для генерирования машинных инструкций без использования встроенных операторов ассемблера. Обычно аргументы __emit__ представляют из себя однобайтовые машинные команды. Однако возможности данной функции позволяют строить более сложные команды, вплоть до ссылок на переменные С.
 
Предупреждение! Этой функцией могут воспользоваться только программисты, хорошо ориентирующиеся в машинном языке процессоров семейства 80х86. Вы можете использовать данную функцию для помещения произвольных байтов в машинный код функции. Если эти байты будут неправильными, то это может привести к неисправимой ошибке. Borland C++ не анализирует код, помещаемый таким образом. Если эти машинные команды изменяют значение регистров или переменных, то Borland C++ не знает об этом и не сохраняет их перед использованием данного кода, как он делает это при работе со встроенным ассемблером, где он, например, распознает использование регистров SI и DI и сохраняет их. Здесь же вы предоставлены сами себе.
 
Вы должны передать __emit__ по меньшей мере 1 аргумент, реальное число может быть больше. Аргументы этой функции рассматриваются не так, как других функций: никаких преобразований они не претерпевают.
 
Имеется специальное ограничение формы аргументов __emit__. Они должны иметь форму константных выражений, т.е. чтобы их можно было использовать для инициализации статических объектов. Это означает, что в выражениях можно использовать целые константы, константы с плавающей точкой и адреса статических объектов. Значение записывается в точке вызова функции также, как если они используются для инициализации данных. Можно также использовать адреса параметров и автоматических переменных, плюс или минус константное смещение. Для этих аргументов запоминается смещение переменной в BP.
 
Возвращаемое значение

Нет.
 
Переносимость

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

#include<dos.h>

int main()
{
// код генерирует печать экрана, через прерывание int 5
__emit__(0xcd,0x05);
return 0;
}
Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

Добавить комментарий