You could save one byte by replacing "0=" with "0<>" (well, except for the name, maybe use "0#"?):<p><pre><code> pop ax
neg ax ;sets carry flag if nonzero
sbb ax,ax
push ax
</code></pre>
And another two bytes in DOCOL:<p><pre><code> ;add ax,4
;mov si,ax
xchg ax,si
lodsw
lodsw
</code></pre>
Maybe even free up a word register to always hold the address of DOCOL, then you only need two bytes at each colon definition. If it's possible without adding any extra instructions, this should save 4 bytes in total (one stosw in COLON, the DOCOL.addr variable, one lodsw in the above version of DOCOL)