$ nasm -v NASM version 2.15rc0 compiled on Oct 10 2019 $ cat test.asm %idefine d dword %define _1digits_nocheck(d) (((d)% 10)+'0') %xdefine _1digits(d) (!!(d/10)*(1<<32)+ _1digits_nocheck(d)) db _1digits(8) $ nasm test.asm test.asm:6: error: expression syntax error $ nasm -Ls -Lp -l test.lst test.asm test.asm:6: error: expression syntax error $ cat test.lst 0 ;;; %define __?FILE?__ 0 ;;; %define __?LINE?__ 0 ;;; %define __?BITS?__ 0 ;;; %define __?PTR?__ 0 ;;; %define __?PASS?__ 1 0 ;;; %define __?SECT?__ 0 ;;; %defalias __SECT__ __?SECT?__ 0 ;;; %define __?SECTALIGN_ALIGN_UPDATES_SECTION?__ 1 0 ;;; %defalias __SECTALIGN_ALIGN_UPDATES_SECTION__ __?SECTALIGN_ALIGN_UPDATES_SECTION?__ 0 ;;; %define __?FLOAT_DAZ?__ nodaz 0 ;;; %define __?FLOAT_ROUND?__ near 0 ;;; %define __?FLOAT?__ __?FLOAT_DAZ?__,__?FLOAT_ROUND?__ 0 ;;; %defalias __FLOAT_DAZ__ __?FLOAT_DAZ?__ 0 ;;; %defalias __FLOAT_ROUND__ __?FLOAT_ROUND?__ 0 ;;; %defalias __FLOAT__ __?FLOAT?__ 0 ;;; %defalias __NASM_MAJOR__ __?NASM_MAJOR?__ 0 ;;; %defalias __NASM_MINOR__ __?NASM_MINOR?__ 0 ;;; %defalias __NASM_SUBMINOR__ __?NASM_SUBMINOR?__ 0 ;;; %defalias __NASM_PATCHLEVEL__ __?NASM_PATCHLEVEL?__ 0 ;;; %defalias __NASM_SNAPSHOT__ __?NASM_SNAPSHOT?__ 0 ;;; %defalias __NASM_VERSION_ID__ __?NASM_VERSION_ID?__ 0 ;;; %defalias __NASM_VER__ __?NASM_VER?__ 0 ;;; %defalias __OUTPUT_FORMAT__ __?OUTPUT_FORMAT?__ 0 ;;; %defalias __DEBUG_FORMAT__ __?DEBUG_FORMAT?__ 0 ;;; %defalias __DATE__ __?DATE?__ 0 ;;; %defalias __DATE_NUM__ __?DATE_NUM?__ 0 ;;; %defalias __TIME__ __?TIME?__ 0 ;;; %defalias __TIME_NUM__ __?TIME_NUM?__ 0 ;;; %defalias __UTC_DATE__ __?UTC_DATE?__ 0 ;;; %defalias __UTC_DATE_NUM__ __?UTC_DATE_NUM?__ 0 ;;; %defalias __UTC_TIME__ __?UTC_TIME?__ 0 ;;; %defalias __UTC_TIME_NUM__ __?UTC_TIME_NUM?__ 0 ;;; %defalias __POSIX_TIME__ __?POSIX_TIME?__ 0 ;;; %defalias __FILE__ __?FILE?__ 0 ;;; %defalias __LINE__ __?LINE?__ 0 ;;; %defalias __BITS__ __?BITS?__ 0 ;;; %defalias __PTR__ __?PTR?__ 0 ;;; %defalias __PASS__ __?PASS?__ 0 ;;; %idefine __?infinity?__ %? 0 ;;; %idefine __?nan?__ %? 0 ;;; %idefine __?qnan?__ %? 0 ;;; %idefine __?snan?__ %? 0 ;;; %idefine __?float8?__ %? 0 ;;; %idefine __?float16?__ %? 0 ;;; %idefine __?float32?__ %? 0 ;;; %idefine __?float64?__ %? 0 ;;; %idefine __?float80m?__ %? 0 ;;; %idefine __?float80e?__ %? 0 ;;; %idefine __?float128l?__ %? 0 ;;; %idefine __?float128h?__ %? 0 ;;; %idefine __?utf16?__ %? 0 ;;; %idefine __?utf16le?__ %? 0 ;;; %idefine __?utf16be?__ %? 0 ;;; %idefine __?utf32?__ %? 0 ;;; %idefine __?utf32le?__ %? 0 ;;; %idefine __?utf32be?__ %? 0 ;;; %idefine __?ilog2e?__ %? 0 ;;; %idefine __?ilog2w?__ %? 0 ;;; %idefine __?ilog2f?__ %? 0 ;;; %idefine __?ilog2c?__ %? 0 ;;; %idefalias __infinity__ __?infinity?__ 0 ;;; %idefalias __nan__ __?nan?__ 0 ;;; %idefalias __qnan__ __?qnan?__ 0 ;;; %idefalias __snan__ __?snan?__ 0 ;;; %idefalias __float8__ __?float8?__ 0 ;;; %idefalias __float16__ __?float16?__ 0 ;;; %idefalias __float32__ __?float32?__ 0 ;;; %idefalias __float64__ __?float64?__ 0 ;;; %idefalias __float80m__ __?float80m?__ 0 ;;; %idefalias __float80e__ __?float80e?__ 0 ;;; %idefalias __float128l__ __?float128l?__ 0 ;;; %idefalias __float128h__ __?float128h?__ 0 ;;; %idefalias __utf16__ __?utf16?__ 0 ;;; %idefalias __utf16le__ __?utf16le?__ 0 ;;; %idefalias __utf16be__ __?utf16be?__ 0 ;;; %idefalias __utf32__ __?utf32?__ 0 ;;; %idefalias __utf32le__ __?utf32le?__ 0 ;;; %idefalias __utf32be__ __?utf32be?__ 0 ;;; %idefalias __ilog2e__ __?ilog2e?__ 0 ;;; %idefalias __ilog2w__ __?ilog2w?__ 0 ;;; %idefalias __ilog2f__ __?ilog2f?__ 0 ;;; %idefalias __ilog2c__ __?ilog2c?__ 0 ;;; %define __?NASM_MAJOR?__ 2 0 ;;; %define __?NASM_MINOR?__ 14 0 ;;; %define __?NASM_SUBMINOR?__ 99 0 ;;; %define __?NASM_PATCHLEVEL?__ 90 0 ;;; %define __?NASM_VERSION_ID?__ 0020E635Ah 0 ;;; %define __?NASM_VER?__ "2.15rc0" 0 ;;; %define __?SECT?__ [section .text] 0 ;;; %define __?DATE?__ "2019-10-15" 0 ;;; %define __?DATE_NUM?__ 20191015 0 ;;; %define __?TIME?__ "14:37:07" 0 ;;; %define __?TIME_NUM?__ 143707 0 ;;; %define __?UTC_DATE?__ "2019-10-15" 0 ;;; %define __?UTC_DATE_NUM?__ 20191015 0 ;;; %define __?UTC_TIME?__ "12:37:07" 0 ;;; %define __?UTC_TIME_NUM?__ 123707 0 ;;; %define __?POSIX_TIME?__ 1571143027 0 ;;; %define __?OUTPUT_FORMAT?__ bin 1 %idefine d dword 1 ;;; %idefine d dword 2 3 %define _1digits_nocheck(d) (((d)% 10)+'0') 3 ;;; %define _1digits_nocheck(d) (((d)% 10)+'0') 4 %xdefine _1digits(d) (!!(d/10)*(1<<32)+ _1digits_nocheck(d)) 4 ;;; %define _1digits(d) (!!(dword/10)*(1<<32)+ (((dword)% 10)+'0')) 5 6 db _1digits(8) 6 ****************** error: expression syntax error $ cat test2.asm %idefine d dword %define _1digits_nocheck(d) (((d)% 10)+'0') %define _1digits(d) (!!(d/10)*(1<<32)+ _1digits_nocheck(d)) db _1digits(8) $ nasm test2.asm $ nasm -Ls -Lp -l test2.lst test2.asm $ cat test2.lst 0 ;;; %define __?FILE?__ 0 ;;; %define __?LINE?__ 0 ;;; %define __?BITS?__ 0 ;;; %define __?PTR?__ 0 ;;; %define __?PASS?__ 2 0 ;;; %define __?SECT?__ 0 ;;; %defalias __SECT__ __?SECT?__ 0 ;;; %define __?SECTALIGN_ALIGN_UPDATES_SECTION?__ 1 0 ;;; %defalias __SECTALIGN_ALIGN_UPDATES_SECTION__ __?SECTALIGN_ALIGN_UPDATES_SECTION?__ 0 ;;; %define __?FLOAT_DAZ?__ nodaz 0 ;;; %define __?FLOAT_ROUND?__ near 0 ;;; %define __?FLOAT?__ __?FLOAT_DAZ?__,__?FLOAT_ROUND?__ 0 ;;; %defalias __FLOAT_DAZ__ __?FLOAT_DAZ?__ 0 ;;; %defalias __FLOAT_ROUND__ __?FLOAT_ROUND?__ 0 ;;; %defalias __FLOAT__ __?FLOAT?__ 0 ;;; %defalias __NASM_MAJOR__ __?NASM_MAJOR?__ 0 ;;; %defalias __NASM_MINOR__ __?NASM_MINOR?__ 0 ;;; %defalias __NASM_SUBMINOR__ __?NASM_SUBMINOR?__ 0 ;;; %defalias __NASM_PATCHLEVEL__ __?NASM_PATCHLEVEL?__ 0 ;;; %defalias __NASM_SNAPSHOT__ __?NASM_SNAPSHOT?__ 0 ;;; %defalias __NASM_VERSION_ID__ __?NASM_VERSION_ID?__ 0 ;;; %defalias __NASM_VER__ __?NASM_VER?__ 0 ;;; %defalias __OUTPUT_FORMAT__ __?OUTPUT_FORMAT?__ 0 ;;; %defalias __DEBUG_FORMAT__ __?DEBUG_FORMAT?__ 0 ;;; %defalias __DATE__ __?DATE?__ 0 ;;; %defalias __DATE_NUM__ __?DATE_NUM?__ 0 ;;; %defalias __TIME__ __?TIME?__ 0 ;;; %defalias __TIME_NUM__ __?TIME_NUM?__ 0 ;;; %defalias __UTC_DATE__ __?UTC_DATE?__ 0 ;;; %defalias __UTC_DATE_NUM__ __?UTC_DATE_NUM?__ 0 ;;; %defalias __UTC_TIME__ __?UTC_TIME?__ 0 ;;; %defalias __UTC_TIME_NUM__ __?UTC_TIME_NUM?__ 0 ;;; %defalias __POSIX_TIME__ __?POSIX_TIME?__ 0 ;;; %defalias __FILE__ __?FILE?__ 0 ;;; %defalias __LINE__ __?LINE?__ 0 ;;; %defalias __BITS__ __?BITS?__ 0 ;;; %defalias __PTR__ __?PTR?__ 0 ;;; %defalias __PASS__ __?PASS?__ 0 ;;; %idefine __?infinity?__ %? 0 ;;; %idefine __?nan?__ %? 0 ;;; %idefine __?qnan?__ %? 0 ;;; %idefine __?snan?__ %? 0 ;;; %idefine __?float8?__ %? 0 ;;; %idefine __?float16?__ %? 0 ;;; %idefine __?float32?__ %? 0 ;;; %idefine __?float64?__ %? 0 ;;; %idefine __?float80m?__ %? 0 ;;; %idefine __?float80e?__ %? 0 ;;; %idefine __?float128l?__ %? 0 ;;; %idefine __?float128h?__ %? 0 ;;; %idefine __?utf16?__ %? 0 ;;; %idefine __?utf16le?__ %? 0 ;;; %idefine __?utf16be?__ %? 0 ;;; %idefine __?utf32?__ %? 0 ;;; %idefine __?utf32le?__ %? 0 ;;; %idefine __?utf32be?__ %? 0 ;;; %idefine __?ilog2e?__ %? 0 ;;; %idefine __?ilog2w?__ %? 0 ;;; %idefine __?ilog2f?__ %? 0 ;;; %idefine __?ilog2c?__ %? 0 ;;; %idefalias __infinity__ __?infinity?__ 0 ;;; %idefalias __nan__ __?nan?__ 0 ;;; %idefalias __qnan__ __?qnan?__ 0 ;;; %idefalias __snan__ __?snan?__ 0 ;;; %idefalias __float8__ __?float8?__ 0 ;;; %idefalias __float16__ __?float16?__ 0 ;;; %idefalias __float32__ __?float32?__ 0 ;;; %idefalias __float64__ __?float64?__ 0 ;;; %idefalias __float80m__ __?float80m?__ 0 ;;; %idefalias __float80e__ __?float80e?__ 0 ;;; %idefalias __float128l__ __?float128l?__ 0 ;;; %idefalias __float128h__ __?float128h?__ 0 ;;; %idefalias __utf16__ __?utf16?__ 0 ;;; %idefalias __utf16le__ __?utf16le?__ 0 ;;; %idefalias __utf16be__ __?utf16be?__ 0 ;;; %idefalias __utf32__ __?utf32?__ 0 ;;; %idefalias __utf32le__ __?utf32le?__ 0 ;;; %idefalias __utf32be__ __?utf32be?__ 0 ;;; %idefalias __ilog2e__ __?ilog2e?__ 0 ;;; %idefalias __ilog2w__ __?ilog2w?__ 0 ;;; %idefalias __ilog2f__ __?ilog2f?__ 0 ;;; %idefalias __ilog2c__ __?ilog2c?__ 0 ;;; %define __?NASM_MAJOR?__ 2 0 ;;; %define __?NASM_MINOR?__ 14 0 ;;; %define __?NASM_SUBMINOR?__ 99 0 ;;; %define __?NASM_PATCHLEVEL?__ 90 0 ;;; %define __?NASM_VERSION_ID?__ 0020E635Ah 0 ;;; %define __?NASM_VER?__ "2.15rc0" 0 ;;; %define __?SECT?__ [section .text] 0 ;;; %define __?DATE?__ "2019-10-15" 0 ;;; %define __?DATE_NUM?__ 20191015 0 ;;; %define __?TIME?__ "14:37:45" 0 ;;; %define __?TIME_NUM?__ 143745 0 ;;; %define __?UTC_DATE?__ "2019-10-15" 0 ;;; %define __?UTC_DATE_NUM?__ 20191015 0 ;;; %define __?UTC_TIME?__ "12:37:45" 0 ;;; %define __?UTC_TIME_NUM?__ 123745 0 ;;; %define __?POSIX_TIME?__ 1571143065 0 ;;; %define __?OUTPUT_FORMAT?__ bin 1 %idefine d dword 1 ;;; %idefine d dword 2 3 %define _1digits_nocheck(d) (((d)% 10)+'0') 3 ;;; %define _1digits_nocheck(d) (((d)% 10)+'0') 4 %define _1digits(d) (!!(d/10)*(1<<32)+ _1digits_nocheck(d)) 4 ;;; %define _1digits(d) (!!(d/10)*(1<<32)+ _1digits_nocheck(d)) 5 6 00000000 38 db _1digits(8) $ oldnasm -v NASM version 2.14.03rc2 compiled on Aug 31 2019 $ oldnasm test.asm $ oldnasm test2.asm $ /usr/bin/nasm -v NASM version 2.12.01 $ /usr/bin/nasm test.asm $ /usr/bin/nasm test2.asm $