| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Asm: Общие вопросы > Совместить две логические операции |
| Автор: Ak47black 29.11.2009, 14:58 | ||
| Здравствуйте. Обдумываю как тут лучше сделать следующий код на чистом языке ассемблера Например есть такой код
хочу сделать без деректив условной трансляции. Возможно-ли както уложится в один условный переход? |
| Автор: 586 29.11.2009, 17:18 | ||
|
| Автор: Mikl_ 2.12.2009, 04:34 | ||
Ak47black, можно вообще без условных переходов
|
| Автор: Mikl_ 2.12.2009, 15:08 | ||
| Ak47black, только .IF ax!=3 && bx==5 и .ENDIF это не диррективы условной трансляции, так как транслятор не может знать ЧТО окажется в регистрах AX и BX к тому моменту, когда очередь дойдет до этого кода .IF и .ENDIF это т.н. "высокоуровневый синтаксис" ассемблера который "переведется" в ассемблерные команды CMP/JE/JNE. Диррективы условной трансляции позволяют проанализировать определенные условия в ходе генерации макрорасширения и, при необходимости, изменить этот процесс; директивы генерации ошибок по условию также контролируют ход генерации макрорасширения с целью генерации или обнаружения определенных ситуаций, которые могут интерпретироваться как ошибочные. С этими директивами применяются директивы управления процессом генерации макрорасширений EXITM и GOTO. Директива EXITM не имеет операндов она немедленно прекращает процесс генерации макрорасширения, начиная с того места, где она встретилась в макроопределении. Директива GOTO имя_метки переводит процесс генерации макроопределения в другое место, прекращая последовательное разворачивание строк макроопределения. Метка, на которую передается управление, имеет специальный формат: :имя_метки Директивы компиляции по условию предназначены для организации выборочной трансляции фрагментов программного кода. Такая выборочная компиляция означает, что в макрорасширение включаются не все строки макроопределения, а только те, которые удовлетворяют определенным условиям. То, какие конкретно условия должны быть проверены, определяется типом условной директивы. Всего имеется 10 типов условных директив компиляции. Их попарно объединяют в четыре группы: Директивы IF и IFE - условная трансляция по результату вычисления логического выражения. Директивы IFDEF и IFNDEF - условная трансляция по факту определения символического имени. Директивы IFB и IFNB - условная трансляция по факту определения фактического аргумента при вызове макрокоманды. Директивы IFIDN, IFIDNI, IFDIF и IFDIFI - условная трансляция по результату сравнения строк символов. Условные директивы компиляции имеют общий синтаксис и применяются в составе синтаксических конструкции типа: IFxxx логическое_выражение_или_аргументы фрагмент_программы_1 ELSE фрагмент_программы_2 ENDIF Директивы компиляции по условию использовались, например, при написании в рамках одной программы двух версии программы: демонстрационной (облегченной) и коммерческой (полной), или при выдачи сообщений на разных языках (английская и русская версии одной программы) и т.п.
|