Большинство компиляторов языков высокого уровня поддерживают возможность вставки ассемблерного кода в обрабатываемые ими программы. В данном разделе основное внимание уделяется ассемблерным вставкам в программах на C++, так как именно этот язык наиболее часто используется для реализации задач систем- ного программирования. Оператор inline языка Pascal представляет собой следующую синтаксическую конструкцию: . inline(машинные_коды) В скобках указывается строка машинных кодов. Для получения такой строки целесообразно написать нужный фрагмент на ассемблере, скомпилировать испол- няемый модуль, а затем запустить отладчик. В окне CPU отладчика вы увидите ма- шинные коды ваших инструкций; их нужно переписать и вставить в скобки опера- тора inline. Встраивание ассемблерного кода в программы C++ производится директивой _asm. Причем этой директивой возможна вставка как одной команды ассемблера, так и группы команд. Синтаксис: __ asm команда_ассемблера [;комментарий] __ asm { команда_ассемблера [;комментарий] команда_ассемблера [//комментарий или /* комментарий */] } ^ . Планируя использование встроенного ассемблера, важно хорошо представлять себе его возможности и ограничения. Можно: не передавать параметры, как в случае с внешней ассемблерной процедурой; ш иметь непосредственный доступ к командам и регистрам процессора; И ссылаться на метки и переменные вне текущего блока, находящиеся в пределах видимости ассемблерной вставки; ш вызывать функции вне пределов ассемблерной вставки, причем эти функции должны быть ранее объявлены в программе (на уровне прототипа). И использовать описание констант как в стиле ассемблера, так и C++; » использовать операторы РТR, LENGTH, SIZE, TYPE и директивы EVEN и ALIGN. Нельзя: II использовать директивы определения данных простых (DВ и DD) и сложных типов (SТRUС, RECORD), то есть каким-либо образом определять данные любого типа; ⅞ описывать функции в пределах ассемблерной вставки; ■ш использовать в командах большинство операторов ассемблера типа OFFSET, SEG, SHR, SHL (вместо OFFSET можно использовать LEA); ■ использовать любые директивы макроопределений; ■ обращаться к полям структур и объединений.