как сделать subj по красивей? Сейчас по тупому: Код (Text): ;eax=0 .if eax==[ne_lc] CP edi, edx, Z, @@j_end .else CP edi, edx, NZ, @@j_end .endif
пока придумал так (портит регистры ebx, ecx, но в данном случае он не нужен): Код (Text): ;eax=0 mov ecx, edi sub ecx, edx mov ebx, ecx or ecx, [ne_lc] jz @@j_end cmp eax, [ne_lc] jz @@F test ebx, ebx jnz @@j_end @@:
Не понял твой вопрос, тебе надо поменять флаг ZF? Если да, то, например, так: Установить флаг ZF: cmp reg, reg Сбросить флаг ZF: Например, or esp, esp
самый первый пример поменялся на Код (Text): ;PD [ne_lc]=0/-1 cmp edi, edx setnz cl xor cl, PB [ne_lc] and ecx, 1 jz @@j_end
Zufyxe Портит другие флаги... yureckor Ты бы объяснил толком, что именно требуется (только без HLA-макросов).
Да собсно проблема разрешилась. Что требовалось см. 1-ый пост, т.е. необходимо сверить edi и edx с учетом DWORD'а [ne_lc] (0 или -1) Ну и в одном случае перейти если они равны, в другом- если не равны. На Спеке я раньше такое решал самоизменяющимся кодом: обычно переменных было дохрена, а переходов еще раза в 4 больше. Сперва все настраивал (менял JP Z / JP NZ или JP C / JP NC) а потом запускал.