$ nasm -v NASM version 2.15rc0 compiled on Aug 21 2019 $ ./tes.sh 0 nasm -DREPEAT=1 -DPARAM2 nasm test.asm -DP1 -DREPEAT=1 -DPARAM2 test.asm:38: warning: case p1 [-w+user] nasm test.asm -DP2 -DREPEAT=1 -DPARAM2 test.asm:28: warning: case p2 [-w+user] test.asm:69: warning: multi-line macro `call' exists, but not taking 1 parameter [-w+macro-params-multi] test.asm:69: warning: multi-line macro `call' exists, but not taking 1 parameter [-w+macro-params-multi] test.asm:69: warning: multi-line macro `call' exists, but not taking 1 parameter [-w+macro-params-multi] nasm test.asm -DP3 -DREPEAT=1 -DPARAM2 test.asm:15: warning: case p3 [-w+user] test.asm:69: warning: multi-line macro `call' exists, but not taking 1 parameter [-w+macro-params-multi] test.asm:69: warning: multi-line macro `call' exists, but not taking 1 parameter [-w+macro-params-multi] test.asm:69: warning: multi-line macro `call' exists, but not taking 1 parameter [-w+macro-params-multi] nasm test.asm -DP4 -DREPEAT=1 -DPARAM2 test.asm:2: warning: case p4 [-w+user] $ ./tes.sh 1 nasm -DPARAM2 -w-macro-params time nasm test.asm -DP1 -DPARAM2 -w-macro-params test.asm:38: warning: case p1 [-w+user] real 0m10.176s user 0m9.349s sys 0m0.797s time nasm test.asm -DP2 -DPARAM2 -w-macro-params test.asm:28: warning: case p2 [-w+user] real 0m5.739s user 0m5.460s sys 0m0.221s time nasm test.asm -DP3 -DPARAM2 -w-macro-params test.asm:15: warning: case p3 [-w+user] real 0m7.264s user 0m6.996s sys 0m0.254s time nasm test.asm -DP4 -DPARAM2 -w-macro-params test.asm:2: warning: case p4 [-w+user] real 0m7.427s user 0m7.133s sys 0m0.269s $ oldnasm -v NASM version 2.15rc0 compiled on Dec 28 2018 $ ./tes.sh 0 oldnasm -DREPEAT=1 -DPARAM2 oldnasm test.asm -DP1 -DREPEAT=1 -DPARAM2 test.asm:38: warning: case p1 [-w+user] oldnasm test.asm -DP2 -DREPEAT=1 -DPARAM2 test.asm:28: warning: case p2 [-w+user] test.asm:69: warning: (call:1) macro `call' exists, but not taking 1 parameters [-w+macro-params] test.asm:69: warning: macro `call' exists, but not taking 1 parameters [-w+macro-params] test.asm:69: warning: macro `call' exists, but not taking 1 parameters [-w+macro-params] test.asm:69: warning: macro `call' exists, but not taking 1 parameters [-w+macro-params] oldnasm test.asm -DP3 -DREPEAT=1 -DPARAM2 test.asm:15: warning: case p3 [-w+user] oldnasm test.asm -DP4 -DREPEAT=1 -DPARAM2 test.asm:2: warning: case p4 [-w+user] $ ./tes.sh 1 oldnasm -DPARAM2 -w-macro-params time oldnasm test.asm -DP1 -DPARAM2 -w-macro-params test.asm:38: warning: case p1 [-w+user] real 0m9.304s user 0m8.563s sys 0m0.728s time oldnasm test.asm -DP2 -DPARAM2 -w-macro-params test.asm:28: warning: case p2 [-w+user] real 0m4.961s user 0m4.743s sys 0m0.203s time oldnasm test.asm -DP3 -DPARAM2 -w-macro-params test.asm:15: warning: case p3 [-w+user] real 0m5.905s user 0m5.690s sys 0m0.191s time oldnasm test.asm -DP4 -DPARAM2 -w-macro-params test.asm:2: warning: case p4 [-w+user] real 0m5.887s user 0m5.700s sys 0m0.181s $ /usr/bin/nasm -v NASM version 2.12.01 $ ./tes.sh 0 /usr/bin/nasm -DREPEAT=1 -DPARAM2 /usr/bin/nasm test.asm -DP1 -DREPEAT=1 -DPARAM2 /usr/bin/nasm test.asm -DP2 -DREPEAT=1 -DPARAM2 test.asm:69: warning: (call:1) macro `call' exists, but not taking 1 parameters test.asm:69: warning: macro `call' exists, but not taking 1 parameters test.asm:69: warning: macro `call' exists, but not taking 1 parameters test.asm:69: warning: macro `call' exists, but not taking 1 parameters /usr/bin/nasm test.asm -DP3 -DREPEAT=1 -DPARAM2 /usr/bin/nasm test.asm -DP4 -DREPEAT=1 -DPARAM2 $ ./tes.sh 1 /usr/bin/nasm -DPARAM2 -w-macro-params time /usr/bin/nasm test.asm -DP1 -DPARAM2 -w-macro-params real 0m8.540s user 0m8.510s sys 0m0.007s time /usr/bin/nasm test.asm -DP2 -DPARAM2 -w-macro-params real 0m4.344s user 0m4.329s sys 0m0.005s time /usr/bin/nasm test.asm -DP3 -DPARAM2 -w-macro-params real 0m6.357s user 0m6.337s sys 0m0.008s time /usr/bin/nasm test.asm -DP4 -DPARAM2 -w-macro-params real 0m5.912s user 0m5.897s sys 0m0.007s $ cat tes.sh #! /bin/bash usetime="$1" shift asm="$1" shift if (( "$usetime" )); then { echo time "$asm" test.asm -DP1 "$@" time "$asm" test.asm -DP1 "$@" echo time "$asm" test.asm -DP2 "$@" time "$asm" test.asm -DP2 "$@" echo time "$asm" test.asm -DP3 "$@" time "$asm" test.asm -DP3 "$@" echo time "$asm" test.asm -DP4 "$@" time "$asm" test.asm -DP4 "$@" } fi if (( "$usetime" == 0 )); then { echo "$asm" test.asm -DP1 "$@" "$asm" test.asm -DP1 "$@" echo "$asm" test.asm -DP2 "$@" "$asm" test.asm -DP2 "$@" echo "$asm" test.asm -DP3 "$@" "$asm" test.asm -DP3 "$@" echo "$asm" test.asm -DP4 "$@" "$asm" test.asm -DP4 "$@" } fi $ cat test.asm %ifdef P4 %warning case p4 %imacro call 1.nolist %? %1 %endmacro ; Call with word parameters behind opcode %imacro call 2-*.nolist %? %1 %rep %0 - 1 %rotate 1 dw %1 %endrep %endmacro %elifdef P3 %warning case p3 ; Call with word parameters behind opcode %imacro call 2-*.nolist %? %1 %rep %0 - 1 %rotate 1 dw %1 %endrep %endmacro %imacro call 1.nolist %? %1 %endmacro %elifdef P2 %warning case p2 ; Call with word parameters behind opcode %imacro call 2-*.nolist %? %1 %rep %0 - 1 %rotate 1 dw %1 %endrep %endmacro %else %warning case p1 ; Call with word parameters behind opcode %imacro call 1-*.nolist %? %1 %rep %0 - 1 %rotate 1 dw %1 %endrep %endmacro %endif %ifndef REPEAT %assign REPEAT 100_000 %endif %ifndef PARAM1 %define PARAM1 , 26h %endif %ifndef PARAM2 %define PARAM2 , 26h %endif cpu 386 bits 32 org 0 %rep REPEAT call alpha PARAM1 call beta PARAM2 call gamma PARAM2 call delta PARAM2 %endrep alpha: nop nop nop beta: nop nop nop gamma: nop nop nop delta: nop nop nop $