Программирование игр для Windows. Советы профессионала

       

Использование встроенного (in-line) ассемблера


Текущая тенденция компьютерной индустрии — использование одного языка программирования. Встроенный ассемблер является откликом на это пожелание. Это платформно-ориентированное расширение стандарта Си. Оно позволяет программистам включать инструкции ассемблера прямо в их программы, а не создавать самостоятельные процедуры и транслировать их отдельно. Это имеет два преимущества:

§          Во-первых, программисту на Си теперь не нужно знать так много обо всем, как прежде;

§          Во-вторых, встроенный ассемблер — это максимальное удобство в программировании на разных языках.

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

_asm{

инструкции ассемблера;

}

Это все, что надо: ни директив, ни пролога, ни эпилога. Только одно ключевое слово _asm, да пара скобок - и мы у цели.

В связи с использованием встроенного ассемблера на ум сразу приходит миллион вопросов. Я попытаюсь ответить, по крайней мере, на половину из них. Шутка. Кстати, есть пара очень важных моментов:

§          Не надо заботиться о сохранении регистров — это сделают за вас;

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

Например, если мы хотим обменять два значения с помощью встроенного ассемблера, то следующий Си-код показывает, как это сделать:

void Swap(int num_1, int num_2)

{

_asm{

mov AX,num 1

mov BX,num 2

mov num 1,BX

mov num_2,AX

}

}

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

Для большинства задач возможностей встроенного ассемблера вполне достаточно.

Содержание раздела