Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / Турбо Ассемблер / Использование Турбо Ассемблера /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Расширенные инструкции - Программирование от RIN.RU
Расширенные инструкции






Турбо Ассемблер распознает все стандартные мнемоники инструкций Intel, применимые к текущему выбранному процессору. Данная глава представляет собой обзор этих инструкций. Подробный перечень данных инструкций вы можете найти в кратком справочном руководстве.


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


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


LEA AX,lval


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


MOV AX,OFFSET lval


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


Директивы эффективной генерации кода
Директива Значение
SMARTРазрешает генерацию эффективного кода.
NOSMART Запрещает генерацию эффективного кода.



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


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


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


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

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

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




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


Расширенные инструкции перехода


Условные переходы, такие как JC или JE в процессорах 8086, 80186 и 80286 могут быть только ближними (NAER), то есть переход выполняется в границах сегмента и на расстояние -128 байт +127 байт относительно текущего адреса. Это ограничение действует и для условных инструкций цикла, таких как JCXZ или LOOP (на всех процессорах фирмы Intel).


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


JC xxx


в инструкции:


JNC temptag
JMP xxx


Вы можете разрешить данную дополнительную последовательность переходов в помощью директивы JUMPS, и запретить ее директивой NOJUMPS. По умолчанию Турбо Ассемблер не генерирует это средство.


Когда вы указывает директиву JUMPS, Турбо Ассемблер резервирует достаточно места для дополнительных последовательностей перехода во всех условных переходах вперед. Когда определяется фактическое расстояние перехода вперед, дополнительная последовательность может не понадобиться. Когда это происходит, Турбо Ассемблер для заполнения лишнего пространства генерирует инструкции NOP.


Чтобы избежать дополнительных инструкций NOP, вы можете:


  • использовать переопределение условных переходов, диапазон которых вам известен, например:


    JC SHORT abc
    ADD ax,ax
    abc:


  • задать параметр командной строки /m (подробнее о нем рассказывается в здесь ).




Вперед  >>>
 1  2  3  4  5  6 


 8  Комментарии к статье  8 8  Обсудить в чате

8  В тему

Начало работы на Турбо Ассемблере

Использование директив и параметров

Общие принципы программирования

Объектно-ориентированное программирование

Использование выражений и значений идентификаторов

Директивы выбора процессора

Использование моделей памяти программы и сегментации

Определение типов данных

Задание и использование счетчика адреса

Описание процедур

Управление областью действия идентификаторов

Определение данных

Использование макрокоманд

Использование условных директив

Интерфейс с компоновщиком

Генерация листинга

Интерфейс Турбо Ассемблера и Borland C++

Интерфейс Турбо Ассемблера с Турбо Паскалем

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь