![]() |
|
![]() ![]() ![]() |
|
Ak47black |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2205 Регистрация: 2.12.2005 Репутация: нет Всего: 0 |
Здравствуйте.
Обдумываю как тут лучше сделать следующий код на чистом языке ассемблера Например есть такой код
хочу сделать без деректив условной трансляции. Возможно-ли както уложится в один условный переход? |
|||
|
||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: нет Всего: 146 |
|
|||
|
||||
Mikl_ |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 9.11.2007 Репутация: 6 Всего: 14 |
Ak47black, можно вообще без условных переходов
![]() Это сообщение отредактировал(а) Mikl_ - 7.12.2009, 06:28 |
|||
|
||||
Mikl_ |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 9.11.2007 Репутация: 6 Всего: 14 |
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 Директивы компиляции по условию использовались, например, при написании в рамках одной программы двух версии программы: демонстрационной (облегченной) и коммерческой (полной), или при выдачи сообщений на разных языках (английская и русская версии одной программы) и т.п.
![]() Это сообщение отредактировал(а) Mikl_ - 3.12.2009, 11:07 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Asm: Общие вопросы" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |