     1                                  ; File: twopass.asm
     2                                  ;
     3                                  ; Demonstrating a two-pass assembler
     4                                  
     5                                          section .data
     6 00000000 87                      x:      db      87h
     7 00000001 9214                    y:      dw      1492h
     8                                  zalias  equ $
     9 00000003 01207617                z:      dd      17762001h
    10                                  
    11                                  calc equ (x-y)*2
    12                                  x4 equ x+1
    13                                  
    14                                          section .text
    15                                          global _start
    16                                  
    17 00000000 A1[03000000]            _start: mov     eax, [zalias]
    18 00000005 668B1D[01000000]                mov     bx, [y]
    19 0000000C 668B0D[01000000]                mov     cx, [x4]
    20 00000013 6639CB                          cmp     bx, cx
    21 00000016 7514                            jne     error
    22                                  
    23 00000018 6601D8                  OK:     add     ax, bx
    24 0000001B A2[00000000]                    mov     [x], al
    25 00000020 BB00000000                      mov     ebx, 0          ; 0=normal exit
    26                                  
    27 00000025 B801000000              done:   mov     eax, 1          ; syscall number for exit
    28 0000002A CD80                            int     080h
    29                                  
    30 0000002C BB11000000              error:  mov     ebx, 17         ; abnormal exit
    31 00000031 E9EFFFFFFF                      jmp     done
    32                                  
    33                                  
