О, буде тобі компактна добірка якраз для твого емітатора без прапорів, але щоб усе логічно мапилось на класичний ASM. Ось — умовні переходи, **починаючи з найшвидших і найпоширеніших**, у стилі Delphi-подібного коду:
---
код:
// 1. ПЕРЕВІРКА НА НУЛЬ (еквівалент CMP reg, 0 → JZ/JNZ)
if eax = 0 then goto\_Label0; // JZ Label0
if eax <> 0 then goto\_Label1; // JNZ Label1
// 2. РІВНІСТЬ / НЕРІВНІСТЬ (CMP eax, ebx → JE/JNE)
if eax = ebx then goto\_Label2; // JE Label2
if eax <> ebx then goto\_Label3; // JNE Label3
// 3. ЗНАКОВІ ПОРІВНЯННЯ (signed int)
if eax < ebx then goto\_Label4; // JL (Jump if Less)
if eax > ebx then goto\_Label5; // JG (Jump if Greater)
if eax <= ebx then goto\_Label6; // JLE
if eax >= ebx then goto\_Label7; // JGE
// 4. БЕЗЗНАКОВІ ПОРІВНЯННЯ (unsigned int)
if Cardinal(eax) < Cardinal(ebx) then goto\_Label8; // JB (Jump if Below)
if Cardinal(eax) > Cardinal(ebx) then goto\_Label9; // JA (Jump if Above)
if Cardinal(eax) <= Cardinal(ebx) then goto\_Label10; // JBE
if Cardinal(eax) >= Cardinal(ebx) then goto\_Label11; // JAE
// 5. ЛОГІЧНЕ ПОРІВНЯННЯ З МАСКОЮ (наприклад, AND)
if (eax and \$0F) = 0 then goto\_Label12; // TEST eax, \$0F / JZ
if (eax and \$80) <> 0 then goto\_Label13; // TEST eax, \$80 / JNZ
// 6. ПЕРЕВІРКА НА ЗНАЧЕННЯ БІТА (bit test)
if (eax and (1 shl 7)) <> 0 then goto\_Label14; // BT eax, 7 / JC
---
Це практично всі основні варіанти для 32-бітних значень. Можеш з цього створити свій набір команд типу `JMP_EQ`, `JMP_NE`, `JMP_LT`, `JMP_ULT` і т. д.
Якщо треба — можу зробити у вигляді Delphi-макросів або процедур.
**Дяка!**