В FASM'е есть возможность использовать высокоуровневый синтаксис типа .if, .while, .until (ну, как в MASM'е), но это все рассчитано на одно сравнение, например: .if eax<>ebx. В MASM'е же можно делать несколько сравнений. Предлагаю попытать себя в реализации этого на FASM'е. Код (Text): macro .while [arg] { common local ..while __WHILE equ ..while local ..endw __ENDW equ ..endw __WHILE: hehe __ENDW,arg ;;;;;вместо JCOND __ENDW,arg } macro hehe label,[cond] { common match =COND a1&&a2,COND cond \{ JCOND label,a1 JCOND label,a2 \} match =COND a1||a2,COND cond \{ local ..cond1 local ..cond2 JCOND ..cond2,a1 jmp ..cond1 ..cond2: JCOND label,a2 ..cond1: \} restore COND } macro JCOND label,[cond] { common match =COND v1>==v2, COND cond \{ cmp v1,v2 jb label COND equ \} match =COND v1<==v2, COND cond \{ cmp v1,v2 ja label COND equ \} match =COND v1==v2, COND cond \{ cmp v1,v2 jne label COND equ \} match =COND v1<>v2, COND cond \{ cmp v1,v2 je label COND equ \} match =COND v1>v2, COND cond \{ cmp v1,v2 jbe label COND equ \} match =COND v1<v2, COND cond \{ cmp v1,v2 jae label COND equ \} match =COND v1=,c=,v2, COND cond \{ cmp v1,v2 jn\#c label COND equ \} match =COND v, COND cond \{ cmp v,0 je label COND equ \} restore COND } Ну, вот, типа макрос хехе дорабатывать нужно (ТОЛЬКО 2 сравнения сейчас возможны).
Ах, да. Это я писал про последнюю версию, которая сейчас еще в разработке, но доступна на сайте. Там еще помимо этго много добавилось.
Я как-то делал библу HLL макросов, ещё для старых версий где не было match (сейчас многие вещи намного проще). Долго думал, но решил не делать IF (сделал только самый примитивный вариант). Причина - сложно сгененрировать оптимальный код. Условные переходы - это традиционый конёк ассемблера, там где компилятор msvc поставит 2 Jcc, на чистом асме зачастую достаточно одного. А вот если использовать множественные вложенные .if как в masm - будут все пять ( А вообще народ почему-то не сильно макросы любит. Как я понял, не доверяют им. Да я и сам чужими пользуюсь только если понимаю, что и почему они делают.
Не знаю это Privalov прикалывается что ли что НЕ РАВНО у него как в delphi, когда нормальные люди привыкли к !=
Asterix Privalov не виноват, что Borland превратило нормальный язык программирования в "поднос" для Оракула.
Privalov на pascal писал сначала, пока не заметил, что использует только встроенный ассемблер. и написал свой да и любой асм по синтаксису больше на паскаль похож, чем на си. только скобочек нет. ЗЫ: С-- поддерживает обе формы записи: <> и !=
S_T_A_S_ Да я макросами чужими тоже стараюсь не пользоваться. Наветное это потому, что не знаешь насколько там код оптимизирован. Ессно. Ведь в фасме это макросы, а в масме - нет. Сложно макросы оптимизировать. PS Если Вы знаток макросов, объясните мне макрос JCOND, что-то я не все понял.
В масме тоже вроде никакой оптимизации не делается, в отличае от hll компиляторов. А что непонятно про JCOND ? match сравнивает первый аргумент макроса с "шаблоном" (типа v1>v2) если совпадает, то выполняется соотв. блок.