Эффективная генерация кода означает, что Турбо Ассемблер мо- жет определить, что можно использовать различные инструкции более эффективно, чем вы это делаете. Например, в некоторых случаях можно заменить инструкцию 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 также расширены таким образом, чтобы расширить их возможности и облег- чить использование. Они обсуждаются в следующих разделах.