%imacro loopmnem 3.nolist %ifidni %2, w %1 %3, cx %elifidni %2, d %1 %3, ecx %else %error Invalid macro use %endif %endmacro %idefine loopd loopmnem loop,d, %idefine loopw loopmnem loop,w, %idefine loopzd loopmnem loopz,d, %idefine loopzw loopmnem loopz,w, %idefine looped loopmnem loope,d, %idefine loopew loopmnem loope,w, %idefine loopnzd loopmnem loopnz,d, %idefine loopnzw loopmnem loopnz,w, %idefine loopned loopmnem loopne,d, %idefine loopnew loopmnem loopne,w, cpu 386 org 256 start: loop end loopw end loopd end loop end, cx loop end, ecx %ifdef ERROR loopw end, cx loopw end, ecx loopd end, cx loopd end, ecx %endif loopz end loopzw end loopzd end loopz end, cx loopz end, ecx %ifdef ERROR loopzw end, cx loopzw end, ecx loopzd end, cx loopzd end, ecx %endif loope end loopew end looped end loope end, cx loope end, ecx %ifdef ERROR loopew end, cx loopew end, ecx looped end, cx looped end, ecx %endif loopnz end loopnzw end loopnzd end loopnz end, cx loopnz end, ecx %ifdef ERROR loopnzw end, cx loopnzw end, ecx loopnzd end, cx loopnzd end, ecx %endif loopne end loopnew end loopned end loopne end, cx loopne end, ecx %ifdef ERROR loopnew end, cx loopnew end, ecx loopned end, cx loopned end, ecx %endif align 64 end: mov ax, 4C00h int 21h