0988b24c

Эффективная генерация кода: директивы SMART и NOSMART


Эффективная генерация кода означает, что Турбо Ассемблер мо- жет определить, что можно использовать различные инструкции более эффективно, чем вы это делаете. Например, в некоторых случаях можно заменить инструкцию LEA более короткой и быстрой инструкци- ей MOV:

LEA AX,lval

можно заменить на:

MOV AX,OFFSET lval

Турбо Ассемблер предусматривает директивы, которые позволяют вам использовать эффективную генерацию кода. Эти директивы описа- ны в следующей таблице:

Директивы эффективной генерации кода Таблица 13.1 ------------------T----------------------------------------------¬ ¦ Директива ¦ Значение ¦ +-----------------+----------------------------------------------+ ¦ SMART ¦ Разрешает генерацию эффективного кода. ¦ ¦ ¦ ¦ ¦ NOSMART ¦ Запрещает генерацию эффективного кода. ¦ L-----------------+-----------------------------------------------

По умолчанию генерация эффективного кода разрешена. Однако на генерацию эффективного кода влияют не только директивы SMART и NOSMART, но и директива VERSION.

Примечание: О директиве VERSION подробнее рассказыва- ется в Главе 3.

Генерация эффективного кода влияет на следующие ситуации ге- нерации кода:

- Замена инструкции LEA инструкцией MOV, если операндом инс- трукции LEA является простой адрес.

- Где это возможно, выполняется генерация булевских инструк- ций со знаком,. Например, AND AX,+02 вместо AND AX,0002.

- Замена инструкции CALL FAR xxxx комбинацией инструкций PUSH CS, CALL NEAR xxxx, где целевой адрес xxxx использует тот же регистр CS.

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



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