%imacro wlcalc 1-2.nolist global wlcalc_%1 wlcalc_%1: %2 %endmacro section code group datagroup data1 data2 section data1 align=16 global label1 label1: times 32 db "1" section data2 align=16 global label2 label2: times 16 db "2" section data_end align=16 section code dw label1 dw label2 dw label1 wrt data1 dw label2 wrt data1 dw label1 wrt data2 dw label2 wrt data2 dw label1 wrt datagroup dw label2 wrt datagroup wlcalc word_ext_label1 dw 0 wlcalc word_ext_label2 dw 0 wlcalc word_wrt_data1_ext_label1 dw 0 wlcalc word_wrt_data1_ext_label2 dw 0 wlcalc word_wrt_data2_ext_label1 dw 0 wlcalc word_wrt_data2_ext_label2 dw 0 wlcalc word_wrt_datagroup_ext_label1 dw 0 wlcalc word_wrt_datagroup_ext_label2 dw 0 wlcalc word_wrt_@@data_end@_ext_label1 dw 0 wlcalc word_wrt_@@data_end@_ext_label2 dw 0 ..start: mov ax, 0 wlcalc word_seg_data1, equ $ - 2 mov ax, 0 wlcalc word_seg_data2, equ $ - 2 mov ax, 0 wlcalc word_seg_datagroup, equ $ - 2 mov ax, 0 wlcalc word_segrel_data1, equ $ - 2 mov ax, 0 wlcalc word_segrel_data2, equ $ - 2 mov ax, 0 wlcalc word_segrel_datagroup, equ $ - 2 mov ax, 4C00h int 21h