I see in nasm.c:90 is defined global int maxbits = 0;. Some of the output formats seems to be changing this to 64 like (filenames) outbin.c, outcoff.c, outelf64.c, outelf32x.c. In the nasm.c:2099 static int get_bits(char *value); there is the check if passed argument (to the bits statement) is not equal to maxbits and if so return error. So for win32 format giving bits 64 it checks if (64 != 0) { // error: [...] not support 64-bit code }.