Макросы поддерживают дополнительные флаги процессора (CARRY?, OVERFLOW?, PARITY?, SIGN?, ZERO?, EQUAL?, ABOVE?, ABOVE?||EQUAL?, BELOW?, BELOW?||EQUAL?, GREATER?, GREATER?||EQUAL?, LESS?, LESS?||EQUAL?, NOCARRY?, NOOVERFLOW?, NOPARITY?, NOSIGN?, NOZERO?, NOEQUAL?, NOABOVE?, NOBELOW?, NOGREATER?, NOLESS?). И позволяют использовать дополнительные команды для вычисления условий. Например: ; @IF <<or EDX, EDX>>, SIGN? ; регистр EDX < 0 ; ... ; @ELSEIF <<mov EAX, [iVAR_1]>>, <<cmp EAX, [iVAR_2]>>, GREATER?||EQUAL? ; iVAR_1 >= iVAR_2 (с учётом знака) ; ... ; @ELSEIF FLD [qVAR_3], FICOMP [iVAR_2], FSTSW AX, SAHF, ABOVE?||EQUAL? ; qVAR_3 >= iVAR_2 (с учётом знака!) ; ... ; ВНИМАНИЕ: при FPU сравнениях использовать только БЕЗЗНАКОВЫЕ флаги (ABOVE?, BELOW?) ; ... ; хотя FPU сравнение ВСЕГДА учитывает знак !!! ; @ENDIF ; Примечание в << >> обязательно заключать только команды, содержащие запятые (например: <<mov EAX, 5>>) ; - - - - - - - - - - ; mov ECX, 15 ; @REPEAT ; ... ; @BREAK @IF <<cmp EAX, -5>>, LESS? || EQUAL? ; досрочный выход если EAX <= -5 ; ... ; cmp [iVAR_1], 10 ; @UNTILCXZ ABOVE?||EQUAL? ; выход из цикла если [iVAR_1] >= 10 (unsigned) или ECX == 0 Еще есть возможность определять и разопределять локальные метки в любом месте программы - очень полезная вещь для самостоятельного построения таких конструкций как @IF ... @ELSEIF ... @ENDIF и т.д.
censored В улыбись зайдите! Там ПРЕВЕД_язык изобрели давно! Что-то вроде: #define RESPEST_STRING ... #define PREVED ... и т.д. А чем вообще Фасм не нравится? Зайдите в исходники, все что связанное с фасмом(проекты) качните и вы увидете это действительно гибкий и мощный инструмент!