From what I have understood, there is no such thing as "movzx rax, eax"
"and rax, 0FFFFFFFFh" Should work, So should "and eax, 0FFFFFFFFh" (silly as it may be). So when writing code that is 32 or 64 bit compatible, "and __AX, 0FFFFFFFFh"
How about adding a macro to nasmx.inc that will overwrite "and" and check to make sure that if %2 is 0FFFFFFFFh and __BITS__ is set to 32bit nothing is written and the code is optimized. However, if we are in 64bit mode, it will let you "and rax, 0FFFFFFFFh."
My excuse to not write the macro: I've worked with nasm for just the afternoon in between customers at work. Slowly getting some knowledge of the behind the scene's stuff, but some of it (nasmx macro's) is a bit more than I'm interested in learning at the moment. I wanted to switch to win64asm and masm wasn't going to cut it.