(macro my-while (lambda (test . body) `(locals (loop) (label loop (with-win (jmp short loop) (seq ,test (begin ,@body))))))) (text (label loop (nop) (my-while (< eax 10) (pop ebx) (add eax ebx))) (my-while (> ecx 1000) (pop ebx) (sub ecx ebx)) (jmp short loop)) ; loop: ; 00000000 90 nop ; local loop (#1): ; 00000001 83F80A cmp eax,byte +0xa ; 00000004 7D05 jnl 0xb ; 00000006 5B pop ebx ; 00000007 01D8 add eax,ebx ; 00000009 EBF6 jmp short 0x1 ; local loop (#2): ; 0000000B 81F9E8030000 cmp ecx,0x3e8 ; 00000011 7E05 jng 0x18 ; 00000013 5B pop ebx ; 00000014 29D9 sub ecx,ebx ; 00000016 EBF3 jmp short 0xb ; 00000018 EBE6 jmp short 0x0