removed fasm includes
authorRalph Ronnquist <rrq@rrq.au>
Mon, 13 Jan 2025 00:43:07 +0000 (11:43 +1100)
committerRalph Ronnquist <rrq@rrq.au>
Mon, 13 Jan 2025 00:43:07 +0000 (11:43 +1100)
14 files changed:
source/assemble.inc [deleted file]
source/avx.inc [deleted file]
source/errors.inc [deleted file]
source/exprcalc.inc [deleted file]
source/exprpars.inc [deleted file]
source/formats.inc [deleted file]
source/messages.inc [deleted file]
source/parser.inc [deleted file]
source/preproce.inc [deleted file]
source/symbdump.inc [deleted file]
source/tables.inc [deleted file]
source/variable.inc [deleted file]
source/version.inc [deleted file]
source/x86_64.inc [deleted file]

diff --git a/source/assemble.inc b/source/assemble.inc
deleted file mode 100644 (file)
index 4ed969b..0000000
+++ /dev/null
@@ -1,2235 +0,0 @@
-
-; flat assembler core
-; Copyright (c) 1999-2022, Tomasz Grysztar.
-; All rights reserved.
-
-assembler:
-       xor     eax,eax
-       mov     [stub_size],eax
-       mov     [current_pass],ax
-       mov     [resolver_flags],eax
-       mov     [number_of_sections],eax
-       mov     [actual_fixups_size],eax
-      assembler_loop:
-       mov     eax,[labels_list]
-       mov     [tagged_blocks],eax
-       mov     eax,[additional_memory]
-       mov     [free_additional_memory],eax
-       mov     eax,[additional_memory_end]
-       mov     [structures_buffer],eax
-       mov     esi,[source_start]
-       mov     edi,[code_start]
-       xor     eax,eax
-       mov     dword [adjustment],eax
-       mov     dword [adjustment+4],eax
-       mov     [addressing_space],eax
-       mov     [error_line],eax
-       mov     [counter],eax
-       mov     [format_flags],eax
-       mov     [number_of_relocations],eax
-       mov     [undefined_data_end],eax
-       mov     [file_extension],eax
-       mov     [next_pass_needed],al
-       mov     [output_format],al
-       mov     [adjustment_sign],al
-       mov     [evex_mode],al
-       mov     [code_type],16
-       call    init_addressing_space
-      pass_loop:
-       call    assemble_line
-       jnc     pass_loop
-       mov     eax,[additional_memory_end]
-       cmp     eax,[structures_buffer]
-       je      pass_done
-       sub     eax,18h
-       mov     eax,[eax+4]
-       mov     [current_line],eax
-       jmp     missing_end_directive
-      pass_done:
-       call    close_pass
-       mov     eax,[labels_list]
-      check_symbols:
-       cmp     eax,[memory_end]
-       jae     symbols_checked
-       test    byte [eax+8],8
-       jz      symbol_defined_ok
-       mov     cx,[current_pass]
-       cmp     cx,[eax+18]
-       jne     symbol_defined_ok
-       test    byte [eax+8],1
-       jz      symbol_defined_ok
-       sub     cx,[eax+16]
-       cmp     cx,1
-       jne     symbol_defined_ok
-       and     byte [eax+8],not 1
-       or      [next_pass_needed],-1
-      symbol_defined_ok:
-       test    byte [eax+8],10h
-       jz      use_prediction_ok
-       mov     cx,[current_pass]
-       and     byte [eax+8],not 10h
-       test    byte [eax+8],20h
-       jnz     check_use_prediction
-       cmp     cx,[eax+18]
-       jne     use_prediction_ok
-       test    byte [eax+8],8
-       jz      use_prediction_ok
-       jmp     use_misprediction
-      check_use_prediction:
-       test    byte [eax+8],8
-       jz      use_misprediction
-       cmp     cx,[eax+18]
-       je      use_prediction_ok
-      use_misprediction:
-       or      [next_pass_needed],-1
-      use_prediction_ok:
-       test    byte [eax+8],40h
-       jz      check_next_symbol
-       and     byte [eax+8],not 40h
-       test    byte [eax+8],4
-       jnz     define_misprediction
-       mov     cx,[current_pass]
-       test    byte [eax+8],80h
-       jnz     check_define_prediction
-       cmp     cx,[eax+16]
-       jne     check_next_symbol
-       test    byte [eax+8],1
-       jz      check_next_symbol
-       jmp     define_misprediction
-      check_define_prediction:
-       test    byte [eax+8],1
-       jz      define_misprediction
-       cmp     cx,[eax+16]
-       je      check_next_symbol
-      define_misprediction:
-       or      [next_pass_needed],-1
-      check_next_symbol:
-       add     eax,LABEL_STRUCTURE_SIZE
-       jmp     check_symbols
-      symbols_checked:
-       cmp     [next_pass_needed],0
-       jne     next_pass
-       mov     eax,[error_line]
-       or      eax,eax
-       jz      assemble_ok
-       mov     [current_line],eax
-       cmp     [error],undefined_symbol
-       jne     error_confirmed
-       mov     eax,[error_info]
-       or      eax,eax
-       jz      error_confirmed
-       test    byte [eax+8],1
-       jnz     next_pass
-      error_confirmed:
-       call    error_handler
-      error_handler:
-       mov     eax,[error]
-       sub     eax,error_handler
-       add     [esp],eax
-       ret
-      next_pass:
-       inc     [current_pass]
-       mov     ax,[current_pass]
-       cmp     ax,[passes_limit]
-       je      code_cannot_be_generated
-       jmp     assembler_loop
-      assemble_ok:
-       ret
-
-create_addressing_space:
-       mov     ebx,[addressing_space]
-       test    ebx,ebx
-       jz      init_addressing_space
-       test    byte [ebx+0Ah],1
-       jnz     illegal_instruction
-       mov     eax,edi
-       sub     eax,[ebx+18h]
-       mov     [ebx+1Ch],eax
-      init_addressing_space:
-       mov     ebx,[tagged_blocks]
-       mov     dword [ebx-4],10h
-       mov     dword [ebx-8],24h
-       sub     ebx,8+24h
-       cmp     ebx,edi
-       jbe     out_of_memory
-       mov     [tagged_blocks],ebx
-       mov     [addressing_space],ebx
-       xor     eax,eax
-       mov     [ebx],edi
-       mov     [ebx+4],eax
-       mov     [ebx+8],eax
-       mov     [ebx+10h],eax
-       mov     [ebx+14h],eax
-       mov     [ebx+18h],edi
-       mov     [ebx+1Ch],eax
-       mov     [ebx+20h],eax
-       ret
-
-assemble_line:
-       mov     eax,[tagged_blocks]
-       sub     eax,100h
-       cmp     edi,eax
-       ja      out_of_memory
-       lods    byte [esi]
-       cmp     al,1
-       je      assemble_instruction
-       jb      source_end
-       cmp     al,3
-       jb      define_label
-       je      define_constant
-       cmp     al,4
-       je      label_addressing_space
-       cmp     al,0Fh
-       je      new_line
-       cmp     al,13h
-       je      code_type_setting
-       cmp     al,10h
-       jne     illegal_instruction
-       lods    byte [esi]
-       jmp     segment_prefix
-      code_type_setting:
-       lods    byte [esi]
-       mov     [code_type],al
-       jmp     instruction_assembled
-      new_line:
-       lods    dword [esi]
-       mov     [current_line],eax
-       and     [prefix_flags],0
-       cmp     [symbols_file],0
-       je      continue_line
-       cmp     [next_pass_needed],0
-       jne     continue_line
-       mov     ebx,[tagged_blocks]
-       mov     dword [ebx-4],1
-       mov     dword [ebx-8],14h
-       sub     ebx,8+14h
-       cmp     ebx,edi
-       jbe     out_of_memory
-       mov     [tagged_blocks],ebx
-       mov     [ebx],eax
-       mov     [ebx+4],edi
-       mov     eax,[addressing_space]
-       mov     [ebx+8],eax
-       mov     al,[code_type]
-       mov     [ebx+10h],al
-      continue_line:
-       cmp     byte [esi],0Fh
-       je      line_assembled
-       jmp     assemble_line
-      define_label:
-       lods    dword [esi]
-       cmp     eax,0Fh
-       jb      invalid_use_of_symbol
-       je      reserved_word_used_as_symbol
-       mov     ebx,eax
-       lods    byte [esi]
-       mov     [label_size],al
-       call    make_label
-       jmp     continue_line
-      make_label:
-       mov     eax,edi
-       xor     edx,edx
-       xor     cl,cl
-       mov     ebp,[addressing_space]
-       sub     eax,[ds:ebp]
-       sbb     edx,[ds:ebp+4]
-       sbb     cl,[ds:ebp+8]
-       jp      label_value_ok
-       call    recoverable_overflow
-      label_value_ok:
-       mov     [address_sign],cl
-       test    byte [ds:ebp+0Ah],1
-       jnz     make_virtual_label
-       or      byte [ebx+9],1
-       xchg    eax,[ebx]
-       xchg    edx,[ebx+4]
-       mov     ch,[ebx+9]
-       shr     ch,1
-       and     ch,1
-       neg     ch
-       sub     eax,[ebx]
-       sbb     edx,[ebx+4]
-       sbb     ch,cl
-       mov     dword [adjustment],eax
-       mov     dword [adjustment+4],edx
-       mov     [adjustment_sign],ch
-       or      al,ch
-       or      eax,edx
-       setnz   ah
-       jmp     finish_label
-      make_virtual_label:
-       and     byte [ebx+9],not 1
-       cmp     eax,[ebx]
-       mov     [ebx],eax
-       setne   ah
-       cmp     edx,[ebx+4]
-       mov     [ebx+4],edx
-       setne   al
-       or      ah,al
-      finish_label:
-       mov     ebp,[addressing_space]
-       mov     ch,[ds:ebp+9]
-       mov     cl,[label_size]
-       mov     edx,[ds:ebp+14h]
-       mov     ebp,[ds:ebp+10h]
-      finish_label_symbol:
-       mov     al,[address_sign]
-       xor     al,[ebx+9]
-       and     al,10b
-       or      ah,al
-       xor     [ebx+9],al
-       cmp     cl,[ebx+10]
-       mov     [ebx+10],cl
-       setne   al
-       or      ah,al
-       cmp     ch,[ebx+11]
-       mov     [ebx+11],ch
-       setne   al
-       or      ah,al
-       cmp     ebp,[ebx+12]
-       mov     [ebx+12],ebp
-       setne   al
-       or      ah,al
-       or      ch,ch
-       jz      label_symbol_ok
-       cmp     edx,[ebx+20]
-       mov     [ebx+20],edx
-       setne   al
-       or      ah,al
-      label_symbol_ok:
-       mov     cx,[current_pass]
-       xchg    [ebx+16],cx
-       mov     edx,[current_line]
-       mov     [ebx+28],edx
-       and     byte [ebx+8],not 2
-       test    byte [ebx+8],1
-       jz      new_label
-       cmp     cx,[ebx+16]
-       je      symbol_already_defined
-       btr     dword [ebx+8],10
-       jc      requalified_label
-       inc     cx
-       sub     cx,[ebx+16]
-       setnz   al
-       or      ah,al
-       jz      label_made
-       test    byte [ebx+8],8
-       jz      label_made
-       mov     cx,[current_pass]
-       cmp     cx,[ebx+18]
-       jne     label_made
-      requalified_label:
-       or      [next_pass_needed],-1
-      label_made:
-       ret
-      new_label:
-       or      byte [ebx+8],1
-       ret
-      define_constant:
-       lods    dword [esi]
-       inc     esi
-       cmp     eax,0Fh
-       jb      invalid_use_of_symbol
-       je      reserved_word_used_as_symbol
-       push    eax
-       or      [operand_flags],1
-       call    get_value
-       pop     ebx
-       xor     cl,cl
-       mov     ch,[value_type]
-       cmp     ch,3
-       je      invalid_use_of_symbol
-      make_constant:
-       and     byte [ebx+9],not 1
-       cmp     eax,[ebx]
-       mov     [ebx],eax
-       setne   ah
-       cmp     edx,[ebx+4]
-       mov     [ebx+4],edx
-       setne   al
-       or      ah,al
-       mov     al,[value_sign]
-       xor     al,[ebx+9]
-       and     al,10b
-       or      ah,al
-       xor     [ebx+9],al
-       cmp     cl,[ebx+10]
-       mov     [ebx+10],cl
-       setne   al
-       or      ah,al
-       cmp     ch,[ebx+11]
-       mov     [ebx+11],ch
-       setne   al
-       or      ah,al
-       xor     edx,edx
-       cmp     edx,[ebx+12]
-       mov     [ebx+12],edx
-       setne   al
-       or      ah,al
-       or      ch,ch
-       jz      constant_symbol_ok
-       mov     edx,[symbol_identifier]
-       cmp     edx,[ebx+20]
-       mov     [ebx+20],edx
-       setne   al
-       or      ah,al
-      constant_symbol_ok:
-       mov     cx,[current_pass]
-       xchg    [ebx+16],cx
-       mov     edx,[current_line]
-       mov     [ebx+28],edx
-       test    byte [ebx+8],1
-       jz      new_constant
-       cmp     cx,[ebx+16]
-       jne     redeclare_constant
-       test    byte [ebx+8],2
-       jz      symbol_already_defined
-       or      byte [ebx+8],4
-       and     byte [ebx+9],not 4
-       jmp     instruction_assembled
-      redeclare_constant:
-       btr     dword [ebx+8],10
-       jc      requalified_constant
-       inc     cx
-       sub     cx,[ebx+16]
-       setnz   al
-       or      ah,al
-       jz      instruction_assembled
-       test    byte [ebx+8],4
-       jnz     instruction_assembled
-       test    byte [ebx+8],8
-       jz      instruction_assembled
-       mov     cx,[current_pass]
-       cmp     cx,[ebx+18]
-       jne     instruction_assembled
-      requalified_constant:
-       or      [next_pass_needed],-1
-       jmp     instruction_assembled
-      new_constant:
-       or      byte [ebx+8],1+2
-       jmp     instruction_assembled
-      label_addressing_space:
-       lods    dword [esi]
-       cmp     eax,0Fh
-       jb      invalid_use_of_symbol
-       je      reserved_word_used_as_symbol
-       mov     cx,[current_pass]
-       test    byte [eax+8],1
-       jz      make_addressing_space_label
-       cmp     cx,[eax+16]
-       je      symbol_already_defined
-       test    byte [eax+9],4
-       jnz     make_addressing_space_label
-       or      [next_pass_needed],-1
-      make_addressing_space_label:
-       mov     dx,[eax+8]
-       and     dx,not (2 or 100h)
-       or      dx,1 or 4 or 400h
-       mov     [eax+8],dx
-       mov     [eax+16],cx
-       mov     edx,[current_line]
-       mov     [eax+28],edx
-       mov     ebx,[addressing_space]
-       mov     [eax],ebx
-       or      byte [ebx+0Ah],2
-       jmp     continue_line
-      assemble_instruction:
-;       mov     [operand_size],0
-;       mov     [operand_flags],0
-;       mov     [operand_prefix],0
-;       mov     [rex_prefix],0
-       and     dword [operand_size],0
-;       mov     [opcode_prefix],0
-;       mov     [vex_required],0
-;       mov     [vex_register],0
-;       mov     [immediate_size],0
-       and     dword [opcode_prefix],0
-       call    instruction_handler
-      instruction_handler:
-       movzx   ebx,word [esi]
-       mov     al,[esi+2]
-       add     esi,3
-       add     [esp],ebx
-       ret
-      instruction_assembled:
-       test    [prefix_flags],not 1
-       jnz     illegal_instruction
-       mov     al,[esi]
-       cmp     al,0Fh
-       je      line_assembled
-       or      al,al
-       jnz     extra_characters_on_line
-      line_assembled:
-       clc
-       ret
-      source_end:
-       dec     esi
-       stc
-       ret
-
-org_directive:
-       lods    byte [esi]
-       cmp     al,'('
-       jne     invalid_argument
-       cmp     byte [esi],'.'
-       je      invalid_value
-       call    get_qword_value
-       mov     cl,[value_type]
-       test    cl,1
-       jnz     invalid_use_of_symbol
-       push    eax
-       mov     ebx,[addressing_space]
-       mov     eax,edi
-       sub     eax,[ebx+18h]
-       mov     [ebx+1Ch],eax
-       test    byte [ebx+0Ah],1
-       jnz     in_virtual
-       call    init_addressing_space
-       jmp     org_space_ok
-      in_virtual:
-       call    close_virtual_addressing_space
-       call    init_addressing_space
-       or      byte [ebx+0Ah],1
-      org_space_ok:
-       pop     eax
-       mov     [ebx+9],cl
-       mov     cl,[value_sign]
-       sub     [ebx],eax
-       sbb     [ebx+4],edx
-       sbb     byte [ebx+8],cl
-       jp      org_value_ok
-       call    recoverable_overflow
-      org_value_ok:
-       mov     edx,[symbol_identifier]
-       mov     [ebx+14h],edx
-       cmp     [output_format],1
-       ja      instruction_assembled
-       cmp     edi,[code_start]
-       jne     instruction_assembled
-       cmp     eax,100h
-       jne     instruction_assembled
-       bts     [format_flags],0
-       jmp     instruction_assembled
-label_directive:
-       lods    byte [esi]
-       cmp     al,2
-       jne     invalid_argument
-       lods    dword [esi]
-       cmp     eax,0Fh
-       jb      invalid_use_of_symbol
-       je      reserved_word_used_as_symbol
-       inc     esi
-       mov     ebx,eax
-       mov     [label_size],0
-       lods    byte [esi]
-       cmp     al,':'
-       je      get_label_size
-       dec     esi
-       cmp     al,11h
-       jne     label_size_ok
-      get_label_size:
-       lods    word [esi]
-       cmp     al,11h
-       jne     invalid_argument
-       mov     [label_size],ah
-      label_size_ok:
-       cmp     byte [esi],80h
-       je      get_free_label_value
-       call    make_label
-       jmp     instruction_assembled
-      get_free_label_value:
-       inc     esi
-       lods    byte [esi]
-       cmp     al,'('
-       jne     invalid_argument
-       push    ebx ecx
-       or      byte [ebx+8],4
-       cmp     byte [esi],'.'
-       je      invalid_value
-       call    get_address_value
-       or      bh,bh
-       setnz   ch
-       xchg    ch,cl
-       mov     bp,cx
-       shl     ebp,16
-       xchg    bl,bh
-       mov     bp,bx
-       pop     ecx ebx
-       and     byte [ebx+8],not 4
-       mov     ch,[value_type]
-       test    ch,1
-       jnz     invalid_use_of_symbol
-      make_free_label:
-       and     byte [ebx+9],not 1
-       cmp     eax,[ebx]
-       mov     [ebx],eax
-       setne   ah
-       cmp     edx,[ebx+4]
-       mov     [ebx+4],edx
-       setne   al
-       or      ah,al
-       mov     edx,[address_symbol]
-       mov     cl,[label_size]
-       call    finish_label_symbol
-       jmp     instruction_assembled
-load_directive:
-       lods    byte [esi]
-       cmp     al,2
-       jne     invalid_argument
-       lods    dword [esi]
-       cmp     eax,0Fh
-       jb      invalid_use_of_symbol
-       je      reserved_word_used_as_symbol
-       inc     esi
-       push    eax
-       mov     al,1
-       cmp     byte [esi],11h
-       jne     load_size_ok
-       lods    byte [esi]
-       lods    byte [esi]
-      load_size_ok:
-       cmp     al,8
-       ja      invalid_value
-       mov     [operand_size],al
-       and     dword [value],0
-       and     dword [value+4],0
-       lods    byte [esi]
-       cmp     al,82h
-       jne     invalid_argument
-       call    get_data_point
-       jc      value_loaded
-       push    esi edi
-       mov     esi,ebx
-       mov     edi,value
-       rep     movs byte [edi],[esi]
-       pop     edi esi
-      value_loaded:
-       mov     [value_sign],0
-       mov     eax,dword [value]
-       mov     edx,dword [value+4]
-       pop     ebx
-       xor     cx,cx
-       jmp     make_constant
-      get_data_point:
-       lods    byte [esi]
-       cmp     al,':'
-       je      get_data_offset
-       cmp     al,'('
-       jne     invalid_argument
-       mov     ebx,[addressing_space]
-       mov     ecx,edi
-       sub     ecx,[ebx+18h]
-       mov     [ebx+1Ch],ecx
-       cmp     byte [esi],11h
-       jne     get_data_address
-       cmp     word [esi+1+4],'):'
-       jne     get_data_address
-       inc     esi
-       lods    dword [esi]
-       add     esi,2
-       cmp     byte [esi],'('
-       jne     invalid_argument
-       inc     esi
-       cmp     eax,0Fh
-       jbe     reserved_word_used_as_symbol
-       mov     edx,undefined_symbol
-       test    byte [eax+8],1
-       jz      addressing_space_unavailable
-       mov     edx,symbol_out_of_scope
-       mov     cx,[eax+16]
-       cmp     cx,[current_pass]
-       jne     addressing_space_unavailable
-       test    byte [eax+9],4
-       jz      invalid_use_of_symbol
-       mov     ebx,eax
-       mov     ax,[current_pass]
-       mov     [ebx+18],ax
-       or      byte [ebx+8],8
-       call    store_label_reference
-      get_addressing_space:
-       mov     ebx,[ebx]
-      get_data_address:
-       push    ebx
-       cmp     byte [esi],'.'
-       je      invalid_value
-       or      [operand_flags],1
-       call    get_address_value
-       pop     ebp
-       call    calculate_relative_offset
-       cmp     [next_pass_needed],0
-       jne     data_address_type_ok
-       cmp     [value_type],0
-       jne     invalid_use_of_symbol
-      data_address_type_ok:
-       mov     ebx,edi
-       xor     ecx,ecx
-       add     ebx,eax
-       adc     edx,ecx
-       mov     eax,ebx
-       sub     eax,[ds:ebp+18h]
-       sbb     edx,ecx
-       jnz     bad_data_address
-       mov     cl,[operand_size]
-       add     eax,ecx
-       cmp     eax,[ds:ebp+1Ch]
-       ja      bad_data_address
-       clc
-       ret
-      addressing_space_unavailable:
-       cmp     [error_line],0
-       jne     get_data_address
-       push    [current_line]
-       pop     [error_line]
-       mov     [error],edx
-       mov     [error_info],eax
-       jmp     get_data_address
-      bad_data_address:
-       call    recoverable_overflow
-       stc
-       ret
-      get_data_offset:
-       cmp     [output_format],2
-       jae     invalid_operand
-       lods    byte [esi]
-       cmp     al,'('
-       jne     invalid_argument
-       cmp     byte [esi],'.'
-       je      invalid_value
-       call    get_dword_value
-       cmp     [value_type],0
-       je      data_offset_ok
-       call    recoverable_invalid_address
-      data_offset_ok:
-       add     eax,[code_start]
-       jc      bad_data_address
-       mov     ebx,eax
-       movzx   ecx,[operand_size]
-       add     eax,ecx
-       jc      bad_data_address
-       mov     edx,[addressing_space]
-       test    byte [edx+0Ah],1
-       jnz     data_offset_from_virtual
-       cmp     eax,edi
-       ja      bad_data_address
-       clc
-       ret
-      data_offset_from_virtual:
-       cmp     eax,[undefined_data_end]
-       ja      bad_data_address
-       clc
-       ret
-
-store_directive:
-       cmp     byte [esi],11h
-       je      sized_store
-       lods    byte [esi]
-       cmp     al,'('
-       jne     invalid_argument
-       call    get_byte_value
-       xor     edx,edx
-       movzx   eax,al
-       mov     [operand_size],1
-       jmp     store_value_ok
-      sized_store:
-       or      [operand_flags],1
-       call    get_value
-      store_value_ok:
-       cmp     [value_type],0
-       jne     invalid_use_of_symbol
-       mov     dword [value],eax
-       mov     dword [value+4],edx
-       lods    byte [esi]
-       cmp     al,80h
-       jne     invalid_argument
-       call    get_data_point
-       jc      instruction_assembled
-       push    esi edi
-       mov     esi,value
-       mov     edi,ebx
-       rep     movs byte [edi],[esi]
-       mov     eax,edi
-       pop     edi esi
-       cmp     ebx,[undefined_data_end]
-       jae     instruction_assembled
-       cmp     eax,[undefined_data_start]
-       jbe     instruction_assembled
-       mov     [undefined_data_start],eax
-       jmp     instruction_assembled
-
-display_directive:
-       lods    byte [esi]
-       cmp     al,'('
-       jne     invalid_argument
-       cmp     byte [esi],0
-       jne     display_byte
-       inc     esi
-       lods    dword [esi]
-       mov     ecx,eax
-       push    edi
-       mov     edi,[tagged_blocks]
-       sub     edi,8
-       sub     edi,eax
-       cmp     edi,[esp]
-       jbe     out_of_memory
-       mov     [tagged_blocks],edi
-       rep     movs byte [edi],[esi]
-       stos    dword [edi]
-       xor     eax,eax
-       stos    dword [edi]
-       pop     edi
-       inc     esi
-       jmp     display_next
-      display_byte:
-       call    get_byte_value
-       push    edi
-       mov     edi,[tagged_blocks]
-       sub     edi,8+1
-       mov     [tagged_blocks],edi
-       stos    byte [edi]
-       mov     eax,1
-       stos    dword [edi]
-       dec     eax
-       stos    dword [edi]
-       pop     edi
-      display_next:
-       cmp     edi,[tagged_blocks]
-       ja      out_of_memory
-       lods    byte [esi]
-       cmp     al,','
-       je      display_directive
-       dec     esi
-       jmp     instruction_assembled
-show_display_buffer:
-       mov     eax,[tagged_blocks]
-       or      eax,eax
-       jz      display_done
-       mov     esi,[labels_list]
-       cmp     esi,eax
-       je      display_done
-      display_messages:
-       sub     esi,8
-       mov     eax,[esi+4]
-       mov     ecx,[esi]
-       sub     esi,ecx
-       cmp     eax,10h
-       je      write_addressing_space
-       test    eax,eax
-       jnz     skip_block
-       push    esi
-       call    display_block
-       pop     esi
-      skip_block:
-       cmp     esi,[tagged_blocks]
-       jne     display_messages
-      display_done:
-       ret
-      write_addressing_space:
-       mov     ecx,[esi+20h]
-       jecxz   skip_block
-       push    esi
-       mov     edi,[free_additional_memory]
-       mov     esi,[output_file]
-       test    esi,esi
-       jz      addressing_space_written
-       xor     ebx,ebx
-      copy_output_path:
-       lodsb
-       cmp     edi,[structures_buffer]
-       jae     out_of_memory
-       stosb
-       test    al,al
-       jz      output_path_copied
-       cmp     al,'/'
-       je      new_path_segment
-       cmp     al,'\'
-       je      new_path_segment
-       cmp     al,'.'
-       jne     copy_output_path
-       mov     ebx,edi
-       jmp     copy_output_path
-      new_path_segment:
-       xor     ebx,ebx
-       jmp     copy_output_path
-      output_path_copied:
-       test    ebx,ebx
-       jnz     append_extension
-       mov     byte [edi-1],'.'
-       mov     ebx,edi
-      append_extension:
-       mov     edi,ebx
-       add     ebx,ecx
-       inc     ebx
-       cmp     ebx,[structures_buffer]
-       jae     out_of_memory
-       mov     esi,[esp]
-       mov     esi,[esi+18h]
-       sub     esi,ecx
-       rep     movs byte [edi],[esi]
-       xor     al,al
-       stos    byte [edi]
-       mov     edx,[free_additional_memory]
-       call    create
-       jc      write_failed
-       mov     esi,[esp]
-       mov     edx,[esi+18h]
-       mov     ecx,[esi+1Ch]
-       call    write
-       jc      write_failed
-       call    close
-      addressing_space_written:
-       pop     esi
-       jmp     skip_block
-
-times_directive:
-       lods    byte [esi]
-       cmp     al,'('
-       jne     invalid_argument
-       cmp     byte [esi],'.'
-       je      invalid_value
-       call    get_count_value
-       cmp     eax,0
-       je      zero_times
-       cmp     byte [esi],':'
-       jne     times_argument_ok
-       inc     esi
-      times_argument_ok:
-       push    [counter]
-       push    [counter_limit]
-       mov     [counter_limit],eax
-       mov     [counter],1
-      times_loop:
-       mov     eax,esp
-       sub     eax,[stack_limit]
-       cmp     eax,100h
-       jb      stack_overflow
-       push    esi
-       or      [prefix_flags],1
-       call    continue_line
-       mov     eax,[counter_limit]
-       cmp     [counter],eax
-       je      times_done
-       inc     [counter]
-       pop     esi
-       jmp     times_loop
-      times_done:
-       pop     eax
-       pop     [counter_limit]
-       pop     [counter]
-       jmp     instruction_assembled
-      zero_times:
-       call    skip_symbol
-       jnc     zero_times
-       jmp     instruction_assembled
-
-virtual_directive:
-       lods    byte [esi]
-       cmp     al,'('
-       je      continue_virtual_area
-       cmp     al,80h
-       jne     virtual_at_current
-       lods    byte [esi]
-       cmp     al,'('
-       jne     invalid_argument
-       cmp     byte [esi],'.'
-       je      invalid_value
-       call    get_address_value
-       mov     ebp,[address_symbol]
-       or      bh,bh
-       setnz   ch
-       jmp     set_virtual
-      virtual_at_current:
-       dec     esi
-      virtual_fallback:
-       mov     ebp,[addressing_space]
-       mov     al,[ds:ebp+9]
-       mov     [value_type],al
-       mov     eax,edi
-       xor     edx,edx
-       xor     cl,cl
-       sub     eax,[ds:ebp]
-       sbb     edx,[ds:ebp+4]
-       sbb     cl,[ds:ebp+8]
-       mov     [address_sign],cl
-       mov     bx,[ds:ebp+10h]
-       mov     cx,[ds:ebp+10h+2]
-       xchg    bh,bl
-       xchg    ch,cl
-       mov     ebp,[ds:ebp+14h]
-      set_virtual:
-       xchg    bl,bh
-       xchg    cl,ch
-       shl     ecx,16
-       mov     cx,bx
-       push    ecx eax
-       mov     ebx,[addressing_space]
-       test    byte [ebx+0Ah],1
-       jnz     non_virtual_end_ok
-       mov     eax,edi
-       xchg    eax,[undefined_data_end]
-       cmp     eax,edi
-       je      non_virtual_end_ok
-       mov     [undefined_data_start],edi
-      non_virtual_end_ok:
-       call    allocate_virtual_structure_data
-       call    init_addressing_space
-       or      byte [ebx+0Ah],1
-       cmp     byte [esi],86h
-       jne     addressing_space_extension_ok
-       cmp     word [esi+1],'('
-       jne     invalid_argument
-       mov     ecx,[esi+3]
-       add     esi,3+4
-       add     [ebx+18h],ecx
-       mov     [ebx+20h],ecx
-       or      byte [ebx+0Ah],2
-       push    ebx
-       mov     ebx,characters
-      get_extension:
-       lods    byte [esi]
-       stos    byte [edi]
-       xlat    byte [ebx]
-       test    al,al
-       jz      invalid_argument
-       loop    get_extension
-       inc     esi
-       pop     ebx
-      addressing_space_extension_ok:
-       pop     eax
-       mov     cl,[address_sign]
-       not     eax
-       not     edx
-       not     cl
-       add     eax,1
-       adc     edx,0
-       adc     cl,0
-       add     eax,edi
-       adc     edx,0
-       adc     cl,0
-       mov     [ebx],eax
-       mov     [ebx+4],edx
-       mov     [ebx+8],cl
-       pop     dword [ebx+10h]
-       mov     [ebx+14h],ebp
-       mov     al,[value_type]
-       test    al,1
-       jnz     invalid_use_of_symbol
-       mov     [ebx+9],al
-       jmp     instruction_assembled
-      allocate_structure_data:
-       mov     ebx,[structures_buffer]
-       sub     ebx,18h
-       cmp     ebx,[free_additional_memory]
-       jb      out_of_memory
-       mov     [structures_buffer],ebx
-       ret
-      find_structure_data:
-       mov     ebx,[structures_buffer]
-      scan_structures:
-       cmp     ebx,[additional_memory_end]
-       je      no_such_structure
-       cmp     ax,[ebx]
-       je      structure_data_found
-       add     ebx,18h
-       jmp     scan_structures
-      structure_data_found:
-       ret
-      no_such_structure:
-       stc
-       ret
-      allocate_virtual_structure_data:
-       call    allocate_structure_data
-       mov     word [ebx],virtual_directive-instruction_handler
-       mov     ecx,[addressing_space]
-       mov     [ebx+12],ecx
-       mov     [ebx+8],edi
-       mov     ecx,[current_line]
-       mov     [ebx+4],ecx
-       mov     ebx,[addressing_space]
-       mov     eax,edi
-       sub     eax,[ebx+18h]
-       mov     [ebx+1Ch],eax
-       ret
-      continue_virtual_area:
-       cmp     byte [esi],11h
-       jne     invalid_argument
-       cmp     byte [esi+1+4],')'
-       jne     invalid_argument
-       inc     esi
-       lods    dword [esi]
-       inc     esi
-       cmp     eax,0Fh
-       jbe     reserved_word_used_as_symbol
-       mov     edx,undefined_symbol
-       test    byte [eax+8],1
-       jz      virtual_area_unavailable
-       mov     edx,symbol_out_of_scope
-       mov     cx,[eax+16]
-       cmp     cx,[current_pass]
-       jne     virtual_area_unavailable
-       mov     edx,invalid_use_of_symbol
-       test    byte [eax+9],4
-       jz      virtual_area_unavailable
-       mov     ebx,eax
-       mov     ax,[current_pass]
-       mov     [ebx+18],ax
-       or      byte [ebx+8],8
-       call    store_label_reference
-       mov     ebx,[ebx]
-       test    byte [ebx+0Ah],4
-       jz      virtual_area_unavailable
-       and     byte [ebx+0Ah],not 4
-       mov     edx,ebx
-       call    allocate_virtual_structure_data
-       mov     [addressing_space],edx
-       push    esi
-       mov     esi,[edx+18h]
-       mov     ecx,[edx+1Ch]
-       mov     eax,[edx+20h]
-       sub     esi,eax
-       add     ecx,eax
-       lea     eax,[edi+ecx]
-       cmp     eax,[tagged_blocks]
-       jae     out_of_memory
-       mov     eax,esi
-       sub     eax,edi
-       sub     [edx+18h],eax
-       sub     [edx],eax
-       sbb     dword [edx+4],0
-       sbb     byte [edx+8],0
-       mov     al,cl
-       shr     ecx,2
-       rep     movs dword [edi],[esi]
-       mov     cl,al
-       and     cl,11b
-       rep     movs byte [edi],[esi]
-       pop     esi
-       jmp     instruction_assembled
-      virtual_area_unavailable:
-       cmp     [error_line],0
-       jne     virtual_fallback
-       push    [current_line]
-       pop     [error_line]
-       mov     [error],edx
-       mov     [error_info],eax
-       jmp     virtual_fallback
-      end_virtual:
-       call    find_structure_data
-       jc      unexpected_instruction
-       push    ebx
-       call    close_virtual_addressing_space
-       pop     ebx
-       mov     eax,[ebx+12]
-       mov     [addressing_space],eax
-       mov     edi,[ebx+8]
-      remove_structure_data:
-       push    esi edi
-       mov     ecx,ebx
-       sub     ecx,[structures_buffer]
-       shr     ecx,2
-       lea     esi,[ebx-4]
-       lea     edi,[esi+18h]
-       std
-       rep     movs dword [edi],[esi]
-       cld
-       add     [structures_buffer],18h
-       pop     edi esi
-       ret
-      close_virtual_addressing_space:
-       mov     ebx,[addressing_space]
-       mov     eax,edi
-       sub     eax,[ebx+18h]
-       mov     [ebx+1Ch],eax
-       add     eax,[ebx+20h]
-       test    byte [ebx+0Ah],2
-       jz      addressing_space_closed
-       or      byte [ebx+0Ah],4
-       push    esi edi ecx edx
-       mov     ecx,eax
-       mov     eax,[tagged_blocks]
-       mov     dword [eax-4],11h
-       mov     dword [eax-8],ecx
-       sub     eax,8
-       sub     eax,ecx
-       mov     [tagged_blocks],eax
-       lea     edi,[eax+ecx-1]
-       add     eax,[ebx+20h]
-       xchg    eax,[ebx+18h]
-       sub     eax,[ebx+20h]
-       lea     esi,[eax+ecx-1]
-       mov     eax,edi
-       sub     eax,esi
-       std
-       shr     ecx,1
-       jnc     virtual_byte_ok
-       movs    byte [edi],[esi]
-      virtual_byte_ok:
-       dec     esi
-       dec     edi
-       shr     ecx,1
-       jnc     virtual_word_ok
-       movs    word [edi],[esi]
-      virtual_word_ok:
-       sub     esi,2
-       sub     edi,2
-       rep     movs dword [edi],[esi]
-       cld
-       xor     edx,edx
-       add     [ebx],eax
-       adc     dword [ebx+4],edx
-       adc     byte [ebx+8],dl
-       pop     edx ecx edi esi
-      addressing_space_closed:
-       ret
-repeat_directive:
-       test    [prefix_flags],1
-       jnz     unexpected_instruction
-       lods    byte [esi]
-       cmp     al,'('
-       jne     invalid_argument
-       cmp     byte [esi],'.'
-       je      invalid_value
-       call    get_count_value
-       cmp     eax,0
-       je      zero_repeat
-       call    allocate_structure_data
-       mov     word [ebx],repeat_directive-instruction_handler
-       xchg    eax,[counter_limit]
-       mov     [ebx+10h],eax
-       mov     eax,1
-       xchg    eax,[counter]
-       mov     [ebx+14h],eax
-       mov     [ebx+8],esi
-       mov     eax,[current_line]
-       mov     [ebx+4],eax
-       jmp     instruction_assembled
-      end_repeat:
-       test    [prefix_flags],1
-       jnz     unexpected_instruction
-       call    find_structure_data
-       jc      unexpected_instruction
-       mov     eax,[counter_limit]
-       inc     [counter]
-       cmp     [counter],eax
-       jbe     continue_repeating
-      stop_repeat:
-       mov     eax,[ebx+10h]
-       mov     [counter_limit],eax
-       mov     eax,[ebx+14h]
-       mov     [counter],eax
-       call    remove_structure_data
-       jmp     instruction_assembled
-      continue_repeating:
-       mov     esi,[ebx+8]
-       jmp     instruction_assembled
-      zero_repeat:
-       mov     al,[esi]
-       or      al,al
-       jz      missing_end_directive
-       cmp     al,0Fh
-       jne     extra_characters_on_line
-       call    find_end_repeat
-       jmp     instruction_assembled
-      find_end_repeat:
-       call    find_structure_end
-       cmp     ax,repeat_directive-instruction_handler
-       jne     unexpected_instruction
-       ret
-while_directive:
-       test    [prefix_flags],1
-       jnz     unexpected_instruction
-       call    allocate_structure_data
-       mov     word [ebx],while_directive-instruction_handler
-       mov     eax,1
-       xchg    eax,[counter]
-       mov     [ebx+10h],eax
-       mov     [ebx+8],esi
-       mov     eax,[current_line]
-       mov     [ebx+4],eax
-      do_while:
-       push    ebx
-       call    calculate_logical_expression
-       or      al,al
-       jnz     while_true
-       mov     al,[esi]
-       or      al,al
-       jz      missing_end_directive
-       cmp     al,0Fh
-       jne     extra_characters_on_line
-      stop_while:
-       call    find_end_while
-       pop     ebx
-       mov     eax,[ebx+10h]
-       mov     [counter],eax
-       call    remove_structure_data
-       jmp     instruction_assembled
-      while_true:
-       pop     ebx
-       jmp     instruction_assembled
-      end_while:
-       test    [prefix_flags],1
-       jnz     unexpected_instruction
-       call    find_structure_data
-       jc      unexpected_instruction
-       mov     eax,[ebx+4]
-       mov     [current_line],eax
-       inc     [counter]
-       jz      too_many_repeats
-       mov     esi,[ebx+8]
-       jmp     do_while
-      find_end_while:
-       call    find_structure_end
-       cmp     ax,while_directive-instruction_handler
-       jne     unexpected_instruction
-       ret
-if_directive:
-       test    [prefix_flags],1
-       jnz     unexpected_instruction
-       call    calculate_logical_expression
-       mov     dl,al
-       mov     al,[esi]
-       or      al,al
-       jz      missing_end_directive
-       cmp     al,0Fh
-       jne     extra_characters_on_line
-       or      dl,dl
-       jnz     if_true
-       call    find_else
-       jc      instruction_assembled
-       mov     al,[esi]
-       cmp     al,1
-       jne     else_true
-       cmp     word [esi+1],if_directive-instruction_handler
-       jne     else_true
-       add     esi,4
-       jmp     if_directive
-      if_true:
-       xor     al,al
-      make_if_structure:
-       call    allocate_structure_data
-       mov     word [ebx],if_directive-instruction_handler
-       mov     byte [ebx+2],al
-       mov     eax,[current_line]
-       mov     [ebx+4],eax
-       jmp     instruction_assembled
-      else_true:
-       or      al,al
-       jz      missing_end_directive
-       cmp     al,0Fh
-       jne     extra_characters_on_line
-       or      al,-1
-       jmp     make_if_structure
-      else_directive:
-       test    [prefix_flags],1
-       jnz     unexpected_instruction
-       mov     ax,if_directive-instruction_handler
-       call    find_structure_data
-       jc      unexpected_instruction
-       cmp     byte [ebx+2],0
-       jne     unexpected_instruction
-      found_else:
-       mov     al,[esi]
-       cmp     al,1
-       jne     skip_else
-       cmp     word [esi+1],if_directive-instruction_handler
-       jne     skip_else
-       add     esi,4
-       call    find_else
-       jnc     found_else
-       call    remove_structure_data
-       jmp     instruction_assembled
-      skip_else:
-       or      al,al
-       jz      missing_end_directive
-       cmp     al,0Fh
-       jne     extra_characters_on_line
-       call    find_end_if
-       call    remove_structure_data
-       jmp     instruction_assembled
-      end_if:
-       test    [prefix_flags],1
-       jnz     unexpected_instruction
-       call    find_structure_data
-       jc      unexpected_instruction
-       call    remove_structure_data
-       jmp     instruction_assembled
-      find_else:
-       call    find_structure_end
-       cmp     ax,else_directive-instruction_handler
-       je      else_found
-       cmp     ax,if_directive-instruction_handler
-       jne     unexpected_instruction
-       stc
-       ret
-      else_found:
-       clc
-       ret
-      find_end_if:
-       call    find_structure_end
-       cmp     ax,if_directive-instruction_handler
-       jne     unexpected_instruction
-       ret
-      find_structure_end:
-       push    [error_line]
-       mov     eax,[current_line]
-       mov     [error_line],eax
-      find_end_directive:
-       call    skip_symbol
-       jnc     find_end_directive
-       lods    byte [esi]
-       cmp     al,0Fh
-       jne     no_end_directive
-       lods    dword [esi]
-       mov     [current_line],eax
-      skip_labels:
-       cmp     byte [esi],2
-       jne     labels_ok
-       add     esi,6
-       jmp     skip_labels
-      labels_ok:
-       cmp     byte [esi],1
-       jne     find_end_directive
-       mov     ax,[esi+1]
-       cmp     ax,prefix_instruction-instruction_handler
-       je      find_end_directive
-       add     esi,4
-       cmp     ax,repeat_directive-instruction_handler
-       je      skip_repeat
-       cmp     ax,while_directive-instruction_handler
-       je      skip_while
-       cmp     ax,if_directive-instruction_handler
-       je      skip_if
-       cmp     ax,else_directive-instruction_handler
-       je      structure_end
-       cmp     ax,end_directive-instruction_handler
-       jne     find_end_directive
-       cmp     byte [esi],1
-       jne     find_end_directive
-       mov     ax,[esi+1]
-       add     esi,4
-       cmp     ax,repeat_directive-instruction_handler
-       je      structure_end
-       cmp     ax,while_directive-instruction_handler
-       je      structure_end
-       cmp     ax,if_directive-instruction_handler
-       jne     find_end_directive
-      structure_end:
-       pop     [error_line]
-       ret
-      no_end_directive:
-       mov     eax,[error_line]
-       mov     [current_line],eax
-       jmp     missing_end_directive
-      skip_repeat:
-       call    find_end_repeat
-       jmp     find_end_directive
-      skip_while:
-       call    find_end_while
-       jmp     find_end_directive
-      skip_if:
-       call    skip_if_block
-       jmp     find_end_directive
-      skip_if_block:
-       call    find_else
-       jc      if_block_skipped
-       cmp     byte [esi],1
-       jne     skip_after_else
-       cmp     word [esi+1],if_directive-instruction_handler
-       jne     skip_after_else
-       add     esi,4
-       jmp     skip_if_block
-      skip_after_else:
-       call    find_end_if
-      if_block_skipped:
-       ret
-end_directive:
-       lods    byte [esi]
-       cmp     al,1
-       jne     invalid_argument
-       lods    word [esi]
-       inc     esi
-       cmp     ax,virtual_directive-instruction_handler
-       je      end_virtual
-       cmp     ax,repeat_directive-instruction_handler
-       je      end_repeat
-       cmp     ax,while_directive-instruction_handler
-       je      end_while
-       cmp     ax,if_directive-instruction_handler
-       je      end_if
-       cmp     ax,data_directive-instruction_handler
-       je      end_data
-       jmp     invalid_argument
-break_directive:
-       mov     ebx,[structures_buffer]
-       mov     al,[esi]
-       or      al,al
-       jz      find_breakable_structure
-       cmp     al,0Fh
-       jne     extra_characters_on_line
-      find_breakable_structure:
-       cmp     ebx,[additional_memory_end]
-       je      unexpected_instruction
-       mov     ax,[ebx]
-       cmp     ax,repeat_directive-instruction_handler
-       je      break_repeat
-       cmp     ax,while_directive-instruction_handler
-       je      break_while
-       cmp     ax,if_directive-instruction_handler
-       je      break_if
-       add     ebx,18h
-       jmp     find_breakable_structure
-      break_if:
-       push    [current_line]
-       mov     eax,[ebx+4]
-       mov     [current_line],eax
-       call    remove_structure_data
-       call    skip_if_block
-       pop     [current_line]
-       mov     ebx,[structures_buffer]
-       jmp     find_breakable_structure
-      break_repeat:
-       push    ebx
-       call    find_end_repeat
-       pop     ebx
-       jmp     stop_repeat
-      break_while:
-       push    ebx
-       jmp     stop_while
-
-define_data:
-       cmp     edi,[tagged_blocks]
-       jae     out_of_memory
-       cmp     byte [esi],'('
-       jne     simple_data_value
-       mov     ebx,esi
-       inc     esi
-       call    skip_expression
-       xchg    esi,ebx
-       cmp     byte [ebx],81h
-       jne     simple_data_value
-       inc     esi
-       call    get_count_value
-       inc     esi
-       or      eax,eax
-       jz      duplicate_zero_times
-       cmp     byte [esi],91h
-       jne     duplicate_single_data_value
-       inc     esi
-      duplicate_data:
-       push    eax esi
-      duplicated_values:
-       cmp     edi,[tagged_blocks]
-       jae     out_of_memory
-       clc
-       call    near dword [esp+8]
-       lods    byte [esi]
-       cmp     al,','
-       je      duplicated_values
-       cmp     al,92h
-       jne     invalid_argument
-       pop     ebx eax
-       dec     eax
-       jz      data_defined
-       mov     esi,ebx
-       jmp     duplicate_data
-      duplicate_single_data_value:
-       cmp     edi,[tagged_blocks]
-       jae     out_of_memory
-       push    eax esi
-       clc
-       call    near dword [esp+8]
-       pop     ebx eax
-       dec     eax
-       jz      data_defined
-       mov     esi,ebx
-       jmp     duplicate_single_data_value
-      duplicate_zero_times:
-       cmp     byte [esi],91h
-       jne     skip_single_data_value
-       inc     esi
-      skip_data_value:
-       call    skip_symbol
-       jc      invalid_argument
-       cmp     byte [esi],92h
-       jne     skip_data_value
-       inc     esi
-       jmp     data_defined
-      skip_single_data_value:
-       call    skip_symbol
-       jmp     data_defined
-      simple_data_value:
-       cmp     edi,[tagged_blocks]
-       jae     out_of_memory
-       clc
-       call    near dword [esp]
-      data_defined:
-       lods    byte [esi]
-       cmp     al,','
-       je      define_data
-       dec     esi
-       stc
-       ret
-data_bytes:
-       call    define_data
-       jc      instruction_assembled
-       lods    byte [esi]
-       cmp     al,'('
-       je      get_byte
-       cmp     al,'?'
-       jne     invalid_argument
-       mov     eax,edi
-       mov     byte [edi],0
-       inc     edi
-       jmp     undefined_data
-      get_byte:
-       cmp     byte [esi],0
-       je      get_string
-       call    get_byte_value
-       stos    byte [edi]
-       ret
-      get_string:
-       inc     esi
-       lods    dword [esi]
-       mov     ecx,eax
-       lea     eax,[edi+ecx]
-       cmp     eax,[tagged_blocks]
-       ja      out_of_memory
-       rep     movs byte [edi],[esi]
-       inc     esi
-       ret
-      undefined_data:
-       mov     ebp,[addressing_space]
-       test    byte [ds:ebp+0Ah],1
-       jz      mark_undefined_data
-       ret
-      mark_undefined_data:
-       cmp     eax,[undefined_data_end]
-       je      undefined_data_ok
-       mov     [undefined_data_start],eax
-      undefined_data_ok:
-       mov     [undefined_data_end],edi
-       ret
-data_unicode:
-       or      [base_code],-1
-       jmp     define_words
-data_words:
-       mov     [base_code],0
-    define_words:
-       call    define_data
-       jc      instruction_assembled
-       lods    byte [esi]
-       cmp     al,'('
-       je      get_word
-       cmp     al,'?'
-       jne     invalid_argument
-       mov     eax,edi
-       and     word [edi],0
-       scas    word [edi]
-       jmp     undefined_data
-       ret
-      get_word:
-       cmp     [base_code],0
-       je      word_data_value
-       cmp     byte [esi],0
-       je      word_string
-      word_data_value:
-       call    get_word_value
-       call    mark_relocation
-       stos    word [edi]
-       ret
-      word_string:
-       inc     esi
-       lods    dword [esi]
-       mov     ecx,eax
-       jecxz   word_string_ok
-       lea     eax,[edi+ecx*2]
-       cmp     eax,[tagged_blocks]
-       ja      out_of_memory
-       xor     ah,ah
-      copy_word_string:
-       lods    byte [esi]
-       stos    word [edi]
-       loop    copy_word_string
-      word_string_ok:
-       inc     esi
-       ret
-data_dwords:
-       call    define_data
-       jc      instruction_assembled
-       lods    byte [esi]
-       cmp     al,'('
-       je      get_dword
-       cmp     al,'?'
-       jne     invalid_argument
-       mov     eax,edi
-       and     dword [edi],0
-       scas    dword [edi]
-       jmp     undefined_data
-      get_dword:
-       push    esi
-       call    get_dword_value
-       pop     ebx
-       cmp     byte [esi],':'
-       je      complex_dword
-       call    mark_relocation
-       stos    dword [edi]
-       ret
-      complex_dword:
-       mov     esi,ebx
-       cmp     byte [esi],'.'
-       je      invalid_value
-       call    get_word_value
-       push    eax
-       inc     esi
-       lods    byte [esi]
-       cmp     al,'('
-       jne     invalid_operand
-       mov     al,[value_type]
-       push    eax
-       cmp     byte [esi],'.'
-       je      invalid_value
-       call    get_word_value
-       call    mark_relocation
-       stos    word [edi]
-       pop     eax
-       mov     [value_type],al
-       pop     eax
-       call    mark_relocation
-       stos    word [edi]
-       ret
-data_pwords:
-       call    define_data
-       jc      instruction_assembled
-       lods    byte [esi]
-       cmp     al,'('
-       je      get_pword
-       cmp     al,'?'
-       jne     invalid_argument
-       mov     eax,edi
-       and     dword [edi],0
-       scas    dword [edi]
-       and     word [edi],0
-       scas    word [edi]
-       jmp     undefined_data
-      get_pword:
-       push    esi
-       call    get_pword_value
-       pop     ebx
-       cmp     byte [esi],':'
-       je      complex_pword
-       call    mark_relocation
-       stos    dword [edi]
-       mov     ax,dx
-       stos    word [edi]
-       ret
-      complex_pword:
-       mov     esi,ebx
-       cmp     byte [esi],'.'
-       je      invalid_value
-       call    get_word_value
-       push    eax
-       inc     esi
-       lods    byte [esi]
-       cmp     al,'('
-       jne     invalid_operand
-       mov     al,[value_type]
-       push    eax
-       cmp     byte [esi],'.'
-       je      invalid_value
-       call    get_dword_value
-       call    mark_relocation
-       stos    dword [edi]
-       pop     eax
-       mov     [value_type],al
-       pop     eax
-       call    mark_relocation
-       stos    word [edi]
-       ret
-data_qwords:
-       call    define_data
-       jc      instruction_assembled
-       lods    byte [esi]
-       cmp     al,'('
-       je      get_qword
-       cmp     al,'?'
-       jne     invalid_argument
-       mov     eax,edi
-       and     dword [edi],0
-       scas    dword [edi]
-       and     dword [edi],0
-       scas    dword [edi]
-       jmp     undefined_data
-      get_qword:
-       call    get_qword_value
-       call    mark_relocation
-       stos    dword [edi]
-       mov     eax,edx
-       stos    dword [edi]
-       ret
-data_twords:
-       call    define_data
-       jc      instruction_assembled
-       lods    byte [esi]
-       cmp     al,'('
-       je      get_tword
-       cmp     al,'?'
-       jne     invalid_argument
-       mov     eax,edi
-       and     dword [edi],0
-       scas    dword [edi]
-       and     dword [edi],0
-       scas    dword [edi]
-       and     word [edi],0
-       scas    word [edi]
-       jmp     undefined_data
-      get_tword:
-       cmp     byte [esi],'.'
-       jne     complex_tword
-       inc     esi
-       cmp     word [esi+8],8000h
-       je      fp_zero_tword
-       mov     eax,[esi]
-       stos    dword [edi]
-       mov     eax,[esi+4]
-       stos    dword [edi]
-       mov     ax,[esi+8]
-       add     ax,3FFFh
-       jo      value_out_of_range
-       cmp     ax,7FFFh
-       jge     value_out_of_range
-       cmp     ax,0
-       jg      tword_exp_ok
-       mov     cx,ax
-       neg     cx
-       inc     cx
-       cmp     cx,64
-       jae     value_out_of_range
-       cmp     cx,32
-       ja      large_shift
-       mov     eax,[esi]
-       mov     edx,[esi+4]
-       mov     ebx,edx
-       shr     edx,cl
-       shrd    eax,ebx,cl
-       jmp     tword_mantissa_shift_done
-      large_shift:
-       sub     cx,32
-       xor     edx,edx
-       mov     eax,[esi+4]
-       shr     eax,cl
-      tword_mantissa_shift_done:
-       jnc     store_shifted_mantissa
-       add     eax,1
-       adc     edx,0
-      store_shifted_mantissa:
-       mov     [edi-8],eax
-       mov     [edi-4],edx
-       xor     ax,ax
-       test    edx,1 shl 31
-       jz      tword_exp_ok
-       inc     ax
-      tword_exp_ok:
-       mov     bl,[esi+11]
-       shl     bx,15
-       or      ax,bx
-       stos    word [edi]
-       add     esi,13
-       ret
-      fp_zero_tword:
-       xor     eax,eax
-       stos    dword [edi]
-       stos    dword [edi]
-       mov     al,[esi+11]
-       shl     ax,15
-       stos    word [edi]
-       add     esi,13
-       ret
-      complex_tword:
-       call    get_word_value
-       push    eax
-       cmp     byte [esi],':'
-       jne     invalid_operand
-       inc     esi
-       lods    byte [esi]
-       cmp     al,'('
-       jne     invalid_operand
-       mov     al,[value_type]
-       push    eax
-       cmp     byte [esi],'.'
-       je      invalid_value
-       call    get_qword_value
-       call    mark_relocation
-       stos    dword [edi]
-       mov     eax,edx
-       stos    dword [edi]
-       pop     eax
-       mov     [value_type],al
-       pop     eax
-       call    mark_relocation
-       stos    word [edi]
-       ret
-data_file:
-       lods    word [esi]
-       cmp     ax,'('
-       jne     invalid_argument
-       add     esi,4
-       call    open_binary_file
-       mov     eax,[esi-4]
-       lea     esi,[esi+eax+1]
-       mov     al,2
-       xor     edx,edx
-       call    lseek
-       push    eax
-       xor     edx,edx
-       cmp     byte [esi],':'
-       jne     position_ok
-       inc     esi
-       cmp     byte [esi],'('
-       jne     invalid_argument
-       inc     esi
-       cmp     byte [esi],'.'
-       je      invalid_value
-       push    ebx
-       call    get_count_value
-       pop     ebx
-       mov     edx,eax
-       sub     [esp],edx
-       jc      value_out_of_range
-      position_ok:
-       cmp     byte [esi],','
-       jne     size_ok
-       inc     esi
-       cmp     byte [esi],'('
-       jne     invalid_argument
-       inc     esi
-       cmp     byte [esi],'.'
-       je      invalid_value
-       push    ebx edx
-       call    get_count_value
-       pop     edx ebx
-       cmp     eax,[esp]
-       ja      value_out_of_range
-       mov     [esp],eax
-      size_ok:
-       xor     al,al
-       call    lseek
-       pop     ecx
-       mov     edx,edi
-       add     edi,ecx
-       jc      out_of_memory
-       cmp     edi,[tagged_blocks]
-       ja      out_of_memory
-       call    read
-       jc      error_reading_file
-       call    close
-       lods    byte [esi]
-       cmp     al,','
-       je      data_file
-       dec     esi
-       jmp     instruction_assembled
-      open_binary_file:
-       push    esi
-       push    edi
-       mov     eax,[current_line]
-      find_current_source_path: 
-       mov     esi,[eax] 
-       test    byte [eax+7],80h 
-       jz      get_current_path 
-       mov     eax,[eax+8]
-       jmp     find_current_source_path
-      get_current_path:
-       lodsb
-       stosb
-       or      al,al
-       jnz     get_current_path
-      cut_current_path:
-       cmp     edi,[esp]
-       je      current_path_ok
-       cmp     byte [edi-1],'\'
-       je      current_path_ok
-       cmp     byte [edi-1],'/'
-       je      current_path_ok
-       dec     edi
-       jmp     cut_current_path
-      current_path_ok:
-       mov     esi,[esp+4]
-       call    expand_path
-       pop     edx
-       mov     esi,edx
-       call    open
-       jnc     file_opened
-       mov     edx,[include_paths]
-      search_in_include_paths:
-       push    edx esi
-       mov     edi,esi
-       mov     esi,[esp+4]
-       call    get_include_directory
-       mov     [esp+4],esi
-       mov     esi,[esp+8]
-       call    expand_path
-       pop     edx
-       mov     esi,edx
-       call    open
-       pop     edx
-       jnc     file_opened
-       cmp     byte [edx],0
-       jne     search_in_include_paths
-       mov     edi,esi
-       mov     esi,[esp]
-       push    edi
-       call    expand_path
-       pop     edx
-       mov     esi,edx
-       call    open
-       jc      file_not_found
-      file_opened:
-       mov     edi,esi
-       pop     esi
-       ret
-reserve_bytes:
-       lods    byte [esi]
-       cmp     al,'('
-       jne     invalid_argument
-       cmp     byte [esi],'.'
-       je      invalid_value
-       call    get_count_value
-       mov     ecx,eax
-       mov     edx,ecx
-       add     edx,edi
-       jc      out_of_memory
-       cmp     edx,[tagged_blocks]
-       ja      out_of_memory
-       push    edi
-       cmp     [next_pass_needed],0
-       je      zero_bytes
-       add     edi,ecx
-       jmp     reserved_data
-      zero_bytes:
-       xor     eax,eax
-       shr     ecx,1
-       jnc     bytes_stosb_ok
-       stos    byte [edi]
-      bytes_stosb_ok:
-       shr     ecx,1
-       jnc     bytes_stosw_ok
-       stos    word [edi]
-      bytes_stosw_ok:
-       rep     stos dword [edi]
-      reserved_data:
-       pop     eax
-       call    undefined_data
-       jmp     instruction_assembled
-reserve_words:
-       lods    byte [esi]
-       cmp     al,'('
-       jne     invalid_argument
-       cmp     byte [esi],'.'
-       je      invalid_value
-       call    get_count_value
-       mov     ecx,eax
-       mov     edx,ecx
-       shl     edx,1
-       jc      out_of_memory
-       add     edx,edi
-       jc      out_of_memory
-       cmp     edx,[tagged_blocks]
-       ja      out_of_memory
-       push    edi
-       cmp     [next_pass_needed],0
-       je      zero_words
-       lea     edi,[edi+ecx*2]
-       jmp     reserved_data
-      zero_words:
-       xor     eax,eax
-       shr     ecx,1
-       jnc     words_stosw_ok
-       stos    word [edi]
-      words_stosw_ok:
-       rep     stos dword [edi]
-       jmp     reserved_data
-reserve_dwords:
-       lods    byte [esi]
-       cmp     al,'('
-       jne     invalid_argument
-       cmp     byte [esi],'.'
-       je      invalid_value
-       call    get_count_value
-       mov     ecx,eax
-       mov     edx,ecx
-       shl     edx,1
-       jc      out_of_memory
-       shl     edx,1
-       jc      out_of_memory
-       add     edx,edi
-       jc      out_of_memory
-       cmp     edx,[tagged_blocks]
-       ja      out_of_memory
-       push    edi
-       cmp     [next_pass_needed],0
-       je      zero_dwords
-       lea     edi,[edi+ecx*4]
-       jmp     reserved_data
-      zero_dwords:
-       xor     eax,eax
-       rep     stos dword [edi]
-       jmp     reserved_data
-reserve_pwords:
-       lods    byte [esi]
-       cmp     al,'('
-       jne     invalid_argument
-       cmp     byte [esi],'.'
-       je      invalid_value
-       call    get_count_value
-       mov     ecx,eax
-       shl     ecx,1
-       jc      out_of_memory
-       add     ecx,eax
-       mov     edx,ecx
-       shl     edx,1
-       jc      out_of_memory
-       add     edx,edi
-       jc      out_of_memory
-       cmp     edx,[tagged_blocks]
-       ja      out_of_memory
-       push    edi
-       cmp     [next_pass_needed],0
-       je      zero_words
-       lea     edi,[edi+ecx*2]
-       jmp     reserved_data
-reserve_qwords:
-       lods    byte [esi]
-       cmp     al,'('
-       jne     invalid_argument
-       cmp     byte [esi],'.'
-       je      invalid_value
-       call    get_count_value
-       mov     ecx,eax
-       shl     ecx,1
-       jc      out_of_memory
-       mov     edx,ecx
-       shl     edx,1
-       jc      out_of_memory
-       shl     edx,1
-       jc      out_of_memory
-       add     edx,edi
-       jc      out_of_memory
-       cmp     edx,[tagged_blocks]
-       ja      out_of_memory
-       push    edi
-       cmp     [next_pass_needed],0
-       je      zero_dwords
-       lea     edi,[edi+ecx*4]
-       jmp     reserved_data
-reserve_twords:
-       lods    byte [esi]
-       cmp     al,'('
-       jne     invalid_argument
-       cmp     byte [esi],'.'
-       je      invalid_value
-       call    get_count_value
-       mov     ecx,eax
-       shl     ecx,2
-       jc      out_of_memory
-       add     ecx,eax
-       mov     edx,ecx
-       shl     edx,1
-       jc      out_of_memory
-       add     edx,edi
-       jc      out_of_memory
-       cmp     edx,[tagged_blocks]
-       ja      out_of_memory
-       push    edi
-       cmp     [next_pass_needed],0
-       je      zero_words
-       lea     edi,[edi+ecx*2]
-       jmp     reserved_data
-align_directive:
-       lods    byte [esi]
-       cmp     al,'('
-       jne     invalid_argument
-       cmp     byte [esi],'.'
-       je      invalid_value
-       call    get_count_value
-       mov     edx,eax
-       dec     edx
-       test    eax,edx
-       jnz     invalid_align_value
-       or      eax,eax
-       jz      invalid_align_value
-       cmp     eax,1
-       je      instruction_assembled
-       mov     ecx,edi
-       mov     ebp,[addressing_space]
-       sub     ecx,[ds:ebp]
-       cmp     dword [ds:ebp+10h],0
-       jne     section_not_aligned_enough
-       cmp     byte [ds:ebp+9],0
-       je      make_alignment
-       cmp     [output_format],3
-       je      pe_alignment
-       cmp     [output_format],5
-       jne     object_alignment
-       test    [format_flags],1
-       jnz     pe_alignment
-      object_alignment:
-       mov     ebx,[ds:ebp+14h]
-       cmp     byte [ebx],0
-       jne     section_not_aligned_enough
-       cmp     eax,[ebx+10h]
-       jbe     make_alignment
-       jmp     section_not_aligned_enough
-      pe_alignment:
-       cmp     eax,1000h
-       ja      section_not_aligned_enough
-      make_alignment:
-       dec     eax
-       and     ecx,eax
-       jz      instruction_assembled
-       neg     ecx
-       add     ecx,eax
-       inc     ecx
-       mov     edx,ecx
-       add     edx,edi
-       jc      out_of_memory
-       cmp     edx,[tagged_blocks]
-       ja      out_of_memory
-       push    edi
-       cmp     [next_pass_needed],0
-       je      nops
-       add     edi,ecx
-       jmp     reserved_data
-      invalid_align_value:
-       cmp     [error_line],0
-       jne     instruction_assembled
-       mov     eax,[current_line]
-       mov     [error_line],eax
-       mov     [error],invalid_value
-       jmp     instruction_assembled
-      nops:
-       mov     eax,90909090h
-       shr     ecx,1
-       jnc     nops_stosb_ok
-       stos    byte [edi]
-      nops_stosb_ok:
-       shr     ecx,1
-       jnc     nops_stosw_ok
-       stos    word [edi]
-      nops_stosw_ok:
-       rep     stos dword [edi]
-       jmp     reserved_data
-err_directive:
-       mov     al,[esi]
-       cmp     al,0Fh
-       je      invoked_error
-       or      al,al
-       jz      invoked_error
-       jmp     extra_characters_on_line
-assert_directive:
-       call    calculate_logical_expression
-       or      al,al
-       jnz     instruction_assembled
-       cmp     [error_line],0
-       jne     instruction_assembled
-       mov     eax,[current_line]
-       mov     [error_line],eax
-       mov     [error],assertion_failed
-       jmp     instruction_assembled
diff --git a/source/avx.inc b/source/avx.inc
deleted file mode 100644 (file)
index 073fc73..0000000
+++ /dev/null
@@ -1,3425 +0,0 @@
-
-; flat assembler core
-; Copyright (c) 1999-2022, Tomasz Grysztar.
-; All rights reserved.
-
-avx_single_source_pd_instruction_er_evex:
-       or      [vex_required],8
-avx_single_source_pd_instruction_er:
-       or      [operand_flags],2+4+8
-       jmp     avx_pd_instruction
-avx_single_source_pd_instruction_sae_evex:
-       or      [vex_required],8
-       or      [operand_flags],2+4
-       jmp     avx_pd_instruction
-avx_pd_instruction_imm8:
-       mov     [immediate_size],1
-       jmp     avx_pd_instruction
-avx_pd_instruction_er:
-       or      [operand_flags],8
-avx_pd_instruction_sae:
-       or      [operand_flags],4
-avx_pd_instruction:
-       mov     [opcode_prefix],66h
-       or      [rex_prefix],80h
-       mov     cx,0800h
-       jmp     avx_instruction_with_broadcast
-avx_pd_instruction_38_evex:
-       or      [vex_required],8
-       mov     [supplemental_code],al
-       mov     al,38h
-       jmp     avx_pd_instruction
-avx_cvtps2dq_instruction:
-       mov     [opcode_prefix],66h
-       jmp     avx_single_source_ps_instruction_er
-avx_cvtudq2ps_instruction:
-       mov     [opcode_prefix],0F2h
-avx_single_source_ps_instruction_er_evex:
-       or      [vex_required],8
-avx_single_source_ps_instruction_er:
-       or      [operand_flags],2+4+8
-       jmp     avx_ps_instruction
-avx_single_source_ps_instruction_noevex:
-       or      [operand_flags],2
-       or      [vex_required],2
-       jmp     avx_ps_instruction
-avx_ps_instruction_imm8:
-       mov     [immediate_size],1
-       jmp     avx_ps_instruction
-avx_ps_instruction_er:
-       or      [operand_flags],8
-avx_ps_instruction_sae:
-       or      [operand_flags],4
-avx_ps_instruction:
-       mov     cx,0400h
-       jmp     avx_instruction_with_broadcast
-avx_ps_instruction_66_38_evex:
-       or      [vex_required],8
-       mov     [opcode_prefix],66h
-       mov     [supplemental_code],al
-       mov     al,38h
-       jmp     avx_ps_instruction
-avx_sd_instruction_er:
-       or      [operand_flags],8
-avx_sd_instruction_sae:
-       or      [operand_flags],4
-avx_sd_instruction:
-       mov     [opcode_prefix],0F2h
-       or      [rex_prefix],80h
-       mov     cl,8
-       jmp     avx_instruction
-avx_ss_instruction_er:
-       or      [operand_flags],8
-avx_ss_instruction_sae:
-       or      [operand_flags],4
-avx_ss_instruction:
-       mov     [opcode_prefix],0F3h
-       mov     cl,4
-       jmp     avx_instruction
-avx_ss_instruction_noevex:
-       or      [vex_required],2
-       jmp     avx_ss_instruction
-avx_single_source_q_instruction_38_evex:
-       or      [operand_flags],2
-avx_q_instruction_38_evex:
-       or      [vex_required],8
-avx_q_instruction_38:
-       mov     [supplemental_code],al
-       mov     al,38h
-       jmp     avx_q_instruction
-avx_q_instruction_38_w1_evex:
-       or      [vex_required],8
-avx_q_instruction_38_w1:
-       or      [rex_prefix],8
-       jmp     avx_q_instruction_38
-avx_q_instruction_3a_imm8_w1:
-       or      [rex_prefix],8
-       jmp     avx_q_instruction_3a_imm8
-avx_q_instruction_3a_imm8_evex:
-       or      [vex_required],8
-avx_q_instruction_3a_imm8:
-       mov     [immediate_size],1
-       mov     [supplemental_code],al
-       mov     al,3Ah
-       jmp     avx_q_instruction
-avx_q_instruction_evex:
-       or      [vex_required],8
-avx_q_instruction:
-       or      [rex_prefix],80h
-       mov     ch,8
-       jmp     avx_pi_instruction
-avx_single_source_d_instruction_38_evex_w1:
-       or      [rex_prefix],8
-avx_single_source_d_instruction_38_evex:
-       or      [vex_required],8
-avx_single_source_d_instruction_38:
-       or      [operand_flags],2
-       jmp     avx_d_instruction_38
-avx_d_instruction_38_evex:
-       or      [vex_required],8
-avx_d_instruction_38:
-       mov     [supplemental_code],al
-       mov     al,38h
-       jmp     avx_d_instruction
-avx_d_instruction_3a_imm8_evex:
-       mov     [immediate_size],1
-       or      [vex_required],8
-       mov     [supplemental_code],al
-       mov     al,3Ah
-       jmp     avx_d_instruction
-avx_single_source_d_instruction_imm8:
-       or      [operand_flags],2
-       mov     [immediate_size],1
-       jmp     avx_d_instruction
-avx_d_instruction_evex:
-       or      [vex_required],8
-avx_d_instruction:
-       mov     ch,4
-       jmp     avx_pi_instruction
-avx_bw_instruction_3a_imm8_w1_evex:
-       or      [rex_prefix],8
-avx_bw_instruction_3a_imm8_evex:
-       mov     [immediate_size],1
-       or      [vex_required],8
-       mov     [supplemental_code],al
-       mov     al,3Ah
-       jmp     avx_bw_instruction
-avx_single_source_bw_instruction_38:
-       or      [operand_flags],2
-avx_bw_instruction_38:
-       mov     [supplemental_code],al
-       mov     al,38h
-avx_bw_instruction:
-       xor     ch,ch
-      avx_pi_instruction:
-       mov     [opcode_prefix],66h
-       xor     cl,cl
-       jmp     avx_instruction_with_broadcast
-avx_bw_instruction_38_w1_evex:
-       or      [rex_prefix],8
-avx_bw_instruction_38_evex:
-       or      [vex_required],8
-       jmp     avx_bw_instruction_38
-avx_pd_instruction_noevex:
-       xor     cl,cl
-       or      [vex_required],2
-       mov     [opcode_prefix],66h
-       jmp     avx_instruction
-avx_ps_instruction_noevex:
-       or      [vex_required],2
-       mov     [opcode_prefix],0F2h
-       xor     cl,cl
-       jmp     avx_instruction
-avx_instruction:
-       xor     ch,ch
-      avx_instruction_with_broadcast:
-       mov     [mmx_size],cl
-       mov     [broadcast_size],ch
-       mov     [base_code],0Fh
-       mov     [extended_code],al
-      avx_xop_common:
-       or      [vex_required],1
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-      avx_reg:
-       lods    byte [esi]
-       call    convert_avx_register
-       mov     [postbyte_register],al
-       call    take_avx512_mask
-      avx_vex_reg:
-       test    [operand_flags],2
-       jnz     avx_vex_reg_ok
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_avx_register
-       mov     [vex_register],al
-      avx_vex_reg_ok:
-       mov     al,[mmx_size]
-       or      al,al
-       jz      avx_regs_size_ok
-       mov     ah,[operand_size]
-       or      ah,ah
-       jz      avx_regs_size_ok
-       cmp     al,ah
-       je      avx_regs_size_ok
-       ja      invalid_operand_size
-       cmp     ah,16
-       jne     invalid_operand_size
-      avx_regs_size_ok:
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-      avx_regs_rm:
-       call    take_avx_rm
-       jc      avx_regs_reg
-       mov     al,[immediate_size]
-       cmp     al,1
-       je      mmx_imm8
-       jb      instruction_ready
-       cmp     al,-4
-       je      sse_cmp_mem_ok
-       cmp     byte [esi],','
-       jne     invalid_operand
-       inc     esi
-       call    take_avx_register
-       shl     al,4
-       jc      invalid_operand
-       or      byte [value],al
-       test    al,80h
-       jz      avx_regs_mem_reg_store
-       cmp     [code_type],64
-       jne     invalid_operand
-      avx_regs_mem_reg_store:
-       call    take_imm4_if_needed
-       call    store_instruction_with_imm8
-       jmp     instruction_assembled
-      avx_regs_reg:
-       mov     bl,al
-       call    take_avx512_rounding
-       mov     al,[immediate_size]
-       cmp     al,1
-       je      mmx_nomem_imm8
-       jb      nomem_instruction_ready
-       cmp     al,-4
-       je      sse_cmp_nomem_ok
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       mov     al,bl
-       shl     al,4
-       jc      invalid_operand
-       or      byte [value],al
-       test    al,80h
-       jz      avx_regs_reg_
-       cmp     [code_type],64
-       jne     invalid_operand
-      avx_regs_reg_:
-       call    take_avx_rm
-       jc      avx_regs_reg_reg
-       cmp     [immediate_size],-2
-       jg      invalid_operand
-       or      [rex_prefix],8
-       call    take_imm4_if_needed
-       call    store_instruction_with_imm8
-       jmp     instruction_assembled
-      avx_regs_reg_reg:
-       shl     al,4
-       jc      invalid_operand
-       and     byte [value],1111b
-       or      byte [value],al
-       call    take_imm4_if_needed
-       call    store_nomem_instruction
-       mov     al,byte [value]
-       stos    byte [edi]
-       jmp     instruction_assembled
-      take_avx_rm:
-       xor     cl,cl
-       xchg    cl,[operand_size]
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       je      take_avx_mem
-       cmp     al,10h
-       jne     invalid_operand
-       mov     [operand_size],cl
-       lods    byte [esi]
-       call    convert_avx_register
-       or      cl,cl
-       jnz     avx_reg_ok
-       or      cl,[mmx_size]
-       jz      avx_reg_ok
-       cmp     ah,cl
-       je      avx_reg_ok
-       jb      invalid_operand_size
-       cmp     ah,16
-       jne     invalid_operand_size
-      avx_reg_ok:
-       stc
-       ret
-      take_avx_mem:
-       push    ecx
-       call    get_address
-       cmp     byte [esi],'{'
-       jne     avx_mem_ok
-       inc     esi
-       lods    byte [esi]
-       cmp     al,1Fh
-       jne     invalid_operand
-       mov     al,[esi]
-       shr     al,4
-       cmp     al,1
-       jne     invalid_operand
-       mov     al,[mmx_size]
-       or      al,al
-       jnz     avx_mem_broadcast_check
-       mov     eax,[esp]
-       or      al,al
-       jnz     avx_mem_broadcast_check
-       mov     al,[broadcast_size]
-       mov     [mmx_size],al
-       mov     ah,cl
-       lods    byte [esi]
-       and     al,1111b
-       mov     cl,al
-       mov     al,[broadcast_size]
-       shl     al,cl
-       mov     [esp],al
-       mov     cl,ah
-       jmp     avx_mem_broadcast_ok
-      avx_mem_broadcast_check:
-       bsf     eax,eax
-       xchg    al,[broadcast_size]
-       mov     [mmx_size],al
-       bsf     eax,eax
-       jz      invalid_operand
-       mov     ah,[broadcast_size]
-       sub     ah,al
-       lods    byte [esi]
-       and     al,1111b
-       cmp     al,ah
-       jne     invalid_operand_size
-      avx_mem_broadcast_ok:
-       or      [vex_required],40h
-       lods    byte [esi]
-       cmp     al,'}'
-       jne     invalid_operand
-      avx_mem_ok:
-       pop     eax
-       or      al,al
-       jz      avx_mem_size_deciding
-       xchg    al,[operand_size]
-       cmp     [mmx_size],0
-       jne     avx_mem_size_enforced
-       or      al,al
-       jz      avx_mem_size_ok
-       cmp     al,[operand_size]
-       jne     operand_sizes_do_not_match
-      avx_mem_size_ok:
-       clc
-       ret
-      avx_mem_size_deciding:
-       mov     al,[operand_size]
-       cmp     [mmx_size],0
-       jne     avx_mem_size_enforced
-       cmp     al,16
-       je      avx_mem_size_ok
-       cmp     al,32
-       je      avx_mem_size_ok
-       cmp     al,64
-       je      avx_mem_size_ok
-       or      al,al
-       jnz     invalid_operand_size
-       call    recoverable_unknown_size
-      avx_mem_size_enforced:
-       or      al,al
-       jz      avx_mem_size_ok
-       cmp     al,[mmx_size]
-       je      avx_mem_size_ok
-       jmp     invalid_operand_size
-      take_imm4_if_needed:
-       cmp     [immediate_size],-3
-       jne     imm4_ok
-       push    ebx ecx edx
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       cmp     al,'('
-       jne     invalid_operand
-       call    get_byte_value
-       test    al,11110000b
-       jnz     value_out_of_range
-       or      byte [value],al
-       pop     edx ecx ebx
-      imm4_ok:
-       ret
-      take_avx512_mask:
-       cmp     byte [esi],'{'
-       jne     avx512_masking_ok
-       test    [operand_flags],10h
-       jnz     invalid_operand
-       inc     esi
-       lods    byte [esi]
-       cmp     al,14h
-       jne     invalid_operand
-       lods    byte [esi]
-       mov     ah,al
-       shr     ah,4
-       cmp     ah,5
-       jne     invalid_operand
-       and     al,111b
-       or      al,al
-       jz      invalid_operand
-       mov     [mask_register],al
-       or      [vex_required],20h
-       lods    byte [esi]
-       cmp     al,'}'
-       jne     invalid_operand
-       cmp     byte [esi],'{'
-       jne     avx512_masking_ok
-       test    [operand_flags],20h
-       jnz     invalid_operand
-       inc     esi
-       lods    byte [esi]
-       cmp     al,1Fh
-       jne     invalid_operand
-       lods    byte [esi]
-       or      al,al
-       jnz     invalid_operand
-       or      [mask_register],80h
-       lods    byte [esi]
-       cmp     al,'}'
-       jne     invalid_operand
-      avx512_masking_ok:
-       retn
-      take_avx512_rounding:
-       test    [operand_flags],4+8
-       jz      avx512_rounding_done
-       test    [operand_flags],8
-       jz      avx512_rounding_allowed
-       cmp     [mmx_size],0
-       jne     avx512_rounding_allowed
-       cmp     [operand_size],64
-       jne     avx512_rounding_done
-      avx512_rounding_allowed:
-       cmp     byte [esi],','
-       jne     avx512_rounding_done
-       cmp     byte [esi+1],'{'
-       jne     avx512_rounding_done
-       add     esi,2
-       mov     [rounding_mode],0
-       or      [vex_required],40h
-       test    [operand_flags],8
-       jz      take_sae
-       or      [vex_required],80h
-       lods    byte [esi]
-       cmp     al,1Fh
-       jne     invalid_operand
-       lods    byte [esi]
-       mov     ah,al
-       shr     ah,4
-       cmp     ah,2
-       jne     invalid_operand
-       and     al,11b
-       mov     [rounding_mode],al
-       lods    byte [esi]
-       cmp     al,'-'
-       jne     invalid_operand
-      take_sae:
-       lods    byte [esi]
-       cmp     al,1Fh
-       jne     invalid_operand
-       lods    byte [esi]
-       cmp     al,30h
-       jne     invalid_operand
-       lods    byte [esi]
-       cmp     al,'}'
-       jne     invalid_operand
-      avx512_rounding_done:
-       retn
-
-avx_movdqu_instruction:
-       mov     ah,0F3h
-       jmp     avx_movdq_instruction
-avx_movdqa_instruction:
-       mov     ah,66h
-      avx_movdq_instruction:
-       mov     [opcode_prefix],ah
-       or      [vex_required],2
-       jmp     avx_movps_instruction
-avx512_movdqu16_instruction:
-       or      [rex_prefix],8
-avx512_movdqu8_instruction:
-       mov     ah,0F2h
-       jmp     avx_movdq_instruction_evex
-avx512_movdqu64_instruction:
-       or      [rex_prefix],8
-avx512_movdqu32_instruction:
-       mov     ah,0F3h
-       jmp     avx_movdq_instruction_evex
-avx512_movdqa64_instruction:
-       or      [rex_prefix],8
-avx512_movdqa32_instruction:
-       mov     ah,66h
-      avx_movdq_instruction_evex:
-       mov     [opcode_prefix],ah
-       or      [vex_required],8
-       jmp     avx_movps_instruction
-avx_movpd_instruction:
-       mov     [opcode_prefix],66h
-       or      [rex_prefix],80h
-avx_movps_instruction:
-       or      [operand_flags],2
-       mov     [base_code],0Fh
-       mov     [extended_code],al
-       or      [vex_required],1
-       xor     al,al
-       mov     [mmx_size],al
-       mov     [broadcast_size],al
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      avx_reg
-       inc     [extended_code]
-       test    [extended_code],1
-       jnz     avx_mem
-       add     [extended_code],-1+10h
-      avx_mem:
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       or      [operand_flags],20h
-       call    take_avx512_mask
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_avx_register
-       mov     [postbyte_register],al
-       jmp     instruction_ready
-avx_movntpd_instruction:
-       or      [rex_prefix],80h
-avx_movntdq_instruction:
-       mov     [opcode_prefix],66h
-avx_movntps_instruction:
-       mov     [base_code],0Fh
-       mov     [extended_code],al
-       or      [vex_required],1
-       or      [operand_flags],10h
-       mov     [mmx_size],0
-       lods    byte [esi]
-       call    get_size_operator
-       jmp     avx_mem
-avx_compress_q_instruction:
-       or      [rex_prefix],8
-avx_compress_d_instruction:
-       or      [vex_required],8
-       mov     [mmx_size],0
-       call    setup_66_0f_38
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     avx_mem
-       lods    byte [esi]
-       call    convert_avx_register
-       mov     bl,al
-       call    take_avx512_mask
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_avx_register
-       mov     [postbyte_register],al
-       jmp     nomem_instruction_ready
-avx_lddqu_instruction:
-       mov     ah,0F2h
-       or      [vex_required],2
-      avx_load_instruction:
-       mov     [opcode_prefix],ah
-       mov     [base_code],0Fh
-       mov     [extended_code],al
-       mov     [mmx_size],0
-       or      [vex_required],1
-       call    take_avx_register
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       jmp     instruction_ready
-avx_movntdqa_instruction:
-       mov     [supplemental_code],al
-       mov     al,38h
-       mov     ah,66h
-       jmp     avx_load_instruction
-avx_movq_instruction:
-       or      [rex_prefix],8
-       mov     [mmx_size],8
-       jmp     avx_mov_instruction
-avx_movd_instruction:
-       mov     [mmx_size],4
-      avx_mov_instruction:
-       or      [vex_required],1
-       mov     [opcode_prefix],66h
-       mov     [base_code],0Fh
-       mov     [extended_code],7Eh
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      avx_movd_reg
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       mov     al,[mmx_size]
-       not     al
-       and     [operand_size],al
-       jnz     invalid_operand_size
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_avx_register
-       cmp     ah,16
-       jne     invalid_operand_size
-       mov     [postbyte_register],al
-       cmp     [mmx_size],8
-       jne     instruction_ready
-       and     [rex_prefix],not 8
-       or      [rex_prefix],80h
-       mov     [extended_code],0D6h
-       jmp     instruction_ready
-      avx_movd_reg:
-       lods    byte [esi]
-       cmp     al,0C0h
-       jae     avx_movd_xmmreg
-       call    convert_register
-       cmp     ah,[mmx_size]
-       jne     invalid_operand_size
-       mov     [operand_size],0
-       mov     bl,al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_avx_register
-       cmp     ah,16
-       jne     invalid_operand_size
-       mov     [postbyte_register],al
-      avx_movd_reg_ready:
-       test    [rex_prefix],8
-       jz      nomem_instruction_ready
-       cmp     [code_type],64
-       jne     illegal_instruction
-       jmp     nomem_instruction_ready
-      avx_movd_xmmreg:
-       sub     [extended_code],10h
-       call    convert_avx_register
-       cmp     ah,16
-       jne     invalid_operand_size
-       mov     [postbyte_register],al
-       mov     [operand_size],0
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      avx_movd_xmmreg_reg
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       mov     al,[mmx_size]
-       cmp     al,8
-       jne     avx_movd_xmmreg_mem_ready
-       call    avx_movq_xmmreg_xmmreg_opcode
-      avx_movd_xmmreg_mem_ready:
-       not     al
-       test    [operand_size],al
-       jnz     invalid_operand_size
-       jmp     instruction_ready
-      avx_movd_xmmreg_reg:
-       lods    byte [esi]
-       cmp     al,0C0h
-       jae     avx_movq_xmmreg_xmmreg
-       call    convert_register
-       cmp     ah,[mmx_size]
-       jne     invalid_operand_size
-       mov     bl,al
-       jmp     avx_movd_reg_ready
-      avx_movq_xmmreg_xmmreg:
-       cmp     [mmx_size],8
-       jne     invalid_operand
-       call    avx_movq_xmmreg_xmmreg_opcode
-       call    convert_avx_register
-       cmp     ah,16
-       jne     invalid_operand_size
-       mov     bl,al
-       jmp     nomem_instruction_ready
-      avx_movq_xmmreg_xmmreg_opcode:
-       and     [rex_prefix],not 8
-       or      [rex_prefix],80h
-       add     [extended_code],10h
-       mov     [opcode_prefix],0F3h
-       ret
-avx_movddup_instruction:
-       or      [vex_required],1
-       mov     [opcode_prefix],0F2h
-       mov     [base_code],0Fh
-       mov     [extended_code],al
-       or      [rex_prefix],80h
-       xor     al,al
-       mov     [mmx_size],al
-       mov     [broadcast_size],al
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_avx_register
-       mov     [postbyte_register],al
-       cmp     ah,16
-       ja      avx_movddup_size_ok
-       mov     [mmx_size],8
-      avx_movddup_size_ok:
-       call    take_avx512_mask
-       jmp     avx_vex_reg_ok
-avx_movlpd_instruction:
-       mov     [opcode_prefix],66h
-       or      [rex_prefix],80h
-avx_movlps_instruction:
-       mov     [base_code],0Fh
-       mov     [extended_code],al
-       mov     [mmx_size],8
-       mov     [broadcast_size],0
-       or      [vex_required],1
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     avx_movlps_mem
-       lods    byte [esi]
-       call    convert_avx_register
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_avx_register
-       mov     [vex_register],al
-       cmp     [operand_size],16
-       jne     invalid_operand
-       mov     [operand_size],0
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_avx_rm
-       jc      invalid_operand
-       jmp     instruction_ready
-      avx_movlps_mem:
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-      avx_movlps_mem_:
-       mov     al,[operand_size]
-       or      al,al
-       jz      avx_movlps_mem_size_ok
-       cmp     al,[mmx_size]
-       jne     invalid_operand_size
-       mov     [operand_size],0
-      avx_movlps_mem_size_ok:
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_avx_register
-       cmp     ah,16
-       jne     invalid_operand
-       mov     [postbyte_register],al
-       inc     [extended_code]
-       jmp     instruction_ready
-avx_movhlps_instruction:
-       mov     [base_code],0Fh
-       mov     [extended_code],al
-       or      [vex_required],1
-       call    take_avx_register
-       cmp     ah,16
-       jne     invalid_operand
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_avx_register
-       mov     [vex_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_avx_register
-       mov     bl,al
-       jmp     nomem_instruction_ready
-avx_movsd_instruction:
-       mov     al,0F2h
-       mov     cl,8
-       or      [rex_prefix],80h
-       jmp     avx_movs_instruction
-avx_movss_instruction:
-       mov     al,0F3h
-       mov     cl,4
-      avx_movs_instruction:
-       mov     [opcode_prefix],al
-       mov     [mmx_size],cl
-       or      [vex_required],1
-       mov     [base_code],0Fh
-       mov     [extended_code],10h
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     avx_movs_mem
-       lods    byte [esi]
-       call    convert_avx_register
-       cmp     ah,16
-       jne     invalid_operand
-       mov     [postbyte_register],al
-       call    take_avx512_mask
-       xor     cl,cl
-       xchg    cl,[operand_size]
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     avx_movs_reg_mem
-       mov     [operand_size],cl
-       lods    byte [esi]
-       call    convert_avx_register
-       mov     [vex_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_avx_register
-       mov     bl,al
-       cmp     bl,8
-       jb      nomem_instruction_ready
-       inc     [extended_code]
-       xchg    bl,[postbyte_register]
-       jmp     nomem_instruction_ready
-      avx_movs_reg_mem:
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       mov     al,[operand_size]
-       or      al,al
-       jz      avx_movs_reg_mem_ok
-       cmp     al,[mmx_size]
-       jne     invalid_operand_size
-      avx_movs_reg_mem_ok:
-       jmp     instruction_ready
-      avx_movs_mem:
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       or      [operand_flags],20h
-       call    take_avx512_mask
-       jmp     avx_movlps_mem_
-
-avx_comiss_instruction:
-       or      [operand_flags],2+4+10h
-       mov     cl,4
-       jmp     avx_instruction
-avx_comisd_instruction:
-       or      [operand_flags],2+4+10h
-       mov     [opcode_prefix],66h
-       or      [rex_prefix],80h
-       mov     cl,8
-       jmp     avx_instruction
-avx_movshdup_instruction:
-       or      [operand_flags],2
-       mov     [opcode_prefix],0F3h
-       xor     cl,cl
-       jmp     avx_instruction
-avx_cvtqq2pd_instruction:
-       mov     [opcode_prefix],0F3h
-       or      [vex_required],8
-       or      [operand_flags],2+4+8
-       or      [rex_prefix],8
-       mov     cx,0800h
-       jmp     avx_instruction_with_broadcast
-avx_pshuf_w_instruction:
-       mov     [opcode_prefix],al
-       or      [operand_flags],2
-       mov     [immediate_size],1
-       mov     al,70h
-       xor     cl,cl
-       jmp     avx_instruction
-avx_single_source_128bit_instruction_38_noevex:
-       or      [operand_flags],2
-avx_128bit_instruction_38_noevex:
-       mov     cl,16
-       jmp     avx_instruction_38_noevex
-avx_single_source_instruction_38_noevex:
-       or      [operand_flags],2
-       jmp     avx_pi_instruction_38_noevex
-avx_pi_instruction_38_noevex:
-       xor     cl,cl
-      avx_instruction_38_noevex:
-       or      [vex_required],2
-      avx_instruction_38:
-       mov     [opcode_prefix],66h
-       mov     [supplemental_code],al
-       mov     al,38h
-       jmp     avx_instruction
-avx_ss_instruction_3a_imm8_noevex:
-       mov     cl,4
-       jmp     avx_instruction_3a_imm8_noevex
-avx_sd_instruction_3a_imm8_noevex:
-       mov     cl,8
-       jmp     avx_instruction_3a_imm8_noevex
-avx_single_source_128bit_instruction_3a_imm8_noevex:
-       or      [operand_flags],2
-avx_128bit_instruction_3a_imm8_noevex:
-       mov     cl,16
-       jmp     avx_instruction_3a_imm8_noevex
-avx_triple_source_instruction_3a_noevex:
-       xor     cl,cl
-       mov     [immediate_size],-1
-       mov     byte [value],0
-       jmp     avx_instruction_3a_noevex
-avx_single_source_instruction_3a_imm8_noevex:
-       or      [operand_flags],2
-avx_pi_instruction_3a_imm8_noevex:
-       xor     cl,cl
-      avx_instruction_3a_imm8_noevex:
-       mov     [immediate_size],1
-      avx_instruction_3a_noevex:
-       or      [vex_required],2
-      avx_instruction_3a:
-       mov     [opcode_prefix],66h
-       mov     [supplemental_code],al
-       mov     al,3Ah
-       jmp     avx_instruction
-avx_pi_instruction_3a_imm8:
-       xor     cl,cl
-       mov     [immediate_size],1
-       jmp     avx_instruction_3a
-avx_pclmulqdq_instruction:
-       mov     byte [value],al
-       mov     [immediate_size],-4
-       xor     cl,cl
-       mov     al,44h
-       or      [operand_flags],10h
-       jmp     avx_instruction_3a
-avx_instruction_38_nomask:
-       or      [operand_flags],10h
-       xor     cl,cl
-       jmp     avx_instruction_38
-
-avx512_single_source_pd_instruction_sae_imm8:
-       or      [operand_flags],2
-avx512_pd_instruction_sae_imm8:
-       or      [rex_prefix],8
-       mov     cx,0800h
-       jmp     avx512_instruction_sae_imm8
-avx512_single_source_ps_instruction_sae_imm8:
-       or      [operand_flags],2
-avx512_ps_instruction_sae_imm8:
-       mov     cx,0400h
-       jmp     avx512_instruction_sae_imm8
-avx512_sd_instruction_sae_imm8:
-       or      [rex_prefix],8
-       mov     cx,0008h
-       jmp     avx512_instruction_sae_imm8
-avx512_ss_instruction_sae_imm8:
-       mov     cx,0004h
-      avx512_instruction_sae_imm8:
-       or      [operand_flags],4
-      avx512_instruction_imm8:
-       or      [vex_required],8
-       mov     [opcode_prefix],66h
-       mov     [immediate_size],1
-       mov     [supplemental_code],al
-       mov     al,3Ah
-       jmp     avx_instruction_with_broadcast
-avx512_pd_instruction_er:
-       or      [operand_flags],4+8
-       jmp     avx512_pd_instruction
-avx512_single_source_pd_instruction_sae:
-       or      [operand_flags],4
-avx512_single_source_pd_instruction:
-       or      [operand_flags],2
-avx512_pd_instruction:
-       or      [rex_prefix],8
-       mov     cx,0800h
-       jmp     avx512_instruction
-avx512_ps_instruction_er:
-       or      [operand_flags],4+8
-       jmp     avx512_ps_instruction
-avx512_single_source_ps_instruction_sae:
-       or      [operand_flags],4
-avx512_single_source_ps_instruction:
-       or      [operand_flags],2
-avx512_ps_instruction:
-       mov     cx,0400h
-       jmp     avx512_instruction
-avx512_sd_instruction_er:
-       or      [operand_flags],8
-avx512_sd_instruction_sae:
-       or      [operand_flags],4
-avx512_sd_instruction:
-       or      [rex_prefix],8
-       mov     cx,0008h
-       jmp     avx512_instruction
-avx512_ss_instruction_er:
-       or      [operand_flags],8
-avx512_ss_instruction_sae:
-       or      [operand_flags],4
-avx512_ss_instruction:
-       mov     cx,0004h
-      avx512_instruction:
-       or      [vex_required],8
-       mov     [opcode_prefix],66h
-       mov     [supplemental_code],al
-       mov     al,38h
-       jmp     avx_instruction_with_broadcast
-avx512_exp2pd_instruction:
-       or      [rex_prefix],8
-       or      [operand_flags],2+4
-       mov     cx,0840h
-       jmp     avx512_instruction
-avx512_exp2ps_instruction:
-       or      [operand_flags],2+4
-       mov     cx,0440h
-       jmp     avx512_instruction
-
-fma_instruction_pd:
-       or      [rex_prefix],8
-       mov     cx,0800h
-       jmp     fma_instruction
-fma_instruction_ps:
-       mov     cx,0400h
-       jmp     fma_instruction
-fma_instruction_sd:
-       or      [rex_prefix],8
-       mov     cx,0008h
-       jmp     fma_instruction
-fma_instruction_ss:
-       mov     cx,0004h
-      fma_instruction:
-       or      [operand_flags],4+8
-       mov     [opcode_prefix],66h
-       mov     [supplemental_code],al
-       mov     al,38h
-       jmp     avx_instruction_with_broadcast
-
-fma4_instruction_p:
-       xor     cl,cl
-       jmp     fma4_instruction
-fma4_instruction_sd:
-       mov     cl,8
-       jmp     fma4_instruction
-fma4_instruction_ss:
-       mov     cl,4
-      fma4_instruction:
-       mov     [immediate_size],-2
-       mov     byte [value],0
-       jmp     avx_instruction_3a_noevex
-
-avx_cmp_pd_instruction:
-       mov     [opcode_prefix],66h
-       or      [rex_prefix],80h
-       mov     cx,0800h
-       jmp     avx_cmp_instruction
-avx_cmp_ps_instruction:
-       mov     cx,0400h
-       jmp     avx_cmp_instruction
-avx_cmp_sd_instruction:
-       mov     [opcode_prefix],0F2h
-       or      [rex_prefix],80h
-       mov     cx,0008h
-       jmp     avx_cmp_instruction
-avx_cmp_ss_instruction:
-       mov     [opcode_prefix],0F3h
-       mov     cx,0004h
-      avx_cmp_instruction:
-       mov     byte [value],al
-       mov     [immediate_size],-4
-       or      [operand_flags],4+20h
-       mov     al,0C2h
-       jmp     avx_cmp_common
-avx_cmpeqq_instruction:
-       or      [rex_prefix],80h
-       mov     ch,8
-       mov     [supplemental_code],al
-       mov     al,38h
-       jmp     avx_cmp_pi_instruction
-avx_cmpeqd_instruction:
-       mov     ch,4
-       jmp     avx_cmp_pi_instruction
-avx_cmpeqb_instruction:
-       xor     ch,ch
-       jmp     avx_cmp_pi_instruction
-avx512_cmp_uq_instruction:
-       or      [rex_prefix],8
-       mov     ch,8
-       mov     ah,1Eh
-       jmp     avx_cmp_pi_instruction_evex
-avx512_cmp_ud_instruction:
-       mov     ch,4
-       mov     ah,1Eh
-       jmp     avx_cmp_pi_instruction_evex
-avx512_cmp_q_instruction:
-       or      [rex_prefix],8
-       mov     ch,8
-       mov     ah,1Fh
-       jmp     avx_cmp_pi_instruction_evex
-avx512_cmp_d_instruction:
-       mov     ch,4
-       mov     ah,1Fh
-       jmp     avx_cmp_pi_instruction_evex
-avx512_cmp_uw_instruction:
-       or      [rex_prefix],8
-avx512_cmp_ub_instruction:
-       xor     ch,ch
-       mov     ah,3Eh
-       jmp     avx_cmp_pi_instruction_evex
-avx512_cmp_w_instruction:
-       or      [rex_prefix],8
-avx512_cmp_b_instruction:
-       xor     ch,ch
-       mov     ah,3Fh
-      avx_cmp_pi_instruction_evex:
-       mov     byte [value],al
-       mov     [immediate_size],-4
-       mov     [supplemental_code],ah
-       mov     al,3Ah
-       or      [vex_required],8
-      avx_cmp_pi_instruction:
-       xor     cl,cl
-       or      [operand_flags],20h
-       mov     [opcode_prefix],66h
-      avx_cmp_common:
-       mov     [mmx_size],cl
-       mov     [broadcast_size],ch
-       mov     [extended_code],al
-       mov     [base_code],0Fh
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,14h
-       je      avx_maskreg
-       cmp     al,10h
-       jne     invalid_operand
-       or      [vex_required],2
-       jmp     avx_reg
-      avx_maskreg:
-       cmp     [operand_size],0
-       jne     invalid_operand_size
-       or      [vex_required],8
-       lods    byte [esi]
-       call    convert_mask_register
-       mov     [postbyte_register],al
-       call    take_avx512_mask
-       jmp     avx_vex_reg
-avx512_fpclasspd_instruction:
-       or      [rex_prefix],8
-       mov     cx,0800h
-       jmp     avx_fpclass_instruction
-avx512_fpclassps_instruction:
-       mov     cx,0400h
-       jmp     avx_fpclass_instruction
-avx512_fpclasssd_instruction:
-       or      [rex_prefix],8
-       mov     cx,0008h
-       jmp     avx_fpclass_instruction
-avx512_fpclassss_instruction:
-       mov     cx,0004h
-      avx_fpclass_instruction:
-       mov     [broadcast_size],ch
-       mov     [mmx_size],cl
-       or      [operand_flags],2
-       call    setup_66_0f_3a
-       mov     [immediate_size],1
-       lods    byte [esi]
-       cmp     al,14h
-       je      avx_maskreg
-       jmp     invalid_operand
-avx512_ptestnmd_instruction:
-       mov     ch,4
-       jmp     avx512_ptestnm_instruction
-avx512_ptestnmq_instruction:
-       or      [rex_prefix],8
-       mov     ch,8
-       jmp     avx512_ptestnm_instruction
-avx512_ptestnmw_instruction:
-       or      [rex_prefix],8
-avx512_ptestnmb_instruction:
-       xor     ch,ch
-      avx512_ptestnm_instruction:
-       mov     ah,0F3h
-       jmp     avx512_ptest_instruction
-avx512_ptestmd_instruction:
-       mov     ch,4
-       jmp     avx512_ptestm_instruction
-avx512_ptestmq_instruction:
-       or      [rex_prefix],8
-       mov     ch,8
-       jmp     avx512_ptestm_instruction
-avx512_ptestmw_instruction:
-       or      [rex_prefix],8
-avx512_ptestmb_instruction:
-       xor     ch,ch
-      avx512_ptestm_instruction:
-       mov     ah,66h
-      avx512_ptest_instruction:
-       xor     cl,cl
-       mov     [opcode_prefix],ah
-       mov     [supplemental_code],al
-       mov     al,38h
-       or      [vex_required],8
-       jmp     avx_cmp_common
-
-mask_shift_instruction_q:
-       or      [rex_prefix],8
-mask_shift_instruction_d:
-       or      [operand_flags],2
-       or      [immediate_size],1
-       mov     [opcode_prefix],66h
-       mov     [supplemental_code],al
-       mov     al,3Ah
-       jmp     mask_instruction
-mask_instruction_single_source_b:
-       mov     [opcode_prefix],66h
-       jmp     mask_instruction_single_source_w
-mask_instruction_single_source_d:
-       mov     [opcode_prefix],66h
-mask_instruction_single_source_q:
-       or      [rex_prefix],8
-mask_instruction_single_source_w:
-       or      [operand_flags],2
-       jmp     mask_instruction
-mask_instruction_b:
-       mov     [opcode_prefix],66h
-       jmp     mask_instruction_w
-mask_instruction_d:
-       mov     [opcode_prefix],66h
-mask_instruction_q:
-       or      [rex_prefix],8
-mask_instruction_w:
-       mov     [operand_size],32
-mask_instruction:
-       or      [vex_required],1
-       mov     [base_code],0Fh
-       mov     [extended_code],al
-       call    take_mask_register
-       mov     [postbyte_register],al
-       test    [operand_flags],2
-       jnz     mask_instruction_nds_ok
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_mask_register
-       mov     [vex_register],al
-      mask_instruction_nds_ok:
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_mask_register
-       mov     bl,al
-       cmp     [immediate_size],0
-       jne     mmx_nomem_imm8
-       jmp     nomem_instruction_ready
-take_mask_register:
-       lods    byte [esi]
-       cmp     al,14h
-       jne     invalid_operand
-       lods    byte [esi]
-convert_mask_register:
-       mov     ah,al
-       shr     ah,4
-       cmp     ah,5
-       jne     invalid_operand
-       and     al,1111b
-       ret
-kmov_instruction:
-       mov     [mmx_size],al
-       or      [vex_required],1
-       mov     [base_code],0Fh
-       mov     [extended_code],90h
-       lods    byte [esi]
-       cmp     al,14h
-       je      kmov_maskreg
-       cmp     al,10h
-       je      kmov_reg
-       call    get_size_operator
-       inc     [extended_code]
-       cmp     al,'['
-       jne     invalid_argument
-       call    get_address
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_mask_register
-       mov     [postbyte_register],al
-      kmov_with_mem:
-       mov     ah,[mmx_size]
-       mov     al,[operand_size]
-       or      al,al
-       jz      kmov_mem_size_ok
-       cmp     al,ah
-       jne     invalid_operand_size
-      kmov_mem_size_ok:
-       call    setup_kmov_prefix
-       jmp     instruction_ready
-      setup_kmov_prefix:
-       cmp     ah,4
-       jb      kmov_w_ok
-       or      [rex_prefix],8
-      kmov_w_ok:
-       test    ah,1 or 4
-       jz      kmov_prefix_ok
-       mov     [opcode_prefix],66h
-      kmov_prefix_ok:
-       ret
-      kmov_maskreg:
-       lods    byte [esi]
-       call    convert_mask_register
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       cmp     al,14h
-       je      kmov_maskreg_maskreg
-       cmp     al,10h
-       je      kmov_maskreg_reg
-       call    get_size_operator
-       cmp     al,'['
-       jne     invalid_argument
-       call    get_address
-       jmp     kmov_with_mem
-      kmov_maskreg_maskreg:
-       lods    byte [esi]
-       call    convert_mask_register
-       mov     bl,al
-       mov     ah,[mmx_size]
-       call    setup_kmov_prefix
-       jmp     nomem_instruction_ready
-      kmov_maskreg_reg:
-       add     [extended_code],2
-       lods    byte [esi]
-       call    convert_register
-      kmov_with_reg:
-       mov     bl,al
-       mov     al,[mmx_size]
-       mov     ah,4
-       cmp     al,ah
-       jbe     kmov_reg_size_check
-       mov     ah,al
-      kmov_reg_size_check:
-       cmp     ah,[operand_size]
-       jne     invalid_operand_size
-       cmp     al,8
-       je      kmov_f2_w1
-       cmp     al,2
-       ja      kmov_f2
-       je      nomem_instruction_ready
-       mov     [opcode_prefix],66h
-       jmp     nomem_instruction_ready
-      kmov_f2_w1:
-       or      [rex_prefix],8
-       cmp     [code_type],64
-       jne     illegal_instruction
-      kmov_f2:
-       mov     [opcode_prefix],0F2h
-       jmp     nomem_instruction_ready
-      kmov_reg:
-       add     [extended_code],3
-       lods    byte [esi]
-       call    convert_register
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_mask_register
-       jmp     kmov_with_reg
-avx512_pmov_m2_instruction_w1:
-       or      [rex_prefix],8
-avx512_pmov_m2_instruction:
-       or      [vex_required],8
-       call    setup_f3_0f_38
-       call    take_avx_register
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_mask_register
-       mov     bl,al
-       jmp     nomem_instruction_ready
-avx512_pmov_2m_instruction_w1:
-       or      [rex_prefix],8
-avx512_pmov_2m_instruction:
-       or      [vex_required],8
-       call    setup_f3_0f_38
-       call    take_mask_register
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_avx_register
-       mov     bl,al
-       jmp     nomem_instruction_ready
-      setup_f3_0f_38:
-       mov     [extended_code],38h
-       mov     [supplemental_code],al
-       mov     [base_code],0Fh
-       mov     [opcode_prefix],0F3h
-       ret
-
-vzeroall_instruction:
-       mov     [operand_size],32
-vzeroupper_instruction:
-       mov     [base_code],0Fh
-       mov     [extended_code],al
-       and     [displacement_compression],0
-       call    store_vex_instruction_code
-       jmp     instruction_assembled
-vstmxcsr_instruction:
-       or      [vex_required],2
-       jmp     stmxcsr_instruction
-
-avx_perm2f128_instruction:
-       or      [vex_required],2
-       xor     ch,ch
-      avx_instruction_imm8_without_128bit:
-       mov     [immediate_size],1
-       mov     ah,3Ah
-       jmp     avx_instruction_without_128bit
-avx512_shuf_q_instruction:
-       or      [rex_prefix],8
-       or      [vex_required],8
-       mov     ch,8
-       jmp     avx_instruction_imm8_without_128bit
-avx512_shuf_d_instruction:
-       or      [vex_required],8
-       mov     ch,4
-       jmp     avx_instruction_imm8_without_128bit
-avx_permd_instruction:
-       mov     ah,38h
-       mov     ch,4
-      avx_instruction_without_128bit:
-       xor     cl,cl
-       call    setup_avx_66_supplemental
-       call    take_avx_register
-       cmp     ah,32
-       jb      invalid_operand_size
-       mov     [postbyte_register],al
-       call    take_avx512_mask
-       jmp     avx_vex_reg
-      setup_avx_66_supplemental:
-       mov     [opcode_prefix],66h
-       mov     [broadcast_size],ch
-       mov     [mmx_size],cl
-       mov     [base_code],0Fh
-       mov     [extended_code],ah
-       mov     [supplemental_code],al
-       or      [vex_required],1
-       ret
-avx_permq_instruction:
-       or      [rex_prefix],8
-       mov     ch,8
-       jmp     avx_permil_instruction
-avx_permilpd_instruction:
-       or      [rex_prefix],80h
-       mov     ch,8
-       jmp     avx_permil_instruction
-avx_permilps_instruction:
-       mov     ch,4
-      avx_permil_instruction:
-       or      [operand_flags],2
-       xor     cl,cl
-       mov     ah,3Ah
-       call    setup_avx_66_supplemental
-       call    take_avx_register
-       cmp     [supplemental_code],4
-       jae     avx_permil_size_ok
-       cmp     ah,32
-       jb      invalid_operand_size
-      avx_permil_size_ok:
-       mov     [postbyte_register],al
-       call    take_avx512_mask
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_avx_rm
-       jnc     mmx_imm8
-       mov     bl,al
-       cmp     byte [esi],','
-       jne     invalid_operand
-       mov     al,[esi+1]
-       cmp     al,11h
-       jne     avx_permil_rm_or_imm8
-       mov     al,[esi+3]
-      avx_permil_rm_or_imm8:
-       cmp     al,'('
-       je      mmx_nomem_imm8
-       mov     [vex_register],bl
-       inc     esi
-       mov     [extended_code],38h
-       mov     al,[supplemental_code]
-       cmp     al,4
-       jb      avx_permq_rm
-       add     [supplemental_code],8
-       jmp     avx_regs_rm
-      avx_permq_rm:
-       or      [vex_required],8
-       shl     al,5
-       neg     al
-       add     al,36h
-       mov     [supplemental_code],al
-       jmp     avx_regs_rm
-vpermil_2pd_instruction:
-       mov     [immediate_size],-2
-       mov     byte [value],al
-       mov     al,49h
-       jmp     vpermil2_instruction_setup
-vpermil_2ps_instruction:
-       mov     [immediate_size],-2
-       mov     byte [value],al
-       mov     al,48h
-       jmp     vpermil2_instruction_setup
-vpermil2_instruction:
-       mov     [immediate_size],-3
-       mov     byte [value],0
-      vpermil2_instruction_setup:
-       or      [vex_required],2
-       mov     [base_code],0Fh
-       mov     [supplemental_code],al
-       mov     al,3Ah
-       xor     cl,cl
-       jmp     avx_instruction
-
-avx_shift_q_instruction_evex:
-       or      [vex_required],8
-avx_shift_q_instruction:
-       or      [rex_prefix],80h
-       mov     cl,8
-       jmp     avx_shift_instruction
-avx_shift_d_instruction:
-       mov     cl,4
-       jmp     avx_shift_instruction
-avx_shift_bw_instruction:
-       xor     cl,cl
-       avx_shift_instruction:
-       mov     [broadcast_size],cl
-       mov     [mmx_size],0
-       mov     [opcode_prefix],66h
-       mov     [base_code],0Fh
-       mov     [extended_code],al
-       or      [vex_required],1
-       call    take_avx_register
-       mov     [postbyte_register],al
-       call    take_avx512_mask
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       xor     cl,cl
-       xchg    cl,[operand_size]
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       je      avx_shift_reg_mem
-       mov     [operand_size],cl
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_avx_register
-       mov     [vex_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       push    esi
-       xor     cl,cl
-       xchg    cl,[operand_size]
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      avx_shift_reg_reg_reg
-       pop     esi
-       cmp     al,'['
-       je      avx_shift_reg_reg_mem
-       xchg    cl,[operand_size]
-       test    cl,not 1
-       jnz     invalid_operand_size
-       dec     esi
-       call    convert_avx_shift_opcode
-       mov     bl,al
-       jmp     mmx_nomem_imm8
-      convert_avx_shift_opcode:
-       mov     al,[extended_code]
-       mov     ah,al
-       and     ah,1111b
-       add     ah,70h
-       mov     [extended_code],ah
-       shr     al,4
-       sub     al,0Ch
-       shl     al,1
-       xchg    al,[postbyte_register]
-       xchg    al,[vex_register]
-       ret
-      avx_shift_reg_reg_reg:
-       pop     eax
-       lods    byte [esi]
-       call    convert_xmm_register
-       xchg    cl,[operand_size]
-       mov     bl,al
-       jmp     nomem_instruction_ready
-      avx_shift_reg_reg_mem:
-       mov     [mmx_size],16
-       push    ecx
-       lods    byte [esi]
-       call    get_size_operator
-       call    get_address
-       pop     eax
-       xchg    al,[operand_size]
-       test    al,al
-       jz      instruction_ready
-       cmp     al,16
-       jne     invalid_operand_size
-       jmp     instruction_ready
-      avx_shift_reg_mem:
-       or      [vex_required],8
-       call    take_avx_mem
-       call    convert_avx_shift_opcode
-       jmp     mmx_imm8
-avx_shift_dq_instruction:
-       mov     [postbyte_register],al
-       mov     [opcode_prefix],66h
-       mov     [base_code],0Fh
-       mov     [extended_code],73h
-       or      [vex_required],1
-       mov     [mmx_size],0
-       call    take_avx_register
-       mov     [vex_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       je      avx_shift_dq_reg_mem
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_avx_register
-       mov     bl,al
-       jmp     mmx_nomem_imm8
-      avx_shift_dq_reg_mem:
-       or      [vex_required],8
-       call    get_address
-       jmp     mmx_imm8
-avx512_rotate_q_instruction:
-       mov     cl,8
-       or      [rex_prefix],cl
-       jmp     avx512_rotate_instruction
-avx512_rotate_d_instruction:
-       mov     cl,4
-      avx512_rotate_instruction:
-       mov     [broadcast_size],cl
-       mov     [postbyte_register],al
-       mov     [opcode_prefix],66h
-       mov     [base_code],0Fh
-       mov     [extended_code],72h
-       or      [vex_required],8
-       mov     [mmx_size],0
-       mov     [immediate_size],1
-       call    take_avx_register
-       mov     [vex_register],al
-       call    take_avx512_mask
-       jmp     avx_vex_reg_ok
-
-avx_pmovsxbq_instruction:
-       mov     cl,2
-       jmp     avx_pmovsx_instruction
-avx_pmovsxbd_instruction:
-       mov     cl,4
-       jmp     avx_pmovsx_instruction
-avx_pmovsxbw_instruction:
-       mov     cl,8
-      avx_pmovsx_instruction:
-       mov     [mmx_size],cl
-       or      [vex_required],1
-       call    setup_66_0f_38
-       call    take_avx_register
-       mov     [postbyte_register],al
-       call    take_avx512_mask
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       xor     al,al
-       xchg    al,[operand_size]
-       bsf     ecx,eax
-       sub     cl,4
-       shl     [mmx_size],cl
-       push    eax
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      avx_pmovsx_reg_reg
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       pop     eax
-       xchg    al,[operand_size]
-       or      al,al
-       jz      instruction_ready
-       cmp     al,[mmx_size]
-       jne     invalid_operand_size
-       jmp     instruction_ready
-      avx_pmovsx_reg_reg:
-       lods    byte [esi]
-       call    convert_avx_register
-       mov     bl,al
-       cmp     ah,[mmx_size]
-       je      avx_pmovsx_xmmreg_reg_size_ok
-       jb      invalid_operand_size
-       cmp     ah,16
-       jne     invalid_operand_size
-      avx_pmovsx_xmmreg_reg_size_ok:
-       pop     eax
-       mov     [operand_size],al
-       jmp     nomem_instruction_ready
-avx512_pmovqb_instruction:
-       mov     cl,2
-       jmp     avx512_pmov_instruction
-avx512_pmovdb_instruction:
-       mov     cl,4
-       jmp     avx512_pmov_instruction
-avx512_pmovwb_instruction:
-       mov     cl,8
-      avx512_pmov_instruction:
-       mov     [mmx_size],cl
-       or      [vex_required],8
-       mov     [extended_code],38h
-       mov     [supplemental_code],al
-       mov     [base_code],0Fh
-       mov     [opcode_prefix],0F3h
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      avx512_pmov_reg
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       or      [operand_flags],20h
-       call    avx512_pmov_common
-       or      al,al
-       jz      instruction_ready
-       cmp     al,[mmx_size]
-       jne     invalid_operand_size
-       jmp     instruction_ready
-      avx512_pmov_common:
-       call    take_avx512_mask
-       xor     al,al
-       xchg    al,[operand_size]
-       push    eax
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_avx_register
-       mov     [postbyte_register],al
-       mov     al,ah
-       mov     ah,cl
-       bsf     ecx,eax
-       sub     cl,4
-       shl     [mmx_size],cl
-       mov     cl,ah
-       pop     eax
-       ret
-      avx512_pmov_reg:
-       lods    byte [esi]
-       call    convert_avx_register
-       mov     bl,al
-       call    avx512_pmov_common
-       cmp     al,[mmx_size]
-       je      nomem_instruction_ready
-       jb      invalid_operand_size
-       cmp     al,16
-       jne     invalid_operand_size
-       jmp     nomem_instruction_ready
-
-avx_broadcast_128_instruction_noevex:
-       or      [vex_required],2
-       mov     cl,10h
-       jmp     avx_broadcast_instruction
-avx512_broadcast_32x2_instruction:
-       mov     cl,08h
-       jmp     avx_broadcast_instruction_evex
-avx512_broadcast_32x4_instruction:
-       mov     cl,10h
-       jmp     avx_broadcast_instruction_evex
-avx512_broadcast_32x8_instruction:
-       mov     cl,20h
-       jmp     avx_broadcast_instruction_evex
-avx512_broadcast_64x2_instruction:
-       mov     cl,10h
-       jmp     avx_broadcast_instruction_w1_evex
-avx512_broadcast_64x4_instruction:
-       mov     cl,20h
-      avx_broadcast_instruction_w1_evex:
-       or      [rex_prefix],8
-      avx_broadcast_instruction_evex:
-       or      [vex_required],8
-       jmp     avx_broadcast_instruction
-avx_broadcastss_instruction:
-       mov     cl,4
-       jmp     avx_broadcast_instruction
-avx_broadcastsd_instruction:
-       or      [rex_prefix],80h
-       mov     cl,8
-       jmp     avx_broadcast_instruction
-avx_pbroadcastb_instruction:
-       mov     cl,1
-       jmp     avx_broadcast_pi_instruction
-avx_pbroadcastw_instruction:
-       mov     cl,2
-       jmp     avx_broadcast_pi_instruction
-avx_pbroadcastd_instruction:
-       mov     cl,4
-       jmp     avx_broadcast_pi_instruction
-avx_pbroadcastq_instruction:
-       mov     cl,8
-       or      [rex_prefix],80h
-      avx_broadcast_pi_instruction:
-       or      [operand_flags],40h
-      avx_broadcast_instruction:
-       mov     [opcode_prefix],66h
-       mov     [supplemental_code],al
-       mov     al,38h
-       mov     [mmx_size],cl
-       mov     [base_code],0Fh
-       mov     [extended_code],al
-       or      [vex_required],1
-       call    take_avx_register
-       cmp     ah,[mmx_size]
-       je      invalid_operand_size
-       test    [operand_flags],40h
-       jnz     avx_broadcast_destination_size_ok
-       cmp     [mmx_size],4
-       je      avx_broadcast_destination_size_ok
-       cmp     [supplemental_code],59h
-       je      avx_broadcast_destination_size_ok
-       cmp     ah,16
-       je      invalid_operand_size
-      avx_broadcast_destination_size_ok:
-       xor     ah,ah
-       xchg    ah,[operand_size]
-       push    eax
-       call    take_avx512_mask
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      avx_broadcast_reg_reg
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       pop     eax
-       xchg    ah,[operand_size]
-       mov     [postbyte_register],al
-       mov     al,[broadcast_size]
-       mov     al,[mmx_size]
-       cmp     al,ah
-       je      instruction_ready
-       or      al,al
-       jz      instruction_ready
-       or      ah,ah
-       jz      instruction_ready
-       jmp     invalid_operand_size
-      avx_broadcast_reg_reg:
-       lods    byte [esi]
-       test    [operand_flags],40h
-       jz      avx_broadcast_reg_avx_reg
-       cmp     al,60h
-       jb      avx_broadcast_reg_general_reg
-       cmp     al,80h
-       jb      avx_broadcast_reg_avx_reg
-       cmp     al,0C0h
-       jb      avx_broadcast_reg_general_reg
-      avx_broadcast_reg_avx_reg:
-       call    convert_avx_register
-       mov     bl,al
-       mov     al,[mmx_size]
-       or      al,al
-       jz      avx_broadcast_reg_avx_reg_size_ok
-       cmp     ah,16
-       jne     invalid_operand_size
-       cmp     al,ah
-       jae     invalid_operand
-      avx_broadcast_reg_avx_reg_size_ok:
-       pop     eax
-       xchg    ah,[operand_size]
-       mov     [postbyte_register],al
-       test    [vex_required],2
-       jnz     invalid_operand
-       jmp     nomem_instruction_ready
-      avx_broadcast_reg_general_reg:
-       call    convert_register
-       mov     bl,al
-       mov     al,[mmx_size]
-       or      al,al
-       jz      avx_broadcast_reg_general_reg_size_ok
-       cmp     al,ah
-       je      avx_broadcast_reg_general_reg_size_ok
-       ja      invalid_operand_size
-       cmp     ah,4
-       jne     invalid_operand_size
-      avx_broadcast_reg_general_reg_size_ok:
-       cmp     al,4
-       jb      avx_broadcast_reg_general_reg_ready
-       cmp     al,8
-       mov     al,3
-       jne     avx_broadcast_reg_general_reg_ready
-       or      [rex_prefix],8
-      avx_broadcast_reg_general_reg_ready:
-       add     al,7Ah-1
-       mov     [supplemental_code],al
-       or      [vex_required],8
-       pop     eax
-       xchg    ah,[operand_size]
-       mov     [postbyte_register],al
-       jmp     nomem_instruction_ready
-
-avx512_extract_64x4_instruction:
-       or      [rex_prefix],8
-avx512_extract_32x8_instruction:
-       or      [vex_required],8
-       mov     cl,32
-       jmp     avx_extractf_instruction
-avx512_extract_64x2_instruction:
-       or      [rex_prefix],8
-avx512_extract_32x4_instruction:
-       or      [vex_required],8
-       mov     cl,16
-       jmp     avx_extractf_instruction
-avx_extractf128_instruction:
-       or      [vex_required],2
-       mov     cl,16
-      avx_extractf_instruction:
-       mov     [mmx_size],cl
-       call    setup_66_0f_3a
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      avx_extractf_reg
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       xor     al,al
-       xchg    al,[operand_size]
-       or      al,al
-       jz      avx_extractf_mem_size_ok
-       cmp     al,[mmx_size]
-       jne     invalid_operand_size
-      avx_extractf_mem_size_ok:
-       call    take_avx512_mask
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_avx_register
-       cmp     ah,[mmx_size]
-       jbe     invalid_operand_size
-       mov     [postbyte_register],al
-       jmp     mmx_imm8
-      avx_extractf_reg:
-       lods    byte [esi]
-       call    convert_avx_register
-       cmp     ah,[mmx_size]
-       jne     invalid_operand_size
-       push    eax
-       call    take_avx512_mask
-       mov     [operand_size],0
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_avx_register
-       cmp     ah,[mmx_size]
-       jbe     invalid_operand_size
-       mov     [postbyte_register],al
-       pop     ebx
-       jmp     mmx_nomem_imm8
-avx512_insert_64x4_instruction:
-       or      [rex_prefix],8
-avx512_insert_32x8_instruction:
-       or      [vex_required],8
-       mov     cl,32
-       jmp     avx_insertf_instruction
-avx512_insert_64x2_instruction:
-       or      [rex_prefix],8
-avx512_insert_32x4_instruction:
-       or      [vex_required],8
-       mov     cl,16
-       jmp     avx_insertf_instruction
-avx_insertf128_instruction:
-       or      [vex_required],2
-       mov     cl,16
-      avx_insertf_instruction:
-       mov     [mmx_size],cl
-       mov     [broadcast_size],0
-       call    setup_66_0f_3a
-       call    take_avx_register
-       cmp     ah,[mmx_size]
-       jbe     invalid_operand
-       mov     [postbyte_register],al
-       call    take_avx512_mask
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_avx_register
-       mov     [vex_register],al
-       mov     al,[mmx_size]
-       xchg    al,[operand_size]
-       push    eax
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      avx_insertf_reg_reg_reg
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       pop     eax
-       mov     [operand_size],al
-       jmp     mmx_imm8
-      avx_insertf_reg_reg_reg:
-       lods    byte [esi]
-       call    convert_avx_register
-       mov     bl,al
-       pop     eax
-       mov     [operand_size],al
-       jmp     mmx_nomem_imm8
-avx_extract_b_instruction:
-       mov     cl,1
-       jmp     avx_extract_instruction
-avx_extract_w_instruction:
-       mov     cl,2
-       jmp     avx_extract_instruction
-avx_extract_q_instruction:
-       or      [rex_prefix],8
-       mov     cl,8
-       jmp     avx_extract_instruction
-avx_extract_d_instruction:
-       mov     cl,4
-      avx_extract_instruction:
-       mov     [mmx_size],cl
-       call    setup_66_0f_3a
-       or      [vex_required],1
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      avx_extractps_reg
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       mov     al,[mmx_size]
-       not     al
-       and     [operand_size],al
-       jnz     invalid_operand_size
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_avx_register
-       cmp     ah,16
-       jne     invalid_operand_size
-       mov     [postbyte_register],al
-       jmp     mmx_imm8
-      avx_extractps_reg:
-       lods    byte [esi]
-       call    convert_register
-       mov     bl,al
-       mov     al,[mmx_size]
-       cmp     ah,al
-       jb      invalid_operand_size
-       cmp     ah,4
-       je      avx_extractps_reg_size_ok
-       cmp     ah,8
-       jne     invalid_operand_size
-       cmp     [code_type],64
-       jne     invalid_operand
-       cmp     al,4
-       jae     avx_extractps_reg_size_ok
-       or      [rex_prefix],8
-      avx_extractps_reg_size_ok:
-       mov     [operand_size],0
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_avx_register
-       cmp     ah,16
-       jne     invalid_operand_size
-       mov     [postbyte_register],al
-       cmp     [supplemental_code],15h
-       jne     mmx_nomem_imm8
-       mov     [extended_code],0C5h
-       xchg    bl,[postbyte_register]
-       jmp     mmx_nomem_imm8
-avx_insertps_instruction:
-       mov     [immediate_size],1
-       or      [operand_flags],10h
-       mov     [opcode_prefix],66h
-       mov     [supplemental_code],al
-       mov     al,3Ah
-       mov     cl,4
-       jmp     avx_instruction
-avx_pinsrb_instruction:
-       mov     cl,1
-       jmp     avx_pinsr_instruction_3a
-avx_pinsrw_instruction:
-       mov     cl,2
-       jmp     avx_pinsr_instruction
-avx_pinsrd_instruction:
-       mov     cl,4
-       jmp     avx_pinsr_instruction_3a
-avx_pinsrq_instruction:
-       cmp     [code_type],64
-       jne     illegal_instruction
-       mov     cl,8
-       or      [rex_prefix],8
-      avx_pinsr_instruction_3a:
-       mov     [supplemental_code],al
-       mov     al,3Ah
-      avx_pinsr_instruction:
-       mov     [opcode_prefix],66h
-       mov     [base_code],0Fh
-       mov     [extended_code],al
-       mov     [mmx_size],cl
-       or      [vex_required],1
-       call    take_avx_register
-       cmp     ah,16
-       jne     invalid_operand_size
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_avx_register
-       mov     [vex_register],al
-       jmp     pinsr_xmmreg
-
-avx_cvtudq2pd_instruction:
-       or      [vex_required],8
-avx_cvtdq2pd_instruction:
-       mov     [opcode_prefix],0F3h
-       mov     cl,4
-       jmp     avx_cvt_d_instruction
-avx_cvtps2qq_instruction:
-       or      [operand_flags],8
-avx_cvttps2qq_instruction:
-       or      [operand_flags],4
-       or      [vex_required],8
-       mov     [opcode_prefix],66h
-       mov     cl,4
-       jmp     avx_cvt_d_instruction
-avx_cvtps2pd_instruction:
-       or      [operand_flags],4
-       mov     cl,4
-      avx_cvt_d_instruction:
-       mov     [base_code],0Fh
-       mov     [extended_code],al
-       or      [vex_required],1
-       mov     [broadcast_size],cl
-       call    take_avx_register
-       mov     [postbyte_register],al
-       call    take_avx512_mask
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       xor     ecx,ecx
-       xchg    cl,[operand_size]
-       mov     al,cl
-       shr     al,1
-       mov     [mmx_size],al
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       je      avx_cvt_d_reg_mem
-       cmp     al,10h
-       jne     invalid_operand
-       mov     [operand_size],0
-       lods    byte [esi]
-       call    convert_avx_register
-       cmp     ah,[mmx_size]
-       je      avx_cvt_d_reg_reg_size_ok
-       jb      invalid_operand_size
-       cmp     ah,16
-       jne     invalid_operand_size
-      avx_cvt_d_reg_reg_size_ok:
-       mov     bl,al
-       mov     [operand_size],cl
-       call    take_avx512_rounding
-       jmp     nomem_instruction_ready
-      avx_cvt_d_reg_mem:
-       call    take_avx_mem
-       jmp     instruction_ready
-avx_cvtpd2dq_instruction:
-       or      [operand_flags],4+8
-       mov     [opcode_prefix],0F2h
-       jmp     avx_cvt_q_instruction
-avx_cvtuqq2ps_instruction:
-       mov     [opcode_prefix],0F2h
-avx_cvtpd2udq_instruction:
-       or      [operand_flags],8
-avx_cvttpd2udq_instruction:
-       or      [operand_flags],4
-       or      [vex_required],8
-       jmp     avx_cvt_q_instruction
-avx_cvtpd2ps_instruction:
-       or      [operand_flags],8
-avx_cvttpd2dq_instruction:
-       or      [operand_flags],4
-       mov     [opcode_prefix],66h
-      avx_cvt_q_instruction:
-       mov     [broadcast_size],8
-       mov     [base_code],0Fh
-       mov     [extended_code],al
-       or      [vex_required],1
-       or      [rex_prefix],80h
-       call    take_avx_register
-       mov     [postbyte_register],al
-       push    eax
-       call    take_avx512_mask
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       xor     al,al
-       mov     [operand_size],al
-       mov     [mmx_size],al
-       call    take_avx_rm
-       jnc     avx_cvt_q_reg_mem
-       mov     bl,al
-       pop     eax
-       call    avx_cvt_q_check_size
-       call    take_avx512_rounding
-       jmp     nomem_instruction_ready
-      avx_cvt_q_reg_mem:
-       pop     eax
-       call    avx_cvt_q_check_size
-       jmp     instruction_ready
-      avx_cvt_q_check_size:
-       mov     al,[operand_size]
-       or      al,al
-       jz      avx_cvt_q_size_not_specified
-       cmp     al,64
-       ja      invalid_operand_size
-       shr     al,1
-       cmp     al,ah
-       je      avx_cvt_q_size_ok
-       ja      invalid_operand_size
-       cmp     ah,16
-       jne     invalid_operand_size
-      avx_cvt_q_size_ok:
-       ret
-      avx_cvt_q_size_not_specified:
-       cmp     ah,64 shr 1
-       jne     recoverable_unknown_size
-       mov     [operand_size],64
-       ret
-avx_cvttps2udq_instruction:
-       or      [vex_required],8
-       or      [operand_flags],2+4
-       mov     cx,0400h
-       jmp     avx_instruction_with_broadcast
-avx_cvttps2dq_instruction:
-       mov     [opcode_prefix],0F3h
-       or      [operand_flags],2+4
-       mov     cx,0400h
-       jmp     avx_instruction_with_broadcast
-avx_cvtph2ps_instruction:
-       mov     [opcode_prefix],66h
-       mov     [supplemental_code],al
-       or      [operand_flags],4
-       mov     al,38h
-       xor     cl,cl
-       jmp     avx_cvt_d_instruction
-avx_cvtps2ph_instruction:
-       call    setup_66_0f_3a
-       or      [vex_required],1
-       or      [operand_flags],4
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      vcvtps2ph_reg
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       call    take_avx512_mask
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       shl     [operand_size],1
-       call    take_avx_register
-       mov     [postbyte_register],al
-       shr     ah,1
-       mov     [mmx_size],ah
-       jmp     mmx_imm8
-      vcvtps2ph_reg:
-       lods    byte [esi]
-       call    convert_avx_register
-       mov     bl,al
-       call    take_avx512_mask
-       xor     cl,cl
-       xchg    cl,[operand_size]
-       shl     cl,1
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_avx_register
-       mov     [postbyte_register],al
-       or      cl,cl
-       jz      vcvtps2ph_reg_size_ok
-       cmp     cl,ah
-       je      vcvtps2ph_reg_size_ok
-       jb      invalid_operand_size
-       cmp     ah,16
-       jne     invalid_operand_size
-      vcvtps2ph_reg_size_ok:
-       call    take_avx512_rounding
-       jmp     mmx_nomem_imm8
-
-avx_cvtsd2usi_instruction:
-       or      [operand_flags],8
-avx_cvttsd2usi_instruction:
-       or      [vex_required],8
-       jmp     avx_cvttsd2si_instruction
-avx_cvtsd2si_instruction:
-       or      [operand_flags],8
-avx_cvttsd2si_instruction:
-       mov     ah,0F2h
-       mov     cl,8
-       jmp     avx_cvt_2si_instruction
-avx_cvtss2usi_instruction:
-       or      [operand_flags],8
-avx_cvttss2usi_instruction:
-       or      [vex_required],8
-       jmp     avx_cvttss2si_instruction
-avx_cvtss2si_instruction:
-       or      [operand_flags],8
-avx_cvttss2si_instruction:
-       mov     ah,0F3h
-       mov     cl,4
-      avx_cvt_2si_instruction:
-       or      [operand_flags],2+4
-       mov     [mmx_size],cl
-       mov     [broadcast_size],0
-       mov     [opcode_prefix],ah
-       mov     [base_code],0Fh
-       mov     [extended_code],al
-       or      [vex_required],1
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_register
-       mov     [postbyte_register],al
-       mov     [operand_size],0
-       cmp     ah,4
-       je      avx_cvt_2si_reg
-       cmp     ah,8
-       jne     invalid_operand_size
-       call    operand_64bit
-      avx_cvt_2si_reg:
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_avx_rm
-       jnc     instruction_ready
-       mov     bl,al
-       call    take_avx512_rounding
-       jmp     nomem_instruction_ready
-avx_cvtusi2sd_instruction:
-       or      [vex_required],8
-avx_cvtsi2sd_instruction:
-       mov     ah,0F2h
-       mov     cl,8
-       jmp     avx_cvtsi_instruction
-avx_cvtusi2ss_instruction:
-       or      [vex_required],8
-avx_cvtsi2ss_instruction:
-       mov     ah,0F3h
-       mov     cl,4
-      avx_cvtsi_instruction:
-       or      [operand_flags],2+4+8
-       mov     [mmx_size],cl
-       mov     [opcode_prefix],ah
-       mov     [base_code],0Fh
-       mov     [extended_code],al
-       or      [vex_required],1
-       call    take_avx_register
-       cmp     ah,16
-       jne     invalid_operand_size
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_avx_register
-       mov     [vex_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       mov     [operand_size],0
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       je      avx_cvtsi_reg_reg_mem
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_register
-       mov     bl,al
-       cmp     ah,4
-       je      avx_cvtsi_reg_reg_reg32
-       cmp     ah,8
-       jne     invalid_operand_size
-       call    operand_64bit
-      avx_cvtsi_rounding:
-       call    take_avx512_rounding
-       jmp     nomem_instruction_ready
-      avx_cvtsi_reg_reg_reg32:
-       cmp     [mmx_size],8
-       jne     avx_cvtsi_rounding
-       jmp     nomem_instruction_ready
-      avx_cvtsi_reg_reg_mem:
-       call    get_address
-       mov     al,[operand_size]
-       mov     [mmx_size],al
-       or      al,al
-       jz      single_mem_nosize
-       cmp     al,4
-       je      instruction_ready
-       cmp     al,8
-       jne     invalid_operand_size
-       call    operand_64bit
-       jmp     instruction_ready
-
-avx_maskmov_w1_instruction:
-       or      [rex_prefix],8
-avx_maskmov_instruction:
-       call    setup_66_0f_38
-       mov     [mmx_size],0
-       or      [vex_required],2
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     avx_maskmov_mem
-       lods    byte [esi]
-       call    convert_avx_register
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_avx_register
-       mov     [vex_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       jmp     instruction_ready
-      avx_maskmov_mem:
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_avx_register
-       mov     [vex_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_avx_register
-       mov     [postbyte_register],al
-       add     [supplemental_code],2
-       jmp     instruction_ready
-avx_movmskpd_instruction:
-       mov     [opcode_prefix],66h
-avx_movmskps_instruction:
-       mov     [base_code],0Fh
-       mov     [extended_code],50h
-       or      [vex_required],2
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_register
-       mov     [postbyte_register],al
-       cmp     ah,4
-       je      avx_movmskps_reg_ok
-       cmp     ah,8
-       jne     invalid_operand_size
-       cmp     [code_type],64
-       jne     invalid_operand
-      avx_movmskps_reg_ok:
-       mov     [operand_size],0
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_avx_register
-       mov     bl,al
-       jmp     nomem_instruction_ready
-avx_maskmovdqu_instruction:
-       or      [vex_required],2
-       jmp     maskmovdqu_instruction
-avx_pmovmskb_instruction:
-       or      [vex_required],2
-       mov     [opcode_prefix],66h
-       mov     [base_code],0Fh
-       mov     [extended_code],al
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_register
-       cmp     ah,4
-       je      avx_pmovmskb_reg_size_ok
-       cmp     [code_type],64
-       jne     invalid_operand_size
-       cmp     ah,8
-       jnz     invalid_operand_size
-      avx_pmovmskb_reg_size_ok:
-       mov     [postbyte_register],al
-       mov     [operand_size],0
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_avx_register
-       mov     bl,al
-       jmp     nomem_instruction_ready
-
-gather_pd_instruction:
-       or      [rex_prefix],8
-gather_ps_instruction:
-       call    setup_66_0f_38
-       or      [vex_required],4
-       or      [operand_flags],20h
-       call    take_avx_register
-       mov     [postbyte_register],al
-       call    take_avx512_mask
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       xor     cl,cl
-       xchg    cl,[operand_size]
-       push    ecx
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       jne     invalid_argument
-       call    get_address
-       pop     eax
-       xchg    al,[operand_size]
-      gather_mem_size_check:
-       mov     ah,4
-       test    [rex_prefix],8
-       jz      gather_elements_size_ok
-       add     ah,ah
-      gather_elements_size_ok:
-       mov     [mmx_size],ah
-       test    al,al
-       jz      gather_mem_size_ok
-       cmp     al,ah
-       jne     invalid_operand_size
-      gather_mem_size_ok:
-       cmp     byte [esi],','
-       je      gather_reg_mem_reg
-       test    [vex_required],20h
-       jz      invalid_operand
-       mov     ah,[operand_size]
-       mov     al,80h
-       jmp     gather_arguments_ok
-      gather_reg_mem_reg:
-       or      [vex_required],2
-       inc     esi
-       call    take_avx_register
-      gather_arguments_ok:
-       mov     [vex_register],al
-       cmp     al,[postbyte_register]
-       je      disallowed_combination_of_registers
-       mov     al,bl
-       and     al,11111b
-       cmp     al,[postbyte_register]
-       je      disallowed_combination_of_registers
-       cmp     al,[vex_register]
-       je      disallowed_combination_of_registers
-       mov     al,bl
-       shr     al,5
-       cmp     al,0Ch shr 1
-       je      gather_vr128
-       mov     ah,32
-       cmp     al,6 shr 1
-       jne     gather_regular
-       add     ah,ah
-      gather_regular:
-       mov     al,[rex_prefix]
-       shr     al,3
-       xor     al,[supplemental_code]
-       test    al,1
-       jz      gather_uniform
-       test    [supplemental_code],1
-       jz      gather_double
-       mov     al,ah
-       xchg    al,[operand_size]
-       add     al,al
-       cmp     al,ah
-       jne     invalid_operand_size
-       jmp     instruction_ready
-      gather_double:
-       add     ah,ah
-      gather_uniform:
-       cmp     ah,[operand_size]
-       jne     invalid_operand_size
-       jmp     instruction_ready
-      gather_vr128:
-       cmp     ah,16
-       je      instruction_ready
-       cmp     ah,32
-       jne     invalid_operand_size
-       test    [supplemental_code],1
-       jnz     invalid_operand_size
-       test    [rex_prefix],8
-       jz      invalid_operand_size
-       jmp     instruction_ready
-scatter_pd_instruction:
-       or      [rex_prefix],8
-scatter_ps_instruction:
-       call    setup_66_0f_38
-       or      [vex_required],4+8
-       or      [operand_flags],20h
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       jne     invalid_argument
-       call    get_address
-       call    take_avx512_mask
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       xor     al,al
-       xchg    al,[operand_size]
-       push    eax
-       call    take_avx_register
-       mov     [postbyte_register],al
-       pop     eax
-       jmp     gather_mem_size_check
-gatherpf_qpd_instruction:
-       mov     ah,0C7h
-       jmp     gatherpf_pd_instruction
-gatherpf_dpd_instruction:
-       mov     ah,0C6h
-      gatherpf_pd_instruction:
-       or      [rex_prefix],8
-       mov     cl,8
-       jmp     gatherpf_instruction
-gatherpf_qps_instruction:
-       mov     ah,0C7h
-       jmp     gatherpf_ps_instruction
-gatherpf_dps_instruction:
-       mov     ah,0C6h
-      gatherpf_ps_instruction:
-       mov     cl,4
-      gatherpf_instruction:
-       mov     [mmx_size],cl
-       mov     [postbyte_register],al
-       mov     al,ah
-       call    setup_66_0f_38
-       or      [vex_required],4+8
-       or      [operand_flags],20h
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       jne     invalid_argument
-       call    get_address
-       call    take_avx512_mask
-       mov     ah,[mmx_size]
-       mov     al,[operand_size]
-       or      al,al
-       jz      gatherpf_mem_size_ok
-       cmp     al,ah
-       jne     invalid_operand_size
-      gatherpf_mem_size_ok:
-       mov     [operand_size],64
-       mov     al,6 shr 1
-       cmp     ah,4
-       je      gatherpf_check_vsib
-       cmp     [supplemental_code],0C6h
-       jne     gatherpf_check_vsib
-       mov     al,0Eh shr 1
-      gatherpf_check_vsib:
-       mov     ah,bl
-       shr     ah,5
-       cmp     al,ah
-       jne     invalid_operand
-       jmp     instruction_ready
-
-bmi_instruction:
-       mov     [base_code],0Fh
-       mov     [extended_code],38h
-       mov     [supplemental_code],0F3h
-       mov     [postbyte_register],al
-      bmi_reg:
-       or      [vex_required],2
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_register
-       mov     [vex_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      bmi_reg_reg
-       cmp     al,'['
-       jne     invalid_argument
-       call    get_address
-       call    operand_32or64
-       jmp     instruction_ready
-      bmi_reg_reg:
-       lods    byte [esi]
-       call    convert_register
-       mov     bl,al
-       call    operand_32or64
-       jmp     nomem_instruction_ready
-      operand_32or64:
-       mov     al,[operand_size]
-       cmp     al,4
-       je      operand_32or64_ok
-       cmp     al,8
-       jne     invalid_operand_size
-       cmp     [code_type],64
-       jne     invalid_operand
-       or      [rex_prefix],8
-      operand_32or64_ok:
-       ret
-pdep_instruction:
-       mov     [opcode_prefix],0F2h
-       jmp     andn_instruction
-pext_instruction:
-       mov     [opcode_prefix],0F3h
-andn_instruction:
-       mov     [base_code],0Fh
-       mov     [extended_code],38h
-       mov     [supplemental_code],al
-       or      [vex_required],2
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_register
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       jmp     bmi_reg
-sarx_instruction:
-       mov     [opcode_prefix],0F3h
-       jmp     bzhi_instruction
-shrx_instruction:
-       mov     [opcode_prefix],0F2h
-       jmp     bzhi_instruction
-shlx_instruction:
-       mov     [opcode_prefix],66h
-bzhi_instruction:
-       mov     [base_code],0Fh
-       mov     [extended_code],38h
-       mov     [supplemental_code],al
-       or      [vex_required],2
-       call    get_reg_mem
-       jc      bzhi_reg_reg
-       call    get_vex_source_register
-       jc      invalid_operand
-       call    operand_32or64
-       jmp     instruction_ready
-      bzhi_reg_reg:
-       call    get_vex_source_register
-       jc      invalid_operand
-       call    operand_32or64
-       jmp     nomem_instruction_ready
-      get_vex_source_register:
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     no_vex_source_register
-       lods    byte [esi]
-       call    convert_register
-       mov     [vex_register],al
-       clc
-       ret
-      no_vex_source_register:
-       stc
-       ret
-bextr_instruction:
-       mov     [base_code],0Fh
-       mov     [extended_code],38h
-       mov     [supplemental_code],al
-       or      [vex_required],2
-       call    get_reg_mem
-       jc      bextr_reg_reg
-       call    get_vex_source_register
-       jc      bextr_reg_mem_imm32
-       call    operand_32or64
-       jmp     instruction_ready
-      bextr_reg_reg:
-       call    get_vex_source_register
-       jc      bextr_reg_reg_imm32
-       call    operand_32or64
-       jmp     nomem_instruction_ready
-      setup_bextr_imm_opcode:
-       mov     [xop_opcode_map],0Ah
-       mov     [base_code],10h
-       call    operand_32or64
-       ret
-      bextr_reg_mem_imm32:
-       call    get_imm32
-       call    setup_bextr_imm_opcode
-       jmp     store_instruction_with_imm32
-      bextr_reg_reg_imm32:
-       call    get_imm32
-       call    setup_bextr_imm_opcode
-      store_nomem_instruction_with_imm32:
-       call    store_nomem_instruction
-       mov     eax,dword [value]
-       call    mark_relocation
-       stos    dword [edi]
-       jmp     instruction_assembled
-      get_imm32:
-       cmp     al,'('
-       jne     invalid_operand
-       push    edx ebx ecx
-       call    get_dword_value
-       mov     dword [value],eax
-       pop     ecx ebx edx
-       ret
-rorx_instruction:
-       mov     [opcode_prefix],0F2h
-       mov     [base_code],0Fh
-       mov     [extended_code],3Ah
-       mov     [supplemental_code],al
-       or      [vex_required],2
-       call    get_reg_mem
-       jc      rorx_reg_reg
-       call    operand_32or64
-       jmp     mmx_imm8
-      rorx_reg_reg:
-       call    operand_32or64
-       jmp     mmx_nomem_imm8
-
-tbm_instruction:
-       mov     [xop_opcode_map],9
-       mov     ah,al
-       shr     ah,4
-       and     al,111b
-       mov     [base_code],ah
-       mov     [postbyte_register],al
-       jmp     bmi_reg
-
-llwpcb_instruction:
-       or      [vex_required],2
-       mov     [xop_opcode_map],9
-       mov     [base_code],12h
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_register
-       mov     bl,al
-       call    operand_32or64
-       jmp     nomem_instruction_ready
-lwpins_instruction:
-       or      [vex_required],2
-       mov     [xop_opcode_map],0Ah
-       mov     [base_code],12h
-       mov     [vex_register],al
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_register
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       xor     cl,cl
-       xchg    cl,[operand_size]
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      lwpins_reg_reg
-       cmp     al,'['
-       jne     invalid_argument
-       push    ecx
-       call    get_address
-       pop     eax
-       xchg    al,[operand_size]
-       test    al,al
-       jz      lwpins_reg_mem_size_ok
-       cmp     al,4
-       jne     invalid_operand_size
-      lwpins_reg_mem_size_ok:
-       call    prepare_lwpins
-       jmp     store_instruction_with_imm32
-      lwpins_reg_reg:
-       lods    byte [esi]
-       call    convert_register
-       cmp     ah,4
-       jne     invalid_operand_size
-       mov     [operand_size],cl
-       mov     bl,al
-       call    prepare_lwpins
-       jmp     store_nomem_instruction_with_imm32
-      prepare_lwpins:
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_imm32
-       call    operand_32or64
-       mov     al,[vex_register]
-       xchg    al,[postbyte_register]
-       mov     [vex_register],al
-       ret
-
-xop_single_source_sd_instruction:
-       or      [operand_flags],2
-       mov     [mmx_size],8
-       jmp     xop_instruction_9
-xop_single_source_ss_instruction:
-       or      [operand_flags],2
-       mov     [mmx_size],4
-       jmp     xop_instruction_9
-xop_single_source_instruction:
-       or      [operand_flags],2
-       mov     [mmx_size],0
-      xop_instruction_9:
-       mov     [base_code],al
-       mov     [xop_opcode_map],9
-       jmp     avx_xop_common
-xop_single_source_128bit_instruction:
-       or      [operand_flags],2
-       mov     [mmx_size],16
-       jmp     xop_instruction_9
-xop_triple_source_128bit_instruction:
-       mov     [immediate_size],-1
-       mov     byte [value],0
-       mov     [mmx_size],16
-       jmp     xop_instruction_8
-xop_128bit_instruction:
-       mov     [immediate_size],-2
-       mov     byte [value],0
-       mov     [mmx_size],16
-      xop_instruction_8:
-       mov     [base_code],al
-       mov     [xop_opcode_map],8
-       jmp     avx_xop_common
-xop_pcom_b_instruction:
-       mov     ah,0CCh
-       jmp     xop_pcom_instruction
-xop_pcom_d_instruction:
-       mov     ah,0CEh
-       jmp     xop_pcom_instruction
-xop_pcom_q_instruction:
-       mov     ah,0CFh
-       jmp     xop_pcom_instruction
-xop_pcom_w_instruction:
-       mov     ah,0CDh
-       jmp     xop_pcom_instruction
-xop_pcom_ub_instruction:
-       mov     ah,0ECh
-       jmp     xop_pcom_instruction
-xop_pcom_ud_instruction:
-       mov     ah,0EEh
-       jmp     xop_pcom_instruction
-xop_pcom_uq_instruction:
-       mov     ah,0EFh
-       jmp     xop_pcom_instruction
-xop_pcom_uw_instruction:
-       mov     ah,0EDh
-      xop_pcom_instruction:
-       mov     byte [value],al
-       mov     [immediate_size],-4
-       mov     [mmx_size],16
-       mov     [base_code],ah
-       mov     [xop_opcode_map],8
-       jmp     avx_xop_common
-vpcmov_instruction:
-       or      [vex_required],2
-       mov     [immediate_size],-2
-       mov     byte [value],0
-       mov     [mmx_size],0
-       mov     [base_code],al
-       mov     [xop_opcode_map],8
-       jmp     avx_xop_common
-xop_shift_instruction:
-       mov     [base_code],al
-       or      [vex_required],2
-       mov     [xop_opcode_map],9
-       call    take_avx_register
-       cmp     ah,16
-       jne     invalid_operand
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       je      xop_shift_reg_mem
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_xmm_register
-       mov     [vex_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       push    esi
-       xor     cl,cl
-       xchg    cl,[operand_size]
-       lods    byte [esi]
-       call    get_size_operator
-       pop     esi
-       xchg    cl,[operand_size]
-       cmp     al,'['
-       je      xop_shift_reg_reg_mem
-       cmp     al,10h
-       jne     xop_shift_reg_reg_imm
-       call    take_avx_register
-       mov     bl,al
-       xchg    bl,[vex_register]
-       jmp     nomem_instruction_ready
-      xop_shift_reg_reg_mem:
-       or      [rex_prefix],8
-       lods    byte [esi]
-       call    get_size_operator
-       call    get_address
-       jmp     instruction_ready
-      xop_shift_reg_reg_imm:
-       xor     bl,bl
-       xchg    bl,[vex_register]
-       cmp     [base_code],94h
-       jae     invalid_operand
-       add     [base_code],30h
-       mov     [xop_opcode_map],8
-       dec     esi
-       jmp     mmx_nomem_imm8
-      xop_shift_reg_mem:
-       call    get_address
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       push    esi
-       xor     cl,cl
-       xchg    cl,[operand_size]
-       lods    byte [esi]
-       call    get_size_operator
-       pop     esi
-       xchg    cl,[operand_size]
-       cmp     al,10h
-       jne     xop_shift_reg_mem_imm
-       call    take_avx_register
-       mov     [vex_register],al
-       jmp     instruction_ready
-      xop_shift_reg_mem_imm:
-       cmp     [base_code],94h
-       jae     invalid_operand
-       add     [base_code],30h
-       mov     [xop_opcode_map],8
-       dec     esi
-       jmp     mmx_imm8
-
-avx512_4vnniw_instruction:
-       mov     [opcode_prefix],0F2h
-       mov     [base_code],0Fh
-       mov     [extended_code],38h
-       mov     [supplemental_code],al
-       mov     [mmx_size],16
-       mov     [broadcast_size],0
-       or      [vex_required],8
-       call    take_avx_register
-       mov     [postbyte_register],al
-       call    take_avx512_mask
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_avx_register
-       mov     [vex_register],al
-       cmp     byte [esi],'+'
-       jne     reg4_ok
-       inc     esi
-       cmp     dword [esi],29030128h
-       jne     invalid_operand
-       lods    dword [esi]
-      reg4_ok:
-       cmp     [operand_size],64
-       jne     invalid_operand_size
-       mov     [operand_size],0
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_avx_rm
-       jc      invalid_operand
-       mov     [operand_size],64
-       jmp     instruction_ready
-
-set_evex_mode:
-       mov     [evex_mode],al
-       jmp     instruction_assembled
-
-take_avx_register:
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-convert_avx_register:
-       mov     ah,al
-       and     al,1Fh
-       and     ah,0E0h
-       sub     ah,60h
-       jb      invalid_operand
-       jz      avx512_register_size
-       sub     ah,60h
-       jb      invalid_operand
-       jnz     avx_register_size_ok
-       mov     ah,16
-       jmp     avx_register_size_ok
-      avx512_register_size:
-       mov     ah,64
-      avx_register_size_ok:
-       cmp     al,8
-       jb      match_register_size
-       cmp     [code_type],64
-       jne     invalid_operand
-       jmp     match_register_size
-store_vex_instruction_code:
-       test    [rex_prefix],10h
-       jnz     invalid_operand
-       test    [vex_required],0F8h
-       jnz     store_evex_instruction_code
-       test    [vex_register],10000b
-       jnz     store_evex_instruction_code
-       cmp     [operand_size],64
-       je      store_evex_instruction_code
-       mov     al,[base_code]
-       cmp     al,0Fh
-       jne     store_xop_instruction_code
-       test    [vex_required],2
-       jnz     prepare_vex
-       cmp     [evex_mode],0
-       je      prepare_vex
-       cmp     [displacement_compression],1
-       jne     prepare_vex
-       cmp     edx,80h
-       jb      prepare_vex
-       cmp     edx,-80h
-       jae     prepare_vex
-       mov     al,bl
-       or      al,bh
-       shr     al,4
-       cmp     al,2
-       je      prepare_vex
-       call    compress_displacement
-       cmp     [displacement_compression],2
-       ja      prepare_evex
-       jb      prepare_vex
-       dec     [displacement_compression]
-       mov     edx,[uncompressed_displacement]
-      prepare_vex:
-       mov     ah,[extended_code]
-       cmp     ah,38h
-       je      store_vex_0f38_instruction_code
-       cmp     ah,3Ah
-       je      store_vex_0f3a_instruction_code
-       test    [rex_prefix],1011b
-       jnz     store_vex_0f_instruction_code
-       mov     [edi+2],ah
-       mov     byte [edi],0C5h
-       mov     al,[vex_register]
-       not     al
-       shl     al,3
-       mov     ah,[rex_prefix]
-       shl     ah,5
-       and     ah,80h
-       xor     al,ah
-       call    get_vex_lpp_bits
-       mov     [edi+1],al
-       call    check_vex
-       add     edi,3
-       ret
-      get_vex_lpp_bits:
-       cmp     [operand_size],32
-       jne     get_vex_pp_bits
-       or      al,100b
-      get_vex_pp_bits:
-       mov     ah,[opcode_prefix]
-       cmp     ah,66h
-       je      vex_66
-       cmp     ah,0F3h
-       je      vex_f3
-       cmp     ah,0F2h
-       je      vex_f2
-       test    ah,ah
-       jnz     disallowed_combination_of_registers
-       ret
-      vex_f2:
-       or      al,11b
-       ret
-      vex_f3:
-       or      al,10b
-       ret
-      vex_66:
-       or      al,1
-       ret
-      store_vex_0f38_instruction_code:
-       mov     al,11100010b
-       mov     ah,[supplemental_code]
-       jmp     make_c4_vex
-      store_vex_0f3a_instruction_code:
-       mov     al,11100011b
-       mov     ah,[supplemental_code]
-       jmp     make_c4_vex
-      store_vex_0f_instruction_code:
-       mov     al,11100001b
-      make_c4_vex:
-       mov     [edi+3],ah
-       mov     byte [edi],0C4h
-       mov     ah,[rex_prefix]
-       shl     ah,5
-       xor     al,ah
-       mov     [edi+1],al
-       call    check_vex
-       mov     al,[vex_register]
-       xor     al,1111b
-       shl     al,3
-       mov     ah,[rex_prefix]
-       shl     ah,4
-       and     ah,80h
-       or      al,ah
-       call    get_vex_lpp_bits
-       mov     [edi+2],al
-       add     edi,4
-       ret
-      check_vex:
-       cmp     [code_type],64
-       je      vex_ok
-       not     al
-       test    al,11000000b
-       jnz     invalid_operand
-       test    [rex_prefix],40h
-       jnz     invalid_operand
-      vex_ok:
-       ret
-store_xop_instruction_code:
-       mov     [edi+3],al
-       mov     byte [edi],8Fh
-       mov     al,[xop_opcode_map]
-       mov     ah,[rex_prefix]
-       test    ah,40h
-       jz      xop_ok
-       cmp     [code_type],64
-       jne     invalid_operand
-      xop_ok:
-       not     ah
-       shl     ah,5
-       xor     al,ah
-       mov     [edi+1],al
-       mov     al,[vex_register]
-       xor     al,1111b
-       shl     al,3
-       mov     ah,[rex_prefix]
-       shl     ah,4
-       and     ah,80h
-       or      al,ah
-       call    get_vex_lpp_bits
-       mov     [edi+2],al
-       add     edi,4
-       ret
-store_evex_instruction_code:
-       test    [vex_required],2
-       jnz     invalid_operand
-       cmp     [base_code],0Fh
-       jne     invalid_operand
-       cmp     [displacement_compression],1
-       jne     prepare_evex
-       call    compress_displacement
-      prepare_evex:
-       mov     ah,[extended_code]
-       cmp     ah,38h
-       je      store_evex_0f38_instruction_code
-       cmp     ah,3Ah
-       je      store_evex_0f3a_instruction_code
-       mov     al,11110001b
-      make_evex:
-       mov     [edi+4],ah
-       mov     byte [edi],62h
-       mov     ah,[rex_prefix]
-       shl     ah,5
-       xor     al,ah
-       mov     ah,[vex_required]
-       and     ah,10h
-       xor     al,ah
-       mov     [edi+1],al
-       call    check_vex
-       mov     al,[vex_register]
-       not     al
-       and     al,1111b
-       shl     al,3
-       mov     ah,[rex_prefix]
-       shl     ah,4
-       or      ah,[rex_prefix]
-       and     ah,80h
-       or      al,ah
-       or      al,100b
-       call    get_vex_pp_bits
-       mov     [edi+2],al
-       mov     al,[vex_register]
-       not     al
-       shr     al,1
-       and     al,1000b
-       test    [vex_required],80h
-       jne     evex_rounding
-       mov     ah,[operand_size]
-       cmp     ah,16
-       jbe     evex_l_ok
-       or      al,ah
-       jmp     evex_l_ok
-      evex_rounding:
-       mov     ah,[rounding_mode]
-       shl     ah,5
-       or      al,ah
-      evex_l_ok:
-       test    [vex_required],20h
-       jz      evex_zaaa_ok
-       or      al,[mask_register]
-      evex_zaaa_ok:
-       test    [vex_required],40h
-       jz      evex_b_ok
-       or      al,10h
-      evex_b_ok:
-       mov     [edi+3],al
-       add     edi,5
-       ret
-      store_evex_0f38_instruction_code:
-       mov     al,11110010b
-       mov     ah,[supplemental_code]
-       jmp     make_evex
-      store_evex_0f3a_instruction_code:
-       mov     al,11110011b
-       mov     ah,[supplemental_code]
-       jmp     make_evex
-compress_displacement:
-       mov     ebp,ecx
-       mov     [uncompressed_displacement],edx
-       or      edx,edx
-       jz      displacement_compressed
-       xor     ecx,ecx
-       mov     cl,[mmx_size]
-       test    cl,cl
-       jnz     calculate_displacement_scale
-       mov     cl,[operand_size]
-      calculate_displacement_scale:
-       bsf     ecx,ecx
-       jz      displacement_compression_ok
-       xor     eax,eax
-       shrd    eax,edx,cl
-       jnz     displacement_not_compressed
-       sar     edx,cl
-       cmp     edx,80h
-       jb      displacement_compressed
-       cmp     edx,-80h
-       jnb     displacement_compressed
-       shl     edx,cl
-      displacement_not_compressed:
-       inc     [displacement_compression]
-       jmp     displacement_compression_ok
-      displacement_compressed:
-       add     [displacement_compression],2
-      displacement_compression_ok:
-       mov     ecx,ebp
-       ret
diff --git a/source/errors.inc b/source/errors.inc
deleted file mode 100644 (file)
index 48719fa..0000000
+++ /dev/null
@@ -1,191 +0,0 @@
-
-; flat assembler core
-; Copyright (c) 1999-2022, Tomasz Grysztar.
-; All rights reserved.
-
-out_of_memory:
-       push    _out_of_memory
-       jmp     fatal_error
-stack_overflow:
-       push    _stack_overflow
-       jmp     fatal_error
-main_file_not_found:
-       push    _main_file_not_found
-       jmp     fatal_error
-write_failed:
-       push    _write_failed
-       jmp     fatal_error
-
-code_cannot_be_generated:
-       push    _code_cannot_be_generated
-       jmp     general_error
-format_limitations_exceeded:
-       push    _format_limitations_exceeded
-       jmp     general_error
-invalid_definition:
-       push    _invalid_definition
-    general_error:
-       cmp     [symbols_file],0
-       je      fatal_error
-       call    dump_preprocessed_source
-       jmp     fatal_error
-
-file_not_found:
-       push    _file_not_found
-       jmp     error_with_source
-error_reading_file:
-       push    _error_reading_file
-       jmp     error_with_source
-invalid_file_format:
-       push    _invalid_file_format
-       jmp     error_with_source
-invalid_macro_arguments:
-       push    _invalid_macro_arguments
-       jmp     error_with_source
-incomplete_macro:
-       push    _incomplete_macro
-       jmp     error_with_source
-unexpected_characters:
-       push    _unexpected_characters
-       jmp     error_with_source
-invalid_argument:
-       push    _invalid_argument
-       jmp     error_with_source
-illegal_instruction:
-       push    _illegal_instruction
-       jmp     error_with_source
-invalid_operand:
-       push    _invalid_operand
-       jmp     error_with_source
-invalid_operand_size:
-       push    _invalid_operand_size
-       jmp     error_with_source
-operand_size_not_specified:
-       push    _operand_size_not_specified
-       jmp     error_with_source
-operand_sizes_do_not_match:
-       push    _operand_sizes_do_not_match
-       jmp     error_with_source
-invalid_address_size:
-       push    _invalid_address_size
-       jmp     error_with_source
-address_sizes_do_not_agree:
-       push    _address_sizes_do_not_agree
-       jmp     error_with_source
-disallowed_combination_of_registers:
-       push    _disallowed_combination_of_registers
-       jmp     error_with_source
-long_immediate_not_encodable:
-       push    _long_immediate_not_encodable
-       jmp     error_with_source
-relative_jump_out_of_range:
-       push    _relative_jump_out_of_range
-       jmp     error_with_source
-invalid_expression:
-       push    _invalid_expression
-       jmp     error_with_source
-invalid_address:
-       push    _invalid_address
-       jmp     error_with_source
-invalid_value:
-       push    _invalid_value
-       jmp     error_with_source
-value_out_of_range:
-       push    _value_out_of_range
-       jmp     error_with_source
-undefined_symbol:
-       mov     edi,message
-       mov     esi,_undefined_symbol
-       call    copy_asciiz
-       push    message
-       cmp     [error_info],0
-       je      error_with_source
-       mov     esi,[error_info]
-       mov     esi,[esi+24]
-       or      esi,esi
-       jz      error_with_source
-       mov     byte [edi-1],20h
-       call    write_quoted_symbol_name
-       jmp     error_with_source
-    copy_asciiz:
-       lods    byte [esi]
-       stos    byte [edi]
-       test    al,al
-       jnz     copy_asciiz
-       ret
-    write_quoted_symbol_name:
-       mov     al,27h
-       stosb
-       movzx   ecx,byte [esi-1]
-       rep     movs byte [edi],[esi]
-       mov     ax,27h
-       stosw
-       ret
-symbol_out_of_scope:
-       mov     edi,message
-       mov     esi,_symbol_out_of_scope_1
-       call    copy_asciiz
-       cmp     [error_info],0
-       je      finish_symbol_out_of_scope_message
-       mov     esi,[error_info]
-       mov     esi,[esi+24]
-       or      esi,esi
-       jz      finish_symbol_out_of_scope_message
-       mov     byte [edi-1],20h
-       call    write_quoted_symbol_name
-    finish_symbol_out_of_scope_message:
-       mov     byte [edi-1],20h
-       mov     esi,_symbol_out_of_scope_2
-       call    copy_asciiz
-       push    message
-       jmp     error_with_source
-invalid_use_of_symbol:
-       push    _invalid_use_of_symbol
-       jmp     error_with_source
-name_too_long:
-       push    _name_too_long
-       jmp     error_with_source
-invalid_name:
-       push    _invalid_name
-       jmp     error_with_source
-reserved_word_used_as_symbol:
-       push    _reserved_word_used_as_symbol
-       jmp     error_with_source
-symbol_already_defined:
-       push    _symbol_already_defined
-       jmp     error_with_source
-missing_end_quote:
-       push    _missing_end_quote
-       jmp     error_with_source
-missing_end_directive:
-       push    _missing_end_directive
-       jmp     error_with_source
-unexpected_instruction:
-       push    _unexpected_instruction
-       jmp     error_with_source
-extra_characters_on_line:
-       push    _extra_characters_on_line
-       jmp     error_with_source
-section_not_aligned_enough:
-       push    _section_not_aligned_enough
-       jmp     error_with_source
-setting_already_specified:
-       push    _setting_already_specified
-       jmp     error_with_source
-data_already_defined:
-       push    _data_already_defined
-       jmp     error_with_source
-too_many_repeats:
-       push    _too_many_repeats
-       jmp     error_with_source
-assertion_failed:
-       push    _assertion_failed
-       jmp     error_with_source
-invoked_error:
-       push    _invoked_error
-    error_with_source:
-       cmp     [symbols_file],0
-       je      assembler_error
-       call    dump_preprocessed_source
-       call    restore_preprocessed_source
-       jmp     assembler_error
diff --git a/source/exprcalc.inc b/source/exprcalc.inc
deleted file mode 100644 (file)
index 2bb5b82..0000000
+++ /dev/null
@@ -1,2272 +0,0 @@
-
-; flat assembler core
-; Copyright (c) 1999-2022, Tomasz Grysztar.
-; All rights reserved.
-
-calculate_expression:
-       mov     [current_offset],edi
-       mov     [value_undefined],0
-       cmp     byte [esi],0
-       je      get_string_value
-       cmp     byte [esi],'.'
-       je      convert_fp
-      calculation_loop:
-       mov     eax,[tagged_blocks]
-       sub     eax,0Ch
-       cmp     eax,edi
-       jbe     out_of_memory
-       lods    byte [esi]
-       cmp     al,1
-       je      get_byte_number
-       cmp     al,2
-       je      get_word_number
-       cmp     al,4
-       je      get_dword_number
-       cmp     al,8
-       je      get_qword_number
-       cmp     al,0Fh
-       je      value_out_of_range
-       cmp     al,10h
-       je      get_register
-       cmp     al,11h
-       je      get_label
-       cmp     al,')'
-       je      expression_calculated
-       cmp     al,']'
-       je      expression_calculated
-       cmp     al,'!'
-       je      invalid_expression
-       sub     edi,14h
-       mov     ebx,edi
-       sub     ebx,14h
-       cmp     al,0F0h
-       je      calculate_rva
-       cmp     al,0F1h
-       je      calculate_plt
-       cmp     al,0D0h
-       je      calculate_not
-       cmp     al,0E0h
-       je      calculate_bsf
-       cmp     al,0E1h
-       je      calculate_bsr
-       cmp     al,083h
-       je      calculate_neg
-       mov     dx,[ebx+8]
-       or      dx,[edi+8]
-       cmp     al,80h
-       je      calculate_add
-       cmp     al,81h
-       je      calculate_sub
-       mov     ah,[ebx+12]
-       or      ah,[edi+12]
-       jz      absolute_values_calculation
-       call    recoverable_misuse
-      absolute_values_calculation:
-       cmp     al,90h
-       je      calculate_mul
-       cmp     al,91h
-       je      calculate_div
-       or      dx,dx
-       jnz     invalid_expression
-       cmp     al,0A0h
-       je      calculate_mod
-       cmp     al,0B0h
-       je      calculate_and
-       cmp     al,0B1h
-       je      calculate_or
-       cmp     al,0B2h
-       je      calculate_xor
-       cmp     al,0C0h
-       je      calculate_shl
-       cmp     al,0C1h
-       je      calculate_shr
-       jmp     invalid_expression
-      expression_calculated:
-       sub     edi,14h
-       cmp     [value_undefined],0
-       je      expression_value_ok
-       xor     eax,eax
-       mov     [edi],eax
-       mov     [edi+4],eax
-       mov     [edi+12],eax
-      expression_value_ok:
-       ret
-      get_byte_number:
-       xor     eax,eax
-       lods    byte [esi]
-       stos    dword [edi]
-       xor     al,al
-       stos    dword [edi]
-      got_number:
-       and     word [edi-8+8],0
-       and     word [edi-8+12],0
-       and     dword [edi-8+16],0
-       add     edi,0Ch
-       jmp     calculation_loop
-      get_word_number:
-       xor     eax,eax
-       lods    word [esi]
-       stos    dword [edi]
-       xor     ax,ax
-       stos    dword [edi]
-       jmp     got_number
-      get_dword_number:
-       movs    dword [edi],[esi]
-       xor     eax,eax
-       stos    dword [edi]
-       jmp     got_number
-      get_qword_number:
-       movs    dword [edi],[esi]
-       movs    dword [edi],[esi]
-       jmp     got_number
-      get_register:
-       mov     byte [edi+9],0
-       and     word [edi+12],0
-       lods    byte [esi]
-       mov     [edi+8],al
-       mov     byte [edi+10],1
-       xor     eax,eax
-       mov     [edi+16],eax
-       stos    dword [edi]
-       stos    dword [edi]
-       add     edi,0Ch
-       jmp     calculation_loop
-      get_label:
-       xor     eax,eax
-       mov     [edi+8],eax
-       mov     [edi+12],eax
-       mov     [edi+20],eax
-       lods    dword [esi]
-       cmp     eax,0Fh
-       jb      predefined_label
-       je      reserved_word_used_as_symbol
-       mov     ebx,eax
-       mov     ax,[current_pass]
-       mov     [ebx+18],ax
-       mov     cl,[ebx+9]
-       shr     cl,1
-       and     cl,1
-       neg     cl
-       or      byte [ebx+8],8
-       test    byte [ebx+8],1
-       jz      label_undefined
-       cmp     ax,[ebx+16]
-       je      unadjusted_label
-       test    byte [ebx+8],4
-       jnz     label_out_of_scope
-       test    byte [ebx+9],1
-       jz      unadjusted_label
-       mov     eax,[ebx]
-       sub     eax,dword [adjustment]
-       stos    dword [edi]
-       mov     eax,[ebx+4]
-       sbb     eax,dword [adjustment+4]
-       stos    dword [edi]
-       sbb     cl,[adjustment_sign]
-       mov     [edi-8+13],cl
-       mov     eax,dword [adjustment]
-       or      al,[adjustment_sign]
-       or      eax,dword [adjustment+4]
-       jz      got_label
-       or      [next_pass_needed],-1
-       jmp     got_label
-      unadjusted_label:
-       mov     eax,[ebx]
-       stos    dword [edi]
-       mov     eax,[ebx+4]
-       stos    dword [edi]
-       mov     [edi-8+13],cl
-      got_label:
-       test    byte [ebx+9],4
-       jnz     invalid_use_of_symbol
-       call    store_label_reference
-       mov     al,[ebx+11]
-       mov     [edi-8+12],al
-       mov     eax,[ebx+12]
-       mov     [edi-8+8],eax
-       cmp     al,ah
-       jne     labeled_registers_ok
-       shr     eax,16
-       add     al,ah
-       jo      labeled_registers_ok
-       xor     ah,ah
-       mov     [edi-8+10],ax
-       mov     [edi-8+9],ah
-      labeled_registers_ok:
-       mov     eax,[ebx+20]
-       mov     [edi-8+16],eax
-       add     edi,0Ch
-       mov     al,[ebx+10]
-       or      al,al
-       jz      calculation_loop
-       test    [operand_flags],1
-       jnz     calculation_loop
-      check_size:
-       xchg    [operand_size],al
-       or      al,al
-       jz      calculation_loop
-       cmp     al,[operand_size]
-       jne     operand_sizes_do_not_match
-       jmp     calculation_loop
-      actual_file_offset_label:
-       mov     eax,[undefined_data_end]
-       mov     ebp,[addressing_space]
-       test    byte [ds:ebp+0Ah],1
-       jnz     use_undefined_data_offset
-       cmp     eax,[current_offset]
-       jne     use_current_offset
-       use_undefined_data_offset:
-       mov     eax,[undefined_data_start]
-       jmp     make_file_offset_label
-      current_file_offset_label:
-       mov     ebp,[addressing_space]
-       test    byte [ds:ebp+0Ah],1
-       jz      use_current_offset
-       mov     eax,[undefined_data_end]
-       jmp     make_file_offset_label
-       use_current_offset:
-       mov     eax,[current_offset]
-       make_file_offset_label:
-       cmp     [output_format],2
-       jae     invalid_use_of_symbol
-       sub     eax,[code_start]
-       jmp     make_dword_label_value
-      current_offset_label:
-       mov     eax,[current_offset]
-       make_current_offset_label:
-       xor     edx,edx
-       xor     ch,ch
-       mov     ebp,[addressing_space]
-       sub     eax,[ds:ebp]
-       sbb     edx,[ds:ebp+4]
-       sbb     ch,[ds:ebp+8]
-       jp      current_offset_label_ok
-       call    recoverable_overflow
-       current_offset_label_ok:
-       stos    dword [edi]
-       mov     eax,edx
-       stos    dword [edi]
-       mov     eax,[ds:ebp+10h]
-       stos    dword [edi]
-       mov     cl,[ds:ebp+9]
-       mov     [edi-12+12],cx
-       mov     eax,[ds:ebp+14h]
-       mov     [edi-12+16],eax
-       add     edi,8
-       jmp     calculation_loop
-      org_origin_label:
-       mov     eax,[addressing_space]
-       mov     eax,[eax+18h]
-       jmp     make_current_offset_label
-      counter_label:
-       mov     eax,[counter]
-      make_dword_label_value:
-       stos    dword [edi]
-       xor     eax,eax
-       stos    dword [edi]
-       add     edi,0Ch
-       jmp     calculation_loop
-      timestamp_label:
-       call    make_timestamp
-      make_qword_label_value:
-       stos    dword [edi]
-       mov     eax,edx
-       stos    dword [edi]
-       add     edi,0Ch
-       jmp     calculation_loop
-      predefined_label:
-       or      eax,eax
-       jz      current_offset_label
-       cmp     eax,1
-       je      counter_label
-       cmp     eax,2
-       je      timestamp_label
-       cmp     eax,3
-       je      org_origin_label
-       cmp     eax,4
-       je      current_file_offset_label
-       cmp     eax,5
-       je      actual_file_offset_label
-       mov     edx,invalid_value
-       jmp     error_undefined
-      label_out_of_scope:
-       mov     edx,symbol_out_of_scope
-       jmp     error_undefined
-      label_undefined:
-       mov     edx,undefined_symbol
-      error_undefined:
-       cmp     [current_pass],1
-       ja      undefined_value
-      force_next_pass:
-       or      [next_pass_needed],-1
-      undefined_value:
-       or      [value_undefined],-1
-       and     word [edi+12],0
-       xor     eax,eax
-       stos    dword [edi]
-       stos    dword [edi]
-       add     edi,0Ch
-       cmp     [error_line],0
-       jne     calculation_loop
-       mov     eax,[current_line]
-       mov     [error_line],eax
-       mov     [error],edx
-       mov     [error_info],ebx
-       jmp     calculation_loop
-      calculate_add:
-       xor     ah,ah
-       mov     ah,[ebx+12]
-       mov     al,[edi+12]
-       or      al,al
-       jz      add_values
-       or      ah,ah
-       jz      add_relocatable
-       add     ah,al
-       jnz     invalid_add
-       mov     ecx,[edi+16]
-       cmp     ecx,[ebx+16]
-       je      add_values
-      invalid_add:
-       call    recoverable_misuse
-       jmp     add_values
-      add_relocatable:
-       mov     ah,al
-       mov     ecx,[edi+16]
-       mov     [ebx+16],ecx
-      add_values:
-       mov     [ebx+12],ah
-       mov     eax,[edi]
-       add     [ebx],eax
-       mov     eax,[edi+4]
-       adc     [ebx+4],eax
-       mov     al,[edi+13]
-       adc     [ebx+13],al
-       jp      add_sign_ok
-       call    recoverable_overflow
-      add_sign_ok:
-       or      dx,dx
-       jz      calculation_loop
-       push    esi
-       mov     esi,ebx
-       mov     cl,[edi+10]
-       mov     al,[edi+8]
-       call    add_register
-       mov     cl,[edi+11]
-       mov     al,[edi+9]
-       call    add_register
-       pop     esi
-       jmp     calculation_loop
-      add_register:
-       or      al,al
-       jz      add_register_done
-      add_register_start:
-       cmp     [esi+8],al
-       jne     add_in_second_slot
-       add     [esi+10],cl
-       jo      value_out_of_range
-       jnz     add_register_done
-       mov     byte [esi+8],0
-       ret
-      add_in_second_slot:
-       cmp     [esi+9],al
-       jne     create_in_first_slot
-       add     [esi+11],cl
-       jo      value_out_of_range
-       jnz     add_register_done
-       mov     byte [esi+9],0
-       ret
-      create_in_first_slot:
-       cmp     byte [esi+8],0
-       jne     create_in_second_slot
-       mov     [esi+8],al
-       mov     [esi+10],cl
-       ret
-      create_in_second_slot:
-       cmp     byte [esi+9],0
-       jne     invalid_expression
-       mov     [esi+9],al
-       mov     [esi+11],cl
-      add_register_done:
-       ret
-      out_of_range:
-       jmp     calculation_loop
-      calculate_sub:
-       xor     ah,ah
-       mov     ah,[ebx+12]
-       mov     al,[edi+12]
-       or      al,al
-       jz      sub_values
-       or      ah,ah
-       jz      negate_relocatable
-       cmp     al,ah
-       jne     invalid_sub
-       xor     ah,ah
-       mov     ecx,[edi+16]
-       cmp     ecx,[ebx+16]
-       je      sub_values
-      invalid_sub:
-       call    recoverable_misuse
-       jmp     sub_values
-      negate_relocatable:
-       neg     al
-       mov     ah,al
-       mov     ecx,[edi+16]
-       mov     [ebx+16],ecx
-      sub_values:
-       mov     [ebx+12],ah
-       mov     eax,[edi]
-       sub     [ebx],eax
-       mov     eax,[edi+4]
-       sbb     [ebx+4],eax
-       mov     al,[edi+13]
-       sbb     [ebx+13],al
-       jp      sub_sign_ok
-       cmp     [error_line],0
-       jne     sub_sign_ok
-       call    recoverable_overflow
-      sub_sign_ok:
-       or      dx,dx
-       jz      calculation_loop
-       push    esi
-       mov     esi,ebx
-       mov     cl,[edi+10]
-       mov     al,[edi+8]
-       call    sub_register
-       mov     cl,[edi+11]
-       mov     al,[edi+9]
-       call    sub_register
-       pop     esi
-       jmp     calculation_loop
-      sub_register:
-       or      al,al
-       jz      add_register_done
-       neg     cl
-       jo      value_out_of_range
-       jmp     add_register_start
-      calculate_mul:
-       or      dx,dx
-       jz      mul_start
-       cmp     word [ebx+8],0
-       jne     mul_start
-       xor     ecx,ecx
-      swap_values:
-       mov     eax,[ebx+ecx]
-       xchg    eax,[edi+ecx]
-       mov     [ebx+ecx],eax
-       add     ecx,4
-       cmp     ecx,16
-       jb      swap_values
-      mul_start:
-       push    esi edx
-       mov     esi,ebx
-       xor     bl,bl
-       cmp     byte [esi+13],0
-       je      mul_first_sign_ok
-       xor     bl,-1
-       mov     eax,[esi]
-       mov     edx,[esi+4]
-       not     eax
-       not     edx
-       add     eax,1
-       adc     edx,0
-       mov     [esi],eax
-       mov     [esi+4],edx
-       or      eax,edx
-       jz      mul_overflow
-      mul_first_sign_ok:
-       cmp     byte [edi+13],0
-       je      mul_second_sign_ok
-       xor     bl,-1
-       cmp     byte [esi+8],0
-       je      mul_first_register_sign_ok
-       neg     byte [esi+10]
-       jo      invalid_expression
-      mul_first_register_sign_ok:
-       cmp     byte [esi+9],0
-       je      mul_second_register_sign_ok
-       neg     byte [esi+11]
-       jo      invalid_expression
-      mul_second_register_sign_ok:
-       mov     eax,[edi]
-       mov     edx,[edi+4]
-       not     eax
-       not     edx
-       add     eax,1
-       adc     edx,0
-       mov     [edi],eax
-       mov     [edi+4],edx
-       or      eax,edx
-       jz      mul_overflow
-      mul_second_sign_ok:
-       cmp     dword [esi+4],0
-       jz      mul_numbers
-       cmp     dword [edi+4],0
-       jz      mul_numbers
-       jnz     mul_overflow
-      mul_numbers:
-       mov     eax,[esi+4]
-       mul     dword [edi]
-       or      edx,edx
-       jnz     mul_overflow
-       mov     ecx,eax
-       mov     eax,[esi]
-       mul     dword [edi+4]
-       or      edx,edx
-       jnz     mul_overflow
-       add     ecx,eax
-       jc      mul_overflow
-       mov     eax,[esi]
-       mul     dword [edi]
-       add     edx,ecx
-       jc      mul_overflow
-       mov     [esi],eax
-       mov     [esi+4],edx
-       or      bl,bl
-       jz      mul_ok
-       not     eax
-       not     edx
-       add     eax,1
-       adc     edx,0
-       mov     [esi],eax
-       mov     [esi+4],edx
-       or      eax,edx
-       jnz     mul_ok
-       not     bl
-      mul_ok:
-       mov     [esi+13],bl
-       pop     edx
-       or      dx,dx
-       jz      mul_calculated
-       cmp     word [edi+8],0
-       jne     invalid_value
-       cmp     byte [esi+8],0
-       je      mul_first_register_ok
-       call    get_byte_scale
-       imul    byte [esi+10]
-       mov     dl,ah
-       cbw
-       cmp     ah,dl
-       jne     value_out_of_range
-       mov     [esi+10],al
-       or      al,al
-       jnz     mul_first_register_ok
-       mov     [esi+8],al
-      mul_first_register_ok:
-       cmp     byte [esi+9],0
-       je      mul_calculated
-       call    get_byte_scale
-       imul    byte [esi+11]
-       mov     dl,ah
-       cbw
-       cmp     ah,dl
-       jne     value_out_of_range
-       mov     [esi+11],al
-       or      al,al
-       jnz     mul_calculated
-       mov     [esi+9],al
-      mul_calculated:
-       pop     esi
-       jmp     calculation_loop
-      mul_overflow:
-       pop     edx esi
-       call    recoverable_overflow
-       jmp     calculation_loop
-      get_byte_scale:
-       mov     al,[edi]
-       cbw
-       cwde
-       cdq
-       cmp     edx,[edi+4]
-       jne     value_out_of_range
-       cmp     eax,[edi]
-       jne     value_out_of_range
-       ret
-      calculate_div:
-       push    esi edx
-       mov     esi,ebx
-       call    div_64
-       pop     edx
-       or      dx,dx
-       jz      div_calculated
-       cmp     byte [esi+8],0
-       je      div_first_register_ok
-       call    get_byte_scale
-       or      al,al
-       jz      value_out_of_range
-       mov     al,[esi+10]
-       cbw
-       idiv    byte [edi]
-       or      ah,ah
-       jnz     invalid_use_of_symbol
-       mov     [esi+10],al
-      div_first_register_ok:
-       cmp     byte [esi+9],0
-       je      div_calculated
-       call    get_byte_scale
-       or      al,al
-       jz      value_out_of_range
-       mov     al,[esi+11]
-       cbw
-       idiv    byte [edi]
-       or      ah,ah
-       jnz     invalid_use_of_symbol
-       mov     [esi+11],al
-      div_calculated:
-       pop     esi
-       jmp     calculation_loop
-      calculate_mod:
-       push    esi
-       mov     esi,ebx
-       call    div_64
-       mov     [esi],eax
-       mov     [esi+4],edx
-       mov     [esi+13],bh
-       pop     esi
-       jmp     calculation_loop
-      calculate_and:
-       mov     eax,[edi]
-       mov     edx,[edi+4]
-       mov     cl,[edi+13]
-       and     [ebx],eax
-       and     [ebx+4],edx
-       and     [ebx+13],cl
-       jmp     calculation_loop
-      calculate_or:
-       mov     eax,[edi]
-       mov     edx,[edi+4]
-       mov     cl,[edi+13]
-       or      [ebx],eax
-       or      [ebx+4],edx
-       or      [ebx+13],cl
-       jmp     calculation_loop
-      calculate_xor:
-       mov     eax,[edi]
-       mov     edx,[edi+4]
-       mov     cl,[edi+13]
-       xor     [ebx],eax
-       xor     [ebx+4],edx
-       xor     [ebx+13],cl
-       jmp     calculation_loop
-      shr_negative:
-       mov     byte [edi+13],0
-       not     dword [edi]
-       not     dword [edi+4]
-       add     dword [edi],1
-       adc     dword [edi+4],0
-       jc      shl_over
-      calculate_shl:
-       cmp     byte [edi+13],0
-       jne     shl_negative
-       mov     edx,[ebx+4]
-       mov     eax,[ebx]
-       cmp     dword [edi+4],0
-       jne     shl_over
-       movsx   ecx,byte [ebx+13]
-       xchg    ecx,[edi]
-       cmp     ecx,64
-       je      shl_max
-       ja      shl_over
-       cmp     ecx,32
-       jae     shl_high
-       shld    [edi],edx,cl
-       shld    edx,eax,cl
-       shl     eax,cl
-       mov     [ebx],eax
-       mov     [ebx+4],edx
-       jmp     shl_done
-      shl_over:
-       cmp     byte [ebx+13],0
-       jne     shl_overflow
-      shl_max:
-       movsx   ecx,byte [ebx+13]
-       cmp     eax,ecx
-       jne     shl_overflow
-       cmp     edx,ecx
-       jne     shl_overflow
-       xor     eax,eax
-       mov     [ebx],eax
-       mov     [ebx+4],eax
-       jmp     calculation_loop
-      shl_high:
-       sub     cl,32
-       shld    [edi],edx,cl
-       shld    edx,eax,cl
-       shl     eax,cl
-       mov     [ebx+4],eax
-       and     dword [ebx],0
-       cmp     edx,[edi]
-       jne     shl_overflow
-      shl_done:
-       movsx   eax,byte [ebx+13]
-       cmp     eax,[edi]
-       je      calculation_loop
-      shl_overflow:
-       call    recoverable_overflow
-       jmp     calculation_loop
-      shl_negative:
-       mov     byte [edi+13],0
-       not     dword [edi]
-       not     dword [edi+4]
-       add     dword [edi],1
-       adc     dword [edi+4],0
-       jnc     calculate_shr
-       dec     dword [edi+4]
-      calculate_shr:
-       cmp     byte [edi+13],0
-       jne     shr_negative
-       mov     edx,[ebx+4]
-       mov     eax,[ebx]
-       cmp     dword [edi+4],0
-       jne     shr_over
-       mov     ecx,[edi]
-       cmp     ecx,64
-       jae     shr_over
-       push    esi
-       movsx   esi,byte [ebx+13]
-       cmp     ecx,32
-       jae     shr_high
-       shrd    eax,edx,cl
-       shrd    edx,esi,cl
-       mov     [ebx],eax
-       mov     [ebx+4],edx
-       pop     esi
-       jmp     calculation_loop
-      shr_high:
-       sub     cl,32
-       shrd    edx,esi,cl
-       mov     [ebx],edx
-       mov     [ebx+4],esi
-       pop     esi
-       jmp     calculation_loop
-      shr_over:
-       movsx   eax,byte [ebx+13]
-       mov     dword [ebx],eax
-       mov     dword [ebx+4],eax
-       jmp     calculation_loop
-      calculate_not:
-       cmp     word [edi+8],0
-       jne     invalid_expression
-       cmp     byte [edi+12],0
-       je      not_ok
-       call    recoverable_misuse
-      not_ok:
-       not     dword [edi]
-       not     dword [edi+4]
-       not     byte [edi+13]
-       add     edi,14h
-       jmp     calculation_loop
-      calculate_bsf:
-       cmp     word [edi+8],0
-       jne     invalid_expression
-       cmp     byte [edi+12],0
-       je      bsf_ok
-       call    recoverable_misuse
-      bsf_ok:
-       xor     ecx,ecx
-       bsf     eax,[edi]
-       jnz     finish_bs
-       mov     ecx,32
-       bsf     eax,[edi+4]
-       jnz     finish_bs
-       cmp     byte [edi+13],0
-       jne     finish_bs
-      bs_overflow:
-       call    recoverable_overflow
-       add     edi,14h
-       jmp     calculation_loop
-      calculate_bsr:
-       cmp     word [edi+8],0
-       jne     invalid_expression
-       cmp     byte [edi+12],0
-       je      bsr_ok
-       call    recoverable_misuse
-      bsr_ok:
-       cmp     byte [edi+13],0
-       jne     bs_overflow
-       mov     ecx,32
-       bsr     eax,[edi+4]
-       jnz     finish_bs
-       xor     ecx,ecx
-       bsr     eax,[edi]
-       jz      bs_overflow
-      finish_bs:
-       add     eax,ecx
-       xor     edx,edx
-       mov     [edi],eax
-       mov     [edi+4],edx
-       mov     [edi+13],dl
-       add     edi,14h
-       jmp     calculation_loop
-      calculate_neg:
-       cmp     byte [edi+8],0
-       je      neg_first_register_ok
-       neg     byte [edi+10]
-       jo      invalid_expression
-      neg_first_register_ok:
-       cmp     byte [edi+9],0
-       je      neg_second_register_ok
-       neg     byte [edi+11]
-       jo      invalid_expression
-      neg_second_register_ok:
-       neg     byte [edi+12]
-       xor     eax,eax
-       xor     edx,edx
-       xor     cl,cl
-       xchg    eax,[edi]
-       xchg    edx,[edi+4]
-       xchg    cl,[edi+13]
-       sub     [edi],eax
-       sbb     [edi+4],edx
-       sbb     [edi+13],cl
-       jp      neg_sign_ok
-       call    recoverable_overflow
-      neg_sign_ok:
-       add     edi,14h
-       jmp     calculation_loop
-      calculate_rva:
-       cmp     word [edi+8],0
-       jne     invalid_expression
-       mov     al,[output_format]
-       cmp     al,5
-       je      calculate_gotoff
-       cmp     al,4
-       je      calculate_coff_rva
-       cmp     al,3
-       jne     invalid_expression
-       test    [format_flags],8
-       jnz     pe64_rva
-       mov     al,2
-       bt      [resolver_flags],0
-       jc      rva_type_ok
-       xor     al,al
-      rva_type_ok:
-       cmp     byte [edi+12],al
-       je      rva_ok
-       call    recoverable_misuse
-      rva_ok:
-       mov     byte [edi+12],0
-       mov     eax,[code_start]
-       mov     eax,[eax+34h]
-       xor     edx,edx
-      finish_rva:
-       sub     [edi],eax
-       sbb     [edi+4],edx
-       sbb     byte [edi+13],0
-       jp      rva_finished
-       call    recoverable_overflow
-      rva_finished:
-       add     edi,14h
-       jmp     calculation_loop
-      pe64_rva:
-       mov     al,4
-       bt      [resolver_flags],0
-       jc      pe64_rva_type_ok
-       xor     al,al
-      pe64_rva_type_ok:
-       cmp     byte [edi+12],al
-       je      pe64_rva_ok
-       call    recoverable_misuse
-      pe64_rva_ok:
-       mov     byte [edi+12],0
-       mov     eax,[code_start]
-       mov     edx,[eax+34h]
-       mov     eax,[eax+30h]
-       jmp     finish_rva
-      calculate_gotoff:
-       test    [format_flags],1
-       jnz     calculate_elf_dyn_rva
-       test    [format_flags],8
-       jnz     invalid_expression
-      calculate_coff_rva:
-       mov     dl,5
-       cmp     byte [edi+12],2
-       je      change_value_type
-      incorrect_change_of_value_type:
-       call    recoverable_misuse
-      change_value_type:
-       mov     byte [edi+12],dl
-       add     edi,14h
-       jmp     calculation_loop
-      calculate_elf_dyn_rva:
-       xor     dl,dl
-       test    byte [edi+12],1
-       jnz     incorrect_change_of_value_type
-       jmp     change_value_type
-      calculate_plt:
-       cmp     word [edi+8],0
-       jne     invalid_expression
-       cmp     [output_format],5
-       jne     invalid_expression
-       test    [format_flags],1
-       jnz     invalid_expression
-       mov     dl,6
-       mov     dh,2
-       test    [format_flags],8
-       jz      check_value_for_plt
-       mov     dh,4
-      check_value_for_plt:
-       mov     eax,[edi]
-       or      eax,[edi+4]
-       jnz     incorrect_change_of_value_type
-       cmp     byte [edi+12],dh
-       jne     incorrect_change_of_value_type
-       mov     eax,[edi+16]
-       cmp     byte [eax],80h
-       jne     incorrect_change_of_value_type
-       jmp     change_value_type
-      div_64:
-       xor     ebx,ebx
-       cmp     dword [edi],0
-       jne     divider_ok
-       cmp     dword [edi+4],0
-       jne     divider_ok
-       cmp     [next_pass_needed],0
-       je      value_out_of_range
-       jmp     div_done
-      divider_ok:
-       cmp     byte [esi+13],0
-       je      div_first_sign_ok
-       mov     eax,[esi]
-       mov     edx,[esi+4]
-       not     eax
-       not     edx
-       add     eax,1
-       adc     edx,0
-       mov     [esi],eax
-       mov     [esi+4],edx
-       or      eax,edx
-       jz      value_out_of_range
-       xor     bx,-1
-      div_first_sign_ok:
-       cmp     byte [edi+13],0
-       je      div_second_sign_ok
-       mov     eax,[edi]
-       mov     edx,[edi+4]
-       not     eax
-       not     edx
-       add     eax,1
-       adc     edx,0
-       mov     [edi],eax
-       mov     [edi+4],edx
-       or      eax,edx
-       jz      value_out_of_range
-       xor     bl,-1
-      div_second_sign_ok:
-       cmp     dword [edi+4],0
-       jne     div_high
-       mov     ecx,[edi]
-       mov     eax,[esi+4]
-       xor     edx,edx
-       div     ecx
-       mov     [esi+4],eax
-       mov     eax,[esi]
-       div     ecx
-       mov     [esi],eax
-       mov     eax,edx
-       xor     edx,edx
-       jmp     div_done
-      div_high:
-       push    ebx
-       mov     eax,[esi+4]
-       xor     edx,edx
-       div     dword [edi+4]
-       mov     ebx,[esi]
-       mov     [esi],eax
-       and     dword [esi+4],0
-       mov     ecx,edx
-       mul     dword [edi]
-      div_high_loop:
-       cmp     ecx,edx
-       ja      div_high_done
-       jb      div_high_large_correction
-       cmp     ebx,eax
-       jae     div_high_done
-      div_high_correction:
-       dec     dword [esi]
-       sub     eax,[edi]
-       sbb     edx,[edi+4]
-       jnc     div_high_loop
-      div_high_done:
-       sub     ebx,eax
-       sbb     ecx,edx
-       mov     edx,ecx
-       mov     eax,ebx
-       pop     ebx
-       jmp     div_done
-      div_high_large_correction:
-       push    eax edx
-       mov     eax,edx
-       sub     eax,ecx
-       xor     edx,edx
-       div     dword [edi+4]
-       shr     eax,1
-       jz      div_high_small_correction
-       sub     [esi],eax
-       push    eax
-       mul     dword [edi+4]
-       sub     dword [esp+4],eax
-       pop     eax
-       mul     dword [edi]
-       sub     dword [esp+4],eax
-       sbb     dword [esp],edx
-       pop     edx eax
-       jmp     div_high_loop
-      div_high_small_correction:
-       pop     edx eax
-       jmp     div_high_correction
-      div_done:
-       or      bh,bh
-       jz      remainder_ok
-       not     eax
-       not     edx
-       add     eax,1
-       adc     edx,0
-       mov     ecx,eax
-       or      ecx,edx
-       jnz     remainder_ok
-       not     bh
-      remainder_ok:
-       or      bl,bl
-       jz      div_ok
-       not     dword [esi]
-       not     dword [esi+4]
-       add     dword [esi],1
-       adc     dword [esi+4],0
-       mov     ecx,[esi]
-       or      ecx,[esi+4]
-       jnz     div_ok
-       not     bl
-      div_ok:
-       mov     [esi+13],bl
-       ret
-      store_label_reference:
-       cmp     [symbols_file],0
-       je      label_reference_ok
-       cmp     [next_pass_needed],0
-       jne     label_reference_ok
-       mov     eax,[tagged_blocks]
-       mov     dword [eax-4],2
-       mov     dword [eax-8],4
-       sub     eax,8+4
-       cmp     eax,edi
-       jbe     out_of_memory
-       mov     [tagged_blocks],eax
-       mov     [eax],ebx
-      label_reference_ok:
-       ret
-      convert_fp:
-       inc     esi
-       and     word [edi+8],0
-       and     word [edi+12],0
-       mov     al,[value_size]
-       cmp     al,2
-       je      convert_fp_word
-       cmp     al,4
-       je      convert_fp_dword
-       test    al,not 8
-       jz      convert_fp_qword
-       call    recoverable_misuse
-      convert_fp_qword:
-       xor     eax,eax
-       xor     edx,edx
-       cmp     word [esi+8],8000h
-       je      fp_qword_store
-       mov     bx,[esi+8]
-       mov     eax,[esi]
-       mov     edx,[esi+4]
-       add     eax,eax
-       adc     edx,edx
-       mov     ecx,edx
-       shr     edx,12
-       shrd    eax,ecx,12
-       jnc     fp_qword_ok
-       add     eax,1
-       adc     edx,0
-       bt      edx,20
-       jnc     fp_qword_ok
-       and     edx,1 shl 20 - 1
-       inc     bx
-       shr     edx,1
-       rcr     eax,1
-      fp_qword_ok:
-       add     bx,3FFh
-       cmp     bx,7FFh
-       jge     value_out_of_range
-       cmp     bx,0
-       jg      fp_qword_exp_ok
-       or      edx,1 shl 20
-       mov     cx,bx
-       neg     cx
-       inc     cx
-       cmp     cx,52+1
-       ja      value_out_of_range
-       cmp     cx,32
-       jb      fp_qword_small_shift
-       sub     cx,32
-       mov     eax,edx
-       xor     edx,edx
-       shr     eax,cl
-       jmp     fp_qword_shift_done
-      fp_qword_small_shift:
-       mov     ebx,edx
-       shr     edx,cl
-       shrd    eax,ebx,cl
-      fp_qword_shift_done:
-       mov     bx,0
-       jnc     fp_qword_exp_ok
-       add     eax,1
-       adc     edx,0
-       test    edx,1 shl 20
-       jz      fp_qword_exp_ok
-       and     edx,1 shl 20 - 1
-       inc     bx
-      fp_qword_exp_ok:
-       shl     ebx,20
-       or      edx,ebx
-       jnz     fp_qword_store
-       or      eax,eax
-       jz      value_out_of_range
-      fp_qword_store:
-       mov     bl,[esi+11]
-       shl     ebx,31
-       or      edx,ebx
-       mov     [edi],eax
-       mov     [edi+4],edx
-       add     esi,13
-       ret
-      convert_fp_word:
-       xor     eax,eax
-       cmp     word [esi+8],8000h
-       je      fp_word_store
-       mov     bx,[esi+8]
-       mov     ax,[esi+6]
-       shl     ax,1
-       shr     ax,6
-       jnc     fp_word_ok
-       inc     ax
-       bt      ax,10
-       jnc     fp_word_ok
-       and     ax,1 shl 10 - 1
-       inc     bx
-       shr     ax,1
-      fp_word_ok:
-       add     bx,0Fh
-       cmp     bx,01Fh
-       jge     value_out_of_range
-       cmp     bx,0
-       jg      fp_word_exp_ok
-       or      ax,1 shl 10
-       mov     cx,bx
-       neg     cx
-       inc     cx
-       cmp     cx,10+1
-       ja      value_out_of_range
-       xor     bx,bx
-       shr     ax,cl
-       jnc     fp_word_exp_ok
-       inc     ax
-       test    ax,1 shl 10
-       jz      fp_word_exp_ok
-       and     ax,1 shl 10 - 1
-       inc     bx
-      fp_word_exp_ok:
-       shl     bx,10
-       or      ax,bx
-       jz      value_out_of_range
-      fp_word_store:
-       mov     bl,[esi+11]
-       shl     bx,15
-       or      ax,bx
-       mov     [edi],eax
-       xor     eax,eax
-       mov     [edi+4],eax
-       add     esi,13
-       ret
-      convert_fp_dword:
-       xor     eax,eax
-       cmp     word [esi+8],8000h
-       je      fp_dword_store
-       mov     bx,[esi+8]
-       mov     eax,[esi+4]
-       shl     eax,1
-       shr     eax,9
-       jnc     fp_dword_ok
-       inc     eax
-       bt      eax,23
-       jnc     fp_dword_ok
-       and     eax,1 shl 23 - 1
-       inc     bx
-       shr     eax,1
-      fp_dword_ok:
-       add     bx,7Fh
-       cmp     bx,0FFh
-       jge     value_out_of_range
-       cmp     bx,0
-       jg      fp_dword_exp_ok
-       or      eax,1 shl 23
-       mov     cx,bx
-       neg     cx
-       inc     cx
-       cmp     cx,23+1
-       ja      value_out_of_range
-       xor     bx,bx
-       shr     eax,cl
-       jnc     fp_dword_exp_ok
-       inc     eax
-       test    eax,1 shl 23
-       jz      fp_dword_exp_ok
-       and     eax,1 shl 23 - 1
-       inc     bx
-      fp_dword_exp_ok:
-       shl     ebx,23
-       or      eax,ebx
-       jz      value_out_of_range
-      fp_dword_store:
-       mov     bl,[esi+11]
-       shl     ebx,31
-       or      eax,ebx
-       mov     [edi],eax
-       xor     eax,eax
-       mov     [edi+4],eax
-       add     esi,13
-       ret
-      get_string_value:
-       inc     esi
-       lods    dword [esi]
-       mov     ecx,eax
-       cmp     ecx,8
-       ja      value_out_of_range
-       mov     edx,edi
-       xor     eax,eax
-       stos    dword [edi]
-       stos    dword [edi]
-       mov     edi,edx
-       rep     movs byte [edi],[esi]
-       mov     edi,edx
-       inc     esi
-       and     word [edi+8],0
-       and     word [edi+12],0
-       ret
-
-get_byte_value:
-       mov     [value_size],1
-       or      [operand_flags],1
-       call    calculate_value
-       or      al,al
-       jz      check_byte_value
-       call    recoverable_misuse
-      check_byte_value:
-       mov     eax,[edi]
-       mov     edx,[edi+4]
-       cmp     byte [edi+13],0
-       je      byte_positive
-       cmp     edx,-1
-       jne     range_exceeded
-       cmp     eax,-100h
-       jb      range_exceeded
-       ret
-      byte_positive:
-       test    edx,edx
-       jnz     range_exceeded
-       cmp     eax,100h
-       jae     range_exceeded
-      return_byte_value:
-       ret
-      range_exceeded:
-       xor     eax,eax
-       xor     edx,edx
-      recoverable_overflow:
-       cmp     [error_line],0
-       jne     ignore_overflow
-       push    [current_line]
-       pop     [error_line]
-       mov     [error],value_out_of_range
-       or      [value_undefined],-1
-      ignore_overflow:
-       ret
-      recoverable_misuse:
-       cmp     [error_line],0
-       jne     ignore_misuse
-       push    [current_line]
-       pop     [error_line]
-       mov     [error],invalid_use_of_symbol
-      ignore_misuse:
-       ret
-get_word_value:
-       mov     [value_size],2
-       or      [operand_flags],1
-       call    calculate_value
-       cmp     al,2
-       jb      check_word_value
-       call    recoverable_misuse
-      check_word_value:
-       mov     eax,[edi]
-       mov     edx,[edi+4]
-       cmp     byte [edi+13],0
-       je      word_positive
-       cmp     edx,-1
-       jne     range_exceeded
-       cmp     eax,-10000h
-       jb      range_exceeded
-       ret
-      word_positive:
-       test    edx,edx
-       jnz     range_exceeded
-       cmp     eax,10000h
-       jae     range_exceeded
-       ret
-get_dword_value:
-       mov     [value_size],4
-       or      [operand_flags],1
-       call    calculate_value
-       cmp     al,4
-       jne     check_dword_value
-       mov     [value_type],2
-       mov     eax,[edi]
-       cdq
-       cmp     edx,[edi+4]
-       jne     range_exceeded
-       mov     ecx,edx
-       sar     ecx,31
-       cmp     cl,[value_sign]
-       jne     range_exceeded
-       ret
-      check_dword_value:
-       mov     eax,[edi]
-       mov     edx,[edi+4]
-       cmp     byte [edi+13],0
-       je      dword_positive
-       cmp     edx,-1
-       jne     range_exceeded
-       ret
-      dword_positive:
-       test    edx,edx
-       jne     range_exceeded
-       ret
-get_pword_value:
-       mov     [value_size],6
-       or      [operand_flags],1
-       call    calculate_value
-       cmp     al,4
-       jne     check_pword_value
-       call    recoverable_misuse
-      check_pword_value:
-       mov     eax,[edi]
-       mov     edx,[edi+4]
-       cmp     byte [edi+13],0
-       je      pword_positive
-       cmp     edx,-10000h
-       jb      range_exceeded
-       ret
-      pword_positive:
-       cmp     edx,10000h
-       jae     range_exceeded
-       ret
-get_qword_value:
-       mov     [value_size],8
-       or      [operand_flags],1
-       call    calculate_value
-      check_qword_value:
-       mov     eax,[edi]
-       mov     edx,[edi+4]
-       ret
-get_count_value:
-       mov     [value_size],8
-       or      [operand_flags],1
-       call    calculate_expression
-       cmp     word [edi+8],0
-       jne     invalid_value
-       mov     [value_sign],0
-       mov     al,[edi+12]
-       or      al,al
-       jz      check_count_value
-       call    recoverable_misuse
-      check_count_value:
-       cmp     byte [edi+13],0
-       jne     invalid_count_value
-       mov     eax,[edi]
-       mov     edx,[edi+4]
-       or      edx,edx
-       jnz     invalid_count_value
-       ret
-      invalid_count_value:
-       cmp     [error_line],0
-       jne     zero_count
-       mov     eax,[current_line]
-       mov     [error_line],eax
-       mov     [error],invalid_value
-      zero_count:
-       xor     eax,eax
-       ret
-get_value:
-       mov     [operand_size],0
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'('
-       jne     invalid_value
-       mov     al,[operand_size]
-       cmp     al,1
-       je      value_byte
-       cmp     al,2
-       je      value_word
-       cmp     al,4
-       je      value_dword
-       cmp     al,6
-       je      value_pword
-       cmp     al,8
-       je      value_qword
-       or      al,al
-       jnz     invalid_value
-       mov     [value_size],al
-       call    calculate_value
-       mov     eax,[edi]
-       mov     edx,[edi+4]
-       ret
-      calculate_value:
-       call    calculate_expression
-       cmp     word [edi+8],0
-       jne     invalid_value
-       mov     eax,[edi+16]
-       mov     [symbol_identifier],eax
-       mov     al,[edi+13]
-       mov     [value_sign],al
-       mov     al,[edi+12]
-       mov     [value_type],al
-       ret
-      value_qword:
-       call    get_qword_value
-      truncated_value:
-       mov     [value_sign],0
-       ret
-      value_pword:
-       call    get_pword_value
-       movzx   edx,dx
-       jmp     truncated_value
-      value_dword:
-       call    get_dword_value
-       xor     edx,edx
-       jmp     truncated_value
-      value_word:
-       call    get_word_value
-       xor     edx,edx
-       movzx   eax,ax
-       jmp     truncated_value
-      value_byte:
-       call    get_byte_value
-       xor     edx,edx
-       movzx   eax,al
-       jmp     truncated_value
-get_address_word_value:
-       mov     [address_size],2
-       mov     [value_size],2
-       mov     [free_address_range],0
-       jmp     calculate_address
-get_address_dword_value:
-       mov     [address_size],4
-       mov     [value_size],4
-       mov     [free_address_range],0
-       jmp     calculate_address
-get_address_qword_value:
-       mov     [address_size],8
-       mov     [value_size],8
-       mov     [free_address_range],0
-       jmp     calculate_address
-get_address_value:
-       mov     [address_size],0
-       mov     [value_size],8
-       or      [free_address_range],-1
-      calculate_address:
-       cmp     byte [esi],'.'
-       je      invalid_address
-       call    calculate_expression
-       mov     eax,[edi+16]
-       mov     [address_symbol],eax
-       mov     al,[edi+13]
-       mov     [address_sign],al
-       mov     al,[edi+12]
-       mov     [value_type],al
-       cmp     al,0
-       je      address_size_ok
-       jg      get_address_symbol_size
-       neg     al
-      get_address_symbol_size:
-       cmp     al,6
-       je      special_address_type_32bit
-       cmp     al,5
-       je      special_address_type_32bit
-       ja      invalid_address_type
-       test    al,1
-       jnz     invalid_address_type
-       shl     al,5
-       jmp     address_symbol_ok
-      invalid_address_type:
-       call    recoverable_misuse
-      special_address_type_32bit:
-       mov     al,40h
-      address_symbol_ok:
-       mov     ah,[address_size]
-       or      [address_size],al
-       shr     al,4
-       or      ah,ah
-       jz      address_size_ok
-       cmp     al,ah
-       je      address_size_ok
-       cmp     ax,0408h
-       je      address_sizes_mixed
-       cmp     ax,0804h
-       jne     address_sizes_do_not_agree
-      address_sizes_mixed:
-       cmp     [value_type],4
-       jne     address_sizes_mixed_type_ok
-       mov     [value_type],2
-      address_sizes_mixed_type_ok:
-       mov     eax,[edi]
-       cdq
-       cmp     edx,[edi+4]
-       je      address_size_ok
-       cmp     [error_line],0
-       jne     address_size_ok
-       call    recoverable_overflow
-      address_size_ok:
-       xor     ebx,ebx
-       xor     ecx,ecx
-       mov     cl,[value_type]
-       shl     ecx,16
-       mov     ch,[address_size]
-       cmp     word [edi+8],0
-       je      check_immediate_address
-       mov     al,[edi+8]
-       mov     dl,[edi+10]
-       call    get_address_register
-       mov     al,[edi+9]
-       mov     dl,[edi+11]
-       call    get_address_register
-       mov     ax,bx
-       shr     ah,4
-       shr     al,4
-       or      bh,bh
-       jz      check_address_registers
-       or      bl,bl
-       jz      check_address_registers
-       cmp     al,ah
-       jne     check_vsib
-      check_address_registers:
-       or      al,ah
-       cmp     al,0Ch
-       jae     check_vsib
-       cmp     al,6
-       je      check_vsib
-       cmp     al,7
-       je      check_vsib
-       mov     ah,[address_size]
-       and     ah,0Fh
-       jz      address_registers_sizes_ok
-       cmp     al,ah
-       jne     invalid_address
-      address_registers_sizes_ok:
-       cmp     al,4
-       je      sib_allowed
-       cmp     al,8
-       je      sib_allowed
-       cmp     al,9
-       je      check_ip_relative_address
-       cmp     cl,1
-       ja      invalid_address
-       cmp     [free_address_range],0
-       jne     check_qword_value
-       jmp     check_word_value
-      address_sizes_do_not_match:
-       cmp     al,0Fh
-       jne     invalid_address
-       mov     al,bh
-       and     al,0Fh
-       cmp     al,ah
-       jne     invalid_address
-      check_ip_relative_address:
-       or      bl,bl
-       jnz     invalid_address
-       cmp     bh,98h
-       je      check_rip_relative_address
-       cmp     bh,94h
-       jne     invalid_address
-       cmp     [free_address_range],0
-       je      check_dword_value
-       mov     eax,[edi]
-       mov     edx,[edi+4]
-       ret
-      check_rip_relative_address:
-       mov     eax,[edi]
-       cdq
-       cmp     edx,[edi+4]
-       jne     range_exceeded
-       cmp     dl,[edi+13]
-       jne     range_exceeded
-       ret
-      get_address_register:
-       or      al,al
-       jz      address_register_ok
-       cmp     dl,1
-       jne     scaled_register
-       or      bh,bh
-       jnz     scaled_register
-       mov     bh,al
-      address_register_ok:
-       ret
-      scaled_register:
-       or      bl,bl
-       jnz     invalid_address
-       mov     bl,al
-       mov     cl,dl
-       jmp     address_register_ok
-      sib_allowed:
-       or      bh,bh
-       jnz     check_index_with_base
-       cmp     cl,3
-       je      special_index_scale
-       cmp     cl,5
-       je      special_index_scale
-       cmp     cl,9
-       je      special_index_scale
-       cmp     cl,2
-       jne     check_index_scale
-       cmp     bl,45h
-       jne     special_index_scale
-       cmp     [code_type],64
-       je      special_index_scale
-       cmp     [segment_register],4
-       jne     special_index_scale
-       cmp     [value_type],0
-       jne     check_index_scale
-       mov     al,[edi]
-       cbw
-       cwde
-       cmp     eax,[edi]
-       jne     check_index_scale
-       cdq
-       cmp     edx,[edi+4]
-       jne     check_immediate_address
-      special_index_scale:
-       mov     bh,bl
-       dec     cl
-      check_immediate_address:
-       cmp     [free_address_range],0
-       jne     check_qword_value
-       mov     al,[address_size]
-       and     al,0Fh
-       cmp     al,2
-       je      check_word_value
-       cmp     al,4
-       je      check_dword_value
-       cmp     al,8
-       je      check_qword_value
-       or      al,al
-       jnz     invalid_value
-       cmp     [code_type],64
-       jne     check_dword_value
-       jmp     check_qword_value
-      check_index_with_base:
-       cmp     cl,1
-       jne     check_index_scale
-       cmp     bl,44h
-       je      swap_base_with_index
-       cmp     bl,84h
-       je      swap_base_with_index
-       cmp     [code_type],64
-       je      check_for_rbp_base
-       cmp     bl,45h
-       jne     check_for_ebp_base
-       cmp     [segment_register],3
-       je      swap_base_with_index
-       jmp     check_immediate_address
-      check_for_ebp_base:
-       cmp     bh,45h
-       jne     check_immediate_address
-       cmp     [segment_register],4
-       jne     check_immediate_address
-      swap_base_with_index:
-       xchg    bl,bh
-       jmp     check_immediate_address
-      check_for_rbp_base:
-       cmp     bh,45h
-       je      swap_base_with_index
-       cmp     bh,85h
-       je      swap_base_with_index
-       jmp     check_immediate_address
-      check_index_scale:
-       test    cl,not 1111b
-       jnz     invalid_address
-       mov     al,cl
-       dec     al
-       and     al,cl
-       jz      check_immediate_address
-       jmp     invalid_address
-      check_vsib:
-       xor     ah,ah
-      check_vsib_base:
-       test    bh,bh
-       jz      check_vsib_index
-       mov     al,bh
-       shr     al,4
-       cmp     al,4
-       je      check_vsib_base_size
-       cmp     [code_type],64
-       jne     swap_vsib_registers
-       cmp     al,8
-       jne     swap_vsib_registers
-      check_vsib_base_size:
-       mov     ah,[address_size]
-       and     ah,0Fh
-       jz      check_vsib_index
-       cmp     al,ah
-       jne     invalid_address
-      check_vsib_index:
-       mov     al,bl
-       and     al,0E0h
-       cmp     al,0C0h
-       jae     check_index_scale
-       cmp     al,60h
-       je      check_index_scale
-       jmp     invalid_address
-      swap_vsib_registers:
-       xor     ah,-1
-       jz      invalid_address
-       cmp     cl,1
-       ja      invalid_address
-       xchg    bl,bh
-       mov     cl,1
-       jmp     check_vsib_base
-
-calculate_relative_offset:
-       cmp     [value_undefined],0
-       jne     relative_offset_ok
-       test    bh,bh
-       setne   ch
-       cmp     bx,[ds:ebp+10h]
-       je      origin_registers_ok
-       xchg    bh,bl
-       xchg    ch,cl
-       cmp     bx,[ds:ebp+10h]
-       jne     invalid_value
-      origin_registers_ok:
-       cmp     cx,[ds:ebp+10h+2]
-       jne     invalid_value
-       mov     bl,[address_sign]
-       add     eax,[ds:ebp]
-       adc     edx,[ds:ebp+4]
-       adc     bl,[ds:ebp+8]
-       sub     eax,edi
-       sbb     edx,0
-       sbb     bl,0
-       mov     [value_sign],bl
-       mov     bl,[value_type]
-       mov     ecx,[address_symbol]
-       mov     [symbol_identifier],ecx
-       test    bl,1
-       jnz     relative_offset_unallowed
-       cmp     bl,6
-       je      plt_relative_offset
-       mov     bh,[ds:ebp+9]
-       cmp     bl,bh
-       je      set_relative_offset_type
-       cmp     bx,0402h
-       je      set_relative_offset_type
-      relative_offset_unallowed:
-       call    recoverable_misuse
-      set_relative_offset_type:
-       cmp     [value_type],0
-       je      relative_offset_ok
-       mov     [value_type],0
-       cmp     ecx,[ds:ebp+14h]
-       je      relative_offset_ok
-       mov     [value_type],3
-      relative_offset_ok:
-       ret
-      plt_relative_offset:
-       mov     [value_type],7
-       cmp     byte [ds:ebp+9],2
-       je      relative_offset_ok
-       cmp     byte [ds:ebp+9],4
-       jne     recoverable_misuse
-       ret
-
-calculate_logical_expression:
-       xor     al,al
-  calculate_embedded_logical_expression:
-       mov     [logical_value_wrapping],al
-       call    get_logical_value
-      logical_loop:
-       cmp     byte [esi],'|'
-       je      logical_or
-       cmp     byte [esi],'&'
-       je      logical_and
-       ret
-      logical_or:
-       inc     esi
-       or      al,al
-       jnz     logical_value_already_determined
-       push    eax
-       call    get_logical_value
-       pop     ebx
-       or      al,bl
-       jmp     logical_loop
-      logical_and:
-       inc     esi
-       or      al,al
-       jz      logical_value_already_determined
-       push    eax
-       call    get_logical_value
-       pop     ebx
-       and     al,bl
-       jmp     logical_loop
-      logical_value_already_determined:
-       push    eax
-       call    skip_logical_value
-       jc      invalid_expression
-       pop     eax
-       jmp     logical_loop
-  get_value_for_comparison:
-       mov     [value_size],8
-       or      [operand_flags],1
-       lods    byte [esi]
-       call    calculate_expression
-       cmp     byte [edi+8],0
-       jne     first_register_size_ok
-       mov     byte [edi+10],0
-      first_register_size_ok:
-       cmp     byte [edi+9],0
-       jne     second_register_size_ok
-       mov     byte [edi+11],0
-      second_register_size_ok:
-       mov     eax,[edi+16]
-       mov     [symbol_identifier],eax
-       mov     al,[edi+13]
-       mov     [value_sign],al
-       mov     bl,[edi+12]
-       mov     eax,[edi]
-       mov     edx,[edi+4]
-       mov     ecx,[edi+8]
-       ret
-  get_logical_value:
-       xor     al,al
-      check_for_negation:
-       cmp     byte [esi],'~'
-       jne     negation_ok
-       inc     esi
-       xor     al,-1
-       jmp     check_for_negation
-      negation_ok:
-       push    eax
-       mov     al,[esi]
-       cmp     al,91h
-       je      logical_expression
-       cmp     al,0FFh
-       je      invalid_expression
-       cmp     al,88h
-       je      check_for_defined
-       cmp     al,8Ah
-       je      check_for_earlier_defined
-       cmp     al,89h
-       je      check_for_used
-       cmp     al,'0'
-       je      given_false
-       cmp     al,'1'
-       je      given_true
-       cmp     al,'('
-       jne     invalid_value
-       call    get_value_for_comparison
-       mov     bh,[value_sign]
-       push    eax edx
-       push    [symbol_identifier]
-       push    ebx ecx
-       mov     al,[esi]
-       or      al,al
-       jz      logical_number
-       cmp     al,0Fh
-       je      logical_number
-       cmp     al,92h
-       je      logical_number
-       cmp     al,'&'
-       je      logical_number
-       cmp     al,'|'
-       je      logical_number
-       inc     esi
-       mov     [compare_type],al
-       cmp     byte [esi],'('
-       jne     invalid_value
-       call    get_value_for_comparison
-       cmp     bl,[esp+4]
-       jne     values_not_relative
-       or      bl,bl
-       jz      check_values_registers
-       mov     ebx,[symbol_identifier]
-       cmp     ebx,[esp+8]
-       jne     values_not_relative
-      check_values_registers:
-       cmp     ecx,[esp]
-       je      values_relative
-       ror     ecx,16
-       xchg    ch,cl
-       ror     ecx,16
-       xchg    ch,cl
-       cmp     ecx,[esp]
-       je      values_relative
-      values_not_relative:
-       cmp     [compare_type],0F8h
-       jne     invalid_comparison
-       add     esp,12+8
-       jmp     return_false
-      invalid_comparison:
-       call    recoverable_misuse
-      values_relative:
-       pop     ebx
-       shl     ebx,16
-       mov     bx,[esp]
-       add     esp,8
-       pop     ecx ebp
-       cmp     [compare_type],'='
-       je      check_equal
-       cmp     [compare_type],0F1h
-       je      check_not_equal
-       cmp     [compare_type],0F8h
-       je      return_true
-       test    ebx,0FFFF0000h
-       jz      check_less_or_greater
-       call    recoverable_misuse
-      check_less_or_greater:
-       cmp     [compare_type],'>'
-       je      check_greater
-       cmp     [compare_type],'<'
-       je      check_less
-       cmp     [compare_type],0F2h
-       je      check_not_less
-       cmp     [compare_type],0F3h
-       je      check_not_greater
-       jmp     invalid_expression
-      check_equal:
-       cmp     bh,[value_sign]
-       jne     return_false
-       cmp     eax,ebp
-       jne     return_false
-       cmp     edx,ecx
-       jne     return_false
-       jmp     return_true
-      check_greater:
-       cmp     bh,[value_sign]
-       jg      return_true
-       jl      return_false
-       cmp     edx,ecx
-       jb      return_true
-       ja      return_false
-       cmp     eax,ebp
-       jb      return_true
-       jae     return_false
-      check_less:
-       cmp     bh,[value_sign]
-       jg      return_false
-       jl      return_true
-       cmp     edx,ecx
-       jb      return_false
-       ja      return_true
-       cmp     eax,ebp
-       jbe     return_false
-       ja      return_true
-      check_not_less:
-       cmp     bh,[value_sign]
-       jg      return_true
-       jl      return_false
-       cmp     edx,ecx
-       jb      return_true
-       ja      return_false
-       cmp     eax,ebp
-       jbe     return_true
-       ja      return_false
-      check_not_greater:
-       cmp     bh,[value_sign]
-       jg      return_false
-       jl      return_true
-       cmp     edx,ecx
-       jb      return_false
-       ja      return_true
-       cmp     eax,ebp
-       jb      return_false
-       jae     return_true
-      check_not_equal:
-       cmp     bh,[value_sign]
-       jne     return_true
-       cmp     eax,ebp
-       jne     return_true
-       cmp     edx,ecx
-       jne     return_true
-       jmp     return_false
-      logical_number:
-       pop     ecx ebx eax edx eax
-       or      bl,bl
-       jnz     invalid_logical_number
-       or      cx,cx
-       jz      logical_number_ok
-      invalid_logical_number:
-       call    recoverable_misuse
-      logical_number_ok:
-       test    bh,bh
-       jnz     return_true
-       or      eax,edx
-       jnz     return_true
-       jmp     return_false
-      check_for_earlier_defined:
-       or      bh,-1
-       jmp     check_if_expression_defined
-      check_for_defined:
-       xor     bh,bh
-      check_if_expression_defined:
-       or      bl,-1
-       lods    word [esi]
-       cmp     ah,'('
-       jne     invalid_expression
-      check_expression:
-       lods    byte [esi]
-       or      al,al
-       jz      defined_string
-       cmp     al,'.'
-       je      defined_fp_value
-       cmp     al,')'
-       je      expression_checked
-       cmp     al,'!'
-       je      invalid_expression
-       cmp     al,0Fh
-       je      check_expression
-       cmp     al,10h
-       je      defined_register
-       cmp     al,11h
-       je      check_if_symbol_defined
-       cmp     al,80h
-       jae     check_expression
-       movzx   eax,al
-       add     esi,eax
-       jmp     check_expression
-      defined_register:
-       inc     esi
-       jmp     check_expression
-      defined_fp_value:
-       add     esi,12+1
-       jmp     expression_checked
-      defined_string:
-       lods    dword [esi]
-       add     esi,eax
-       inc     esi
-       jmp     expression_checked
-      check_if_symbol_defined:
-       lods    dword [esi]
-       cmp     eax,-1
-       je      invalid_expression
-       cmp     eax,0Fh
-       jb      check_expression
-       je      reserved_word_used_as_symbol
-       test    bh,bh
-       jnz     no_prediction
-       test    byte [eax+8],4
-       jnz     no_prediction
-       test    byte [eax+8],1
-       jz      symbol_predicted_undefined
-       mov     cx,[current_pass]
-       sub     cx,[eax+16]
-       jz      check_expression
-       cmp     cx,1
-       ja      symbol_predicted_undefined
-       or      byte [eax+8],40h+80h
-       jmp     check_expression
-      no_prediction:
-       test    byte [eax+8],1
-       jz      symbol_undefined
-       mov     cx,[current_pass]
-       sub     cx,[eax+16]
-       jz      check_expression
-       jmp     symbol_undefined
-      symbol_predicted_undefined:
-       or      byte [eax+8],40h
-       and     byte [eax+8],not 80h
-      symbol_undefined:
-       xor     bl,bl
-       jmp     check_expression
-      expression_checked:
-       mov     al,bl
-       jmp     logical_value_ok
-      check_for_used:
-       lods    word [esi]
-       cmp     ah,2
-       jne     invalid_expression
-       lods    dword [esi]
-       cmp     eax,0Fh
-       jb      invalid_use_of_symbol
-       je      reserved_word_used_as_symbol
-       inc     esi
-       test    byte [eax+8],8
-       jz      not_used
-       mov     cx,[current_pass]
-       sub     cx,[eax+18]
-       jz      return_true
-       cmp     cx,1
-       ja      not_used
-       or      byte [eax+8],10h+20h
-       jmp     return_true
-      not_used:
-       or      byte [eax+8],10h
-       and     byte [eax+8],not 20h
-       jmp     return_false
-      given_false:
-       inc     esi
-      return_false:
-       xor     al,al
-       jmp     logical_value_ok
-      given_true:
-       inc     esi
-      return_true:
-       or      al,-1
-       jmp     logical_value_ok
-      logical_expression:
-       lods    byte [esi]
-       mov     dl,[logical_value_wrapping]
-       push    edx
-       call    calculate_embedded_logical_expression
-       pop     edx
-       mov     [logical_value_wrapping],dl
-       push    eax
-       lods    byte [esi]
-       cmp     al,92h
-       jne     invalid_expression
-       pop     eax
-      logical_value_ok:
-       pop     ebx
-       xor     al,bl
-       ret
-
-skip_symbol:
-       lods    byte [esi]
-       or      al,al
-       jz      nothing_to_skip
-       cmp     al,0Fh
-       je      nothing_to_skip
-       cmp     al,1
-       je      skip_instruction
-       cmp     al,2
-       je      skip_label
-       cmp     al,3
-       je      skip_label
-       cmp     al,4
-       je      skip_special_label
-       cmp     al,20h
-       jb      skip_assembler_symbol
-       cmp     al,'('
-       je      skip_expression
-       cmp     al,'['
-       je      skip_address
-      skip_done:
-       clc
-       ret
-      skip_label:
-       add     esi,2
-      skip_instruction:
-       add     esi,2
-      skip_assembler_symbol:
-       inc     esi
-       jmp     skip_done
-      skip_special_label:
-       add     esi,4
-       jmp     skip_done
-      skip_address:
-       mov     al,[esi]
-       and     al,11110000b
-       cmp     al,60h
-       jb      skip_expression
-       cmp     al,70h
-       ja      skip_expression
-       inc     esi
-       jmp     skip_address
-      skip_expression:
-       lods    byte [esi]
-       or      al,al
-       jz      skip_string
-       cmp     al,'.'
-       je      skip_fp_value
-       cmp     al,')'
-       je      skip_done
-       cmp     al,']'
-       je      skip_done
-       cmp     al,'!'
-       je      skip_expression
-       cmp     al,0Fh
-       je      skip_expression
-       cmp     al,10h
-       je      skip_register
-       cmp     al,11h
-       je      skip_label_value
-       cmp     al,80h
-       jae     skip_expression
-       movzx   eax,al
-       add     esi,eax
-       jmp     skip_expression
-      skip_label_value:
-       add     esi,3
-      skip_register:
-       inc     esi
-       jmp     skip_expression
-      skip_fp_value:
-       add     esi,12
-       jmp     skip_done
-      skip_string:
-       lods    dword [esi]
-       add     esi,eax
-       inc     esi
-       jmp     skip_done
-      nothing_to_skip:
-       dec     esi
-       stc
-       ret
-
-expand_path:
-       lods    byte [esi]
-       cmp     al,'%'
-       je      environment_variable
-       stos    byte [edi]
-       or      al,al
-       jnz     expand_path
-       cmp     edi,[memory_end]
-       ja      out_of_memory
-       ret
-      environment_variable:
-       mov     ebx,esi
-      find_variable_end:
-       lods    byte [esi]
-       or      al,al
-       jz      not_environment_variable
-       cmp     al,'%'
-       jne     find_variable_end
-       mov     byte [esi-1],0
-       push    esi
-       mov     esi,ebx
-       call    get_environment_variable
-       pop     esi
-       mov     byte [esi-1],'%'
-       jmp     expand_path
-      not_environment_variable:
-       mov     al,'%'
-       stos    byte [edi]
-       mov     esi,ebx
-       jmp     expand_path
-get_include_directory:
-       lods    byte [esi]
-       cmp     al,';'
-       je      include_directory_ok
-       stos    byte [edi]
-       or      al,al
-       jnz     get_include_directory
-       dec     esi
-       dec     edi
-      include_directory_ok:
-       cmp     byte [edi-1],'/'
-       je      path_separator_ok
-       cmp     byte [edi-1],'\'
-       je      path_separator_ok
-       mov     al,'/'
-       stos    byte [edi]
-      path_separator_ok:
-       ret
diff --git a/source/exprpars.inc b/source/exprpars.inc
deleted file mode 100644 (file)
index 2863946..0000000
+++ /dev/null
@@ -1,1289 +0,0 @@
-
-; flat assembler core
-; Copyright (c) 1999-2022, Tomasz Grysztar.
-; All rights reserved.
-
-convert_expression:
-       push    ebp
-       call    get_fp_value
-       jnc     fp_expression
-       mov     [current_offset],esp
-      expression_loop:
-       push    edi
-       mov     edi,single_operand_operators
-       call    get_operator
-       pop     edi
-       or      al,al
-       jz      expression_element
-       cmp     al,82h
-       je      expression_loop
-       push    eax
-       jmp     expression_loop
-      expression_element:
-       mov     al,[esi]
-       cmp     al,1Ah
-       je      expression_number
-       cmp     al,22h
-       je      expression_number
-       cmp     al,'('
-       je      expression_number
-       mov     al,'!'
-       stos    byte [edi]
-       jmp     expression_operator
-      expression_number:
-       call    convert_number
-      expression_operator:
-       push    edi
-       mov     edi,operators
-       call    get_operator
-       pop     edi
-       or      al,al
-       jz      expression_end
-      operators_loop:
-       cmp     esp,[current_offset]
-       je      push_operator
-       mov     bl,al
-       and     bl,0F0h
-       mov     bh,byte [esp]
-       and     bh,0F0h
-       cmp     bl,bh
-       ja      push_operator
-       pop     ebx
-       mov     byte [edi],bl
-       inc     edi
-       jmp     operators_loop
-      push_operator:
-       push    eax
-       jmp     expression_loop
-      expression_end:
-       cmp     esp,[current_offset]
-       je      expression_converted
-       pop     eax
-       stos    byte [edi]
-       jmp     expression_end
-      expression_converted:
-       pop     ebp
-       ret
-      fp_expression:
-       mov     al,'.'
-       stos    byte [edi]
-       mov     eax,[fp_value]
-       stos    dword [edi]
-       mov     eax,[fp_value+4]
-       stos    dword [edi]
-       mov     eax,[fp_value+8]
-       stos    dword [edi]
-       pop     ebp
-       ret
-
-convert_number:
-       lea     eax,[edi+20h]
-       mov     edx,[memory_end]
-       cmp     [source_start],0
-       je      check_memory_for_number
-       mov     edx,[labels_list]
-      check_memory_for_number:
-       cmp     eax,edx
-       jae     out_of_memory
-       mov     eax,esp
-       sub     eax,[stack_limit]
-       cmp     eax,100h
-       jb      stack_overflow
-       cmp     byte [esi],'('
-       je      expression_value
-       inc     edi
-       call    get_number
-       jc      symbol_value
-       or      ebp,ebp
-       jz      valid_number
-       mov     byte [edi-1],0Fh
-       ret
-      valid_number:
-       cmp     dword [edi+4],0
-       jne     qword_number
-       cmp     word [edi+2],0
-       jne     dword_number
-       cmp     byte [edi+1],0
-       jne     word_number
-      byte_number:
-       mov     byte [edi-1],1
-       inc     edi
-       ret
-      qword_number:
-       mov     byte [edi-1],8
-       add     edi,8
-       ret
-      dword_number:
-       mov     byte [edi-1],4
-       scas    dword [edi]
-       ret
-      word_number:
-       mov     byte [edi-1],2
-       scas    word [edi]
-       ret
-      expression_value:
-       inc     esi
-       push    [current_offset]
-       call    convert_expression
-       pop     [current_offset]
-       lods    byte [esi]
-       cmp     al,')'
-       je      subexpression_closed
-       dec     esi
-       mov     al,'!'
-       stosb
-      subexpression_closed:
-       ret
-      symbol_value:
-       mov     eax,[source_start]
-       test    eax,eax
-       jz      preprocessor_value
-       cmp     eax,-1
-       je      invalid_value
-       push    edi esi
-       lods    word [esi]
-       cmp     al,1Ah
-       jne     no_address_register
-       movzx   ecx,ah
-       call    get_symbol
-       jc      no_address_register
-       cmp     al,10h
-       jne     no_address_register
-       mov     al,ah
-       shr     ah,4
-       cmp     ah,4
-       je      register_value
-       and     ah,not 1
-       cmp     ah,8
-       je      register_value
-       cmp     ah,0Ch
-       jae     register_value
-       cmp     ah,6
-       je      register_value
-       cmp     al,23h
-       je      register_value
-       cmp     al,25h
-       je      register_value
-       cmp     al,26h
-       je      register_value
-       cmp     al,27h
-       je      register_value
-      no_address_register:
-       pop     esi
-       mov     edi,directive_operators
-       call    get_operator
-       pop     edi
-       or      al,al
-       jnz     broken_value
-       lods    byte [esi]
-       cmp     al,1Ah
-       jne     invalid_value
-       lods    byte [esi]
-       movzx   ecx,al
-       call    get_label_id
-      store_label_value:
-       mov     byte [edi-1],11h
-       stos    dword [edi]
-       ret
-      broken_value:
-       mov     eax,0Fh
-       jmp     store_label_value
-      register_value:
-       pop     edx edi
-       mov     byte [edi-1],10h
-       stos    byte [edi]
-       ret
-      preprocessor_value:
-       dec     edi
-       lods    byte [esi]
-       cmp     al,1Ah
-       jne     invalid_value
-       lods    byte [esi]
-       mov     cl,al
-       mov     ch,10b
-       call    get_preprocessor_symbol
-       jc      invalid_value
-       test    edx,edx
-       jz      special_preprocessor_value
-       push    esi
-       mov     esi,[edx+8]
-       push    [current_offset]
-       call    convert_expression
-       pop     [current_offset]
-       pop     esi
-       ret
-      special_preprocessor_value:
-       cmp     eax,preprocessed_line_value
-       jne     invalid_value
-       call    get_current_line_from_file
-       mov     al,4
-       stos    byte [edi]
-       mov     eax,[ebx+4]
-       stos    dword [edi]
-       ret
-
-get_number:
-       xor     ebp,ebp
-       lods    byte [esi]
-       cmp     al,22h
-       je      get_text_number
-       cmp     al,1Ah
-       jne     not_number
-       lods    byte [esi]
-       movzx   ecx,al
-       mov     [number_start],esi
-       mov     al,[esi]
-       cmp     al,'$'
-       je      number_begin
-       sub     al,30h
-       cmp     al,9
-       ja      invalid_number
-      number_begin:
-       mov     ebx,esi
-       add     esi,ecx
-       push    esi
-       dec     esi
-       mov     dword [edi],0
-       mov     dword [edi+4],0
-       cmp     byte [ebx],'$'
-       je      pascal_hex_number
-       cmp     word [ebx],'0x'
-       je      get_hex_number
-       mov     al,[esi]
-       dec     esi
-       cmp     al,'h'
-       je      get_hex_number
-       cmp     al,'b'
-       je      get_bin_number
-       cmp     al,'d'
-       je      get_dec_number
-       cmp     al,'o'
-       je      get_oct_number
-       cmp     al,'q'
-       je      get_oct_number
-       cmp     al,'H'
-       je      get_hex_number
-       cmp     al,'B'
-       je      get_bin_number
-       cmp     al,'D'
-       je      get_dec_number
-       cmp     al,'O'
-       je      get_oct_number
-       cmp     al,'Q'
-       je      get_oct_number
-       inc     esi
-      get_dec_number:
-       mov     ebx,esi
-       mov     esi,[number_start]
-      get_dec_digit:
-       cmp     esi,ebx
-       ja      number_ok
-       cmp     byte [esi],27h
-       je      next_dec_digit
-       cmp     byte [esi],'_'
-       je      next_dec_digit
-       xor     edx,edx
-       mov     eax,[edi]
-       shld    edx,eax,2
-       shl     eax,2
-       add     eax,[edi]
-       adc     edx,0
-       add     eax,eax
-       adc     edx,edx
-       mov     [edi],eax
-       mov     eax,[edi+4]
-       add     eax,eax
-       jc      dec_out_of_range
-       add     eax,eax
-       jc      dec_out_of_range
-       add     eax,[edi+4]
-       jc      dec_out_of_range
-       add     eax,eax
-       jc      dec_out_of_range
-       add     eax,edx
-       jc      dec_out_of_range
-       mov     [edi+4],eax
-       movzx   eax,byte [esi]
-       sub     al,30h
-       jc      bad_number
-       cmp     al,9
-       ja      bad_number
-       add     [edi],eax
-       adc     dword [edi+4],0
-       jc      dec_out_of_range
-      next_dec_digit:
-       inc     esi
-       jmp     get_dec_digit
-      dec_out_of_range:
-       cmp     esi,ebx
-       ja      dec_out_of_range_finished
-       lods    byte [esi]
-       cmp     al,27h
-       je      bad_number
-       cmp     al,'_'
-       je      bad_number
-       sub     al,30h
-       jc      bad_number
-       cmp     al,9
-       ja      bad_number
-       jmp     dec_out_of_range
-      dec_out_of_range_finished:
-       or      ebp,-1
-       jmp     number_ok
-      bad_number:
-       pop     eax
-      invalid_number:
-       mov     esi,[number_start]
-       dec     esi
-      not_number:
-       dec     esi
-       stc
-       ret
-      get_bin_number:
-       xor     bl,bl
-      get_bin_digit:
-       cmp     esi,[number_start]
-       jb      number_ok
-       movzx   eax,byte [esi]
-       cmp     al,27h
-       je      bin_digit_skip
-       cmp     al,'_'
-       je      bin_digit_skip
-       sub     al,30h
-       cmp     al,1
-       ja      bad_number
-       xor     edx,edx
-       mov     cl,bl
-       dec     esi
-       cmp     bl,64
-       je      bin_out_of_range
-       inc     bl
-       cmp     cl,32
-       jae     bin_digit_high
-       shl     eax,cl
-       or      dword [edi],eax
-       jmp     get_bin_digit
-      bin_digit_high:
-       sub     cl,32
-       shl     eax,cl
-       or      dword [edi+4],eax
-       jmp     get_bin_digit
-      bin_out_of_range:
-       or      al,al
-       jz      get_bin_digit
-       or      ebp,-1
-       jmp     get_bin_digit
-      bin_digit_skip:
-       dec     esi
-       jmp     get_bin_digit
-      pascal_hex_number:
-       cmp     cl,1
-       je      bad_number
-      get_hex_number:
-       xor     bl,bl
-      get_hex_digit:
-       cmp     esi,[number_start]
-       jb      number_ok
-       movzx   eax,byte [esi]
-       cmp     al,27h
-       je      hex_digit_skip
-       cmp     al,'_'
-       je      hex_digit_skip
-       cmp     al,'x'
-       je      hex_number_ok
-       cmp     al,'$'
-       je      pascal_hex_ok
-       sub     al,30h
-       cmp     al,9
-       jbe     hex_digit_ok
-       sub     al,7
-       cmp     al,15
-       jbe     hex_letter_digit_ok
-       sub     al,20h
-       cmp     al,15
-       ja      bad_number
-      hex_letter_digit_ok:
-       cmp     al,10
-       jb      bad_number
-      hex_digit_ok:
-       xor     edx,edx
-       mov     cl,bl
-       dec     esi
-       cmp     bl,64
-       je      hex_out_of_range
-       add     bl,4
-       cmp     cl,32
-       jae     hex_digit_high
-       shl     eax,cl
-       or      dword [edi],eax
-       jmp     get_hex_digit
-      hex_digit_high:
-       sub     cl,32
-       shl     eax,cl
-       or      dword [edi+4],eax
-       jmp     get_hex_digit
-      hex_out_of_range:
-       or      al,al
-       jz      get_hex_digit
-       or      ebp,-1
-       jmp     get_hex_digit
-      hex_digit_skip:
-       dec     esi
-       jmp     get_hex_digit
-      get_oct_number:
-       xor     bl,bl
-      get_oct_digit:
-       cmp     esi,[number_start]
-       jb      number_ok
-       movzx   eax,byte [esi]
-       cmp     al,27h
-       je      oct_digit_skip
-       cmp     al,'_'
-       je      oct_digit_skip
-       sub     al,30h
-       cmp     al,7
-       ja      bad_number
-      oct_digit_ok:
-       xor     edx,edx
-       mov     cl,bl
-       dec     esi
-       cmp     bl,63
-       ja      oct_out_of_range
-       jne     oct_range_ok
-       cmp     al,1
-       ja      oct_out_of_range
-      oct_range_ok:
-       add     bl,3
-       cmp     cl,30
-       je      oct_digit_wrap
-       ja      oct_digit_high
-       shl     eax,cl
-       or      dword [edi],eax
-       jmp     get_oct_digit
-      oct_digit_wrap:
-       shl     eax,cl
-       adc     dword [edi+4],0
-       or      dword [edi],eax
-       jmp     get_oct_digit
-      oct_digit_high:
-       sub     cl,32
-       shl     eax,cl
-       or      dword [edi+4],eax
-       jmp     get_oct_digit
-      oct_digit_skip:
-       dec     esi
-       jmp     get_oct_digit
-      oct_out_of_range:
-       or      al,al
-       jz      get_oct_digit
-       or      ebp,-1
-       jmp     get_oct_digit
-      hex_number_ok:
-       dec     esi
-      pascal_hex_ok:
-       cmp     esi,[number_start]
-       jne     bad_number
-      number_ok:
-       pop     esi
-      number_done:
-       clc
-       ret
-      get_text_number:
-       lods    dword [esi]
-       mov     edx,eax
-       xor     bl,bl
-       mov     dword [edi],0
-       mov     dword [edi+4],0
-      get_text_character:
-       sub     edx,1
-       jc      number_done
-       movzx   eax,byte [esi]
-       inc     esi
-       mov     cl,bl
-       cmp     bl,64
-       je      text_out_of_range
-       add     bl,8
-       cmp     cl,32
-       jae     text_character_high
-       shl     eax,cl
-       or      dword [edi],eax
-       jmp     get_text_character
-      text_character_high:
-       sub     cl,32
-       shl     eax,cl
-       or      dword [edi+4],eax
-       jmp     get_text_character
-      text_out_of_range:
-       or      ebp,-1
-       jmp     get_text_character
-
-get_fp_value:
-       push    edi esi
-      fp_value_start:
-       lods    byte [esi]
-       cmp     al,'-'
-       je      fp_value_start
-       cmp     al,'+'
-       je      fp_value_start
-       cmp     al,1Ah
-       jne     not_fp_value
-       lods    byte [esi]
-       movzx   ecx,al
-       cmp     cl,1
-       jbe     not_fp_value
-       lea     edx,[esi+1]
-       xor     ah,ah
-      check_fp_value:
-       lods    byte [esi]
-       cmp     al,'.'
-       je      fp_character_dot
-       cmp     al,'E'
-       je      fp_character_exp
-       cmp     al,'e'
-       je      fp_character_exp
-       cmp     al,'F'
-       je      fp_last_character
-       cmp     al,'f'
-       je      fp_last_character
-      digit_expected:
-       cmp     al,'0'
-       jb      not_fp_value
-       cmp     al,'9'
-       ja      not_fp_value
-       jmp     fp_character_ok
-      fp_character_dot:
-       cmp     esi,edx
-       je      not_fp_value
-       or      ah,ah
-       jnz     not_fp_value
-       or      ah,1
-       lods    byte [esi]
-       loop    digit_expected
-      not_fp_value:
-       pop     esi edi
-       stc
-       ret
-      fp_last_character:
-       cmp     cl,1
-       jne     not_fp_value
-       or      ah,4
-       jmp     fp_character_ok
-      fp_character_exp:
-       cmp     esi,edx
-       je      not_fp_value
-       cmp     ah,1
-       ja      not_fp_value
-       or      ah,2
-       cmp     ecx,1
-       jne     fp_character_ok
-       cmp     byte [esi],'+'
-       je      fp_exp_sign
-       cmp     byte [esi],'-'
-       jne     fp_character_ok
-      fp_exp_sign:
-       inc     esi
-       cmp     byte [esi],1Ah
-       jne     not_fp_value
-       inc     esi
-       lods    byte [esi]
-       movzx   ecx,al
-       inc     ecx
-      fp_character_ok:
-       dec     ecx
-       jnz     check_fp_value
-       or      ah,ah
-       jz      not_fp_value
-       pop     esi
-       mov     [fp_sign],0
-      fp_get_sign:
-       lods    byte [esi]
-       cmp     al,1Ah
-       je      fp_get
-       cmp     al,'+'
-       je      fp_get_sign
-       xor     [fp_sign],1
-       jmp     fp_get_sign
-      fp_get:
-       lods    byte [esi]
-       movzx   ecx,al
-       xor     edx,edx
-       mov     edi,fp_value
-       mov     [edi],edx
-       mov     [edi+4],edx
-       mov     [edi+12],edx
-       call    fp_optimize
-       mov     [fp_format],0
-       mov     al,[esi]
-      fp_before_dot:
-       lods    byte [esi]
-       cmp     al,'.'
-       je      fp_dot
-       cmp     al,'E'
-       je      fp_exponent
-       cmp     al,'e'
-       je      fp_exponent
-       cmp     al,'F'
-       je      fp_done
-       cmp     al,'f'
-       je      fp_done
-       sub     al,30h
-       mov     edi,fp_value+16
-       xor     edx,edx
-       mov     dword [edi+12],edx
-       mov     dword [edi],edx
-       mov     dword [edi+4],edx
-       mov     [edi+7],al
-       mov     dl,7
-       mov     dword [edi+8],edx
-       call    fp_optimize
-       mov     edi,fp_value
-       push    ecx
-       mov     ecx,10
-       call    fp_mul
-       pop     ecx
-       mov     ebx,fp_value+16
-       call    fp_add
-       loop    fp_before_dot
-      fp_dot:
-       mov     edi,fp_value+16
-       xor     edx,edx
-       mov     [edi],edx
-       mov     [edi+4],edx
-       mov     byte [edi+7],80h
-       mov     [edi+8],edx
-       mov     dword [edi+12],edx
-       dec     ecx
-       jz      fp_done
-      fp_after_dot:
-       lods    byte [esi]
-       cmp     al,'E'
-       je      fp_exponent
-       cmp     al,'e'
-       je      fp_exponent
-       cmp     al,'F'
-       je      fp_done
-       cmp     al,'f'
-       je      fp_done
-       inc     [fp_format]
-       cmp     [fp_format],80h
-       jne     fp_counter_ok
-       mov     [fp_format],7Fh
-      fp_counter_ok:
-       dec     esi
-       mov     edi,fp_value+16
-       push    ecx
-       mov     ecx,10
-       call    fp_div
-       push    dword [edi]
-       push    dword [edi+4]
-       push    dword [edi+8]
-       push    dword [edi+12]
-       lods    byte [esi]
-       sub     al,30h
-       movzx   ecx,al
-       call    fp_mul
-       mov     ebx,edi
-       mov     edi,fp_value
-       call    fp_add
-       mov     edi,fp_value+16
-       pop     dword [edi+12]
-       pop     dword [edi+8]
-       pop     dword [edi+4]
-       pop     dword [edi]
-       pop     ecx
-       dec     ecx
-       jnz     fp_after_dot
-       jmp     fp_done
-      fp_exponent:
-       or      [fp_format],80h
-       xor     edx,edx
-       xor     ebp,ebp
-       dec     ecx
-       jnz     get_exponent
-       cmp     byte [esi],'+'
-       je      fp_exponent_sign
-       cmp     byte [esi],'-'
-       jne     fp_done
-       not     ebp
-      fp_exponent_sign:
-       add     esi,2
-       lods    byte [esi]
-       movzx   ecx,al
-      get_exponent:
-       movzx   eax,byte [esi]
-       inc     esi
-       sub     al,30h
-       cmp     al,10
-       jae     exponent_ok
-       imul    edx,10
-       cmp     edx,8000h
-       jae     value_out_of_range
-       add     edx,eax
-       loop    get_exponent
-      exponent_ok:
-       mov     edi,fp_value
-       or      edx,edx
-       jz      fp_done
-       mov     ecx,edx
-       or      ebp,ebp
-       jnz     fp_negative_power
-      fp_power:
-       push    ecx
-       mov     ecx,10
-       call    fp_mul
-       pop     ecx
-       loop    fp_power
-       jmp     fp_done
-      fp_negative_power:
-       push    ecx
-       mov     ecx,10
-       call    fp_div
-       pop     ecx
-       loop    fp_negative_power
-      fp_done:
-       mov     edi,fp_value
-       mov     al,[fp_format]
-       mov     [edi+10],al
-       mov     al,[fp_sign]
-       mov     [edi+11],al
-       test    byte [edi+15],80h
-       jz      fp_ok
-       add     dword [edi],1
-       adc     dword [edi+4],0
-       jnc     fp_ok
-       mov     eax,[edi+4]
-       shrd    [edi],eax,1
-       shr     eax,1
-       or      eax,80000000h
-       mov     [edi+4],eax
-       inc     word [edi+8]
-      fp_ok:
-       pop     edi
-       clc
-       ret
-      fp_mul:
-       or      ecx,ecx
-       jz      fp_zero
-       mov     eax,[edi+12]
-       mul     ecx
-       mov     [edi+12],eax
-       mov     ebx,edx
-       mov     eax,[edi]
-       mul     ecx
-       add     eax,ebx
-       adc     edx,0
-       mov     [edi],eax
-       mov     ebx,edx
-       mov     eax,[edi+4]
-       mul     ecx
-       add     eax,ebx
-       adc     edx,0
-       mov     [edi+4],eax
-      .loop:
-       or      edx,edx
-       jz      .done
-       mov     eax,[edi]
-       shrd    [edi+12],eax,1
-       mov     eax,[edi+4]
-       shrd    [edi],eax,1
-       shrd    eax,edx,1
-       mov     [edi+4],eax
-       shr     edx,1
-       inc     dword [edi+8]
-       cmp     dword [edi+8],8000h
-       jge     value_out_of_range
-       jmp     .loop
-      .done:
-       ret
-      fp_div:
-       mov     eax,[edi+4]
-       xor     edx,edx
-       div     ecx
-       mov     [edi+4],eax
-       mov     eax,[edi]
-       div     ecx
-       mov     [edi],eax
-       mov     eax,[edi+12]
-       div     ecx
-       mov     [edi+12],eax
-       mov     ebx,eax
-       or      ebx,[edi]
-       or      ebx,[edi+4]
-       jz      fp_zero
-      .loop:
-       test    byte [edi+7],80h
-       jnz     .exp_ok
-       mov     eax,[edi]
-       shld    [edi+4],eax,1
-       mov     eax,[edi+12]
-       shld    [edi],eax,1
-       add     eax,eax
-       mov     [edi+12],eax
-       dec     dword [edi+8]
-       add     edx,edx
-       jmp     .loop
-      .exp_ok:
-       mov     eax,edx
-       xor     edx,edx
-       div     ecx
-       add     [edi+12],eax
-       adc     dword [edi],0
-       adc     dword [edi+4],0
-       jnc     .done
-       mov     eax,[edi+4]
-       mov     ebx,[edi]
-       shrd    [edi],eax,1
-       shrd    [edi+12],ebx,1
-       shr     eax,1
-       or      eax,80000000h
-       mov     [edi+4],eax
-       inc     dword [edi+8]
-      .done:
-       ret
-      fp_add:
-       cmp     dword [ebx+8],8000h
-       je      .done
-       cmp     dword [edi+8],8000h
-       je      .copy
-       mov     eax,[ebx+8]
-       cmp     eax,[edi+8]
-       jge     .exp_ok
-       mov     eax,[edi+8]
-      .exp_ok:
-       call    .change_exp
-       xchg    ebx,edi
-       call    .change_exp
-       xchg    ebx,edi
-       mov     edx,[ebx+12]
-       mov     eax,[ebx]
-       mov     ebx,[ebx+4]
-       add     [edi+12],edx
-       adc     [edi],eax
-       adc     [edi+4],ebx
-       jnc     .done
-       mov     eax,[edi]
-       shrd    [edi+12],eax,1
-       mov     eax,[edi+4]
-       shrd    [edi],eax,1
-       shr     eax,1
-       or      eax,80000000h
-       mov     [edi+4],eax
-       inc     dword [edi+8]
-      .done:
-       ret
-      .copy:
-       mov     eax,[ebx]
-       mov     [edi],eax
-       mov     eax,[ebx+4]
-       mov     [edi+4],eax
-       mov     eax,[ebx+8]
-       mov     [edi+8],eax
-       mov     eax,[ebx+12]
-       mov     [edi+12],eax
-       ret
-      .change_exp:
-       push    ecx
-       mov     ecx,eax
-       sub     ecx,[ebx+8]
-       mov     edx,[ebx+4]
-       jecxz   .exp_done
-      .exp_loop:
-       mov     ebp,[ebx]
-       shrd    [ebx+12],ebp,1
-       shrd    [ebx],edx,1
-       shr     edx,1
-       inc     dword [ebx+8]
-       loop    .exp_loop
-      .exp_done:
-       mov     [ebx+4],edx
-       pop     ecx
-       ret
-      fp_optimize:
-       mov     eax,[edi]
-       mov     ebp,[edi+4]
-       or      ebp,[edi]
-       or      ebp,[edi+12]
-       jz      fp_zero
-      .loop:
-       test    byte [edi+7],80h
-       jnz     .done
-       shld    [edi+4],eax,1
-       mov     ebp,[edi+12]
-       shld    eax,ebp,1
-       mov     [edi],eax
-       shl     dword [edi+12],1
-       dec     dword [edi+8]
-       jmp     .loop
-      .done:
-       ret
-      fp_zero:
-       mov     dword [edi+8],8000h
-       ret
-
-preevaluate_logical_expression:
-       xor     al,al
-  preevaluate_embedded_logical_expression:
-       mov     [logical_value_wrapping],al
-       push    edi
-       call    preevaluate_logical_value
-      preevaluation_loop:
-       cmp     al,0FFh
-       je      invalid_logical_expression
-       mov     dl,[esi]
-       inc     esi
-       cmp     dl,'|'
-       je      preevaluate_or
-       cmp     dl,'&'
-       je      preevaluate_and
-       cmp     dl,92h
-       je      preevaluation_done
-       or      dl,dl
-       jnz     invalid_logical_expression
-      preevaluation_done:
-       pop     edx
-       dec     esi
-       ret
-      preevaluate_or:
-       cmp     al,'1'
-       je      quick_true
-       cmp     al,'0'
-       je      leave_only_following
-       push    edi
-       mov     al,dl
-       stos    byte [edi]
-       call    preevaluate_logical_value
-       pop     ebx
-       cmp     al,'0'
-       je      leave_only_preceding
-       cmp     al,'1'
-       jne     preevaluation_loop
-       stos    byte [edi]
-       xor     al,al
-       jmp     preevaluation_loop
-      preevaluate_and:
-       cmp     al,'0'
-       je      quick_false
-       cmp     al,'1'
-       je      leave_only_following
-       push    edi
-       mov     al,dl
-       stos    byte [edi]
-       call    preevaluate_logical_value
-       pop     ebx
-       cmp     al,'1'
-       je      leave_only_preceding
-       cmp     al,'0'
-       jne     preevaluation_loop
-       stos    byte [edi]
-       xor     al,al
-       jmp     preevaluation_loop
-      leave_only_following:
-       mov     edi,[esp]
-       call    preevaluate_logical_value
-       jmp     preevaluation_loop
-      leave_only_preceding:
-       mov     edi,ebx
-       xor     al,al
-       jmp     preevaluation_loop
-      quick_true:
-       call    skip_logical_value
-       jc      invalid_logical_expression
-       mov     edi,[esp]
-       mov     al,'1'
-       jmp     preevaluation_loop
-      quick_false:
-       call    skip_logical_value
-       jc      invalid_logical_expression
-       mov     edi,[esp]
-       mov     al,'0'
-       jmp     preevaluation_loop
-      invalid_logical_expression:
-       pop     edi
-       mov     esi,edi
-       mov     al,0FFh
-       stos    byte [edi]
-       ret
-  skip_logical_value:
-       cmp     byte [esi],'~'
-       jne     negation_skipped
-       inc     esi
-       jmp     skip_logical_value
-      negation_skipped:
-       mov     al,[esi]
-       cmp     al,91h
-       jne     skip_simple_logical_value
-       inc     esi
-       xchg    al,[logical_value_wrapping]
-       push    eax
-      skip_logical_expression:
-       call    skip_logical_value
-       lods    byte [esi]
-       or      al,al
-       jz      wrongly_structured_logical_expression
-       cmp     al,0Fh
-       je      wrongly_structured_logical_expression
-       cmp     al,'|'
-       je      skip_logical_expression
-       cmp     al,'&'
-       je      skip_logical_expression
-       cmp     al,92h
-       jne     wrongly_structured_logical_expression
-       pop     eax
-       mov     [logical_value_wrapping],al
-      logical_value_skipped:
-       clc
-       ret
-      wrongly_structured_logical_expression:
-       pop     eax
-       stc
-       ret
-      skip_simple_logical_value:
-       mov     [logical_value_parentheses],0
-      find_simple_logical_value_end:
-       mov     al,[esi]
-       or      al,al
-       jz      logical_value_skipped
-       cmp     al,0Fh
-       je      logical_value_skipped
-       cmp     al,'|'
-       je      logical_value_skipped
-       cmp     al,'&'
-       je      logical_value_skipped
-       cmp     al,91h
-       je      skip_logical_value_internal_parenthesis
-       cmp     al,92h
-       jne     skip_logical_value_symbol
-       sub     [logical_value_parentheses],1
-       jnc     skip_logical_value_symbol
-       cmp     [logical_value_wrapping],91h
-       jne     skip_logical_value_symbol
-       jmp     logical_value_skipped
-      skip_logical_value_internal_parenthesis:
-       inc     [logical_value_parentheses]
-      skip_logical_value_symbol:
-       call    skip_symbol
-       jmp     find_simple_logical_value_end
-  preevaluate_logical_value:
-       mov     ebp,edi
-      preevaluate_negation:
-       cmp     byte [esi],'~'
-       jne     preevaluate_negation_ok
-       movs    byte [edi],[esi]
-       jmp     preevaluate_negation
-      preevaluate_negation_ok:
-       mov     ebx,esi
-       cmp     byte [esi],91h
-       jne     preevaluate_simple_logical_value
-       lods    byte [esi]
-       stos    byte [edi]
-       push    ebp
-       mov     dl,[logical_value_wrapping]
-       push    edx
-       call    preevaluate_embedded_logical_expression
-       pop     edx
-       mov     [logical_value_wrapping],dl
-       pop     ebp
-       cmp     al,0FFh
-       je      invalid_logical_value
-       cmp     byte [esi],92h
-       jne     invalid_logical_value
-       or      al,al
-       jnz     preevaluated_expression_value
-       movs    byte [edi],[esi]
-       ret
-      preevaluated_expression_value:
-       inc     esi
-       lea     edx,[edi-1]
-       sub     edx,ebp
-       test    edx,1
-       jz      expression_negation_ok
-       xor     al,1
-      expression_negation_ok:
-       mov     edi,ebp
-       ret
-      invalid_logical_value:
-       mov     edi,ebp
-       mov     al,0FFh
-       ret
-      preevaluate_simple_logical_value:
-       xor     edx,edx
-       mov     [logical_value_parentheses],edx
-      find_logical_value_boundaries:
-       mov     al,[esi]
-       or      al,al
-       jz      logical_value_boundaries_found
-       cmp     al,91h
-       je      logical_value_internal_parentheses
-       cmp     al,92h
-       je      logical_value_boundaries_parenthesis_close
-       cmp     al,'|'
-       je      logical_value_boundaries_found
-       cmp     al,'&'
-       je      logical_value_boundaries_found
-       or      edx,edx
-       jnz     next_symbol_in_logical_value
-       cmp     al,0F0h
-       je      preevaluable_logical_operator
-       cmp     al,0F7h
-       je      preevaluable_logical_operator
-       cmp     al,0F6h
-       jne     next_symbol_in_logical_value
-      preevaluable_logical_operator:
-       mov     edx,esi
-      next_symbol_in_logical_value:
-       call    skip_symbol
-       jmp     find_logical_value_boundaries
-      logical_value_internal_parentheses:
-       inc     [logical_value_parentheses]
-       jmp     next_symbol_in_logical_value
-      logical_value_boundaries_parenthesis_close:
-       sub     [logical_value_parentheses],1
-       jnc     next_symbol_in_logical_value
-       cmp     [logical_value_wrapping],91h
-       jne     next_symbol_in_logical_value
-      logical_value_boundaries_found:
-       or      edx,edx
-       jz      non_preevaluable_logical_value
-       mov     al,[edx]
-       cmp     al,0F0h
-       je      compare_symbols
-       cmp     al,0F7h
-       je      compare_symbol_types
-       cmp     al,0F6h
-       je      scan_symbols_list
-      non_preevaluable_logical_value:
-       mov     ecx,esi
-       mov     esi,ebx
-       sub     ecx,esi
-       jz      invalid_logical_value
-       cmp     esi,edi
-       je      leave_logical_value_intact
-       rep     movs byte [edi],[esi]
-       xor     al,al
-       ret
-      leave_logical_value_intact:
-       add     edi,ecx
-       add     esi,ecx
-       xor     al,al
-       ret
-      compare_symbols:
-       lea     ecx,[esi-1]
-       sub     ecx,edx
-       mov     eax,edx
-       sub     eax,ebx
-       cmp     ecx,eax
-       jne     preevaluated_false
-       push    esi edi
-       mov     esi,ebx
-       lea     edi,[edx+1]
-       repe    cmps byte [esi],[edi]
-       pop     edi esi
-       je      preevaluated_true
-      preevaluated_false:
-       mov     eax,edi
-       sub     eax,ebp
-       test    eax,1
-       jnz     store_true
-      store_false:
-       mov     edi,ebp
-       mov     al,'0'
-       ret
-      preevaluated_true:
-       mov     eax,edi
-       sub     eax,ebp
-       test    eax,1
-       jnz     store_false
-      store_true:
-       mov     edi,ebp
-       mov     al,'1'
-       ret
-      compare_symbol_types:
-       push    esi
-       lea     esi,[edx+1]
-      type_comparison:
-       cmp     esi,[esp]
-       je      types_compared
-       mov     al,[esi]
-       cmp     al,[ebx]
-       jne     different_type
-       cmp     al,'('
-       jne     equal_type
-       mov     al,[esi+1]
-       mov     ah,[ebx+1]
-       cmp     al,ah
-       je      equal_type
-       or      al,al
-       jz      different_type
-       or      ah,ah
-       jz      different_type
-       cmp     al,'.'
-       je      different_type
-       cmp     ah,'.'
-       je      different_type
-      equal_type:
-       call    skip_symbol
-       xchg    esi,ebx
-       call    skip_symbol
-       xchg    esi,ebx
-       jmp     type_comparison
-      types_compared:
-       pop     esi
-       cmp     byte [ebx],0F7h
-       jne     preevaluated_false
-       jmp     preevaluated_true
-      different_type:
-       pop     esi
-       jmp     preevaluated_false
-      scan_symbols_list:
-       push    edi esi
-       lea     esi,[edx+1]
-       sub     edx,ebx
-       lods    byte [esi]
-       cmp     al,'<'
-       jne     invalid_symbols_list
-      get_next_from_list:
-       mov     edi,esi
-      get_from_list:
-       cmp     byte [esi],','
-       je      compare_in_list
-       cmp     byte [esi],'>'
-       je      compare_in_list
-       cmp     esi,[esp]
-       jae     invalid_symbols_list
-       call    skip_symbol
-       jmp     get_from_list
-      compare_in_list:
-       mov     ecx,esi
-       sub     ecx,edi
-       cmp     ecx,edx
-       jne     not_equal_length_in_list
-       mov     esi,ebx
-       repe    cmps byte [esi],[edi]
-       mov     esi,edi
-       jne     not_equal_in_list
-      skip_rest_of_list:
-       cmp     byte [esi],'>'
-       je      check_list_end
-       cmp     esi,[esp]
-       jae     invalid_symbols_list
-       call    skip_symbol
-       jmp     skip_rest_of_list
-      check_list_end:
-       inc     esi
-       cmp     esi,[esp]
-       jne     invalid_symbols_list
-       pop     esi edi
-       jmp     preevaluated_true
-      not_equal_in_list:
-       add     esi,ecx
-      not_equal_length_in_list:
-       lods    byte [esi]
-       cmp     al,','
-       je      get_next_from_list
-       cmp     esi,[esp]
-       jne     invalid_symbols_list
-       pop     esi edi
-       jmp     preevaluated_false
-      invalid_symbols_list:
-       pop     esi edi
-       jmp     invalid_logical_value
diff --git a/source/formats.inc b/source/formats.inc
deleted file mode 100644 (file)
index 821175f..0000000
+++ /dev/null
@@ -1,4195 +0,0 @@
-
-; flat assembler core
-; Copyright (c) 1999-2022, Tomasz Grysztar.
-; All rights reserved.
-
-formatter:
-       mov     [current_offset],edi
-       cmp     [output_file],0
-       jne     output_path_ok
-       mov     esi,[input_file]
-       mov     edi,[free_additional_memory]
-      duplicate_output_path:
-       lods    byte [esi]
-       cmp     edi,[structures_buffer]
-       jae     out_of_memory
-       stos    byte [edi]
-       or      al,al
-       jnz     duplicate_output_path
-       dec     edi
-       mov     eax,edi
-      find_extension:
-       dec     eax
-       cmp     eax,[free_additional_memory]
-       jb      extension_found
-       cmp     byte [eax],'\'
-       je      extension_found
-       cmp     byte [eax],'/'
-       je      extension_found
-       cmp     byte [eax],'.'
-       jne     find_extension
-       mov     edi,eax
-      extension_found:
-       lea     eax,[edi+9]
-       cmp     eax,[structures_buffer]
-       jae     out_of_memory
-       cmp     [file_extension],0
-       jne     extension_specified
-       mov     al,[output_format]
-       cmp     al,2
-       je      exe_extension
-       jb      bin_extension
-       cmp     al,4
-       je      obj_extension
-       cmp     al,5
-       je      o_extension
-       cmp     al,3
-       jne     no_extension
-       cmp     [subsystem],1
-       je      sys_extension
-       cmp     [subsystem],10
-       jae     efi_extension
-       bt      [format_flags],8
-       jnc     exe_extension
-       mov     eax,'.dll'
-       jmp     make_extension
-      sys_extension:
-       mov     eax,'.sys'
-       jmp     make_extension
-      efi_extension:
-       mov     eax,'.efi'
-       jmp     make_extension
-      bin_extension:
-       mov     eax,'.bin'
-       bt      [format_flags],0
-       jnc     make_extension
-       mov     eax,'.com'
-       jmp     make_extension
-      obj_extension:
-       mov     eax,'.obj'
-       jmp     make_extension
-      o_extension:
-       mov     eax,'.o'
-       bt      [format_flags],0
-       jnc     make_extension
-      no_extension:
-       xor     eax,eax
-       jmp     make_extension
-      exe_extension:
-       mov     eax,'.exe'
-      make_extension:
-       xchg    eax,[edi]
-       scas    dword [edi]
-       mov     byte [edi],0
-       scas    byte [edi]
-       mov     esi,edi
-       stos    dword [edi]
-       sub     edi,9
-       xor     eax,eax
-       mov     ebx,characters
-      adapt_case:
-       mov     al,[esi]
-       or      al,al
-       jz      adapt_next
-       xlat    byte [ebx]
-       cmp     al,[esi]
-       je      adapt_ok
-       sub     byte [edi],20h
-      adapt_ok:
-       inc     esi
-      adapt_next:
-       inc     edi
-       cmp     byte [edi],0
-       jne     adapt_case
-       jmp     extension_ok
-      extension_specified:
-       mov     al,'.'
-       stos    byte [edi]
-       mov     esi,[file_extension]
-      copy_extension:
-       lods    byte [esi]
-       stos    byte [edi]
-       test    al,al
-       jnz     copy_extension
-       dec     edi
-      extension_ok:
-       mov     esi,edi
-       lea     ecx,[esi+1]
-       sub     ecx,[free_additional_memory]
-       mov     edi,[structures_buffer]
-       dec     edi
-       std
-       rep     movs byte [edi],[esi]
-       cld
-       inc     edi
-       mov     [structures_buffer],edi
-       mov     [output_file],edi
-      output_path_ok:
-       cmp     [symbols_file],0
-       je      labels_table_ok
-       mov     ecx,[memory_end]
-       sub     ecx,[labels_list]
-       mov     edi,[tagged_blocks]
-       sub     edi,8
-       mov     [edi],ecx
-       or      dword [edi+4],-1
-       sub     edi,ecx
-       cmp     edi,[current_offset]
-       jbe     out_of_memory
-       mov     [tagged_blocks],edi
-       mov     esi,[memory_end]
-      copy_labels:
-       sub     esi,32
-       cmp     esi,[labels_list]
-       jb      labels_table_ok
-       mov     ecx,32 shr 2
-       rep     movs dword [edi],[esi]
-       sub     esi,32
-       jmp     copy_labels
-      labels_table_ok:
-       mov     edi,[current_offset]
-       cmp     [output_format],4
-       je      coff_formatter
-       cmp     [output_format],5
-       jne     common_formatter
-       bt      [format_flags],0
-       jnc     elf_formatter
-      common_formatter:
-       mov     eax,edi
-       sub     eax,[code_start]
-       mov     [real_code_size],eax
-       cmp     edi,[undefined_data_end]
-       jne     calculate_code_size
-       mov     edi,[undefined_data_start]
-      calculate_code_size:
-       mov     [current_offset],edi
-       sub     edi,[code_start]
-       mov     [code_size],edi
-       and     [written_size],0
-       mov     edx,[output_file]
-       call    create
-       jc      write_failed
-       cmp     [output_format],3
-       jne     stub_written
-       mov     edx,[code_start]
-       mov     ecx,[stub_size]
-       sub     edx,ecx
-       add     [written_size],ecx
-       call    write
-      stub_written:
-       cmp     [output_format],2
-       jne     write_output
-       call    write_mz_header
-      write_output:
-       call    write_code
-      output_written:
-       call    close
-       cmp     [symbols_file],0
-       jne     dump_symbols
-       ret
-      write_code:
-       mov     eax,[written_size]
-       mov     [headers_size],eax
-       mov     edx,[code_start]
-       mov     ecx,[code_size]
-       add     [written_size],ecx
-       lea     eax,[edx+ecx]
-       call    write
-       jc      write_failed
-       ret
-format_directive:
-       cmp     edi,[code_start]
-       jne     unexpected_instruction
-       mov     ebp,[addressing_space]
-       test    byte [ds:ebp+0Ah],1
-       jnz     unexpected_instruction
-       cmp     [output_format],0
-       jne     unexpected_instruction
-       lods    byte [esi]
-       cmp     al,1Ch
-       je      format_prefix
-       cmp     al,18h
-       jne     invalid_argument
-       lods    byte [esi]
-      select_format:
-       mov     dl,al
-       shr     al,4
-       mov     [output_format],al
-       and     edx,0Fh
-       or      [format_flags],edx
-       cmp     al,2
-       je      format_mz
-       cmp     al,3
-       je      format_pe
-       cmp     al,4
-       je      format_coff
-       cmp     al,5
-       je      format_elf
-      format_defined:
-       cmp     byte [esi],86h
-       jne     instruction_assembled
-       cmp     word [esi+1],'('
-       jne     invalid_argument
-       mov     eax,[esi+3]
-       add     esi,3+4
-       mov     [file_extension],esi
-       lea     esi,[esi+eax+1]
-       jmp     instruction_assembled
-      format_prefix:
-       lods    byte [esi]
-       mov     ah,al
-       lods    byte [esi]
-       cmp     al,18h
-       jne     invalid_argument
-       lods    byte [esi]
-       mov     edx,eax
-       shr     dl,4
-       shr     dh,4
-       cmp     dl,dh
-       jne     invalid_argument
-       or      al,ah
-       jmp     select_format
-entry_directive:
-       bts     [format_flags],10h
-       jc      setting_already_specified
-       mov     al,[output_format]
-       cmp     al,2
-       je      mz_entry
-       cmp     al,3
-       je      pe_entry
-       cmp     al,5
-       jne     illegal_instruction
-       bt      [format_flags],0
-       jc      elf_entry
-       jmp     illegal_instruction
-stack_directive:
-       bts     [format_flags],11h
-       jc      setting_already_specified
-       mov     al,[output_format]
-       cmp     al,2
-       je      mz_stack
-       cmp     al,3
-       je      pe_stack
-       jmp     illegal_instruction
-heap_directive:
-       bts     [format_flags],12h
-       jc      setting_already_specified
-       mov     al,[output_format]
-       cmp     al,2
-       je      mz_heap
-       cmp     al,3
-       je      pe_heap
-       jmp     illegal_instruction
-segment_directive:
-       mov     al,[output_format]
-       cmp     al,2
-       je      mz_segment
-       cmp     al,5
-       je      elf_segment
-       jmp     illegal_instruction
-section_directive:
-       mov     al,[output_format]
-       cmp     al,3
-       je      pe_section
-       cmp     al,4
-       je      coff_section
-       cmp     al,5
-       je      elf_section
-       jmp     illegal_instruction
-public_directive:
-       mov     al,[output_format]
-       cmp     al,4
-       je      public_allowed
-       cmp     al,5
-       jne     illegal_instruction
-       bt      [format_flags],0
-       jc      illegal_instruction
-      public_allowed:
-       mov     [base_code],0C0h
-       lods    byte [esi]
-       cmp     al,2
-       je      public_label
-       cmp     al,1Dh
-       jne     invalid_argument
-       lods    byte [esi]
-       and     al,7
-       add     [base_code],al
-       lods    byte [esi]
-       cmp     al,2
-       jne     invalid_argument
-      public_label:
-       lods    dword [esi]
-       cmp     eax,0Fh
-       jb      invalid_use_of_symbol
-       je      reserved_word_used_as_symbol
-       inc     esi
-       mov     dx,[current_pass]
-       mov     [eax+18],dx
-       or      byte [eax+8],8
-       mov     ebx,eax
-       call    store_label_reference
-       mov     eax,ebx
-       mov     ebx,[free_additional_memory]
-       lea     edx,[ebx+10h]
-       cmp     edx,[structures_buffer]
-       jae     out_of_memory
-       mov     [free_additional_memory],edx
-       mov     [ebx+8],eax
-       mov     eax,[current_line]
-       mov     [ebx+0Ch],eax
-       lods    byte [esi]
-       cmp     al,86h
-       jne     invalid_argument
-       lods    word [esi]
-       cmp     ax,'('
-       jne     invalid_argument
-       mov     [ebx+4],esi
-       lods    dword [esi]
-       lea     esi,[esi+eax+1]
-       mov     al,[base_code]
-       mov     [ebx],al
-       jmp     instruction_assembled
-extrn_directive:
-       mov     al,[output_format]
-       cmp     al,4
-       je      extrn_allowed
-       cmp     al,5
-       jne     illegal_instruction
-       bt      [format_flags],0
-       jc      illegal_instruction
-      extrn_allowed:
-       lods    word [esi]
-       cmp     ax,'('
-       jne     invalid_argument
-       mov     ebx,esi
-       lods    dword [esi]
-       lea     esi,[esi+eax+1]
-       mov     edx,[free_additional_memory]
-       lea     eax,[edx+0Ch]
-       cmp     eax,[structures_buffer]
-       jae     out_of_memory
-       mov     [free_additional_memory],eax
-       mov     byte [edx],80h
-       mov     [edx+4],ebx
-       lods    byte [esi]
-       cmp     al,86h
-       jne     invalid_argument
-       lods    byte [esi]
-       cmp     al,2
-       jne     invalid_argument
-       lods    dword [esi]
-       cmp     eax,0Fh
-       jb      invalid_use_of_symbol
-       je      reserved_word_used_as_symbol
-       inc     esi
-       mov     ebx,eax
-       xor     ah,ah
-       lods    byte [esi]
-       cmp     al,':'
-       je      get_extrn_size
-       dec     esi
-       cmp     al,11h
-       jne     extrn_size_ok
-      get_extrn_size:
-       lods    word [esi]
-       cmp     al,11h
-       jne     invalid_argument
-      extrn_size_ok:
-       mov     [address_symbol],edx
-       mov     [label_size],ah
-       movzx   ecx,ah
-       mov     [edx+8],ecx
-       xor     eax,eax
-       xor     edx,edx
-       xor     ebp,ebp
-       mov     [address_sign],0
-       mov     ch,2
-       test    [format_flags],8
-       jz      make_free_label
-       mov     ch,4
-       jmp     make_free_label
-mark_relocation:
-       cmp     [value_type],0
-       je      relocation_ok
-       mov     ebp,[addressing_space]
-       test    byte [ds:ebp+0Ah],1
-       jnz     relocation_ok
-       cmp     [output_format],2
-       je      mark_mz_relocation
-       cmp     [output_format],3
-       je      mark_pe_relocation
-       cmp     [output_format],4
-       je      mark_coff_relocation
-       cmp     [output_format],5
-       je      mark_elf_relocation
-      relocation_ok:
-       ret
-close_pass:
-       mov     al,[output_format]
-       cmp     al,3
-       je      close_pe
-       cmp     al,4
-       je      close_coff
-       cmp     al,5
-       je      close_elf
-       ret
-
-format_mz:
-       mov     edx,[additional_memory]
-       push    edi
-       mov     edi,edx
-       mov     ecx,1Ch shr 2
-       xor     eax,eax
-       rep     stos dword [edi]
-       mov     [free_additional_memory],edi
-       pop     edi
-       mov     word [edx+0Ch],0FFFFh
-       mov     word [edx+10h],1000h
-       mov     [code_type],16
-       jmp     format_defined
-mark_mz_relocation:
-       push    eax ebx
-       inc     word [number_of_relocations]
-       jz      format_limitations_exceeded
-       mov     ebx,[free_additional_memory]
-       mov     eax,edi
-       sub     eax,[code_start]
-       mov     [ebx],ax
-       shr     eax,16
-       shl     ax,12
-       mov     [ebx+2],ax
-       cmp     word [ebx],0FFFFh
-       jne     mz_relocation_ok
-       inc     word [ebx+2]
-       sub     word [ebx],10h
-      mz_relocation_ok:
-       add     ebx,4
-       cmp     ebx,[structures_buffer]
-       jae     out_of_memory
-       mov     [free_additional_memory],ebx
-       pop     ebx eax
-       ret
-mz_segment:
-       lods    byte [esi]
-       cmp     al,2
-       jne     invalid_argument
-       lods    dword [esi]
-       cmp     eax,0Fh
-       jb      invalid_use_of_symbol
-       je      reserved_word_used_as_symbol
-       inc     esi
-       mov     ebx,eax
-       mov     eax,edi
-       sub     eax,[code_start]
-       mov     ecx,0Fh
-       add     eax,0Fh
-       and     eax,1111b
-       sub     ecx,eax
-       mov     edx,edi
-       xor     eax,eax
-       rep     stos byte [edi]
-       mov     eax,edx
-       call    undefined_data
-       push    ebx
-       call    create_addressing_space
-       pop     ebx
-       mov     eax,edi
-       sub     eax,[code_start]
-       shr     eax,4
-       cmp     eax,10000h
-       jae     value_out_of_range
-       mov     edx,eax
-       mov     al,16
-       cmp     byte [esi],13h
-       jne     segment_type_ok
-       inc     esi
-       lods    byte [esi]
-      segment_type_ok:
-       mov     [code_type],al
-       mov     eax,edx
-       mov     ch,1
-       mov     [address_sign],0
-       xor     edx,edx
-       xor     ebp,ebp
-       mov     [label_size],0
-       mov     [address_symbol],edx
-       jmp     make_free_label
-mz_entry:
-       lods    byte [esi]
-       cmp     al,'('
-       jne     invalid_argument
-       call    get_word_value
-       cmp     [value_type],1
-       je      initial_cs_ok
-       call    recoverable_invalid_address
-      initial_cs_ok:
-       mov     edx,[additional_memory]
-       mov     [edx+16h],ax
-       lods    byte [esi]
-       cmp     al,':'
-       jne     invalid_argument
-       lods    byte [esi]
-       cmp     al,'('
-       jne     invalid_argument
-       ja      invalid_address
-       call    get_word_value
-       cmp     [value_type],0
-       jne     invalid_use_of_symbol
-       mov     edx,[additional_memory]
-       mov     [edx+14h],ax
-       jmp     instruction_assembled
-      recoverable_invalid_address:
-       cmp     [error_line],0
-       jne     ignore_invalid_address
-       push    [current_line]
-       pop     [error_line]
-       mov     [error],invalid_address
-      ignore_invalid_address:
-       ret
-mz_stack:
-       lods    byte [esi]
-       cmp     al,'('
-       jne     invalid_argument
-       call    get_word_value
-       cmp     byte [esi],':'
-       je      stack_pointer
-       cmp     ax,10h
-       jb      invalid_value
-       cmp     [value_type],0
-       jne     invalid_use_of_symbol
-       mov     edx,[additional_memory]
-       mov     [edx+10h],ax
-       jmp     instruction_assembled
-      stack_pointer:
-       cmp     [value_type],1
-       je      initial_ss_ok
-       call    recoverable_invalid_address
-      initial_ss_ok:
-       mov     edx,[additional_memory]
-       mov     [edx+0Eh],ax
-       lods    byte [esi]
-       cmp     al,':'
-       jne     invalid_argument
-       lods    byte [esi]
-       cmp     al,'('
-       jne     invalid_argument
-       call    get_word_value
-       cmp     [value_type],0
-       jne     invalid_use_of_symbol
-       mov     edx,[additional_memory]
-       mov     [edx+10h],ax
-       bts     [format_flags],4
-       jmp     instruction_assembled
-mz_heap:
-       cmp     [output_format],2
-       jne     illegal_instruction
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     ah,1
-       je      invalid_value
-       cmp     ah,2
-       ja      invalid_value
-       cmp     al,'('
-       jne     invalid_argument
-       call    get_word_value
-       cmp     [value_type],0
-       jne     invalid_use_of_symbol
-       mov     edx,[additional_memory]
-       mov     [edx+0Ch],ax
-       jmp     instruction_assembled
-write_mz_header:
-       mov     edx,[additional_memory]
-       bt      [format_flags],4
-       jc      mz_stack_ok
-       mov     eax,[real_code_size]
-       dec     eax
-       shr     eax,4
-       inc     eax
-       mov     [edx+0Eh],ax
-       shl     eax,4
-       movzx   ecx,word [edx+10h]
-       add     eax,ecx
-       mov     [real_code_size],eax
-      mz_stack_ok:
-       mov     edi,[free_additional_memory]
-       mov     eax,[number_of_relocations]
-       shl     eax,2
-       add     eax,1Ch
-       sub     edi,eax
-       xchg    edi,[free_additional_memory]
-       mov     ecx,0Fh
-       add     eax,0Fh
-       and     eax,1111b
-       sub     ecx,eax
-       xor     al,al
-       rep     stos byte [edi]
-       sub     edi,[free_additional_memory]
-       mov     ecx,edi
-       shr     edi,4
-       mov     word [edx],'MZ'         ; signature
-       mov     [edx+8],di              ; header size in paragraphs
-       mov     eax,[number_of_relocations]
-       mov     [edx+6],ax              ; number of relocation entries
-       mov     eax,[code_size]
-       add     eax,ecx
-       mov     esi,eax
-       shr     esi,9
-       and     eax,1FFh
-       inc     si
-       or      ax,ax
-       jnz     mz_size_ok
-       dec     si
-      mz_size_ok:
-       mov     [edx+2],ax              ; number of bytes in last page
-       mov     [edx+4],si              ; number of pages
-       mov     eax,[real_code_size]
-       dec     eax
-       shr     eax,4
-       inc     eax
-       mov     esi,[code_size]
-       dec     esi
-       shr     esi,4
-       inc     esi
-       sub     eax,esi
-       mov     [edx+0Ah],ax            ; minimum memory in addition to code
-       add     [edx+0Ch],ax            ; maximum memory in addition to code
-       salc
-       mov     ah,al
-       or      [edx+0Ch],ax
-       mov     word [edx+18h],1Ch      ; offset of relocation table
-       add     [written_size],ecx
-       call    write
-       jc      write_failed
-       ret
-
-make_stub:
-       mov     [stub_file],edx
-       or      edx,edx
-       jnz     stub_from_file
-       push    esi
-       mov     edx,edi
-       xor     eax,eax
-       mov     ecx,20h
-       rep     stos dword [edi]
-       mov     eax,40h+default_stub_end-default_stub
-       mov     cx,100h+default_stub_end-default_stub
-       mov     word [edx],'MZ'
-       mov     byte [edx+4],1
-       mov     word [edx+2],ax
-       mov     byte [edx+8],4
-       mov     byte [edx+0Ah],10h
-       mov     word [edx+0Ch],0FFFFh
-       mov     word [edx+10h],cx
-       mov     word [edx+3Ch],ax
-       mov     byte [edx+18h],40h
-       lea     edi,[edx+40h]
-       mov     esi,default_stub
-       mov     ecx,default_stub_end-default_stub
-       rep     movs byte [edi],[esi]
-       pop     esi
-       jmp     stub_ok
-      default_stub:
-       use16
-       push    cs
-       pop     ds
-       mov     dx,stub_message-default_stub
-       mov     ah,9
-       int     21h
-       mov     ax,4C01h
-       int     21h
-      stub_message db 'This program cannot be run in DOS mode.',0Dh,0Ah,24h
-       rq      1
-      default_stub_end:
-       use32
-      stub_from_file:
-       push    esi
-       mov     esi,edx
-       call    open_binary_file
-       mov     edx,edi
-       mov     ecx,1Ch
-       mov     esi,edx
-       call    read
-       jc      binary_stub
-       cmp     word [esi],'MZ'
-       jne     binary_stub
-       add     edi,1Ch
-       movzx   ecx,word [esi+6]
-       add     ecx,11b
-       and     ecx,not 11b
-       add     ecx,(40h-1Ch) shr 2
-       lea     eax,[edi+ecx*4]
-       cmp     edi,[tagged_blocks]
-       jae     out_of_memory
-       xor     eax,eax
-       rep     stos dword [edi]
-       mov     edx,40h
-       xchg    dx,[esi+18h]
-       xor     al,al
-       call    lseek
-       movzx   ecx,word [esi+6]
-       shl     ecx,2
-       lea     edx,[esi+40h]
-       call    read
-       mov     edx,edi
-       sub     edx,esi
-       shr     edx,4
-       xchg    dx,[esi+8]
-       shl     edx,4
-       xor     al,al
-       call    lseek
-       movzx   ecx,word [esi+4]
-       dec     ecx
-       js      out_of_memory
-       shl     ecx,9
-       movzx   edx,word [esi+2]
-       test    edx,edx
-       jnz     stub_header_size_ok
-       mov     dx,200h
-     stub_header_size_ok:
-       add     ecx,edx
-       mov     edx,edi
-       sub     ecx,eax
-       je      read_stub_code
-       jb      stub_code_ok
-       push    ecx
-       dec     ecx
-       shr     ecx,3
-       inc     ecx
-       shl     ecx,1
-       lea     eax,[edi+ecx*4]
-       cmp     eax,[tagged_blocks]
-       jae     out_of_memory
-       xor     eax,eax
-       rep     stos dword [edi]
-       pop     ecx
-     read_stub_code:
-       call    read
-     stub_code_ok:
-       call    close
-       mov     edx,edi
-       sub     edx,esi
-       mov     ax,dx
-       and     ax,1FFh
-       mov     [esi+2],ax
-       dec     edx
-       shr     edx,9
-       inc     edx
-       mov     [esi+4],dx
-       mov     eax,edi
-       sub     eax,esi
-       mov     [esi+3Ch],eax
-       pop     esi
-      stub_ok:
-       ret
-      binary_stub:
-       mov     esi,edi
-       mov     ecx,40h shr 2
-       xor     eax,eax
-       rep     stos dword [edi]
-       mov     al,2
-       xor     edx,edx
-       call    lseek
-       push    eax
-       xor     al,al
-       xor     edx,edx
-       call    lseek
-       mov     ecx,[esp]
-       add     ecx,40h+111b
-       and     ecx,not 111b
-       mov     ax,cx
-       and     ax,1FFh
-       mov     [esi+2],ax
-       lea     eax,[ecx+1FFh]
-       shr     eax,9
-       mov     [esi+4],ax
-       mov     [esi+3Ch],ecx
-       sub     ecx,40h
-       mov     eax,10000h
-       sub     eax,ecx
-       jbe     binary_heap_ok
-       shr     eax,4
-       mov     [esi+0Ah],ax
-      binary_heap_ok:
-       mov     word [esi],'MZ'
-       mov     byte [esi+8],4
-       mov     ax,0FFFFh
-       mov     [esi+0Ch],ax
-       dec     ax
-       mov     [esi+10h],ax
-       sub     ax,0Eh
-       mov     [esi+0Eh],ax
-       mov     [esi+16h],ax
-       mov     word [esi+14h],100h
-       mov     byte [esi+18h],40h
-       mov     eax,[tagged_blocks]
-       sub     eax,ecx
-       cmp     edi,eax
-       jae     out_of_memory
-       mov     edx,edi
-       shr     ecx,2
-       xor     eax,eax
-       rep     stos dword [edi]
-       pop     ecx
-       call    read
-       call    close
-       pop     esi
-       ret
-
-format_pe:
-       xor     edx,edx
-       mov     [machine],14Ch
-       mov     [subsystem],3
-       mov     [subsystem_version],3 + 10 shl 16
-       mov     [image_base],400000h
-       and     [image_base_high],0
-       test    [format_flags],8
-       jz      pe_settings
-       mov     [machine],8664h
-       mov     [subsystem_version],5 + 0 shl 16
-      pe_settings:
-       cmp     byte [esi],84h
-       je      get_stub_name
-       cmp     byte [esi],80h
-       je      get_pe_base
-       cmp     byte [esi],1Bh
-       jne     pe_settings_ok
-       lods    byte [esi]
-       lods    byte [esi]
-       test    al,80h+40h
-       jz      subsystem_setting
-       cmp     al,80h
-       je      dll_flag
-       cmp     al,81h
-       je      wdm_flag
-       cmp     al,82h
-       je      large_flag
-       cmp     al,83h
-       je      nx_flag
-       jmp     pe_settings
-      dll_flag:
-       bts     [format_flags],8
-       jc      setting_already_specified
-       jmp     pe_settings
-      wdm_flag:
-       bts     [format_flags],9
-       jc      setting_already_specified
-       jmp     pe_settings
-      large_flag:
-       bts     [format_flags],11
-       jc      setting_already_specified
-       test    [format_flags],8
-       jnz     invalid_argument
-       jmp     pe_settings
-      nx_flag:
-       bts     [format_flags],12
-       jc      setting_already_specified
-       jmp     pe_settings
-      subsystem_setting:
-       bts     [format_flags],7
-       jc      setting_already_specified
-       and     ax,3Fh
-       mov     [subsystem],ax
-       cmp     ax,10
-       jb      subsystem_type_ok
-       or      [format_flags],4
-      subsystem_type_ok:
-       cmp     byte [esi],'('
-       jne     pe_settings
-       inc     esi
-       cmp     byte [esi],'.'
-       jne     invalid_value
-       inc     esi
-       push    edx
-       cmp     byte [esi+11],0
-       jne     invalid_value
-       cmp     byte [esi+10],2
-       ja      invalid_value
-       mov     dx,[esi+8]
-       cmp     dx,8000h
-       je      zero_version
-       mov     eax,[esi+4]
-       cmp     dx,7
-       jg      invalid_value
-       mov     cx,7
-       sub     cx,dx
-       mov     eax,[esi+4]
-       shr     eax,cl
-       mov     ebx,eax
-       shr     ebx,24
-       cmp     bl,100
-       jae     invalid_value
-       and     eax,0FFFFFFh
-       mov     ecx,100
-       mul     ecx
-       shrd    eax,edx,24
-       jnc     version_value_ok
-       inc     eax
-      version_value_ok:
-       shl     eax,16
-       mov     ax,bx
-       jmp     subsystem_version_ok
-      zero_version:
-       xor     eax,eax
-      subsystem_version_ok:
-       pop     edx
-       add     esi,13
-       mov     [subsystem_version],eax
-       jmp     pe_settings
-      get_pe_base:
-       bts     [format_flags],10
-       jc      setting_already_specified
-       lods    word [esi]
-       cmp     ah,'('
-       jne     invalid_argument
-       cmp     byte [esi],'.'
-       je      invalid_value
-       push    edx edi
-       add     edi,[stub_size]
-       test    [format_flags],4
-       jnz     get_peplus_base
-       call    get_dword_value
-       mov     [image_base],eax
-       jmp     pe_base_ok
-      get_peplus_base:
-       call    get_qword_value
-       mov     [image_base],eax
-       mov     [image_base_high],edx
-      pe_base_ok:
-       pop     edi edx
-       cmp     [value_type],0
-       jne     invalid_use_of_symbol
-       cmp     byte [esi],84h
-       jne     pe_settings_ok
-      get_stub_name:
-       lods    byte [esi]
-       lods    word [esi]
-       cmp     ax,'('
-       jne     invalid_argument
-       lods    dword [esi]
-       mov     edx,esi
-       add     esi,eax
-       inc     esi
-      pe_settings_ok:
-       mov     ebp,[stub_size]
-       or      ebp,ebp
-       jz      make_pe_stub
-       cmp     edx,[stub_file]
-       je      pe_stub_ok
-       sub     edi,[stub_size]
-       mov     [code_start],edi
-      make_pe_stub:
-       call    make_stub
-       mov     eax,edi
-       sub     eax,[code_start]
-       mov     [stub_size],eax
-       mov     [code_start],edi
-       mov     ebp,eax
-      pe_stub_ok:
-       mov     edx,edi
-       mov     ecx,18h+0E0h
-       test    [format_flags],4
-       jz      zero_pe_header
-       add     ecx,10h
-      zero_pe_header:
-       add     ebp,ecx
-       shr     ecx,2
-       xor     eax,eax
-       rep     stos dword [edi]
-       mov     word [edx],'PE'         ; signature
-       mov     ax,[machine]
-       mov     word [edx+4],ax
-       mov     byte [edx+38h+1],10h    ; section alignment
-       mov     byte [edx+3Ch+1],2      ; file alignment
-       mov     byte [edx+40h],1        ; OS version
-       mov     eax,[subsystem_version]
-       mov     [edx+48h],eax
-       mov     ax,[subsystem]
-       mov     [edx+5Ch],ax
-       cmp     ax,1
-       jne     pe_alignment_ok
-       mov     eax,20h
-       mov     dword [edx+38h],eax
-       mov     dword [edx+3Ch],eax
-      pe_alignment_ok:
-       mov     word [edx+1Ah],VERSION_MAJOR + VERSION_MINOR shl 8
-       test    [format_flags],4
-       jnz     init_peplus_specific
-       mov     byte [edx+14h],0E0h     ; size of optional header
-       mov     dword [edx+16h],10B010Fh; flags and magic value
-       mov     eax,[image_base]
-       mov     [edx+34h],eax
-       mov     byte [edx+60h+1],10h    ; stack reserve
-       mov     byte [edx+64h+1],10h    ; stack commit
-       mov     byte [edx+68h+2],1      ; heap reserve
-       mov     byte [edx+74h],16       ; number of directories
-       jmp     pe_header_ok
-      init_peplus_specific:
-       mov     byte [edx+14h],0F0h     ; size of optional header
-       mov     dword [edx+16h],20B002Fh; flags and magic value
-       mov     eax,[image_base]
-       mov     [edx+30h],eax
-       mov     eax,[image_base_high]
-       mov     [edx+34h],eax
-       mov     byte [edx+60h+1],10h    ; stack reserve
-       mov     byte [edx+68h+1],10h    ; stack commit
-       mov     byte [edx+70h+2],1      ; heap reserve
-       mov     byte [edx+84h],16       ; number of directories
-      pe_header_ok:
-       bsf     ecx,[edx+3Ch]
-       imul    ebx,[number_of_sections],28h
-       or      ebx,ebx
-       jnz     reserve_space_for_section_headers
-       mov     ebx,28h
-      reserve_space_for_section_headers:
-       add     ebx,ebp
-       dec     ebx
-       shr     ebx,cl
-       inc     ebx
-       shl     ebx,cl
-       sub     ebx,ebp
-       mov     ecx,ebx
-       mov     eax,[tagged_blocks]
-       sub     eax,ecx
-       cmp     edi,eax
-       jae     out_of_memory
-       shr     ecx,2
-       xor     eax,eax
-       rep     stos dword [edi]
-       mov     eax,edi
-       sub     eax,[code_start]
-       add     eax,[stub_size]
-       mov     [edx+54h],eax           ; size of headers
-       mov     ecx,[edx+38h]
-       dec     ecx
-       add     eax,ecx
-       not     ecx
-       and     eax,ecx
-       bt      [format_flags],8
-       jc      pe_entry_init_ok
-       mov     [edx+28h],eax           ; entry point rva
-      pe_entry_init_ok:
-       and     [number_of_sections],0
-       movzx   ebx,word [edx+14h]
-       lea     ebx,[edx+18h+ebx]
-       mov     [current_section],ebx
-       mov     dword [ebx],'.fla'
-       mov     dword [ebx+4],'t'
-       mov     [ebx+14h],edi
-       mov     [ebx+0Ch],eax
-       mov     dword [ebx+24h],0E0000060h
-       xor     ecx,ecx
-       xor     bl,bl
-       not     eax
-       not     ecx
-       not     bl
-       add     eax,1
-       adc     ecx,0
-       adc     bl,0
-       add     eax,edi
-       adc     ecx,0
-       adc     bl,0
-       test    [format_flags],4
-       jnz     peplus_org
-       sub     eax,[edx+34h]
-       sbb     ecx,0
-       sbb     bl,0
-       jmp     pe_org_ok
-      peplus_org:
-       sub     eax,[edx+30h]
-       sbb     ecx,[edx+34h]
-       sbb     bl,0
-      pe_org_ok:
-       test    [format_flags],8
-       jnz     pe64_code
-       mov     bh,2
-       mov     [code_type],32
-       jmp     pe_code_type_ok
-      pe64_code:
-       mov     bh,4
-       mov     [code_type],64
-      pe_code_type_ok:
-       bt      [resolver_flags],0
-       jc      pe_labels_type_ok
-       xor     bh,bh
-      pe_labels_type_ok:
-       push    eax ebx
-       call    init_addressing_space
-       mov     ebp,ebx
-       pop     ebx eax
-       mov     [ds:ebp],eax
-       mov     [ds:ebp+4],ecx
-       mov     [ds:ebp+8],bx
-       mov     [ds:ebp+18h],edi
-       bt      [format_flags],8
-       jnc     dll_flag_ok
-       or      byte [edx+16h+1],20h
-      dll_flag_ok:
-       bt      [format_flags],9
-       jnc     wdm_flag_ok
-       or      byte [edx+5Eh+1],20h
-      wdm_flag_ok:
-       bt      [format_flags],11
-       jnc     large_flag_ok
-       or      byte [edx+16h],20h
-      large_flag_ok:
-       bt      [format_flags],12
-       jnc     nx_ok
-       or      byte [edx+5Eh+1],1
-      nx_ok:
-       jmp     format_defined
-pe_section:
-       call    close_pe_section
-       push    eax ebx
-       call    create_addressing_space
-       mov     ebp,ebx
-       pop     ebx eax
-       bts     [format_flags],5
-       lea     ecx,[ebx+28h]
-       add     edx,[edx+54h]
-       sub     edx,[stub_size]
-       cmp     ecx,edx
-       jbe     new_section
-       lea     ebx,[edx-28h]
-       or      [next_pass_needed],-1
-       push    edi
-       mov     edi,ebx
-       mov     ecx,28h shr 4
-       xor     eax,eax
-       rep     stos dword [edi]
-       pop     edi
-      new_section:
-       mov     [ebx+0Ch],eax
-       lods    word [esi]
-       cmp     ax,'('
-       jne     invalid_argument
-       lea     edx,[esi+4]
-       mov     ecx,[esi]
-       lea     esi,[esi+4+ecx+1]
-       cmp     ecx,8
-       ja      name_too_long
-       xor     eax,eax
-       mov     [ebx],eax
-       mov     [ebx+4],eax
-       push    esi edi
-       mov     edi,ebx
-       mov     esi,edx
-       rep     movs byte [edi],[esi]
-       pop     edi esi
-       and     dword [ebx+24h],0
-       mov     [ebx+14h],edi
-       mov     edx,[code_start]
-       mov     eax,edi
-       xor     ecx,ecx
-       sub     eax,[ebx+0Ch]
-       sbb     ecx,0
-       sbb     byte [ds:ebp+8],0
-       mov     byte [ds:ebp+9],2
-       mov     [code_type],32
-       test    [format_flags],8
-       jz      pe_section_code_type_ok
-       mov     byte [ds:ebp+9],4
-       mov     [code_type],64
-      pe_section_code_type_ok:
-       test    [format_flags],4
-       jnz     peplus_section_org
-       sub     eax,[edx+34h]
-       sbb     ecx,0
-       sbb     byte [ds:ebp+8],0
-       bt      [resolver_flags],0
-       jc      pe_section_org_ok
-       mov     byte [ds:ebp+9],0
-       jmp     pe_section_org_ok
-      peplus_section_org:
-       sub     eax,[edx+30h]
-       sbb     ecx,[edx+34h]
-       sbb     byte [ds:ebp+8],0
-       bt      [resolver_flags],0
-       jc      pe_section_org_ok
-       mov     byte [ds:ebp+9],0
-      pe_section_org_ok:
-       mov     [ds:ebp],eax
-       mov     [ds:ebp+4],ecx
-       mov     [ds:ebp+18h],edi
-      get_section_flags:
-       lods    byte [esi]
-       cmp     al,1Ah
-       je      set_directory
-       cmp     al,19h
-       je      section_flag
-       dec     esi
-       jmp     instruction_assembled
-      set_directory:
-       movzx   eax,byte [esi]
-       inc     esi
-       mov     ecx,ebx
-       test    [format_flags],4
-       jnz     peplus_directory
-       xchg    ecx,[edx+78h+eax*8]
-       mov     dword [edx+78h+eax*8+4],-1
-       jmp     pe_directory_set
-      peplus_directory:
-       xchg    ecx,[edx+88h+eax*8]
-       mov     dword [edx+88h+eax*8+4],-1
-      pe_directory_set:
-       or      ecx,ecx
-       jnz     data_already_defined
-       push    ebx edx
-       call    generate_pe_data
-       pop     edx ebx
-       jmp     get_section_flags
-      section_flag:
-       lods    byte [esi]
-       cmp     al,9
-       je      invalid_argument
-       cmp     al,11
-       je      invalid_argument
-       mov     cl,al
-       mov     eax,1
-       shl     eax,cl
-       test    dword [ebx+24h],eax
-       jnz     setting_already_specified
-       or      dword [ebx+24h],eax
-       jmp     get_section_flags
-      close_pe_section:
-       mov     ebx,[current_section]
-       mov     edx,[code_start]
-       mov     eax,edi
-       sub     eax,[ebx+14h]
-       jnz     finish_section
-       bt      [format_flags],5
-       jc      finish_section
-       mov     eax,[ebx+0Ch]
-       ret
-      finish_section:
-       mov     [ebx+8],eax
-       cmp     edi,[undefined_data_end]
-       jne     align_section
-       cmp     dword [edx+38h],1000h
-       jb      align_section
-       mov     edi,[undefined_data_start]
-      align_section:
-       and     [undefined_data_end],0
-       mov     ebp,edi
-       sub     ebp,[ebx+14h]
-       mov     ecx,[edx+3Ch]
-       dec     ecx
-       lea     eax,[ebp+ecx]
-       not     ecx
-       and     eax,ecx
-       mov     [ebx+10h],eax
-       sub     eax,ebp
-       mov     ecx,eax
-       xor     al,al
-       rep     stos byte [edi]
-       mov     eax,[code_start]
-       sub     eax,[stub_size]
-       sub     [ebx+14h],eax
-       mov     ecx,[ebx+10h]
-       test    byte [ebx+24h],20h
-       jz      pe_code_sum_ok
-       add     [edx+1Ch],ecx
-       cmp     dword [edx+2Ch],0
-       jne     pe_code_sum_ok
-       mov     eax,[ebx+0Ch]
-       mov     [edx+2Ch],eax
-      pe_code_sum_ok:
-       test    byte [ebx+24h],40h
-       jz      pe_data_sum_ok
-       add     [edx+20h],ecx
-       test    [format_flags],4
-       jnz     pe_data_sum_ok
-       cmp     dword [edx+30h],0
-       jne     pe_data_sum_ok
-       mov     eax,[ebx+0Ch]
-       mov     [edx+30h],eax
-      pe_data_sum_ok:
-       mov     eax,[ebx+8]
-       or      eax,eax
-       jz      udata_ok
-       cmp     dword [ebx+10h],0
-       jne     udata_ok
-       or      byte [ebx+24h],80h
-       add     [edx+24h],ecx
-      udata_ok:
-       mov     ecx,[edx+38h]
-       dec     ecx
-       add     eax,ecx
-       not     ecx
-       and     eax,ecx
-       add     eax,[ebx+0Ch]
-       add     ebx,28h
-       mov     [current_section],ebx
-       inc     word [number_of_sections]
-       jz      format_limitations_exceeded
-       ret
-data_directive:
-       cmp     [output_format],3
-       jne     illegal_instruction
-       lods    byte [esi]
-       cmp     al,1Ah
-       je      predefined_data_type
-       cmp     al,'('
-       jne     invalid_argument
-       call    get_byte_value
-       cmp     al,16
-       jb      data_type_ok
-       jmp     invalid_value
-      predefined_data_type:
-       movzx   eax,byte [esi]
-       inc     esi
-      data_type_ok:
-       mov     ebx,[current_section]
-       mov     ecx,edi
-       sub     ecx,[ebx+14h]
-       add     ecx,[ebx+0Ch]
-       mov     edx,[code_start]
-       test    [format_flags],4
-       jnz     peplus_data
-       xchg    ecx,[edx+78h+eax*8]
-       jmp     init_pe_data
-      peplus_data:
-       xchg    ecx,[edx+88h+eax*8]
-      init_pe_data:
-       or      ecx,ecx
-       jnz     data_already_defined
-       call    allocate_structure_data
-       mov     word [ebx],data_directive-instruction_handler
-       mov     [ebx+2],al
-       mov     edx,[current_line]
-       mov     [ebx+4],edx
-       call    generate_pe_data
-       jmp     instruction_assembled
-      end_data:
-       cmp     [output_format],3
-       jne     illegal_instruction
-       call    find_structure_data
-       jc      unexpected_instruction
-       movzx   eax,byte [ebx+2]
-       mov     edx,[current_section]
-       mov     ecx,edi
-       sub     ecx,[edx+14h]
-       add     ecx,[edx+0Ch]
-       mov     edx,[code_start]
-       test    [format_flags],4
-       jnz     end_peplus_data
-       sub     ecx,[edx+78h+eax*8]
-       mov     [edx+78h+eax*8+4],ecx
-       jmp     remove_structure_data
-      end_peplus_data:
-       sub     ecx,[edx+88h+eax*8]
-       mov     [edx+88h+eax*8+4],ecx
-       jmp     remove_structure_data
-pe_entry:
-       lods    byte [esi]
-       cmp     al,'('
-       jne     invalid_argument
-       cmp     byte [esi],'.'
-       je      invalid_value
-       test    [format_flags],8
-       jnz     pe64_entry
-       call    get_dword_value
-       mov     bl,2
-       bt      [resolver_flags],0
-       jc      check_pe_entry_label_type
-       xor     bl,bl
-      check_pe_entry_label_type:
-       cmp     [value_type],bl
-       je      pe_entry_ok
-       call    recoverable_invalid_address
-      pe_entry_ok:
-       cdq
-       test    [format_flags],4
-       jnz     pe64_entry_type_ok
-       mov     edx,[code_start]
-       sub     eax,[edx+34h]
-       mov     [edx+28h],eax
-       jmp     instruction_assembled
-      pe64_entry:
-       call    get_qword_value
-       mov     bl,4
-       bt      [resolver_flags],0
-       jc      check_pe64_entry_label_type
-       xor     bl,bl
-      check_pe64_entry_label_type:
-       cmp     [value_type],bl
-       je      pe64_entry_type_ok
-       call    recoverable_invalid_address
-      pe64_entry_type_ok:
-       mov     ecx,[code_start]
-       sub     eax,[ecx+30h]
-       sbb     edx,[ecx+34h]
-       jz      pe64_entry_range_ok
-       call    recoverable_overflow
-      pe64_entry_range_ok:
-       mov     [ecx+28h],eax
-       jmp     instruction_assembled
-pe_stack:
-       lods    byte [esi]
-       cmp     al,'('
-       jne     invalid_argument
-       cmp     byte [esi],'.'
-       je      invalid_value
-       test    [format_flags],4
-       jnz     peplus_stack
-       call    get_count_value
-       mov     edx,[code_start]
-       mov     [edx+60h],eax
-       cmp     byte [esi],','
-       jne     default_stack_commit
-       lods    byte [esi]
-       lods    byte [esi]
-       cmp     al,'('
-       jne     invalid_argument
-       cmp     byte [esi],'.'
-       je      invalid_value
-       call    get_count_value
-       mov     edx,[code_start]
-       mov     [edx+64h],eax
-       cmp     eax,[edx+60h]
-       ja      value_out_of_range
-       jmp     instruction_assembled
-      default_stack_commit:
-       mov     dword [edx+64h],1000h
-       mov     eax,[edx+60h]
-       cmp     eax,1000h
-       ja      instruction_assembled
-       mov     dword [edx+64h],eax
-       jmp     instruction_assembled
-      peplus_stack:
-       call    get_qword_value
-       cmp     [value_type],0
-       jne     invalid_use_of_symbol
-       mov     ecx,[code_start]
-       mov     [ecx+60h],eax
-       mov     [ecx+64h],edx
-       cmp     byte [esi],','
-       jne     default_peplus_stack_commit
-       lods    byte [esi]
-       lods    byte [esi]
-       cmp     al,'('
-       jne     invalid_argument
-       cmp     byte [esi],'.'
-       je      invalid_value
-       call    get_qword_value
-       cmp     [value_type],0
-       jne     invalid_use_of_symbol
-       mov     ecx,[code_start]
-       mov     [ecx+68h],eax
-       mov     [ecx+6Ch],edx
-       cmp     edx,[ecx+64h]
-       ja      value_out_of_range
-       jb      instruction_assembled
-       cmp     eax,[ecx+60h]
-       ja      value_out_of_range
-       jmp     instruction_assembled
-      default_peplus_stack_commit:
-       mov     dword [ecx+68h],1000h
-       cmp     dword [ecx+64h],0
-       jne     instruction_assembled
-       mov     eax,[ecx+60h]
-       cmp     eax,1000h
-       ja      instruction_assembled
-       mov     dword [ecx+68h],eax
-       jmp     instruction_assembled
-pe_heap:
-       lods    byte [esi]
-       cmp     al,'('
-       jne     invalid_argument
-       cmp     byte [esi],'.'
-       je      invalid_value
-       test    [format_flags],4
-       jnz     peplus_heap
-       call    get_count_value
-       mov     edx,[code_start]
-       mov     [edx+68h],eax
-       cmp     byte [esi],','
-       jne     instruction_assembled
-       lods    byte [esi]
-       lods    byte [esi]
-       cmp     al,'('
-       jne     invalid_argument
-       cmp     byte [esi],'.'
-       je      invalid_value
-       call    get_count_value
-       mov     edx,[code_start]
-       mov     [edx+6Ch],eax
-       cmp     eax,[edx+68h]
-       ja      value_out_of_range
-       jmp     instruction_assembled
-      peplus_heap:
-       call    get_qword_value
-       cmp     [value_type],0
-       jne     invalid_use_of_symbol
-       mov     ecx,[code_start]
-       mov     [ecx+70h],eax
-       mov     [ecx+74h],edx
-       cmp     byte [esi],','
-       jne     instruction_assembled
-       lods    byte [esi]
-       lods    byte [esi]
-       cmp     al,'('
-       jne     invalid_argument
-       cmp     byte [esi],'.'
-       je      invalid_value
-       call    get_qword_value
-       cmp     [value_type],0
-       jne     invalid_use_of_symbol
-       mov     ecx,[code_start]
-       mov     [ecx+78h],eax
-       mov     [ecx+7Ch],edx
-       cmp     edx,[ecx+74h]
-       ja      value_out_of_range
-       jb      instruction_assembled
-       cmp     eax,[ecx+70h]
-       ja      value_out_of_range
-       jmp     instruction_assembled
-mark_pe_relocation:
-       push    eax ebx
-       test    [format_flags],4
-       jz      check_standard_pe_relocation_type
-       cmp     [value_type],4
-       je      pe_relocation_type_ok
-      check_standard_pe_relocation_type:
-       cmp     [value_type],2
-       je      pe_relocation_type_ok
-       call    recoverable_misuse
-      pe_relocation_type_ok:
-       mov     ebx,[current_section]
-       mov     eax,edi
-       sub     eax,[ebx+14h]
-       add     eax,[ebx+0Ch]
-       mov     ebx,[free_additional_memory]
-       inc     [number_of_relocations]
-       add     ebx,5
-       cmp     ebx,[structures_buffer]
-       jae     out_of_memory
-       mov     [free_additional_memory],ebx
-       mov     [ebx-5],eax
-       cmp     [value_type],2
-       je      fixup_32bit
-       mov     byte [ebx-1],0Ah
-       jmp     fixup_ok
-      fixup_32bit:
-       mov     byte [ebx-1],3
-      fixup_ok:
-       pop     ebx eax
-       ret
-generate_pe_data:
-       cmp     al,2
-       je      make_pe_resource
-       cmp     al,5
-       je      make_pe_fixups
-       ret
-make_pe_fixups:
-       mov     edx,[code_start]
-       and     byte [edx+16h],not 1
-       or      byte [edx+5Eh],40h
-       bts     [resolver_flags],0
-       jc      fixups_ready
-       or      [next_pass_needed],-1
-      fixups_ready:
-       and     [last_fixup_base],0
-       call    make_fixups
-       xchg    eax,[actual_fixups_size]
-       sub     eax,[actual_fixups_size]
-       ja      reserve_forward_fixups
-       xor     eax,eax
-      reserve_forward_fixups:
-       mov     [reserved_fixups],edi
-       add     edi,eax
-       mov     [reserved_fixups_size],eax
-       ret
-      make_fixups:
-       push    esi
-       xor     ecx,ecx
-       xchg    ecx,[number_of_relocations]
-       mov     esi,[free_additional_memory]
-       lea     eax,[ecx*5]
-       sub     esi,eax
-       mov     [free_additional_memory],esi
-       mov     edx,[last_fixup_base]
-       mov     ebx,[last_fixup_header]
-       mov     ebp,edi
-       jecxz   fixups_done
-      make_fixup:
-       cmp     [esi],edx
-       jb      store_fixup
-       mov     eax,edi
-       sub     eax,ebp
-       test    eax,11b
-       jz      fixups_block
-       xor     ax,ax
-       stos    word [edi]
-       add     dword [ebx],2
-      fixups_block:
-       mov     eax,edx
-       add     edx,1000h
-       cmp     [esi],edx
-       jae     fixups_block
-       stos    dword [edi]
-       mov     ebx,edi
-       mov     eax,8
-       stos    dword [edi]
-      store_fixup:
-       add     dword [ebx],2
-       mov     ah,[esi+1]
-       and     ah,0Fh
-       mov     al,[esi+4]
-       shl     al,4
-       or      ah,al
-       mov     al,[esi]
-       stos    word [edi]
-       add     esi,5
-       loop    make_fixup
-      fixups_done:
-       mov     [last_fixup_base],edx
-       mov     [last_fixup_header],ebx
-       pop     esi
-       mov     eax,edi
-       sub     eax,ebp
-       ret
-make_pe_resource:
-       cmp     byte [esi],82h
-       jne     resource_done
-       inc     esi
-       lods    word [esi]
-       cmp     ax,'('
-       jne     invalid_argument
-       lods    dword [esi]
-       mov     edx,esi
-       lea     esi,[esi+eax+1]
-       cmp     [next_pass_needed],0
-       je      resource_from_file
-       cmp     [current_pass],0
-       jne     reserve_space_for_resource
-       and     [resource_size],0
-      reserve_space_for_resource:
-       add     edi,[resource_size]
-       cmp     edi,[tagged_blocks]
-       ja      out_of_memory
-       jmp     resource_done
-      resource_from_file:
-       push    esi
-       mov     esi,edx
-       call    open_binary_file
-       push    ebx
-       mov     esi,[free_additional_memory]
-       lea     eax,[esi+20h]
-       cmp     eax,[structures_buffer]
-       ja      out_of_memory
-       mov     edx,esi
-       mov     ecx,20h
-       call    read
-       jc      invalid_file_format
-       xor     eax,eax
-       cmp     [esi],eax
-       jne     invalid_file_format
-       mov     ax,0FFFFh
-       cmp     [esi+8],eax
-       jne     invalid_file_format
-       cmp     [esi+12],eax
-       jne     invalid_file_format
-       mov     eax,20h
-       cmp     [esi+4],eax
-       jne     invalid_file_format
-      read_resource_headers:
-       test    eax,11b
-       jz      resource_file_alignment_ok
-       mov     edx,4
-       and     eax,11b
-       sub     edx,eax
-       mov     al,1
-       call    lseek
-       jc      resource_headers_ok
-      resource_file_alignment_ok:
-       mov     [esi],eax
-       lea     edx,[esi+12]
-       mov     ecx,8
-       call    read
-       jc      resource_headers_ok
-       mov     ecx,[esi+16]
-       add     [esi],ecx
-       lea     edx,[esi+20]
-       sub     ecx,8
-       mov     [esi+16],ecx
-       lea     eax,[edx+ecx]
-       cmp     eax,[structures_buffer]
-       ja      out_of_memory
-       call    read
-       jc      invalid_file_format
-       mov     edx,[esi]
-       add     edx,[esi+12]
-       mov     eax,[esi+16]
-       lea     ecx,[esi+20]
-       lea     esi,[ecx+eax]
-       add     ecx,2
-       cmp     word [ecx-2],0FFFFh
-       je      resource_header_type_ok
-      check_resource_header_type:
-       cmp     ecx,esi
-       jae     invalid_file_format
-       cmp     word [ecx],0
-       je      resource_header_type_ok
-       add     ecx,2
-       jmp     check_resource_header_type
-      resource_header_type_ok:
-       add     ecx,2
-       cmp     word [ecx],0FFFFh
-       je      resource_header_name_ok
-      check_resource_header_name:
-       cmp     ecx,esi
-       jae     invalid_file_format
-       cmp     word [ecx],0
-       je      resource_header_name_ok
-       add     ecx,2
-       jmp     check_resource_header_name
-      resource_header_name_ok:
-       xor     al,al
-       call    lseek
-       jnc     read_resource_headers
-      resource_headers_ok:
-       cmp     esi,[free_additional_memory]
-       je      invalid_file_format
-       xor     eax,eax
-       mov     [esi],eax
-       mov     [resource_data],edi
-       lea     eax,[edi+16]
-       cmp     eax,[tagged_blocks]
-       jae     out_of_memory
-       xor     eax,eax
-       stos    dword [edi]
-       call    make_timestamp
-       stos    dword [edi]
-       xor     eax,eax
-       stos    dword [edi]
-       stos    dword [edi]
-       xor     ebx,ebx
-      make_type_name_directory:
-       mov     esi,[free_additional_memory]
-       xor     edx,edx
-      find_type_name:
-       cmp     dword [esi],0
-       je      type_name_ok
-       add     esi,20
-       cmp     word [esi],0FFFFh
-       je      check_next_type_name
-       or      ebx,ebx
-       jz      check_this_type_name
-       xor     ecx,ecx
-      compare_with_previous_type_name:
-       mov     ax,[esi+ecx]
-       cmp     ax,[ebx+ecx]
-       ja      check_this_type_name
-       jb      check_next_type_name
-       add     ecx,2
-       mov     ax,[esi+ecx]
-       or      ax,[ebx+ecx]
-       jnz     compare_with_previous_type_name
-       jmp     check_next_type_name
-      check_this_type_name:
-       or      edx,edx
-       jz      type_name_found
-       xor     ecx,ecx
-      compare_with_current_type_name:
-       mov     ax,[esi+ecx]
-       cmp     ax,[edx+ecx]
-       ja      check_next_type_name
-       jb      type_name_found
-       add     ecx,2
-       mov     ax,[esi+ecx]
-       or      ax,[edx+ecx]
-       jnz     compare_with_current_type_name
-       jmp     same_type_name
-      type_name_found:
-       mov     edx,esi
-      same_type_name:
-       mov     [esi-16],edi
-      check_next_type_name:
-       mov     eax,[esi-4]
-       add     esi,eax
-       jmp     find_type_name
-      type_name_ok:
-       or      edx,edx
-       jz      type_name_directory_done
-       mov     ebx,edx
-      make_type_name_entry:
-       mov     eax,[resource_data]
-       inc     word [eax+12]
-       lea     eax,[edi+8]
-       cmp     eax,[tagged_blocks]
-       jae     out_of_memory
-       mov     eax,ebx
-       stos    dword [edi]
-       xor     eax,eax
-       stos    dword [edi]
-       jmp     make_type_name_directory
-      type_name_directory_done:
-       mov     ebx,-1
-      make_type_id_directory:
-       mov     esi,[free_additional_memory]
-       mov     edx,10000h
-      find_type_id:
-       cmp     dword [esi],0
-       je      type_id_ok
-       add     esi,20
-       cmp     word [esi],0FFFFh
-       jne     check_next_type_id
-       movzx   eax,word [esi+2]
-       cmp     eax,ebx
-       jle     check_next_type_id
-       cmp     eax,edx
-       jg      check_next_type_id
-       mov     edx,eax
-       mov     [esi-16],edi
-      check_next_type_id:
-       mov     eax,[esi-4]
-       add     esi,eax
-       jmp     find_type_id
-      type_id_ok:
-       cmp     edx,10000h
-       je      type_id_directory_done
-       mov     ebx,edx
-      make_type_id_entry:
-       mov     eax,[resource_data]
-       inc     word [eax+14]
-       lea     eax,[edi+8]
-       cmp     eax,[tagged_blocks]
-       jae     out_of_memory
-       mov     eax,ebx
-       stos    dword [edi]
-       xor     eax,eax
-       stos    dword [edi]
-       jmp     make_type_id_directory
-      type_id_directory_done:
-       mov     esi,[resource_data]
-       add     esi,10h
-       mov     ecx,[esi-4]
-       or      cx,cx
-       jz      resource_directories_ok
-      make_resource_directories:
-       push    ecx
-       push    edi
-       mov     edx,edi
-       sub     edx,[resource_data]
-       bts     edx,31
-       mov     [esi+4],edx
-       lea     eax,[edi+16]
-       cmp     eax,[tagged_blocks]
-       jae     out_of_memory
-       xor     eax,eax
-       stos    dword [edi]
-       call    make_timestamp
-       stos    dword [edi]
-       xor     eax,eax
-       stos    dword [edi]
-       stos    dword [edi]
-       mov     ebp,esi
-       xor     ebx,ebx
-      make_resource_name_directory:
-       mov     esi,[free_additional_memory]
-       xor     edx,edx
-      find_resource_name:
-       cmp     dword [esi],0
-       je      resource_name_ok
-       push    esi
-       cmp     [esi+4],ebp
-       jne     check_next_resource_name
-       add     esi,20
-       call    skip_resource_name
-       cmp     word [esi],0FFFFh
-       je      check_next_resource_name
-       or      ebx,ebx
-       jz      check_this_resource_name
-       xor     ecx,ecx
-      compare_with_previous_resource_name:
-       mov     ax,[esi+ecx]
-       cmp     ax,[ebx+ecx]
-       ja      check_this_resource_name
-       jb      check_next_resource_name
-       add     ecx,2
-       mov     ax,[esi+ecx]
-       or      ax,[ebx+ecx]
-       jnz     compare_with_previous_resource_name
-       jmp     check_next_resource_name
-      skip_resource_name:
-       cmp     word [esi],0FFFFh
-       jne     skip_unicode_string
-       add     esi,4
-       ret
-      skip_unicode_string:
-       add     esi,2
-       cmp     word [esi-2],0
-       jne     skip_unicode_string
-       ret
-      check_this_resource_name:
-       or      edx,edx
-       jz      resource_name_found
-       xor     ecx,ecx
-      compare_with_current_resource_name:
-       mov     ax,[esi+ecx]
-       cmp     ax,[edx+ecx]
-       ja      check_next_resource_name
-       jb      resource_name_found
-       add     ecx,2
-       mov     ax,[esi+ecx]
-       or      ax,[edx+ecx]
-       jnz     compare_with_current_resource_name
-       jmp     same_resource_name
-      resource_name_found:
-       mov     edx,esi
-      same_resource_name:
-       mov     eax,[esp]
-       mov     [eax+8],edi
-      check_next_resource_name:
-       pop     esi
-       mov     eax,[esi+16]
-       lea     esi,[esi+20+eax]
-       jmp     find_resource_name
-      resource_name_ok:
-       or      edx,edx
-       jz      resource_name_directory_done
-       mov     ebx,edx
-      make_resource_name_entry:
-       mov     eax,[esp]
-       inc     word [eax+12]
-       lea     eax,[edi+8]
-       cmp     eax,[tagged_blocks]
-       jae     out_of_memory
-       mov     eax,ebx
-       stos    dword [edi]
-       xor     eax,eax
-       stos    dword [edi]
-       jmp     make_resource_name_directory
-      resource_name_directory_done:
-       mov     ebx,-1
-      make_resource_id_directory:
-       mov     esi,[free_additional_memory]
-       mov     edx,10000h
-      find_resource_id:
-       cmp     dword [esi],0
-       je      resource_id_ok
-       push    esi
-       cmp     [esi+4],ebp
-       jne     check_next_resource_id
-       add     esi,20
-       call    skip_resource_name
-       cmp     word [esi],0FFFFh
-       jne     check_next_resource_id
-       movzx   eax,word [esi+2]
-       cmp     eax,ebx
-       jle     check_next_resource_id
-       cmp     eax,edx
-       jg      check_next_resource_id
-       mov     edx,eax
-       mov     eax,[esp]
-       mov     [eax+8],edi
-      check_next_resource_id:
-       pop     esi
-       mov     eax,[esi+16]
-       lea     esi,[esi+20+eax]
-       jmp     find_resource_id
-      resource_id_ok:
-       cmp     edx,10000h
-       je      resource_id_directory_done
-       mov     ebx,edx
-      make_resource_id_entry:
-       mov     eax,[esp]
-       inc     word [eax+14]
-       lea     eax,[edi+8]
-       cmp     eax,[tagged_blocks]
-       jae     out_of_memory
-       mov     eax,ebx
-       stos    dword [edi]
-       xor     eax,eax
-       stos    dword [edi]
-       jmp     make_resource_id_directory
-      resource_id_directory_done:
-       pop     eax
-       mov     esi,ebp
-       pop     ecx
-       add     esi,8
-       dec     cx
-       jnz     make_resource_directories
-      resource_directories_ok:
-       shr     ecx,16
-       jnz     make_resource_directories
-       mov     esi,[resource_data]
-       add     esi,10h
-       movzx   eax,word [esi-4]
-       movzx   edx,word [esi-2]
-       add     eax,edx
-       lea     esi,[esi+eax*8]
-       push    edi                     ; address of language directories
-      update_resource_directories:
-       cmp     esi,[esp]
-       je      resource_directories_updated
-       add     esi,10h
-       mov     ecx,[esi-4]
-       or      cx,cx
-       jz      language_directories_ok
-      make_language_directories:
-       push    ecx
-       push    edi
-       mov     edx,edi
-       sub     edx,[resource_data]
-       bts     edx,31
-       mov     [esi+4],edx
-       lea     eax,[edi+16]
-       cmp     eax,[tagged_blocks]
-       jae     out_of_memory
-       xor     eax,eax
-       stos    dword [edi]
-       call    make_timestamp
-       stos    dword [edi]
-       xor     eax,eax
-       stos    dword [edi]
-       stos    dword [edi]
-       mov     ebp,esi
-       mov     ebx,-1
-      make_language_id_directory:
-       mov     esi,[free_additional_memory]
-       mov     edx,10000h
-      find_language_id:
-       cmp     dword [esi],0
-       je      language_id_ok
-       push    esi
-       cmp     [esi+8],ebp
-       jne     check_next_language_id
-       add     esi,20
-       mov     eax,esi
-       call    skip_resource_name
-       call    skip_resource_name
-       neg     eax
-       add     eax,esi
-       and     eax,11b
-       add     esi,eax
-      get_language_id:
-       movzx   eax,word [esi+6]
-       cmp     eax,ebx
-       jle     check_next_language_id
-       cmp     eax,edx
-       jge     check_next_language_id
-       mov     edx,eax
-       mov     eax,[esp]
-       mov     dword [value],eax
-      check_next_language_id:
-       pop     esi
-       mov     eax,[esi+16]
-       lea     esi,[esi+20+eax]
-       jmp     find_language_id
-      language_id_ok:
-       cmp     edx,10000h
-       je      language_id_directory_done
-       mov     ebx,edx
-      make_language_id_entry:
-       mov     eax,[esp]
-       inc     word [eax+14]
-       lea     eax,[edi+8]
-       cmp     eax,[tagged_blocks]
-       jae     out_of_memory
-       mov     eax,ebx
-       stos    dword [edi]
-       mov     eax,dword [value]
-       stos    dword [edi]
-       jmp     make_language_id_directory
-      language_id_directory_done:
-       pop     eax
-       mov     esi,ebp
-       pop     ecx
-       add     esi,8
-       dec     cx
-       jnz     make_language_directories
-      language_directories_ok:
-       shr     ecx,16
-       jnz     make_language_directories
-       jmp     update_resource_directories
-      resource_directories_updated:
-       mov     esi,[resource_data]
-       push    edi
-      make_name_strings:
-       add     esi,10h
-       movzx   eax,word [esi-2]
-       movzx   ecx,word [esi-4]
-       add     eax,ecx
-       lea     eax,[esi+eax*8]
-       push    eax
-       or      ecx,ecx
-       jz      string_entries_processed
-      process_string_entries:
-       push    ecx
-       mov     edx,edi
-       sub     edx,[resource_data]
-       bts     edx,31
-       xchg    [esi],edx
-       mov     ebx,edi
-       xor     ax,ax
-       stos    word [edi]
-      copy_string_data:
-       lea     eax,[edi+2]
-       cmp     eax,[tagged_blocks]
-       jae     out_of_memory
-       mov     ax,[edx]
-       or      ax,ax
-       jz      string_data_copied
-       stos    word [edi]
-       inc     word [ebx]
-       add     edx,2
-       jmp     copy_string_data
-      string_data_copied:
-       add     esi,8
-       pop     ecx
-       loop    process_string_entries
-      string_entries_processed:
-       pop     esi
-       cmp     esi,[esp]
-       jb      make_name_strings
-       mov     eax,edi
-       sub     eax,[resource_data]
-       test    al,11b
-       jz      resource_strings_alignment_ok
-       xor     ax,ax
-       stos    word [edi]
-      resource_strings_alignment_ok:
-       pop     edx
-       pop     ebx                     ; address of language directories
-       mov     ebp,edi
-      update_language_directories:
-       add     ebx,10h
-       movzx   eax,word [ebx-2]
-       movzx   ecx,word [ebx-4]
-       add     ecx,eax
-      make_data_records:
-       push    ecx
-       mov     esi,edi
-       sub     esi,[resource_data]
-       xchg    esi,[ebx+4]
-       lea     eax,[edi+16]
-       cmp     eax,[tagged_blocks]
-       jae     out_of_memory
-       mov     eax,esi
-       stos    dword [edi]
-       mov     eax,[esi+12]
-       stos    dword [edi]
-       xor     eax,eax
-       stos    dword [edi]
-       stos    dword [edi]
-       pop     ecx
-       add     ebx,8
-       loop    make_data_records
-       cmp     ebx,edx
-       jb      update_language_directories
-       pop     ebx                     ; file handle
-       mov     esi,ebp
-       mov     ebp,edi
-      update_data_records:
-       push    ebp
-       mov     ecx,edi
-       mov     eax,[current_section]
-       sub     ecx,[eax+14h]
-       add     ecx,[eax+0Ch]
-       xchg    ecx,[esi]
-       mov     edx,[ecx]
-       xor     al,al
-       call    lseek
-       mov     edx,edi
-       mov     ecx,[esi+4]
-       add     edi,ecx
-       cmp     edi,[tagged_blocks]
-       ja      out_of_memory
-       call    read
-       mov     eax,edi
-       sub     eax,[resource_data]
-       and     eax,11b
-       jz      resource_data_alignment_ok
-       mov     ecx,4
-       sub     ecx,eax
-       xor     al,al
-       rep     stos byte [edi]
-      resource_data_alignment_ok:
-       pop     ebp
-       add     esi,16
-       cmp     esi,ebp
-       jb      update_data_records
-       pop     esi
-       call    close
-       mov     eax,edi
-       sub     eax,[resource_data]
-       mov     [resource_size],eax
-      resource_done:
-       ret
-close_pe:
-       call    close_pe_section
-       mov     edx,[code_start]
-       mov     [edx+50h],eax
-       call    make_timestamp
-       mov     edx,[code_start]
-       mov     [edx+8],eax
-       mov     eax,[number_of_sections]
-       mov     [edx+6],ax
-       imul    eax,28h
-       movzx   ecx,word [edx+14h]
-       lea     eax,[eax+18h+ecx]
-       add     eax,[stub_size]
-       mov     ecx,[edx+3Ch]
-       dec     ecx
-       add     eax,ecx
-       not     ecx
-       and     eax,ecx
-       cmp     eax,[edx+54h]
-       je      pe_sections_ok
-       or      [next_pass_needed],-1
-      pe_sections_ok:
-       xor     ecx,ecx
-       add     edx,78h
-       test    [format_flags],4
-       jz      process_directories
-       add     edx,10h
-      process_directories:
-       mov     eax,[edx+ecx*8]
-       or      eax,eax
-       jz      directory_ok
-       cmp     dword [edx+ecx*8+4],-1
-       jne     directory_ok
-      section_data:
-       mov     ebx,[edx+ecx*8]
-       mov     eax,[ebx+0Ch]
-       mov     [edx+ecx*8],eax         ; directory rva
-       mov     eax,[ebx+8]
-       mov     [edx+ecx*8+4],eax       ; directory size
-      directory_ok:
-       inc     cl
-       cmp     cl,10h
-       jb      process_directories
-       cmp     dword [edx+5*8],0
-       jne     finish_pe_relocations
-       mov     eax,[number_of_relocations]
-       shl     eax,2
-       sub     [free_additional_memory],eax
-       btr     [resolver_flags],0
-       jnc     pe_relocations_ok
-       or      [next_pass_needed],-1
-       jmp     pe_relocations_ok
-      finish_pe_relocations:
-       push    edi
-       mov     edi,[reserved_fixups]
-       call    make_fixups
-       pop     edi
-       add     [actual_fixups_size],eax
-       cmp     eax,[reserved_fixups_size]
-       je      pe_relocations_ok
-       or      [next_pass_needed],-1
-      pe_relocations_ok:
-       mov     ebx,[code_start]
-       sub     ebx,[stub_size]
-       mov     ecx,edi
-       sub     ecx,ebx
-       mov     ebp,ecx
-       shr     ecx,1
-       xor     eax,eax
-       cdq
-      calculate_checksum:
-       mov     dx,[ebx]
-       add     eax,edx
-       mov     dx,ax
-       shr     eax,16
-       add     eax,edx
-       add     ebx,2
-       loop    calculate_checksum
-       add     eax,ebp
-       mov     ebx,[code_start]
-       mov     [ebx+58h],eax
-       ret
-
-format_coff:
-       mov     eax,[additional_memory]
-       mov     [symbols_stream],eax
-       mov     ebx,eax
-       add     eax,20h
-       cmp     eax,[structures_buffer]
-       jae     out_of_memory
-       mov     [free_additional_memory],eax
-       xor     eax,eax
-       mov     [ebx],al
-       mov     [ebx+4],eax
-       mov     [ebx+8],edi
-       mov     al,4
-       mov     [ebx+10h],eax
-       mov     al,60h
-       bt      [format_flags],0
-       jnc     flat_section_flags_ok
-       or      eax,0E0000000h
-      flat_section_flags_ok:
-       mov     dword [ebx+14h],eax
-       mov     [current_section],ebx
-       xor     eax,eax
-       mov     [number_of_sections],eax
-       mov     edx,ebx
-       call    init_addressing_space
-       mov     [ebx+14h],edx
-       mov     byte [ebx+9],2
-       mov     [code_type],32
-       test    [format_flags],8
-       jz      format_defined
-       mov     byte [ebx+9],4
-       mov     [code_type],64
-       jmp     format_defined
-coff_section:
-       call    close_coff_section
-       mov     ebx,[free_additional_memory]
-       lea     eax,[ebx+20h]
-       cmp     eax,[structures_buffer]
-       jae     out_of_memory
-       mov     [free_additional_memory],eax
-       mov     [current_section],ebx
-       inc     [number_of_sections]
-       xor     eax,eax
-       mov     [ebx],al
-       mov     [ebx+8],edi
-       mov     [ebx+10h],eax
-       mov     [ebx+14h],eax
-       mov     edx,ebx
-       call    create_addressing_space
-       xchg    edx,ebx
-       mov     [edx+14h],ebx
-       mov     byte [edx+9],2
-       test    [format_flags],8
-       jz      coff_labels_type_ok
-       mov     byte [edx+9],4
-      coff_labels_type_ok:
-       lods    word [esi]
-       cmp     ax,'('
-       jne     invalid_argument
-       mov     [ebx+4],esi
-       mov     ecx,[esi]
-       lea     esi,[esi+4+ecx+1]
-       cmp     ecx,8
-       ja      name_too_long
-      coff_section_flags:
-       cmp     byte [esi],8Ch
-       je      coff_section_alignment
-       cmp     byte [esi],19h
-       jne     coff_section_settings_ok
-       inc     esi
-       lods    byte [esi]
-       bt      [format_flags],0
-       jc      coff_section_flag_ok
-       cmp     al,7
-       ja      invalid_argument
-      coff_section_flag_ok:
-       mov     cl,al
-       mov     eax,1
-       shl     eax,cl
-       test    dword [ebx+14h],eax
-       jnz     setting_already_specified
-       or      dword [ebx+14h],eax
-       jmp     coff_section_flags
-      coff_section_alignment:
-       bt      [format_flags],0
-       jnc     invalid_argument
-       inc     esi
-       lods    byte [esi]
-       cmp     al,'('
-       jne     invalid_argument
-       cmp     byte [esi],'.'
-       je      invalid_value
-       push    ebx
-       call    get_count_value
-       pop     ebx
-       mov     edx,eax
-       dec     edx
-       test    eax,edx
-       jnz     invalid_value
-       or      eax,eax
-       jz      invalid_value
-       cmp     eax,2000h
-       ja      invalid_value
-       bsf     edx,eax
-       inc     edx
-       shl     edx,20
-       or      [ebx+14h],edx
-       xchg    [ebx+10h],eax
-       or      eax,eax
-       jnz     setting_already_specified
-       jmp     coff_section_flags
-      coff_section_settings_ok:
-       cmp     dword [ebx+10h],0
-       jne     instruction_assembled
-       mov     dword [ebx+10h],4
-       bt      [format_flags],0
-       jnc     instruction_assembled
-       or      dword [ebx+14h],300000h
-       jmp     instruction_assembled
-      close_coff_section:
-       mov     ebx,[current_section]
-       mov     eax,edi
-       mov     edx,[ebx+8]
-       sub     eax,edx
-       mov     [ebx+0Ch],eax
-       xor     eax,eax
-       xchg    [undefined_data_end],eax
-       cmp     eax,edi
-       jne     coff_section_ok
-       cmp     edx,[undefined_data_start]
-       jne     coff_section_ok
-       mov     edi,edx
-       or      byte [ebx+14h],80h
-      coff_section_ok:
-       ret
-mark_coff_relocation:
-       cmp     [value_type],3
-       je      coff_relocation_relative
-       push    ebx eax
-       test    [format_flags],8
-       jnz     coff_64bit_relocation
-       mov     al,6
-       cmp     [value_type],2
-       je      coff_relocation
-       cmp     [value_type],5
-       jne     invalid_use_of_symbol
-       inc     al
-       jmp     coff_relocation
-      coff_64bit_relocation:
-       mov     al,1
-       cmp     [value_type],4
-       je      coff_relocation
-       mov     al,2
-       cmp     [value_type],2
-       je      coff_relocation
-       cmp     [value_type],5
-       jne     invalid_use_of_symbol
-       inc     al
-       jmp     coff_relocation
-      coff_relocation_relative:
-       push    ebx
-       bt      [format_flags],0
-       jnc     relative_ok
-       mov     ebx,[current_section]
-       mov     ebx,[ebx+8]
-       sub     ebx,edi
-       sub     eax,ebx
-       add     eax,4
-      relative_ok:
-       mov     ebx,[addressing_space]
-       push    eax
-       mov     al,20
-       test    [format_flags],8
-       jnz     relative_coff_64bit_relocation
-       cmp     byte [ebx+9],2
-       jne     invalid_use_of_symbol
-       jmp     coff_relocation
-      relative_coff_64bit_relocation:
-       mov     al,4
-       cmp     byte [ebx+9],4
-       jne     invalid_use_of_symbol
-      coff_relocation:
-       mov     ebx,[free_additional_memory]
-       add     ebx,0Ch
-       cmp     ebx,[structures_buffer]
-       jae     out_of_memory
-       mov     [free_additional_memory],ebx
-       mov     byte [ebx-0Ch],al
-       mov     eax,[current_section]
-       mov     eax,[eax+8]
-       neg     eax
-       add     eax,edi
-       mov     [ebx-0Ch+4],eax
-       mov     eax,[symbol_identifier]
-       mov     [ebx-0Ch+8],eax
-       pop     eax ebx
-       ret
-close_coff:
-       call    close_coff_section
-       cmp     [next_pass_needed],0
-       je      coff_closed
-       mov     eax,[symbols_stream]
-       mov     [free_additional_memory],eax
-      coff_closed:
-       ret
-coff_formatter:
-       sub     edi,[code_start]
-       mov     [code_size],edi
-       call    prepare_default_section
-       mov     edi,[free_additional_memory]
-       mov     ebx,edi
-       mov     ecx,28h shr 2
-       imul    ecx,[number_of_sections]
-       add     ecx,14h shr 2
-       lea     eax,[edi+ecx*4]
-       cmp     eax,[structures_buffer]
-       jae     out_of_memory
-       xor     eax,eax
-       rep     stos dword [edi]
-       mov     word [ebx],14Ch
-       test    [format_flags],8
-       jz      coff_magic_ok
-       mov     word [ebx],8664h
-      coff_magic_ok:
-       mov     word [ebx+12h],104h
-       bt      [format_flags],0
-       jnc     coff_flags_ok
-       or      byte [ebx+12h],80h
-      coff_flags_ok:
-       push    ebx
-       call    make_timestamp
-       pop     ebx
-       mov     [ebx+4],eax
-       mov     eax,[number_of_sections]
-       mov     [ebx+2],ax
-       mov     esi,[symbols_stream]
-       xor     eax,eax
-       xor     ecx,ecx
-      enumerate_symbols:
-       cmp     esi,[free_additional_memory]
-       je      symbols_enumerated
-       mov     dl,[esi]
-       or      dl,dl
-       jz      enumerate_section
-       cmp     dl,0C0h
-       jae     enumerate_public
-       cmp     dl,80h
-       jae     enumerate_extrn
-       add     esi,0Ch
-       jmp     enumerate_symbols
-      enumerate_section:
-       mov     edx,eax
-       shl     edx,8
-       mov     [esi],edx
-       inc     eax
-       inc     ecx
-       mov     [esi+1Eh],cx
-       add     esi,20h
-       jmp     enumerate_symbols
-      enumerate_public:
-       mov     edx,eax
-       shl     edx,8
-       mov     dl,[esi]
-       mov     [esi],edx
-       mov     edx,[esi+8]
-       add     esi,10h
-       inc     eax
-       cmp     byte [edx+11],0
-       je      enumerate_symbols
-       mov     edx,[edx+20]
-       cmp     byte [edx],0C0h
-       jae     enumerate_symbols
-       cmp     byte [edx],80h
-       jb      enumerate_symbols
-       inc     eax
-       jmp     enumerate_symbols
-      enumerate_extrn:
-       mov     edx,eax
-       shl     edx,8
-       mov     dl,[esi]
-       mov     [esi],edx
-       add     esi,0Ch
-       inc     eax
-       jmp     enumerate_symbols
-      prepare_default_section:
-       mov     ebx,[symbols_stream]
-       cmp     dword [ebx+0Ch],0
-       jne     default_section_ok
-       cmp     [number_of_sections],0
-       je      default_section_ok
-       mov     edx,ebx
-      find_references_to_default_section:
-       cmp     ebx,[free_additional_memory]
-       jne     check_reference
-       add     [symbols_stream],20h
-       ret
-      check_reference:
-       mov     al,[ebx]
-       or      al,al
-       jz      skip_other_section
-       cmp     al,0C0h
-       jae     check_public_reference
-       cmp     al,80h
-       jae     next_reference
-       cmp     edx,[ebx+8]
-       je      default_section_ok
-      next_reference:
-       add     ebx,0Ch
-       jmp     find_references_to_default_section
-      check_public_reference:
-       mov     eax,[ebx+8]
-       add     ebx,10h
-       test    byte [eax+8],1
-       jz      find_references_to_default_section
-       mov     cx,[current_pass]
-       cmp     cx,[eax+16]
-       jne     find_references_to_default_section
-       cmp     edx,[eax+20]
-       je      default_section_ok
-       jmp     find_references_to_default_section
-      skip_other_section:
-       add     ebx,20h
-       jmp     find_references_to_default_section
-      default_section_ok:
-       inc     [number_of_sections]
-       ret
-      symbols_enumerated:
-       mov     [ebx+0Ch],eax
-       mov     ebp,edi
-       sub     ebp,ebx
-       push    ebp
-       lea     edi,[ebx+14h]
-       mov     esi,[symbols_stream]
-      find_section:
-       cmp     esi,[free_additional_memory]
-       je      sections_finished
-       mov     al,[esi]
-       or      al,al
-       jz      section_found
-       add     esi,0Ch
-       cmp     al,0C0h
-       jb      find_section
-       add     esi,4
-       jmp     find_section
-      section_found:
-       push    esi edi
-       mov     esi,[esi+4]
-       or      esi,esi
-       jz      default_section
-       mov     ecx,[esi]
-       add     esi,4
-       rep     movs byte [edi],[esi]
-       jmp     section_name_ok
-      default_section:
-       mov     al,'.'
-       stos    byte [edi]
-       mov     eax,'flat'
-       stos    dword [edi]
-      section_name_ok:
-       pop     edi esi
-       mov     eax,[esi+0Ch]
-       mov     [edi+10h],eax
-       mov     eax,[esi+14h]
-       mov     [edi+24h],eax
-       test    al,80h
-       jnz     section_ptr_ok
-       mov     eax,[esi+8]
-       sub     eax,[code_start]
-       add     eax,ebp
-       mov     [edi+14h],eax
-      section_ptr_ok:
-       mov     ebx,[code_start]
-       mov     edx,[code_size]
-       add     ebx,edx
-       add     edx,ebp
-       xor     ecx,ecx
-       add     esi,20h
-      find_relocations:
-       cmp     esi,[free_additional_memory]
-       je      section_relocations_done
-       mov     al,[esi]
-       or      al,al
-       jz      section_relocations_done
-       cmp     al,80h
-       jb      add_relocation
-       cmp     al,0C0h
-       jb      next_relocation
-       add     esi,10h
-       jmp     find_relocations
-      add_relocation:
-       lea     eax,[ebx+0Ah]
-       cmp     eax,[tagged_blocks]
-       ja      out_of_memory
-       mov     eax,[esi+4]
-       mov     [ebx],eax
-       mov     eax,[esi+8]
-       mov     eax,[eax]
-       shr     eax,8
-       mov     [ebx+4],eax
-       movzx   ax,byte [esi]
-       mov     [ebx+8],ax
-       add     ebx,0Ah
-       inc     ecx
-      next_relocation:
-       add     esi,0Ch
-       jmp     find_relocations
-      section_relocations_done:
-       cmp     ecx,10000h
-       jb      section_relocations_count_16bit
-       bt      [format_flags],0
-       jnc     format_limitations_exceeded
-       mov     word [edi+20h],0FFFFh
-       or      dword [edi+24h],1000000h
-       mov     [edi+18h],edx
-       push    esi edi
-       push    ecx
-       lea     esi,[ebx-1]
-       add     ebx,0Ah
-       lea     edi,[ebx-1]
-       imul    ecx,0Ah
-       std
-       rep     movs byte [edi],[esi]
-       cld
-       pop     ecx
-       inc     esi
-       inc     ecx
-       mov     [esi],ecx
-       xor     eax,eax
-       mov     [esi+4],eax
-       mov     [esi+8],ax
-       pop     edi esi
-       jmp     section_relocations_ok
-      section_relocations_count_16bit:
-       mov     [edi+20h],cx
-       jcxz    section_relocations_ok
-       mov     [edi+18h],edx
-      section_relocations_ok:
-       sub     ebx,[code_start]
-       mov     [code_size],ebx
-       add     edi,28h
-       jmp     find_section
-      sections_finished:
-       mov     edx,[free_additional_memory]
-       mov     ebx,[code_size]
-       add     ebp,ebx
-       mov     [edx+8],ebp
-       add     ebx,[code_start]
-       mov     edi,ebx
-       mov     ecx,[edx+0Ch]
-       imul    ecx,12h shr 1
-       xor     eax,eax
-       shr     ecx,1
-       jnc     zero_symbols_table
-       stos    word [edi]
-      zero_symbols_table:
-       rep     stos dword [edi]
-       mov     edx,edi
-       stos    dword [edi]
-       mov     esi,[symbols_stream]
-      make_symbols_table:
-       cmp     esi,[free_additional_memory]
-       je      symbols_table_ok
-       mov     al,[esi]
-       cmp     al,0C0h
-       jae     add_public_symbol
-       cmp     al,80h
-       jae     add_extrn_symbol
-       or      al,al
-       jz      add_section_symbol
-       add     esi,0Ch
-       jmp     make_symbols_table
-      add_section_symbol:
-       call    store_symbol_name
-       movzx   eax,word [esi+1Eh]
-       mov     [ebx+0Ch],ax
-       mov     byte [ebx+10h],3
-       add     esi,20h
-       add     ebx,12h
-       jmp     make_symbols_table
-      add_extrn_symbol:
-       call    store_symbol_name
-       mov     byte [ebx+10h],2
-       add     esi,0Ch
-       add     ebx,12h
-       jmp     make_symbols_table
-      add_public_symbol:
-       call    store_symbol_name
-       mov     eax,[esi+0Ch]
-       mov     [current_line],eax
-       mov     eax,[esi+8]
-       test    byte [eax+8],1
-       jz      undefined_coff_public
-       mov     cx,[current_pass]
-       cmp     cx,[eax+16]
-       jne     undefined_coff_public
-       mov     cl,[eax+11]
-       or      cl,cl
-       jz      public_constant
-       test    [format_flags],8
-       jnz     check_64bit_public_symbol
-       cmp     cl,2
-       je      public_symbol_type_ok
-       jmp     invalid_use_of_symbol
-      undefined_coff_public:
-       mov     [error_info],eax
-       jmp     undefined_symbol
-      check_64bit_public_symbol:
-       cmp     cl,4
-       jne     invalid_use_of_symbol
-      public_symbol_type_ok:
-       mov     ecx,[eax+20]
-       cmp     byte [ecx],80h
-       je      alias_symbol
-       cmp     byte [ecx],0
-       jne     invalid_use_of_symbol
-       mov     cx,[ecx+1Eh]
-       mov     [ebx+0Ch],cx
-      public_symbol_section_ok:
-       movzx   ecx,byte [eax+9]
-       shr     cl,1
-       and     cl,1
-       neg     ecx
-       cmp     ecx,[eax+4]
-       jne     value_out_of_range
-       xor     ecx,[eax]
-       js      value_out_of_range
-       mov     eax,[eax]
-       mov     [ebx+8],eax
-       mov     al,2
-       cmp     byte [esi],0C0h
-       je      store_symbol_class
-       inc     al
-       cmp     byte [esi],0C1h
-       je      store_symbol_class
-       mov     al,105
-      store_symbol_class:
-       mov     byte [ebx+10h],al
-       add     esi,10h
-       add     ebx,12h
-       jmp     make_symbols_table
-      alias_symbol:
-       bt      [format_flags],0
-       jnc     invalid_use_of_symbol
-       mov     ecx,[eax]
-       or      ecx,[eax+4]
-       jnz     invalid_use_of_symbol
-       mov     byte [ebx+10h],69h
-       mov     byte [ebx+11h],1
-       add     ebx,12h
-       mov     ecx,[eax+20]
-       mov     ecx,[ecx]
-       shr     ecx,8
-       mov     [ebx],ecx
-       mov     byte [ebx+4],3
-       add     esi,10h
-       add     ebx,12h
-       jmp     make_symbols_table
-      public_constant:
-       mov     word [ebx+0Ch],0FFFFh
-       jmp     public_symbol_section_ok
-      symbols_table_ok:
-       mov     eax,edi
-       sub     eax,edx
-       mov     [edx],eax
-       sub     edi,[code_start]
-       mov     [code_size],edi
-       and     [written_size],0
-       mov     edx,[output_file]
-       call    create
-       jc      write_failed
-       mov     edx,[free_additional_memory]
-       pop     ecx
-       add     [written_size],ecx
-       call    write
-       jc      write_failed
-       jmp     write_output
-      store_symbol_name:
-       push    esi
-       mov     esi,[esi+4]
-       or      esi,esi
-       jz      default_name
-       lods    dword [esi]
-       mov     ecx,eax
-       cmp     ecx,8
-       ja      add_string
-       push    edi
-       mov     edi,ebx
-       rep     movs byte [edi],[esi]
-       pop     edi esi
-       ret
-      default_name:
-       mov     dword [ebx],'.fla'
-       mov     dword [ebx+4],'t'
-       pop     esi
-       ret
-      add_string:
-       mov     eax,edi
-       sub     eax,edx
-       mov     [ebx+4],eax
-       inc     ecx
-       rep     movs byte [edi],[esi]
-       pop     esi
-       ret
-
-format_elf:
-       test    [format_flags],8
-       jnz     format_elf64
-       mov     edx,edi
-       mov     ecx,34h shr 2
-       lea     eax,[edi+ecx*4]
-       cmp     eax,[tagged_blocks]
-       jae     out_of_memory
-       xor     eax,eax
-       rep     stos dword [edi]
-       mov     dword [edx],7Fh + 'ELF' shl 8
-       mov     al,1
-       mov     [edx+4],al
-       mov     [edx+5],al
-       mov     [edx+6],al
-       mov     [edx+14h],al
-       mov     byte [edx+12h],3
-       mov     byte [edx+28h],34h
-       mov     byte [edx+2Eh],28h
-       mov     [code_type],32
-       mov     byte [edx+10h],2
-       cmp     word [esi],1D19h
-       je      format_elf_exe
-       mov     byte [edx+10h],3
-       cmp     word [esi],021Eh
-       je      format_elf_exe
-      elf_header_ok:
-       mov     byte [edx+10h],1
-       mov     eax,[additional_memory]
-       mov     [symbols_stream],eax
-       mov     ebx,eax
-       add     eax,20h
-       cmp     eax,[structures_buffer]
-       jae     out_of_memory
-       mov     [free_additional_memory],eax
-       xor     eax,eax
-       mov     [current_section],ebx
-       mov     [number_of_sections],eax
-       mov     [ebx],al
-       mov     [ebx+4],eax
-       mov     [ebx+8],edi
-       mov     al,111b
-       mov     [ebx+14h],eax
-       mov     al,4
-       mov     [ebx+10h],eax
-       mov     edx,ebx
-       call    init_addressing_space
-       xchg    edx,ebx
-       mov     [edx+14h],ebx
-       mov     byte [edx+9],2
-       test    [format_flags],8
-       jz      format_defined
-       mov     byte [edx+9],4
-       mov     byte [ebx+10h],8
-       jmp     format_defined
-      format_elf64:
-       mov     edx,edi
-       mov     ecx,40h shr 2
-       lea     eax,[edi+ecx*4]
-       cmp     eax,[tagged_blocks]
-       jae     out_of_memory
-       xor     eax,eax
-       rep     stos dword [edi]
-       mov     dword [edx],7Fh + 'ELF' shl 8
-       mov     al,1
-       mov     [edx+5],al
-       mov     [edx+6],al
-       mov     [edx+14h],al
-       mov     byte [edx+4],2
-       mov     byte [edx+12h],62
-       mov     byte [edx+34h],40h
-       mov     byte [edx+3Ah],40h
-       mov     [code_type],64
-       mov     byte [edx+10h],2
-       cmp     word [esi],1D19h
-       je      format_elf64_exe
-       mov     byte [edx+10h],3
-       cmp     word [esi],021Eh
-       je      format_elf64_exe
-       jmp     elf_header_ok
-elf_section:
-       bt      [format_flags],0
-       jc      illegal_instruction
-       call    close_coff_section
-       mov     ebx,[free_additional_memory]
-       lea     eax,[ebx+20h]
-       cmp     eax,[structures_buffer]
-       jae     out_of_memory
-       mov     [free_additional_memory],eax
-       mov     [current_section],ebx
-       inc     word [number_of_sections]
-       jz      format_limitations_exceeded
-       xor     eax,eax
-       mov     [ebx],al
-       mov     [ebx+8],edi
-       mov     [ebx+10h],eax
-       mov     al,10b
-       mov     [ebx+14h],eax
-       mov     edx,ebx
-       call    create_addressing_space
-       xchg    edx,ebx
-       mov     [edx+14h],ebx
-       mov     byte [edx+9],2
-       test    [format_flags],8
-       jz      elf_labels_type_ok
-       mov     byte [edx+9],4
-      elf_labels_type_ok:
-       lods    word [esi]
-       cmp     ax,'('
-       jne     invalid_argument
-       mov     [ebx+4],esi
-       mov     ecx,[esi]
-       lea     esi,[esi+4+ecx+1]
-      elf_section_flags:
-       cmp     byte [esi],8Ch
-       je      elf_section_alignment
-       cmp     byte [esi],19h
-       jne     elf_section_settings_ok
-       inc     esi
-       lods    byte [esi]
-       sub     al,28
-       xor     al,11b
-       test    al,not 10b
-       jnz     invalid_argument
-       mov     cl,al
-       mov     al,1
-       shl     al,cl
-       test    byte [ebx+14h],al
-       jnz     setting_already_specified
-       or      byte [ebx+14h],al
-       jmp     elf_section_flags
-      elf_section_alignment:
-       inc     esi
-       lods    byte [esi]
-       cmp     al,'('
-       jne     invalid_argument
-       cmp     byte [esi],'.'
-       je      invalid_value
-       push    ebx
-       call    get_count_value
-       pop     ebx
-       mov     edx,eax
-       dec     edx
-       test    eax,edx
-       jnz     invalid_value
-       or      eax,eax
-       jz      invalid_value
-       xchg    [ebx+10h],eax
-       or      eax,eax
-       jnz     setting_already_specified
-       jmp     elf_section_flags
-      elf_section_settings_ok:
-       cmp     dword [ebx+10h],0
-       jne     instruction_assembled
-       mov     dword [ebx+10h],4
-       test    [format_flags],8
-       jz      instruction_assembled
-       mov     byte [ebx+10h],8
-       jmp     instruction_assembled
-mark_elf_relocation:
-       test    [format_flags],1
-       jnz     invalid_use_of_symbol
-       push    ebx
-       mov     ebx,[addressing_space]
-       cmp     [value_type],3
-       je      elf_relocation_relative
-       cmp     [value_type],7
-       je      elf_relocation_relative
-       push    eax
-       cmp     [value_type],5
-       je      elf_gotoff_relocation
-       ja      invalid_use_of_symbol
-       mov     al,1                    ; R_386_32 / R_AMD64_64
-       test    [format_flags],8
-       jz      coff_relocation
-       cmp     [value_type],4
-       je      coff_relocation
-       mov     al,11                   ; R_AMD64_32S
-       jmp     coff_relocation
-      elf_gotoff_relocation:
-       test    [format_flags],8
-       jnz     invalid_use_of_symbol
-       mov     al,9                    ; R_386_GOTOFF
-       jmp     coff_relocation
-      elf_relocation_relative:
-       cmp     byte [ebx+9],0
-       je      invalid_use_of_symbol
-       mov     ebx,[current_section]
-       mov     ebx,[ebx+8]
-       sub     ebx,edi
-       sub     eax,ebx
-       push    eax
-       mov     al,2                    ; R_386_PC32 / R_AMD64_PC32
-       cmp     [value_type],3
-       je      coff_relocation
-       mov     al,4                    ; R_386_PLT32 / R_AMD64_PLT32
-       jmp     coff_relocation
-close_elf:
-       bt      [format_flags],0
-       jc      close_elf_exe
-       call    close_coff_section
-       cmp     [next_pass_needed],0
-       je      elf_closed
-       mov     eax,[symbols_stream]
-       mov     [free_additional_memory],eax
-      elf_closed:
-       ret
-elf_formatter:
-       mov     ecx,edi
-       sub     ecx,[code_start]
-       neg     ecx
-       and     ecx,111b
-       test    [format_flags],8
-       jnz     align_elf_structures
-       and     ecx,11b
-      align_elf_structures:
-       xor     al,al
-       rep     stos byte [edi]
-       push    edi
-       call    prepare_default_section
-       mov     esi,[symbols_stream]
-       mov     edi,[free_additional_memory]
-       xor     eax,eax
-       mov     ecx,4
-       rep     stos dword [edi]
-       test    [format_flags],8
-       jz      find_first_section
-       mov     ecx,2
-       rep     stos dword [edi]
-      find_first_section:
-       mov     al,[esi]
-       or      al,al
-       jz      first_section_found
-       cmp     al,0C0h
-       jb      skip_other_symbol
-       add     esi,4
-      skip_other_symbol:
-       add     esi,0Ch
-       jmp     find_first_section
-      first_section_found:
-       mov     ebx,esi
-       mov     ebp,esi
-       add     esi,20h
-       xor     ecx,ecx
-       xor     edx,edx
-      find_next_section:
-       cmp     esi,[free_additional_memory]
-       je      make_section_symbol
-       mov     al,[esi]
-       or      al,al
-       jz      make_section_symbol
-       cmp     al,0C0h
-       jae     skip_public
-       cmp     al,80h
-       jae     skip_extrn
-       or      byte [ebx+14h],40h
-      skip_extrn:
-       add     esi,0Ch
-       jmp     find_next_section
-      skip_public:
-       add     esi,10h
-       jmp     find_next_section
-      make_section_symbol:
-       mov     eax,edi
-       xchg    eax,[ebx+4]
-       stos    dword [edi]
-       test    [format_flags],8
-       jnz     elf64_section_symbol
-       xor     eax,eax
-       stos    dword [edi]
-       stos    dword [edi]
-       call    store_section_index
-       jmp     section_symbol_ok
-      store_section_index:
-       inc     ecx
-       mov     eax,ecx
-       shl     eax,8
-       mov     [ebx],eax
-       inc     dx
-       jz      format_limitations_exceeded
-       mov     eax,edx
-       shl     eax,16
-       mov     al,3
-       test    byte [ebx+14h],40h
-       jz      section_index_ok
-       or      ah,-1
-       inc     dx
-       jz      format_limitations_exceeded
-      section_index_ok:
-       stos    dword [edi]
-       ret
-      elf64_section_symbol:
-       call    store_section_index
-       xor     eax,eax
-       stos    dword [edi]
-       stos    dword [edi]
-       stos    dword [edi]
-       stos    dword [edi]
-      section_symbol_ok:
-       mov     ebx,esi
-       add     esi,20h
-       cmp     ebx,[free_additional_memory]
-       jne     find_next_section
-       inc     dx
-       jz      format_limitations_exceeded
-       mov     [current_section],edx
-       mov     esi,[symbols_stream]
-      find_other_symbols:
-       cmp     esi,[free_additional_memory]
-       je      elf_symbol_table_ok
-       mov     al,[esi]
-       or      al,al
-       jz      skip_section
-       cmp     al,0C0h
-       jae     make_public_symbol
-       cmp     al,80h
-       jae     make_extrn_symbol
-       add     esi,0Ch
-       jmp     find_other_symbols
-      skip_section:
-       add     esi,20h
-       jmp     find_other_symbols
-      make_public_symbol:
-       mov     eax,[esi+0Ch]
-       mov     [current_line],eax
-       cmp     byte [esi],0C0h
-       jne     invalid_argument
-       mov     ebx,[esi+8]
-       test    byte [ebx+8],1
-       jz      undefined_public
-       mov     ax,[current_pass]
-       cmp     ax,[ebx+16]
-       jne     undefined_public
-       mov     dl,[ebx+11]
-       or      dl,dl
-       jz      public_absolute
-       mov     eax,[ebx+20]
-       cmp     byte [eax],0
-       jne     invalid_use_of_symbol
-       mov     eax,[eax+4]
-       test    [format_flags],8
-       jnz     elf64_public
-       cmp     dl,2
-       jne     invalid_use_of_symbol
-       mov     dx,[eax+0Eh]
-       jmp     section_for_public_ok
-      undefined_public:
-       mov     [error_info],ebx
-       jmp     undefined_symbol
-      elf64_public:
-       cmp     dl,4
-       jne     invalid_use_of_symbol
-       mov     dx,[eax+6]
-       jmp     section_for_public_ok
-      public_absolute:
-       mov     dx,0FFF1h
-      section_for_public_ok:
-       mov     eax,[esi+4]
-       stos    dword [edi]
-       test    [format_flags],8
-       jnz     elf64_public_symbol
-       movzx   eax,byte [ebx+9]
-       shr     al,1
-       and     al,1
-       neg     eax
-       cmp     eax,[ebx+4]
-       jne     value_out_of_range
-       xor     eax,[ebx]
-       js      value_out_of_range
-       mov     eax,[ebx]
-       stos    dword [edi]
-       xor     eax,eax
-       mov     al,[ebx+10]
-       stos    dword [edi]
-       mov     eax,edx
-       shl     eax,16
-       mov     al,10h
-       cmp     byte [ebx+10],0
-       je      elf_public_function
-       or      al,1
-       jmp     store_elf_public_info
-      elf_public_function:
-       or      al,2
-      store_elf_public_info:
-       stos    dword [edi]
-       jmp     public_symbol_ok
-      elf64_public_symbol:
-       mov     eax,edx
-       shl     eax,16
-       mov     al,10h
-       cmp     byte [ebx+10],0
-       je      elf64_public_function
-       or      al,1
-       jmp     store_elf64_public_info
-      elf64_public_function:
-       or      al,2
-      store_elf64_public_info:
-       stos    dword [edi]
-       mov     al,[ebx+9]
-       shl     eax,31-1
-       xor     eax,[ebx+4]
-       js      value_out_of_range
-       mov     eax,[ebx]
-       stos    dword [edi]
-       mov     eax,[ebx+4]
-       stos    dword [edi]
-       mov     al,[ebx+10]
-       stos    dword [edi]
-       xor     al,al
-       stos    dword [edi]
-      public_symbol_ok:
-       inc     ecx
-       mov     eax,ecx
-       shl     eax,8
-       mov     al,0C0h
-       mov     [esi],eax
-       add     esi,10h
-       jmp     find_other_symbols
-      make_extrn_symbol:
-       mov     eax,[esi+4]
-       stos    dword [edi]
-       test    [format_flags],8
-       jnz     elf64_extrn_symbol
-       xor     eax,eax
-       stos    dword [edi]
-       mov     eax,[esi+8]
-       stos    dword [edi]
-       mov     eax,10h
-       stos    dword [edi]
-       jmp     extrn_symbol_ok
-      elf64_extrn_symbol:
-       mov     eax,10h
-       stos    dword [edi]
-       xor     al,al
-       stos    dword [edi]
-       stos    dword [edi]
-       mov     eax,[esi+8]
-       stos    dword [edi]
-       xor     eax,eax
-       stos    dword [edi]
-      extrn_symbol_ok:
-       inc     ecx
-       mov     eax,ecx
-       shl     eax,8
-       mov     al,80h
-       mov     [esi],eax
-       add     esi,0Ch
-       jmp     find_other_symbols
-      elf_symbol_table_ok:
-       mov     edx,edi
-       mov     ebx,[free_additional_memory]
-       xor     al,al
-       stos    byte [edi]
-       add     edi,16
-       mov     [edx+1],edx
-       add     ebx,10h
-       test    [format_flags],8
-       jz      make_string_table
-       add     ebx,8
-      make_string_table:
-       cmp     ebx,edx
-       je      elf_string_table_ok
-       test    [format_flags],8
-       jnz     make_elf64_string
-       cmp     byte [ebx+0Dh],0
-       je      rel_prefix_ok
-       mov     byte [ebx+0Dh],0
-       mov     eax,'.rel'
-       stos    dword [edi]
-      rel_prefix_ok:
-       mov     esi,edi
-       sub     esi,edx
-       xchg    esi,[ebx]
-       add     ebx,10h
-      make_elf_string:
-       or      esi,esi
-       jz      default_string
-       lods    dword [esi]
-       mov     ecx,eax
-       rep     movs byte [edi],[esi]
-       xor     al,al
-       stos    byte [edi]
-       jmp     make_string_table
-      make_elf64_string:
-       cmp     byte [ebx+5],0
-       je      elf64_rel_prefix_ok
-       mov     byte [ebx+5],0
-       mov     eax,'.rel'
-       stos    dword [edi]
-       mov     al,'a'
-       stos    byte [edi]
-      elf64_rel_prefix_ok:
-       mov     esi,edi
-       sub     esi,edx
-       xchg    esi,[ebx]
-       add     ebx,18h
-       jmp     make_elf_string
-      default_string:
-       mov     eax,'.fla'
-       stos    dword [edi]
-       mov     ax,'t'
-       stos    word [edi]
-       jmp     make_string_table
-      elf_string_table_ok:
-       mov     [edx+1+8],edi
-       mov     ebx,[code_start]
-       mov     eax,edi
-       sub     eax,[free_additional_memory]
-       xor     ecx,ecx
-       sub     ecx,eax
-       test    [format_flags],8
-       jnz     finish_elf64_header
-       and     ecx,11b
-       add     eax,ecx
-       mov     [ebx+20h],eax
-       mov     eax,[current_section]
-       inc     ax
-       jz      format_limitations_exceeded
-       mov     [ebx+32h],ax
-       inc     ax
-       jz      format_limitations_exceeded
-       mov     [ebx+30h],ax
-       jmp     elf_header_finished
-      finish_elf64_header:
-       and     ecx,111b
-       add     eax,ecx
-       mov     [ebx+28h],eax
-       mov     eax,[current_section]
-       inc     ax
-       jz      format_limitations_exceeded
-       mov     [ebx+3Eh],ax
-       inc     ax
-       jz      format_limitations_exceeded
-       mov     [ebx+3Ch],ax
-      elf_header_finished:
-       xor     eax,eax
-       add     ecx,10*4
-       rep     stos byte [edi]
-       test    [format_flags],8
-       jz      elf_null_section_ok
-       mov     ecx,6*4
-       rep     stos byte [edi]
-      elf_null_section_ok:
-       mov     esi,ebp
-       xor     ecx,ecx
-      make_section_entry:
-       mov     ebx,edi
-       mov     eax,[esi+4]
-       mov     eax,[eax]
-       stos    dword [edi]
-       mov     eax,1
-       cmp     dword [esi+0Ch],0
-       je      bss_section
-       test    byte [esi+14h],80h
-       jz      section_type_ok
-      bss_section:
-       mov     al,8
-      section_type_ok:
-       stos    dword [edi]
-       mov     eax,[esi+14h]
-       and     al,3Fh
-       call    store_elf_machine_word
-       xor     eax,eax
-       call    store_elf_machine_word
-       mov     eax,[esi+8]
-       mov     [image_base],eax
-       sub     eax,[code_start]
-       call    store_elf_machine_word
-       mov     eax,[esi+0Ch]
-       call    store_elf_machine_word
-       xor     eax,eax
-       stos    dword [edi]
-       stos    dword [edi]
-       mov     eax,[esi+10h]
-       call    store_elf_machine_word
-       xor     eax,eax
-       call    store_elf_machine_word
-       inc     ecx
-       add     esi,20h
-       xchg    edi,[esp]
-       mov     ebp,edi
-      convert_relocations:
-       cmp     esi,[free_additional_memory]
-       je      relocations_converted
-       mov     al,[esi]
-       or      al,al
-       jz      relocations_converted
-       cmp     al,80h
-       jb      make_relocation_entry
-       cmp     al,0C0h
-       jb      relocation_entry_ok
-       add     esi,10h
-       jmp     convert_relocations
-      make_relocation_entry:
-       test    [format_flags],8
-       jnz     make_elf64_relocation_entry
-       mov     eax,[esi+4]
-       stos    dword [edi]
-       mov     eax,[esi+8]
-       mov     eax,[eax]
-       mov     al,[esi]
-       stos    dword [edi]
-       jmp     relocation_entry_ok
-      make_elf64_relocation_entry:
-       mov     eax,[esi+4]
-       stos    dword [edi]
-       xor     eax,eax
-       stos    dword [edi]
-       movzx   eax,byte [esi]
-       stos    dword [edi]
-       mov     eax,[esi+8]
-       mov     eax,[eax]
-       shr     eax,8
-       stos    dword [edi]
-       xor     eax,eax
-       push    edx
-       mov     edx,[esi+4]
-       add     edx,[image_base]
-       xchg    eax,[edx]
-       stos    dword [edi]
-       cmp     byte [esi],1
-       je      addend_64bit
-       pop     edx
-       sar     eax,31
-       stos    dword [edi]
-       jmp     relocation_entry_ok
-      addend_64bit:
-       xor     eax,eax
-       xchg    eax,[edx+4]
-       stos    dword [edi]
-       pop     edx
-      relocation_entry_ok:
-       add     esi,0Ch
-       jmp     convert_relocations
-      store_elf_machine_word:
-       stos    dword [edi]
-       test    [format_flags],8
-       jz      elf_machine_word_ok
-       and     dword [edi],0
-       add     edi,4
-      elf_machine_word_ok:
-       ret
-      relocations_converted:
-       cmp     edi,ebp
-       xchg    edi,[esp]
-       je      rel_section_ok
-       mov     eax,[ebx]
-       sub     eax,4
-       test    [format_flags],8
-       jz      store_relocations_name_offset
-       dec     eax
-      store_relocations_name_offset:
-       stos    dword [edi]
-       test    [format_flags],8
-       jnz     rela_section
-       mov     eax,9
-       jmp     store_relocations_type
-      rela_section:
-       mov     eax,4
-      store_relocations_type:
-       stos    dword [edi]
-       xor     al,al
-       call    store_elf_machine_word
-       call    store_elf_machine_word
-       mov     eax,ebp
-       sub     eax,[code_start]
-       call    store_elf_machine_word
-       mov     eax,[esp]
-       sub     eax,ebp
-       call    store_elf_machine_word
-       mov     eax,[current_section]
-       stos    dword [edi]
-       mov     eax,ecx
-       stos    dword [edi]
-       inc     ecx
-       test    [format_flags],8
-       jnz     finish_elf64_rela_section
-       mov     eax,4
-       stos    dword [edi]
-       mov     al,8
-       stos    dword [edi]
-       jmp     rel_section_ok
-      finish_elf64_rela_section:
-       mov     eax,8
-       stos    dword [edi]
-       xor     al,al
-       stos    dword [edi]
-       mov     al,24
-       stos    dword [edi]
-       xor     al,al
-       stos    dword [edi]
-      rel_section_ok:
-       cmp     esi,[free_additional_memory]
-       jne     make_section_entry
-       pop     eax
-       mov     ebx,[code_start]
-       sub     eax,ebx
-       mov     [code_size],eax
-       mov     ecx,20h
-       test    [format_flags],8
-       jz      adjust_elf_section_headers_offset
-       mov     ecx,28h
-      adjust_elf_section_headers_offset:
-       add     [ebx+ecx],eax
-       mov     eax,1
-       stos    dword [edi]
-       mov     al,2
-       stos    dword [edi]
-       xor     al,al
-       call    store_elf_machine_word
-       call    store_elf_machine_word
-       mov     eax,[code_size]
-       call    store_elf_machine_word
-       mov     eax,[edx+1]
-       sub     eax,[free_additional_memory]
-       call    store_elf_machine_word
-       mov     eax,[current_section]
-       inc     eax
-       stos    dword [edi]
-       mov     eax,[number_of_sections]
-       inc     eax
-       stos    dword [edi]
-       test    [format_flags],8
-       jnz     finish_elf64_sym_section
-       mov     eax,4
-       stos    dword [edi]
-       mov     al,10h
-       stos    dword [edi]
-       jmp     sym_section_ok
-      finish_elf64_sym_section:
-       mov     eax,8
-       stos    dword [edi]
-       xor     al,al
-       stos    dword [edi]
-       mov     al,18h
-       stos    dword [edi]
-       xor     al,al
-       stos    dword [edi]
-      sym_section_ok:
-       mov     al,1+8
-       stos    dword [edi]
-       mov     al,3
-       stos    dword [edi]
-       xor     al,al
-       call    store_elf_machine_word
-       call    store_elf_machine_word
-       mov     eax,[edx+1]
-       sub     eax,[free_additional_memory]
-       add     eax,[code_size]
-       call    store_elf_machine_word
-       mov     eax,[edx+1+8]
-       sub     eax,[edx+1]
-       call    store_elf_machine_word
-       xor     eax,eax
-       stos    dword [edi]
-       stos    dword [edi]
-       mov     al,1
-       call    store_elf_machine_word
-       xor     eax,eax
-       call    store_elf_machine_word
-       mov     eax,'tab'
-       mov     dword [edx+1],'.sym'
-       mov     [edx+1+4],eax
-       mov     dword [edx+1+8],'.str'
-       mov     [edx+1+8+4],eax
-       mov     [resource_data],edx
-       mov     [written_size],0
-       mov     edx,[output_file]
-       call    create
-       jc      write_failed
-       call    write_code
-       mov     ecx,edi
-       mov     edx,[free_additional_memory]
-       sub     ecx,edx
-       add     [written_size],ecx
-       call    write
-       jc      write_failed
-       jmp     output_written
-
-format_elf_exe:
-       add     esi,2
-       or      [format_flags],1
-       cmp     byte [esi],'('
-       jne     elf_exe_brand_ok
-       inc     esi
-       cmp     byte [esi],'.'
-       je      invalid_value
-       push    edx
-       call    get_byte_value
-       cmp     [value_type],0
-       jne     invalid_use_of_symbol
-       pop     edx
-       mov     [edx+7],al
-      elf_exe_brand_ok:
-       mov     [image_base],8048000h
-       cmp     byte [esi],80h
-       jne     elf_exe_base_ok
-       lods    word [esi]
-       cmp     ah,'('
-       jne     invalid_argument
-       cmp     byte [esi],'.'
-       je      invalid_value
-       push    edx
-       call    get_dword_value
-       cmp     [value_type],0
-       jne     invalid_use_of_symbol
-       mov     [image_base],eax
-       pop     edx
-      elf_exe_base_ok:
-       mov     byte [edx+2Ah],20h
-       mov     ebx,edi
-       mov     ecx,20h shr 2
-       cmp     [current_pass],0
-       je      init_elf_segments
-       imul    ecx,[number_of_sections]
-      init_elf_segments:
-       xor     eax,eax
-       rep     stos dword [edi]
-       and     [number_of_sections],0
-       mov     byte [ebx],1
-       mov     word [ebx+1Ch],1000h
-       mov     byte [ebx+18h],111b
-       mov     ebp,[image_base]
-       and     dword [ebx+4],0
-       mov     [ebx+8],ebp
-       mov     [ebx+0Ch],ebp
-       mov     eax,edi
-       sub     eax,[code_start]
-       add     eax,ebp
-       mov     [edx+18h],eax
-       and     [image_base_high],0
-      elf_exe_addressing_setup:
-       call    init_addressing_space
-       call    setup_elf_exe_labels_type
-       mov     eax,[code_start]
-       xor     edx,edx
-       xor     cl,cl
-       sub     eax,[image_base]
-       sbb     edx,[image_base_high]
-       sbb     cl,0
-       mov     [ebx],eax
-       mov     [ebx+4],edx
-       mov     [ebx+8],cl
-       mov     [symbols_stream],edi
-       jmp     format_defined
-      format_elf64_exe:
-       add     esi,2
-       or      [format_flags],1
-       cmp     byte [esi],'('
-       jne     elf64_exe_brand_ok
-       inc     esi
-       cmp     byte [esi],'.'
-       je      invalid_value
-       push    edx
-       call    get_byte_value
-       cmp     [value_type],0
-       jne     invalid_use_of_symbol
-       pop     edx
-       mov     [edx+7],al
-      elf64_exe_brand_ok:
-       mov     [image_base],400000h
-       and     [image_base_high],0
-       cmp     byte [esi],80h
-       jne     elf64_exe_base_ok
-       lods    word [esi]
-       cmp     ah,'('
-       jne     invalid_argument
-       cmp     byte [esi],'.'
-       je      invalid_value
-       push    edx
-       call    get_qword_value
-       cmp     [value_type],0
-       jne     invalid_use_of_symbol
-       mov     [image_base],eax
-       mov     [image_base_high],edx
-       pop     edx
-      elf64_exe_base_ok:
-       mov     byte [edx+36h],38h
-       mov     ebx,edi
-       mov     ecx,38h shr 2
-       cmp     [current_pass],0
-       je      init_elf64_segments
-       imul    ecx,[number_of_sections]
-      init_elf64_segments:
-       xor     eax,eax
-       rep     stos dword [edi]
-       and     [number_of_sections],0
-       mov     byte [ebx],1
-       mov     word [ebx+30h],1000h
-       mov     byte [ebx+4],111b
-       mov     ebp,[image_base]
-       mov     ecx,[image_base_high]
-       and     dword [ebx+8],0
-       mov     [ebx+10h],ebp
-       mov     [ebx+10h+4],ecx
-       mov     [ebx+18h],ebp
-       mov     [ebx+18h+4],ecx
-       mov     eax,edi
-       sub     eax,[code_start]
-       add     eax,ebp
-       adc     ecx,0
-       mov     [edx+18h],eax
-       mov     [edx+18h+4],ecx
-       jmp     elf_exe_addressing_setup
-      setup_elf_exe_labels_type:
-       mov     eax,[code_start]
-       cmp     byte [eax+10h],3
-       jne     elf_exe_labels_type_ok
-       mov     byte [ebx+9],2
-       test    [format_flags],8
-       jz      elf_exe_labels_type_ok
-       mov     byte [ebx+9],4
-      elf_exe_labels_type_ok:
-       ret
-elf_entry:
-       lods    byte [esi]
-       cmp     al,'('
-       jne     invalid_argument
-       cmp     byte [esi],'.'
-       je      invalid_value
-       test    [format_flags],8
-       jnz     elf64_entry
-       call    get_dword_value
-       mov     edx,[code_start]
-       mov     [edx+18h],eax
-       jmp     instruction_assembled
-      elf64_entry:
-       call    get_qword_value
-       mov     ebx,[code_start]
-       mov     [ebx+18h],eax
-       mov     [ebx+1Ch],edx
-       jmp     instruction_assembled
-elf_segment:
-       bt      [format_flags],0
-       jnc     illegal_instruction
-       test    [format_flags],8
-       jnz     elf64_segment
-       call    close_elf_segment
-       push    eax
-       call    create_addressing_space
-       call    setup_elf_exe_labels_type
-       mov     ebp,ebx
-       mov     ebx,[number_of_sections]
-       shl     ebx,5
-       add     ebx,[code_start]
-       add     ebx,34h
-       cmp     ebx,[symbols_stream]
-       jb      new_elf_segment
-       mov     ebx,[symbols_stream]
-       sub     ebx,20h
-       or      [next_pass_needed],-1
-      new_elf_segment:
-       mov     byte [ebx],1
-       and     dword [ebx+18h],0
-       mov     word [ebx+1Ch],1000h
-      elf_segment_flags:
-       cmp     byte [esi],1Eh
-       je      elf_segment_type
-       cmp     byte [esi],19h
-       jne     elf_segment_flags_ok
-       lods    word [esi]
-       sub     ah,28
-       jbe     invalid_argument
-       cmp     ah,1
-       je      mark_elf_segment_flag
-       cmp     ah,3
-       ja      invalid_argument
-       xor     ah,1
-       cmp     ah,2
-       je      mark_elf_segment_flag
-       inc     ah
-      mark_elf_segment_flag:
-       test    [ebx+18h],ah
-       jnz     setting_already_specified
-       or      [ebx+18h],ah
-       jmp     elf_segment_flags
-      elf_segment_type:
-       cmp     byte [ebx],1
-       jne     setting_already_specified
-       lods    word [esi]
-       mov     ecx,[number_of_sections]
-       jecxz   elf_segment_type_ok
-       mov     edx,[code_start]
-       add     edx,34h
-      scan_elf_segment_types:
-       cmp     edx,[symbols_stream]
-       jae     elf_segment_type_ok
-       cmp     [edx],ah
-       je      data_already_defined
-       add     edx,20h
-       loop    scan_elf_segment_types
-      elf_segment_type_ok:
-       mov     [ebx],ah
-       mov     word [ebx+1Ch],1
-       cmp     ah,50h
-       jb      elf_segment_flags
-       or      dword [ebx],6474E500h
-       jmp     elf_segment_flags
-      elf_segment_flags_ok:
-       pop     edx
-       cmp     byte [ebx],1
-       jne     no_elf_segment_merging
-       cmp     [merge_segment],0
-       jne     merge_elf_segment
-      no_elf_segment_merging:
-       mov     eax,edi
-       sub     eax,[code_start]
-       mov     [ebx+4],eax
-       and     eax,0FFFh
-       add     eax,edx
-       mov     [ebx+8],eax
-       mov     [ebx+0Ch],eax
-       xor     edx,edx
-      elf_segment_addressing_setup:
-       xor     cl,cl
-       not     eax
-       not     edx
-       not     cl
-       add     eax,1
-       adc     edx,0
-       adc     cl,0
-       add     eax,edi
-       adc     edx,0
-       adc     cl,0
-       mov     [ds:ebp],eax
-       mov     [ds:ebp+4],edx
-       mov     [ds:ebp+8],cl
-       inc     [number_of_sections]
-       jmp     instruction_assembled
-      merge_elf_segment:
-       xor     ecx,ecx
-       xchg    ecx,[merge_segment]
-       cmp     ecx,-1
-       je      merge_elf_header
-       mov     eax,[ecx+8]
-       mov     ecx,[ecx+4]
-      elf_segment_separated_base:
-       mov     [ebx+8],eax
-       mov     [ebx+0Ch],eax
-       mov     [ebx+4],ecx
-       sub     eax,ecx
-       add     eax,edi
-       sub     eax,[code_start]
-       xor     edx,edx
-       jmp     elf_segment_addressing_setup
-      merge_elf_header:
-       mov     eax,[image_base]
-       xor     ecx,ecx
-       jmp     elf_segment_separated_base
-      close_elf_segment:
-       cmp     [number_of_sections],0
-       jne     finish_elf_segment
-       cmp     edi,[symbols_stream]
-       jne     first_elf_segment_ok
-       or      [merge_segment],-1
-       mov     eax,[image_base]
-       ret
-      first_elf_segment_ok:
-       and     [merge_segment],0
-       inc     [number_of_sections]
-      finish_elf_segment:
-       mov     ebx,[number_of_sections]
-       dec     ebx
-       shl     ebx,5
-       add     ebx,[code_start]
-       add     ebx,34h
-       mov     eax,edi
-       sub     eax,[code_start]
-       sub     eax,[ebx+4]
-       mov     edx,edi
-       cmp     edi,[undefined_data_end]
-       jne     elf_segment_size_ok
-       cmp     byte [ebx],1
-       jne     elf_segment_size_ok
-       mov     edi,[undefined_data_start]
-      elf_segment_size_ok:
-       mov     [ebx+14h],eax
-       add     eax,edi
-       sub     eax,edx
-       mov     [ebx+10h],eax
-       and     [undefined_data_end],0
-       mov     eax,[ebx+8]
-       cmp     byte [ebx],1
-       je      elf_segment_position_move_and_align
-       cmp     [merge_segment],0
-       jne     elf_segment_position_move
-       cmp     byte [ebx],4
-       je      elf_segment_position_ok
-       cmp     byte [ebx],51h
-       je      elf_segment_position_ok
-       mov     [merge_segment],ebx
-      elf_segment_position_move:
-       add     eax,[ebx+14h]
-       jmp     elf_segment_position_ok
-      elf_segment_position_move_and_align:
-       add     eax,[ebx+14h]
-       add     eax,0FFFh
-      elf_segment_position_ok:
-       and     eax,not 0FFFh
-       ret
-      elf64_segment:
-       call    close_elf64_segment
-       push    eax edx
-       call    create_addressing_space
-       call    setup_elf_exe_labels_type
-       mov     ebp,ebx
-       mov     ebx,[number_of_sections]
-       imul    ebx,38h
-       add     ebx,[code_start]
-       add     ebx,40h
-       cmp     ebx,[symbols_stream]
-       jb      new_elf64_segment
-       or      [next_pass_needed],-1
-      new_elf64_segment:
-       mov     byte [ebx],1
-       and     dword [ebx+4],0
-       mov     word [ebx+30h],1000h
-      elf64_segment_flags:
-       cmp     byte [esi],1Eh
-       je      elf64_segment_type
-       cmp     byte [esi],19h
-       jne     elf64_segment_flags_ok
-       lods    word [esi]
-       sub     ah,28
-       jbe     invalid_argument
-       cmp     ah,1
-       je      mark_elf64_segment_flag
-       cmp     ah,3
-       ja      invalid_argument
-       xor     ah,1
-       cmp     ah,2
-       je      mark_elf64_segment_flag
-       inc     ah
-      mark_elf64_segment_flag:
-       test    [ebx+4],ah
-       jnz     setting_already_specified
-       or      [ebx+4],ah
-       jmp     elf64_segment_flags
-      elf64_segment_type:
-       cmp     byte [ebx],1
-       jne     setting_already_specified
-       lods    word [esi]
-       mov     ecx,[number_of_sections]
-       jecxz   elf64_segment_type_ok
-       mov     edx,[code_start]
-       add     edx,40h
-      scan_elf64_segment_types:
-       cmp     edx,[symbols_stream]
-       jae     elf64_segment_type_ok
-       cmp     [edx],ah
-       je      data_already_defined
-       add     edx,38h
-       loop    scan_elf64_segment_types
-      elf64_segment_type_ok:
-       mov     [ebx],ah
-       mov     word [ebx+30h],1
-       cmp     ah,50h
-       jb      elf64_segment_flags
-       or      dword [ebx],6474E500h
-       jmp     elf64_segment_flags
-      elf64_segment_flags_ok:
-       pop     edx eax
-       cmp     byte [ebx],1
-       jne     no_elf64_segment_merging
-       cmp     [merge_segment],0
-       jne     merge_elf64_segment
-      no_elf64_segment_merging:
-       mov     ecx,edi
-       sub     ecx,[code_start]
-       mov     [ebx+8],ecx
-       and     ecx,0FFFh
-       add     eax,ecx
-       adc     edx,0
-       mov     [ebx+10h],eax
-       mov     [ebx+10h+4],edx
-       mov     [ebx+18h],eax
-       mov     [ebx+18h+4],edx
-       jmp     elf_segment_addressing_setup
-      merge_elf64_segment:
-       xor     ecx,ecx
-       xchg    ecx,[merge_segment]
-       cmp     ecx,-1
-       je      merge_elf64_header
-       mov     eax,[ecx+10h]
-       mov     edx,[ecx+10h+4]
-       mov     ecx,[ecx+8]
-      elf64_segment_separated_base:
-       mov     [ebx+10h],eax
-       mov     [ebx+10h+4],edx
-       mov     [ebx+18h],eax
-       mov     [ebx+18h+4],edx
-       mov     [ebx+8],ecx
-       neg     ecx
-       add     ecx,edi
-       sub     ecx,[code_start]
-       add     eax,ecx
-       adc     edx,0
-       jmp     elf_segment_addressing_setup
-      merge_elf64_header:
-       mov     eax,[image_base]
-       mov     edx,[image_base_high]
-       xor     ecx,ecx
-       jmp     elf64_segment_separated_base
-      close_elf64_segment:
-       cmp     [number_of_sections],0
-       jne     finish_elf64_segment
-       cmp     edi,[symbols_stream]
-       jne     first_elf64_segment_ok
-       or      [merge_segment],-1
-       mov     eax,[image_base]
-       mov     edx,[image_base_high]
-       ret
-      first_elf64_segment_ok:
-       and     [merge_segment],0
-       inc     [number_of_sections]
-      finish_elf64_segment:
-       mov     ebx,[number_of_sections]
-       dec     ebx
-       imul    ebx,38h
-       add     ebx,[code_start]
-       add     ebx,40h
-       mov     eax,edi
-       sub     eax,[code_start]
-       sub     eax,[ebx+8]
-       mov     edx,edi
-       cmp     edi,[undefined_data_end]
-       jne     elf64_segment_size_ok
-       cmp     byte [ebx],1
-       jne     elf64_segment_size_ok
-       mov     edi,[undefined_data_start]
-      elf64_segment_size_ok:
-       mov     [ebx+28h],eax
-       add     eax,edi
-       sub     eax,edx
-       mov     [ebx+20h],eax
-       and     [undefined_data_end],0
-       mov     eax,[ebx+10h]
-       mov     edx,[ebx+10h+4]
-       cmp     byte [ebx],1
-       je      elf64_segment_position_move_and_align
-       cmp     [merge_segment],0
-       jne     elf64_segment_position_move
-       cmp     byte [ebx],4
-       je      elf64_segment_position_ok
-       cmp     byte [ebx],51h
-       je      elf64_segment_position_ok
-       mov     [merge_segment],ebx
-      elf64_segment_position_move:
-       add     eax,[ebx+28h]
-       adc     edx,0
-       jmp     elf64_segment_position_ok
-      elf64_segment_position_move_and_align:
-       add     eax,[ebx+28h]
-       adc     edx,0
-       add     eax,0FFFh
-       adc     edx,0
-      elf64_segment_position_ok:
-       and     eax,not 0FFFh
-       ret
-close_elf_exe:
-       test    [format_flags],8
-       jnz     close_elf64_exe
-       call    close_elf_segment
-       mov     edx,[code_start]
-       mov     eax,[number_of_sections]
-       mov     byte [edx+1Ch],34h
-       mov     [edx+2Ch],ax
-       shl     eax,5
-       add     eax,edx
-       add     eax,34h
-       cmp     eax,[symbols_stream]
-       je      elf_exe_ok
-       or      [next_pass_needed],-1
-      elf_exe_ok:
-       ret
-      close_elf64_exe:
-       call    close_elf64_segment
-       mov     edx,[code_start]
-       mov     eax,[number_of_sections]
-       mov     byte [edx+20h],40h
-       mov     [edx+38h],ax
-       imul    eax,38h
-       add     eax,edx
-       add     eax,40h
-       cmp     eax,[symbols_stream]
-       je      elf64_exe_ok
-       or      [next_pass_needed],-1
-      elf64_exe_ok:
-       ret
diff --git a/source/messages.inc b/source/messages.inc
deleted file mode 100644 (file)
index 2180421..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-
-; flat assembler core
-; Copyright (c) 1999-2022, Tomasz Grysztar.
-; All rights reserved.
-
-_out_of_memory db 'out of memory',0
-_stack_overflow db 'out of stack space',0
-_main_file_not_found db 'source file not found',0
-_code_cannot_be_generated db 'code cannot be generated',0
-_format_limitations_exceeded db 'format limitations exceeded',0
-_invalid_definition db 'invalid definition provided',0
-_write_failed db 'write failed',0
-_file_not_found db 'file not found',0
-_error_reading_file db 'error reading file',0
-_invalid_file_format db 'invalid file format',0
-_invalid_macro_arguments db 'invalid macro arguments',0
-_incomplete_macro db 'incomplete macro',0
-_unexpected_characters db 'unexpected characters',0
-_invalid_argument db 'invalid argument',0
-_illegal_instruction db 'illegal instruction',0
-_invalid_operand db 'invalid operand',0
-_invalid_operand_size db 'invalid size of operand',0
-_operand_size_not_specified db 'operand size not specified',0
-_operand_sizes_do_not_match db 'operand sizes do not match',0
-_invalid_address_size db 'invalid size of address value',0
-_address_sizes_do_not_agree db 'address sizes do not agree',0
-_disallowed_combination_of_registers db 'disallowed combination of registers',0
-_long_immediate_not_encodable db 'not encodable with long immediate',0
-_relative_jump_out_of_range db 'relative jump out of range',0
-_invalid_expression db 'invalid expression',0
-_invalid_address db 'invalid address',0
-_invalid_value db 'invalid value',0
-_value_out_of_range db 'value out of range',0
-_undefined_symbol db 'undefined symbol',0
-_symbol_out_of_scope_1 db 'symbol',0
-_symbol_out_of_scope_2 db 'out of scope',0
-_invalid_use_of_symbol db 'invalid use of symbol',0
-_name_too_long db 'name too long',0
-_invalid_name db 'invalid name',0
-_reserved_word_used_as_symbol db 'reserved word used as symbol',0
-_symbol_already_defined db 'symbol already defined',0
-_missing_end_quote db 'missing end quote',0
-_missing_end_directive db 'missing end directive',0
-_unexpected_instruction db 'unexpected instruction',0
-_extra_characters_on_line db 'extra characters on line',0
-_section_not_aligned_enough db 'section is not aligned enough',0
-_setting_already_specified db 'setting already specified',0
-_data_already_defined db 'data already defined',0
-_too_many_repeats db 'too many repeats',0
-_invoked_error db 'error directive encountered in source file',0
-_assertion_failed db 'assertion failed',0
diff --git a/source/parser.inc b/source/parser.inc
deleted file mode 100644 (file)
index a4b66b0..0000000
+++ /dev/null
@@ -1,1470 +0,0 @@
-
-; flat assembler core
-; Copyright (c) 1999-2022, Tomasz Grysztar.
-; All rights reserved.
-
-parser:
-       mov     eax,[memory_end]
-       mov     [labels_list],eax
-       mov     eax,[additional_memory]
-       mov     [free_additional_memory],eax
-       xor     eax,eax
-       mov     [current_locals_prefix],eax
-       mov     [anonymous_reverse],eax
-       mov     [anonymous_forward],eax
-       mov     [hash_tree],eax
-       mov     [blocks_stack],eax
-       mov     [parsed_lines],eax
-       mov     esi,[memory_start]
-       mov     edi,[source_start]
-      parser_loop:
-       mov     [current_line],esi
-       lea     eax,[edi+100h]
-       cmp     eax,[labels_list]
-       jae     out_of_memory
-       cmp     byte [esi+16],0
-       je      empty_line
-       cmp     byte [esi+16],3Bh
-       je      empty_line
-       mov     al,0Fh
-       stos    byte [edi]
-       mov     eax,esi
-       stos    dword [edi]
-       inc     [parsed_lines]
-       add     esi,16
-      parse_line:
-       mov     [formatter_symbols_allowed],0
-       mov     [decorator_symbols_allowed],0
-       cmp     byte [esi],1Ah
-       jne     empty_instruction
-       push    edi
-       add     esi,2
-       movzx   ecx,byte [esi-1]
-       cmp     byte [esi+ecx],':'
-       je      simple_label
-       cmp     byte [esi+ecx],'='
-       je      constant_label
-       call    get_instruction
-       jnc     main_instruction_identified
-       cmp     byte [esi+ecx],1Ah
-       jne     no_data_label
-       push    esi ecx
-       lea     esi,[esi+ecx+2]
-       movzx   ecx,byte [esi-1]
-       call    get_data_directive
-       jnc     data_label
-       pop     ecx esi
-      no_data_label:
-       call    get_data_directive
-       jnc     main_instruction_identified
-       pop     edi
-       sub     esi,2
-       xor     bx,bx
-       call    parse_line_contents
-       jmp     parse_next_line
-      simple_label:
-       pop     edi
-       call    identify_label
-       cmp     byte [esi+1],':'
-       je      block_label
-       mov     byte [edi],2
-       inc     edi
-       stos    dword [edi]
-       inc     esi
-       xor     al,al
-       stos    byte [edi]
-       jmp     parse_line
-      block_label:
-       mov     byte [edi],4
-       inc     edi
-       stos    dword [edi]
-       add     esi,2
-       jmp     parse_line
-      constant_label:
-       pop     edi
-       call    get_label_id
-       mov     byte [edi],3
-       inc     edi
-       stos    dword [edi]
-       xor     al,al
-       stos    byte [edi]
-       inc     esi
-       xor     bx,bx
-       call    parse_line_contents
-       jmp     parse_next_line
-      data_label:
-       pop     ecx edx
-       pop     edi
-       push    eax ebx esi
-       mov     esi,edx
-       movzx   ecx,byte [esi-1]
-       call    identify_label
-       mov     byte [edi],2
-       inc     edi
-       stos    dword [edi]
-       pop     esi ebx eax
-       stos    byte [edi]
-       push    edi
-      main_instruction_identified:
-       pop     edi
-       mov     dl,al
-       mov     al,1
-       stos    byte [edi]
-       mov     ax,bx
-       stos    word [edi]
-       mov     al,dl
-       stos    byte [edi]
-       cmp     bx,if_directive-instruction_handler
-       je      parse_block
-       cmp     bx,repeat_directive-instruction_handler
-       je      parse_block
-       cmp     bx,while_directive-instruction_handler
-       je      parse_block
-       cmp     bx,end_directive-instruction_handler
-       je      parse_end_directive
-       cmp     bx,else_directive-instruction_handler
-       je      parse_else
-       cmp     bx,assert_directive-instruction_handler
-       je      parse_assert
-      common_parse:
-       call    parse_line_contents
-       jmp     parse_next_line
-      empty_instruction:
-       lods    byte [esi]
-       or      al,al
-       jz      parse_next_line
-       cmp     al,':'
-       je      invalid_name
-       dec     esi
-       mov     [parenthesis_stack],0
-       call    parse_argument
-       jmp     parse_next_line
-      empty_line:
-       add     esi,16
-      skip_rest_of_line:
-       call    skip_foreign_line
-      parse_next_line:
-       cmp     esi,[source_start]
-       jb      parser_loop
-      source_parsed:
-       cmp     [blocks_stack],0
-       je      blocks_stack_ok
-       pop     eax
-       pop     [current_line]
-       jmp     missing_end_directive
-      blocks_stack_ok:
-       xor     al,al
-       stos    byte [edi]
-       add     edi,0Fh
-       and     edi,not 0Fh
-       mov     [code_start],edi
-       ret
-      parse_block:
-       mov     eax,esp
-       sub     eax,[stack_limit]
-       cmp     eax,100h
-       jb      stack_overflow
-       push    [current_line]
-       mov     ax,bx
-       shl     eax,16
-       push    eax
-       inc     [blocks_stack]
-       cmp     bx,if_directive-instruction_handler
-       je      parse_if
-       cmp     bx,while_directive-instruction_handler
-       je      parse_while
-       call    parse_line_contents
-       jmp     parse_next_line
-      parse_end_directive:
-       cmp     byte [esi],1Ah
-       jne     common_parse
-       push    edi
-       inc     esi
-       movzx   ecx,byte [esi]
-       inc     esi
-       call    get_instruction
-       pop     edi
-       jnc     parse_end_block
-       sub     esi,2
-       jmp     common_parse
-      parse_end_block:
-       mov     dl,al
-       mov     al,1
-       stos    byte [edi]
-       mov     ax,bx
-       stos    word [edi]
-       mov     al,dl
-       stos    byte [edi]
-       lods    byte [esi]
-       or      al,al
-       jnz     extra_characters_on_line
-       cmp     bx,if_directive-instruction_handler
-       je      close_parsing_block
-       cmp     bx,repeat_directive-instruction_handler
-       je      close_parsing_block
-       cmp     bx,while_directive-instruction_handler
-       je      close_parsing_block
-       jmp     parse_next_line
-      close_parsing_block:
-       cmp     [blocks_stack],0
-       je      unexpected_instruction
-       cmp     bx,[esp+2]
-       jne     unexpected_instruction
-       dec     [blocks_stack]
-       pop     eax edx
-       cmp     bx,if_directive-instruction_handler
-       jne     parse_next_line
-       test    al,1100b
-       jz      parse_next_line
-       test    al,10000b
-       jnz     parse_next_line
-       sub     edi,8
-       jmp     parse_next_line
-      parse_if:
-       push    edi
-       call    parse_line_contents
-       xor     al,al
-       stos    byte [edi]
-       xchg    esi,[esp]
-       mov     edi,esi
-       call    preevaluate_logical_expression
-       pop     esi
-       cmp     al,'0'
-       je      parse_false_condition_block
-       cmp     al,'1'
-       je      parse_true_condition_block
-       or      byte [esp],10000b
-       jmp     parse_next_line
-      parse_while:
-       push    edi
-       call    parse_line_contents
-       xor     al,al
-       stos    byte [edi]
-       xchg    esi,[esp]
-       mov     edi,esi
-       call    preevaluate_logical_expression
-       pop     esi
-       cmp     al,'0'
-       je      parse_false_condition_block
-       cmp     al,'1'
-       jne     parse_next_line
-       stos    byte [edi]
-       jmp     parse_next_line
-      parse_false_condition_block:
-       or      byte [esp],1
-       sub     edi,4
-       jmp     skip_parsing
-      parse_true_condition_block:
-       or      byte [esp],100b
-       sub     edi,4
-       jmp     parse_next_line
-      parse_else:
-       cmp     [blocks_stack],0
-       je      unexpected_instruction
-       cmp     word [esp+2],if_directive-instruction_handler
-       jne     unexpected_instruction
-       lods    byte [esi]
-       or      al,al
-       jz      parse_pure_else
-       cmp     al,1Ah
-       jne     extra_characters_on_line
-       push    edi
-       movzx   ecx,byte [esi]
-       inc     esi
-       call    get_instruction
-       jc      extra_characters_on_line
-       pop     edi
-       cmp     bx,if_directive-instruction_handler
-       jne     extra_characters_on_line
-       test    byte [esp],100b
-       jnz     skip_true_condition_else
-       mov     dl,al
-       mov     al,1
-       stos    byte [edi]
-       mov     ax,bx
-       stos    word [edi]
-       mov     al,dl
-       stos    byte [edi]
-       jmp     parse_if
-      parse_assert:
-       push    edi
-       call    parse_line_contents
-       xor     al,al
-       stos    byte [edi]
-       xchg    esi,[esp]
-       mov     edi,esi
-       call    preevaluate_logical_expression
-       pop     esi
-       or      al,al
-       jz      parse_next_line
-       stos    byte [edi]
-       jmp     parse_next_line
-      skip_true_condition_else:
-       sub     edi,4
-       or      byte [esp],1
-       jmp     skip_parsing_contents
-      parse_pure_else:
-       bts     dword [esp],1
-       jc      unexpected_instruction
-       test    byte [esp],100b
-       jz      parse_next_line
-       sub     edi,4
-       or      byte [esp],1
-       jmp     skip_parsing
-      skip_parsing:
-       cmp     esi,[source_start]
-       jae     source_parsed
-       mov     [current_line],esi
-       add     esi,16
-      skip_parsing_line:
-       cmp     byte [esi],1Ah
-       jne     skip_parsing_contents
-       inc     esi
-       movzx   ecx,byte [esi]
-       inc     esi
-       cmp     byte [esi+ecx],':'
-       je      skip_parsing_label
-       push    edi
-       call    get_instruction
-       pop     edi
-       jnc     skip_parsing_instruction
-       add     esi,ecx
-       jmp     skip_parsing_contents
-      skip_parsing_label:
-       lea     esi,[esi+ecx+1]
-       jmp     skip_parsing_line
-      skip_parsing_instruction:
-       cmp     bx,if_directive-instruction_handler
-       je      skip_parsing_block
-       cmp     bx,repeat_directive-instruction_handler
-       je      skip_parsing_block
-       cmp     bx,while_directive-instruction_handler
-       je      skip_parsing_block
-       cmp     bx,end_directive-instruction_handler
-       je      skip_parsing_end_directive
-       cmp     bx,else_directive-instruction_handler
-       je      skip_parsing_else
-      skip_parsing_contents:
-       lods    byte [esi]
-       or      al,al
-       jz      skip_parsing
-       cmp     al,1Ah
-       je      skip_parsing_symbol
-       cmp     al,3Bh
-       je      skip_parsing_symbol
-       cmp     al,22h
-       je      skip_parsing_string
-       jmp     skip_parsing_contents
-      skip_parsing_symbol:
-       lods    byte [esi]
-       movzx   eax,al
-       add     esi,eax
-       jmp     skip_parsing_contents
-      skip_parsing_string:
-       lods    dword [esi]
-       add     esi,eax
-       jmp     skip_parsing_contents
-      skip_parsing_block:
-       mov     eax,esp
-       sub     eax,[stack_limit]
-       cmp     eax,100h
-       jb      stack_overflow
-       push    [current_line]
-       mov     ax,bx
-       shl     eax,16
-       push    eax
-       inc     [blocks_stack]
-       jmp     skip_parsing_contents
-      skip_parsing_end_directive:
-       cmp     byte [esi],1Ah
-       jne     skip_parsing_contents
-       push    edi
-       inc     esi
-       movzx   ecx,byte [esi]
-       inc     esi
-       call    get_instruction
-       pop     edi
-       jnc     skip_parsing_end_block
-       add     esi,ecx
-       jmp     skip_parsing_contents
-      skip_parsing_end_block:
-       lods    byte [esi]
-       or      al,al
-       jnz     extra_characters_on_line
-       cmp     bx,if_directive-instruction_handler
-       je      close_skip_parsing_block
-       cmp     bx,repeat_directive-instruction_handler
-       je      close_skip_parsing_block
-       cmp     bx,while_directive-instruction_handler
-       je      close_skip_parsing_block
-       jmp     skip_parsing
-      close_skip_parsing_block:
-       cmp     [blocks_stack],0
-       je      unexpected_instruction
-       cmp     bx,[esp+2]
-       jne     unexpected_instruction
-       dec     [blocks_stack]
-       pop     eax edx
-       test    al,1
-       jz      skip_parsing
-       cmp     bx,if_directive-instruction_handler
-       jne     parse_next_line
-       test    al,10000b
-       jz      parse_next_line
-       mov     al,0Fh
-       stos    byte [edi]
-       mov     eax,[current_line]
-       stos    dword [edi]
-       inc     [parsed_lines]
-       mov     eax,1 + (end_directive-instruction_handler) shl 8
-       stos    dword [edi]
-       mov     eax,1 + (if_directive-instruction_handler) shl 8
-       stos    dword [edi]
-       jmp     parse_next_line
-      skip_parsing_else:
-       cmp     [blocks_stack],0
-       je      unexpected_instruction
-       cmp     word [esp+2],if_directive-instruction_handler
-       jne     unexpected_instruction
-       lods    byte [esi]
-       or      al,al
-       jz      skip_parsing_pure_else
-       cmp     al,1Ah
-       jne     extra_characters_on_line
-       push    edi
-       movzx   ecx,byte [esi]
-       inc     esi
-       call    get_instruction
-       jc      extra_characters_on_line
-       pop     edi
-       cmp     bx,if_directive-instruction_handler
-       jne     extra_characters_on_line
-       mov     al,[esp]
-       test    al,1
-       jz      skip_parsing_contents
-       test    al,100b
-       jnz     skip_parsing_contents
-       test    al,10000b
-       jnz     parse_else_if
-       xor     al,al
-       mov     [esp],al
-       mov     al,0Fh
-       stos    byte [edi]
-       mov     eax,[current_line]
-       stos    dword [edi]
-       inc     [parsed_lines]
-      parse_else_if:
-       mov     eax,1 + (if_directive-instruction_handler) shl 8
-       stos    dword [edi]
-       jmp     parse_if
-      skip_parsing_pure_else:
-       bts     dword [esp],1
-       jc      unexpected_instruction
-       mov     al,[esp]
-       test    al,1
-       jz      skip_parsing
-       test    al,100b
-       jnz     skip_parsing
-       and     al,not 1
-       or      al,1000b
-       mov     [esp],al
-       jmp     parse_next_line
-
-parse_line_contents:
-       mov     [parenthesis_stack],0
-      parse_instruction_arguments:
-       cmp     bx,prefix_instruction-instruction_handler
-       je      allow_embedded_instruction
-       cmp     bx,times_directive-instruction_handler
-       je      parse_times_directive
-       cmp     bx,end_directive-instruction_handler
-       je      allow_embedded_instruction
-       cmp     bx,label_directive-instruction_handler
-       je      parse_label_directive
-       cmp     bx,segment_directive-instruction_handler
-       je      parse_segment_directive
-       cmp     bx,load_directive-instruction_handler
-       je      parse_load_directive
-       cmp     bx,extrn_directive-instruction_handler
-       je      parse_extrn_directive
-       cmp     bx,public_directive-instruction_handler
-       je      parse_public_directive
-       cmp     bx,section_directive-instruction_handler
-       je      parse_formatter_argument
-       cmp     bx,format_directive-instruction_handler
-       je      parse_formatter_argument
-       cmp     bx,data_directive-instruction_handler
-       je      parse_formatter_argument
-       jmp     parse_argument
-      parse_formatter_argument:
-       or      [formatter_symbols_allowed],-1
-      parse_argument:
-       lea     eax,[edi+100h]
-       cmp     eax,[labels_list]
-       jae     out_of_memory
-       lods    byte [esi]
-       cmp     al,':'
-       je      instruction_separator
-       cmp     al,','
-       je      separator
-       cmp     al,'='
-       je      expression_comparator
-       cmp     al,'|'
-       je      separator
-       cmp     al,'&'
-       je      separator
-       cmp     al,'~'
-       je      separator
-       cmp     al,'>'
-       je      greater
-       cmp     al,'<'
-       je      less
-       cmp     al,')'
-       je      close_parenthesis
-       or      al,al
-       jz      contents_parsed
-       cmp     al,'['
-       je      address_argument
-       cmp     al,']'
-       je      separator
-       cmp     al,'{'
-       je      open_decorator
-       cmp     al,'}'
-       je      close_decorator
-       cmp     al,'#'
-       je      unallowed_character
-       cmp     al,'`'
-       je      unallowed_character
-       cmp     al,3Bh
-       je      foreign_argument
-       cmp     [decorator_symbols_allowed],0
-       je      not_a_separator
-       cmp     al,'-'
-       je      separator
-      not_a_separator:
-       dec     esi
-       cmp     al,1Ah
-       jne     expression_argument
-       push    edi
-       mov     edi,directive_operators
-       call    get_operator
-       or      al,al
-       jnz     operator_argument
-       inc     esi
-       movzx   ecx,byte [esi]
-       inc     esi
-       call    get_symbol
-       jnc     symbol_argument
-       cmp     ecx,1
-       jne     check_argument
-       cmp     byte [esi],'?'
-       jne     check_argument
-       pop     edi
-       movs    byte [edi],[esi]
-       jmp     argument_parsed
-      foreign_argument:
-       dec     esi
-       call    skip_foreign_line
-       jmp     contents_parsed
-      symbol_argument:
-       pop     edi
-       stos    word [edi]
-       cmp     byte [esi],'+'
-       jne     argument_parsed
-       and     ax,0F0FFh
-       cmp     ax,6010h
-       jne     argument_parsed
-       movs    byte [edi],[esi]
-       jmp     argument_parsed
-      operator_argument:
-       pop     edi
-       cmp     al,85h
-       je      ptr_argument
-       stos    byte [edi]
-       cmp     al,8Ch
-       je      forced_expression
-       cmp     al,81h
-       je      forced_parenthesis
-       cmp     al,80h
-       je      parse_at_operator
-       cmp     al,82h
-       je      parse_from_operator
-       cmp     al,89h
-       je      parse_label_operator
-       cmp     al,0F8h
-       je      forced_expression
-       jmp     argument_parsed
-      instruction_separator:
-       stos    byte [edi]
-      allow_embedded_instruction:
-       cmp     byte [esi],1Ah
-       jne     parse_argument
-       push    edi
-       inc     esi
-       movzx   ecx,byte [esi]
-       inc     esi
-       call    get_instruction
-       jnc     embedded_instruction
-       call    get_data_directive
-       jnc     embedded_instruction
-       pop     edi
-       sub     esi,2
-       jmp     parse_argument
-      embedded_instruction:
-       pop     edi
-       mov     dl,al
-       mov     al,1
-       stos    byte [edi]
-       mov     ax,bx
-       stos    word [edi]
-       mov     al,dl
-       stos    byte [edi]
-       jmp     parse_instruction_arguments
-      parse_times_directive:
-       mov     al,'('
-       stos    byte [edi]
-       call    convert_expression
-       mov     al,')'
-       stos    byte [edi]
-       cmp     byte [esi],':'
-       jne     allow_embedded_instruction
-       movs    byte [edi],[esi]
-       jmp     allow_embedded_instruction
-      parse_segment_directive:
-       or      [formatter_symbols_allowed],-1
-      parse_label_directive:
-       cmp     byte [esi],1Ah
-       jne     argument_parsed
-       push    esi
-       inc     esi
-       movzx   ecx,byte [esi]
-       inc     esi
-       call    identify_label
-       pop     ebx
-       cmp     eax,0Fh
-       je      non_label_identified
-       mov     byte [edi],2
-       inc     edi
-       stos    dword [edi]
-       xor     al,al
-       stos    byte [edi]
-       jmp     argument_parsed
-      non_label_identified:
-       mov     esi,ebx
-       jmp     argument_parsed
-      parse_load_directive:
-       cmp     byte [esi],1Ah
-       jne     argument_parsed
-       push    esi
-       inc     esi
-       movzx   ecx,byte [esi]
-       inc     esi
-       call    get_label_id
-       pop     ebx
-       cmp     eax,0Fh
-       je      non_label_identified
-       mov     byte [edi],2
-       inc     edi
-       stos    dword [edi]
-       xor     al,al
-       stos    byte [edi]
-       jmp     argument_parsed
-      parse_public_directive:
-       cmp     byte [esi],1Ah
-       jne     parse_argument
-       inc     esi
-       push    esi
-       movzx   ecx,byte [esi]
-       inc     esi
-       push    esi ecx
-       push    edi
-       or      [formatter_symbols_allowed],-1
-       call    get_symbol
-       mov     [formatter_symbols_allowed],0
-       pop     edi
-       jc      parse_public_label
-       cmp     al,1Dh
-       jne     parse_public_label
-       add     esp,12
-       stos    word [edi]
-       jmp     parse_public_directive
-      parse_public_label:
-       pop     ecx esi
-       mov     al,2
-       stos    byte [edi]
-       call    get_label_id
-       stos    dword [edi]
-       mov     ax,8600h
-       stos    word [edi]
-       pop     ebx
-       push    ebx esi edi
-       mov     edi,directive_operators
-       call    get_operator
-       pop     edi edx ebx
-       cmp     al,86h
-       je      argument_parsed
-       mov     esi,edx
-       xchg    esi,ebx
-       movzx   ecx,byte [esi]
-       inc     esi
-       mov     ax,'('
-       stos    word [edi]
-       mov     eax,ecx
-       stos    dword [edi]
-       rep     movs byte [edi],[esi]
-       xor     al,al
-       stos    byte [edi]
-       xchg    esi,ebx
-       jmp     argument_parsed
-      parse_extrn_directive:
-       cmp     byte [esi],22h
-       je      parse_quoted_extrn
-       cmp     byte [esi],1Ah
-       jne     parse_argument
-       push    esi
-       movzx   ecx,byte [esi+1]
-       add     esi,2
-       mov     ax,'('
-       stos    word [edi]
-       mov     eax,ecx
-       stos    dword [edi]
-       rep     movs byte [edi],[esi]
-       mov     ax,8600h
-       stos    word [edi]
-       pop     esi
-      parse_label_operator:
-       cmp     byte [esi],1Ah
-       jne     argument_parsed
-       inc     esi
-       movzx   ecx,byte [esi]
-       inc     esi
-       mov     al,2
-       stos    byte [edi]
-       call    get_label_id
-       stos    dword [edi]
-       xor     al,al
-       stos    byte [edi]
-       jmp     argument_parsed
-      parse_from_operator:
-       cmp     byte [esi],22h
-       je      argument_parsed
-      parse_at_operator:
-       cmp     byte [esi],':'
-       je      argument_parsed
-       jmp     forced_multipart_expression
-      parse_quoted_extrn:
-       inc     esi
-       mov     ax,'('
-       stos    word [edi]
-       lods    dword [esi]
-       mov     ecx,eax
-       stos    dword [edi]
-       rep     movs byte [edi],[esi]
-       xor     al,al
-       stos    byte [edi]
-       push    esi edi
-       mov     edi,directive_operators
-       call    get_operator
-       mov     edx,esi
-       pop     edi esi
-       cmp     al,86h
-       jne     argument_parsed
-       stos    byte [edi]
-       mov     esi,edx
-       jmp     parse_label_operator
-      ptr_argument:
-       call    parse_address
-       jmp     address_parsed
-      check_argument:
-       push    esi ecx
-       sub     esi,2
-       mov     edi,single_operand_operators
-       call    get_operator
-       pop     ecx esi
-       or      al,al
-       jnz     not_instruction
-       call    get_instruction
-       jnc     embedded_instruction
-       call    get_data_directive
-       jnc     embedded_instruction
-      not_instruction:
-       pop     edi
-       sub     esi,2
-      expression_argument:
-       cmp     byte [esi],22h
-       jne     not_string
-       mov     eax,[esi+1]
-       lea     ebx,[esi+5+eax]
-       push    ebx ecx esi edi
-       call    parse_expression
-       pop     eax edx ecx ebx
-       cmp     esi,ebx
-       jne     expression_argument_parsed
-       mov     edi,eax
-       mov     esi,edx
-      string_argument:
-       inc     esi
-       mov     ax,'('
-       stos    word [edi]
-       lods    dword [esi]
-       mov     ecx,eax
-       stos    dword [edi]
-       shr     ecx,1
-       jnc     string_movsb_ok
-       movs    byte [edi],[esi]
-      string_movsb_ok:
-       shr     ecx,1
-       jnc     string_movsw_ok
-       movs    word [edi],[esi]
-      string_movsw_ok:
-       rep     movs dword [edi],[esi]
-       xor     al,al
-       stos    byte [edi]
-       jmp     expression_argument_parsed
-      parse_expression:
-       mov     al,'('
-       stos    byte [edi]
-       call    convert_expression
-       mov     al,')'
-       stos    byte [edi]
-       ret
-      not_string:
-       cmp     byte [esi],'('
-       jne     expression
-       mov     eax,esp
-       sub     eax,[stack_limit]
-       cmp     eax,100h
-       jb      stack_overflow
-       push    esi edi
-       inc     esi
-       mov     al,91h
-       stos    byte [edi]
-       inc     [parenthesis_stack]
-       jmp     parse_argument
-      expression_comparator:
-       stos    byte [edi]
-       jmp     forced_expression
-      greater:
-       cmp     byte [esi],'='
-       jne     separator
-       inc     esi
-       mov     al,0F2h
-       jmp     separator
-      less:
-       cmp     byte [edi-1],0F6h
-       je      separator
-       cmp     byte [esi],'>'
-       je      not_equal
-       cmp     byte [esi],'='
-       jne     separator
-       inc     esi
-       mov     al,0F3h
-       jmp     separator
-      not_equal:
-       inc     esi
-       mov     al,0F1h
-       jmp     expression_comparator
-      expression:
-       call    parse_expression
-       jmp     expression_argument_parsed
-      forced_expression:
-       xor     al,al
-       xchg    al,[formatter_symbols_allowed]
-       push    eax
-       call    parse_expression
-      forced_expression_parsed:
-       pop     eax
-       mov     [formatter_symbols_allowed],al
-       jmp     argument_parsed
-      forced_multipart_expression:
-       xor     al,al
-       xchg    al,[formatter_symbols_allowed]
-       push    eax
-       call    parse_expression
-       cmp     byte [esi],':'
-       jne     forced_expression_parsed
-       movs    byte [edi],[esi]
-       call    parse_expression
-       jmp     forced_expression_parsed
-      address_argument:
-       call    parse_address
-       lods    byte [esi]
-       cmp     al,']'
-       je      address_parsed
-       cmp     al,','
-       je      divided_address
-       dec     esi
-       mov     al,')'
-       stos    byte [edi]
-       jmp     argument_parsed
-      divided_address:
-       mov     ax,'),'
-       stos    word [edi]
-       jmp     expression
-      address_parsed:
-       mov     al,']'
-       stos    byte [edi]
-       jmp     argument_parsed
-      parse_address:
-       mov     al,'['
-       stos    byte [edi]
-       cmp     word [esi],021Ah
-       jne     convert_address
-       push    esi
-       add     esi,4
-       lea     ebx,[esi+1]
-       cmp     byte [esi],':'
-       pop     esi
-       jne     convert_address
-       add     esi,2
-       mov     ecx,2
-       push    ebx edi
-       call    get_symbol
-       pop     edi esi
-       jc      unknown_segment_prefix
-       cmp     al,10h
-       jne     unknown_segment_prefix
-       mov     al,ah
-       and     ah,11110000b
-       cmp     ah,30h
-       jne     unknown_segment_prefix
-       add     al,30h
-       stos    byte [edi]
-       jmp     convert_address
-      unknown_segment_prefix:
-       sub     esi,5
-      convert_address:
-       push    edi
-       mov     edi,address_sizes
-       call    get_operator
-       pop     edi
-       or      al,al
-       jz      convert_expression
-       add     al,70h
-       stos    byte [edi]
-       jmp     convert_expression
-      forced_parenthesis:
-       cmp     byte [esi],'('
-       jne     argument_parsed
-       inc     esi
-       mov     al,91h
-       jmp     separator
-      unallowed_character:
-       mov     al,0FFh
-       jmp     separator
-      open_decorator:
-       inc     [decorator_symbols_allowed]
-       jmp     separator
-      close_decorator:
-       dec     [decorator_symbols_allowed]
-       jmp     separator
-      close_parenthesis:
-       mov     al,92h
-      separator:
-       stos    byte [edi]
-      argument_parsed:
-       cmp     [parenthesis_stack],0
-       je      parse_argument
-       dec     [parenthesis_stack]
-       add     esp,8
-       jmp     argument_parsed
-      expression_argument_parsed:
-       cmp     [parenthesis_stack],0
-       je      parse_argument
-       cmp     byte [esi],')'
-       jne     argument_parsed
-       dec     [parenthesis_stack]
-       pop     edi esi
-       jmp     expression
-      contents_parsed:
-       cmp     [parenthesis_stack],0
-       je      contents_ok
-       dec     [parenthesis_stack]
-       add     esp,8
-       jmp     contents_parsed
-      contents_ok:
-       ret
-
-identify_label:
-       cmp     byte [esi],'.'
-       je      local_label_name
-       call    get_label_id
-       cmp     eax,10h
-       jb      label_identified
-       or      ebx,ebx
-       jz      anonymous_label_name
-       dec     ebx
-       mov     [current_locals_prefix],ebx
-      label_identified:
-       ret
-      anonymous_label_name:
-       cmp     byte [esi-1],'@'
-       je      anonymous_label_name_ok
-       mov     eax,0Fh
-      anonymous_label_name_ok:
-       ret
-      local_label_name:
-       call    get_label_id
-       ret
-
-get_operator:
-       cmp     byte [esi],1Ah
-       jne     get_simple_operator
-       mov     edx,esi
-       push    ebp
-       inc     esi
-       lods    byte [esi]
-       movzx   ebp,al
-       push    edi
-       mov     ecx,ebp
-       call    lower_case
-       pop     edi
-      check_operator:
-       mov     esi,converted
-       movzx   ecx,byte [edi]
-       jecxz   no_operator
-       inc     edi
-       mov     ebx,edi
-       add     ebx,ecx
-       cmp     ecx,ebp
-       jne     next_operator
-       repe    cmps byte [esi],[edi]
-       je      operator_found
-       jb      no_operator
-      next_operator:
-       mov     edi,ebx
-       inc     edi
-       jmp     check_operator
-      no_operator:
-       mov     esi,edx
-       mov     ecx,ebp
-       pop     ebp
-      no_simple_operator:
-       xor     al,al
-       ret
-      operator_found:
-       lea     esi,[edx+2+ebp]
-       mov     ecx,ebp
-       pop     ebp
-       mov     al,[edi]
-       ret
-      get_simple_operator:
-       mov     al,[esi]
-       cmp     al,22h
-       je      no_simple_operator
-      simple_operator:
-       cmp     byte [edi],1
-       jb      no_simple_operator
-       ja      simple_next_operator
-       cmp     al,[edi+1]
-       je      simple_operator_found
-      simple_next_operator:
-       movzx   ecx,byte [edi]
-       lea     edi,[edi+1+ecx+1]
-       jmp     simple_operator
-      simple_operator_found:
-       inc     esi
-       mov     al,[edi+2]
-       ret
-
-get_symbol:
-       push    esi
-       mov     ebp,ecx
-       call    lower_case
-       mov     ecx,ebp
-       cmp     cl,11
-       ja      no_symbol
-       sub     cl,1
-       jc      no_symbol
-       movzx   ebx,word [symbols+ecx*4]
-       add     ebx,symbols
-       movzx   edx,word [symbols+ecx*4+2]
-      scan_symbols:
-       or      edx,edx
-       jz      no_symbol
-       mov     eax,edx
-       shr     eax,1
-       lea     edi,[ebp+2]
-       imul    eax,edi
-       lea     edi,[ebx+eax]
-       mov     esi,converted
-       mov     ecx,ebp
-       repe    cmps byte [esi],[edi]
-       ja      symbols_up
-       jb      symbols_down
-       mov     ax,[edi]
-       cmp     al,18h
-       jb      symbol_ok
-       cmp     al,1Fh
-       je      decorator_symbol
-       cmp     [formatter_symbols_allowed],0
-       je      no_symbol
-      symbol_ok:
-       pop     esi
-       add     esi,ebp
-       clc
-       ret
-      decorator_symbol:
-       cmp     [decorator_symbols_allowed],0
-       jne     symbol_ok
-      no_symbol:
-       pop     esi
-       mov     ecx,ebp
-       stc
-       ret
-      symbols_down:
-       shr     edx,1
-       jmp     scan_symbols
-      symbols_up:
-       lea     ebx,[edi+ecx+2]
-       shr     edx,1
-       adc     edx,-1
-       jmp     scan_symbols
-
-get_data_directive:
-       push    esi
-       mov     ebp,ecx
-       call    lower_case
-       mov     ecx,ebp
-       cmp     cl,4
-       ja      no_instruction
-       sub     cl,2
-       jc      no_instruction
-       movzx   ebx,word [data_directives+ecx*4]
-       add     ebx,data_directives
-       movzx   edx,word [data_directives+ecx*4+2]
-       jmp     scan_instructions
-
-get_instruction:
-       push    esi
-       mov     ebp,ecx
-       call    lower_case
-       mov     ecx,ebp
-       cmp     cl,17
-       ja      no_instruction
-       sub     cl,2
-       jc      no_instruction
-       movzx   ebx,word [instructions+ecx*4]
-       add     ebx,instructions
-       movzx   edx,word [instructions+ecx*4+2]
-      scan_instructions:
-       or      edx,edx
-       jz      no_instruction
-       mov     eax,edx
-       shr     eax,1
-       lea     edi,[ebp+3]
-       imul    eax,edi
-       lea     edi,[ebx+eax]
-       mov     esi,converted
-       mov     ecx,ebp
-       repe    cmps byte [esi],[edi]
-       ja      instructions_up
-       jb      instructions_down
-       pop     esi
-       add     esi,ebp
-       mov     al,[edi]
-       mov     bx,[edi+1]
-       clc
-       ret
-      no_instruction:
-       pop     esi
-       mov     ecx,ebp
-       stc
-       ret
-      instructions_down:
-       shr     edx,1
-       jmp     scan_instructions
-      instructions_up:
-       lea     ebx,[edi+ecx+3]
-       shr     edx,1
-       adc     edx,-1
-       jmp     scan_instructions
-
-get_label_id:
-       cmp     ecx,100h
-       jae     name_too_long
-       cmp     byte [esi],'@'
-       je      anonymous_label
-       cmp     byte [esi],'.'
-       jne     standard_label
-       cmp     byte [esi+1],'.'
-       je      standard_label
-       cmp     [current_locals_prefix],0
-       je      standard_label
-       push    edi
-       mov     edi,[additional_memory_end]
-       sub     edi,2
-       sub     edi,ecx
-       push    ecx esi
-       mov     esi,[current_locals_prefix]
-       lods    byte [esi]
-       movzx   ecx,al
-       sub     edi,ecx
-       cmp     edi,[free_additional_memory]
-       jb      out_of_memory
-       mov     word [edi],0
-       add     edi,2
-       mov     ebx,edi
-       rep     movs byte [edi],[esi]
-       pop     esi ecx
-       add     al,cl
-       jc      name_too_long
-       rep     movs byte [edi],[esi]
-       pop     edi
-       push    ebx esi
-       movzx   ecx,al
-       mov     byte [ebx-1],al
-       mov     esi,ebx
-       call    get_label_id
-       pop     esi ebx
-       cmp     ebx,[eax+24]
-       jne     composed_label_id_ok
-       lea     edx,[ebx-2]
-       mov     [additional_memory_end],edx
-      composed_label_id_ok:
-       ret
-      anonymous_label:
-       cmp     ecx,2
-       jne     standard_label
-       mov     al,[esi+1]
-       mov     ebx,characters
-       xlat    byte [ebx]
-       cmp     al,'@'
-       je      new_anonymous
-       cmp     al,'b'
-       je      anonymous_back
-       cmp     al,'r'
-       je      anonymous_back
-       cmp     al,'f'
-       jne     standard_label
-       add     esi,2
-       mov     eax,[anonymous_forward]
-       or      eax,eax
-       jnz     anonymous_ok
-       mov     eax,[current_line]
-       mov     [error_line],eax
-       call    allocate_label
-       mov     [anonymous_forward],eax
-      anonymous_ok:
-       xor     ebx,ebx
-       ret
-      anonymous_back:
-       mov     eax,[anonymous_reverse]
-       add     esi,2
-       or      eax,eax
-       jz      bogus_anonymous
-       jmp     anonymous_ok
-      bogus_anonymous:
-       call    allocate_label
-       mov     [anonymous_reverse],eax
-       jmp     anonymous_ok
-      new_anonymous:
-       add     esi,2
-       mov     eax,[anonymous_forward]
-       or      eax,eax
-       jnz     new_anonymous_ok
-       call    allocate_label
-      new_anonymous_ok:
-       mov     [anonymous_reverse],eax
-       mov     [anonymous_forward],0
-       jmp     anonymous_ok
-      standard_label:
-       cmp     byte [esi],'%'
-       je      get_predefined_id
-       cmp     byte [esi],'$'
-       je      current_address_label
-       cmp     byte [esi],'?'
-       jne     find_label
-       cmp     ecx,1
-       jne     find_label
-       inc     esi
-       mov     eax,0Fh
-       ret
-      current_address_label:
-       cmp     ecx,3
-       je      current_address_label_3_characters
-       ja      find_label
-       inc     esi
-       cmp     ecx,1
-       jbe     get_current_offset_id
-       inc     esi
-       cmp     byte [esi-1],'$'
-       je      get_org_origin_id
-       cmp     byte [esi-1],'%'
-       je      get_file_offset_id
-       sub     esi,2
-       jmp     find_label
-      get_current_offset_id:
-       xor     eax,eax
-       ret
-      get_counter_id:
-       mov     eax,1
-       ret
-      get_timestamp_id:
-       mov     eax,2
-       ret
-      get_org_origin_id:
-       mov     eax,3
-       ret
-      get_file_offset_id:
-       mov     eax,4
-       ret
-      current_address_label_3_characters:
-       cmp     word [esi+1],'%%'
-       jne     find_label
-       add     esi,3
-      get_actual_file_offset_id:
-       mov     eax,5
-       ret
-      get_predefined_id:
-       cmp     ecx,2
-       ja      find_label
-       inc     esi
-       cmp     cl,1
-       je      get_counter_id
-       lods    byte [esi]
-       mov     ebx,characters
-       xlat    [ebx]
-       cmp     al,'t'
-       je      get_timestamp_id
-       sub     esi,2
-      find_label:
-       xor     ebx,ebx
-       mov     eax,2166136261
-       mov     ebp,16777619
-      hash_label:
-       xor     al,[esi+ebx]
-       mul     ebp
-       inc     bl
-       cmp     bl,cl
-       jb      hash_label
-       mov     ebp,eax
-       shl     eax,8
-       and     ebp,0FFh shl 24
-       xor     ebp,eax
-       or      ebp,ebx
-       mov     [label_hash],ebp
-       push    edi esi
-       push    ecx
-       mov     ecx,32
-       mov     ebx,hash_tree
-      follow_tree:
-       mov     edx,[ebx]
-       or      edx,edx
-       jz      extend_tree
-       xor     eax,eax
-       shl     ebp,1
-       adc     eax,0
-       lea     ebx,[edx+eax*4]
-       dec     ecx
-       jnz     follow_tree
-       mov     [label_leaf],ebx
-       pop     edx
-       mov     eax,[ebx]
-       or      eax,eax
-       jz      add_label
-       mov     ebx,esi
-       mov     ebp,[label_hash]
-      compare_labels:
-       mov     esi,ebx
-       mov     ecx,edx
-       mov     edi,[eax+4]
-       mov     edi,[edi+24]
-       repe    cmps byte [esi],[edi]
-       je      label_found
-       mov     eax,[eax]
-       or      eax,eax
-       jnz     compare_labels
-       jmp     add_label
-      label_found:
-       add     esp,4
-       pop     edi
-       mov     eax,[eax+4]
-       ret
-      extend_tree:
-       mov     edx,[free_additional_memory]
-       lea     eax,[edx+8]
-       cmp     eax,[additional_memory_end]
-       ja      out_of_memory
-       mov     [free_additional_memory],eax
-       xor     eax,eax
-       mov     [edx],eax
-       mov     [edx+4],eax
-       shl     ebp,1
-       adc     eax,0
-       mov     [ebx],edx
-       lea     ebx,[edx+eax*4]
-       dec     ecx
-       jnz     extend_tree
-       mov     [label_leaf],ebx
-       pop     edx
-      add_label:
-       mov     ecx,edx
-       pop     esi
-       cmp     byte [esi-2],0
-       je      label_name_ok
-       mov     al,[esi]
-       cmp     al,30h
-       jb      name_first_char_ok
-       cmp     al,39h
-       jbe     numeric_name
-      name_first_char_ok:
-       cmp     al,'$'
-       jne     check_for_reserved_word
-      numeric_name:
-       add     esi,ecx
-      reserved_word:
-       mov     eax,0Fh
-       pop     edi
-       ret
-      check_for_reserved_word:
-       call    get_instruction
-       jnc     reserved_word
-       call    get_data_directive
-       jnc     reserved_word
-       call    get_symbol
-       jnc     reserved_word
-       sub     esi,2
-       mov     edi,operators
-       call    get_operator
-       or      al,al
-       jnz     reserved_word
-       mov     edi,single_operand_operators
-       call    get_operator
-       or      al,al
-       jnz     reserved_word
-       mov     edi,directive_operators
-       call    get_operator
-       or      al,al
-       jnz     reserved_word
-       inc     esi
-       movzx   ecx,byte [esi]
-       inc     esi
-      label_name_ok:
-       mov     edx,[free_additional_memory]
-       lea     eax,[edx+8]
-       cmp     eax,[additional_memory_end]
-       ja      out_of_memory
-       mov     [free_additional_memory],eax
-       mov     ebx,esi
-       add     esi,ecx
-       mov     eax,[label_leaf]
-       mov     edi,[eax]
-       mov     [edx],edi
-       mov     [eax],edx
-       call    allocate_label
-       mov     [edx+4],eax
-       mov     [eax+24],ebx
-       pop     edi
-       ret
-      allocate_label:
-       mov     eax,[labels_list]
-       mov     ecx,LABEL_STRUCTURE_SIZE shr 2
-      initialize_label:
-       sub     eax,4
-       mov     dword [eax],0
-       loop    initialize_label
-       mov     [labels_list],eax
-       ret
-
-LABEL_STRUCTURE_SIZE = 32
diff --git a/source/preproce.inc b/source/preproce.inc
deleted file mode 100644 (file)
index 88327b2..0000000
+++ /dev/null
@@ -1,2983 +0,0 @@
-
-; flat assembler core
-; Copyright (c) 1999-2022, Tomasz Grysztar.
-; All rights reserved.
-
-preprocessor:
-       mov     edi,characters
-       xor     al,al
-      make_characters_table:
-       stosb
-       inc     al
-       jnz     make_characters_table
-       mov     esi,characters+'a'
-       mov     edi,characters+'A'
-       mov     ecx,26
-       rep     movsb
-       mov     edi,characters
-       mov     esi,symbol_characters+1
-       movzx   ecx,byte [esi-1]
-       xor     eax,eax
-      mark_symbol_characters:
-       lodsb
-       mov     byte [edi+eax],0
-       loop    mark_symbol_characters
-       mov     edi,locals_counter
-       mov     ax,1 + '0' shl 8
-       stos    word [edi]
-       mov     edi,[memory_start]
-       mov     [include_paths],edi
-       mov     esi,include_variable
-       call    get_environment_variable
-       xor     al,al
-       stos    byte [edi]
-       mov     [memory_start],edi
-       mov     eax,[additional_memory]
-       mov     [free_additional_memory],eax
-       mov     eax,[additional_memory_end]
-       mov     [labels_list],eax
-       xor     eax,eax
-       mov     [source_start],eax
-       mov     [tagged_blocks],eax
-       mov     [hash_tree],eax
-       mov     [error],eax
-       mov     [macro_status],al
-       mov     [current_line],eax
-       mov     esi,[initial_definitions]
-       test    esi,esi
-       jz      predefinitions_ok
-      process_predefinitions:
-       movzx   ecx,byte [esi]
-       test    ecx,ecx
-       jz      predefinitions_ok
-       inc     esi
-       lea     eax,[esi+ecx]
-       push    eax
-       mov     ch,10b
-       call    add_preprocessor_symbol
-       pop     esi
-       mov     edi,[memory_start]
-       mov     [edx+8],edi
-      convert_predefinition:
-       cmp     edi,[memory_end]
-       jae     out_of_memory
-       lods    byte [esi]
-       or      al,al
-       jz      predefinition_converted
-       cmp     al,20h
-       je      convert_predefinition
-       mov     ah,al
-       mov     ebx,characters
-       xlat    byte [ebx]
-       or      al,al
-       jz      predefinition_separator
-       cmp     ah,27h
-       je      predefinition_string
-       cmp     ah,22h
-       je      predefinition_string
-       mov     byte [edi],1Ah
-       scas    word [edi]
-       xchg    al,ah
-       stos    byte [edi]
-       mov     ebx,characters
-       xor     ecx,ecx
-      predefinition_symbol:
-       lods    byte [esi]
-       stos    byte [edi]
-       xlat    byte [ebx]
-       or      al,al
-       loopnzd predefinition_symbol
-       neg     ecx
-       cmp     ecx,255
-       ja      invalid_definition
-       mov     ebx,edi
-       sub     ebx,ecx
-       mov     byte [ebx-2],cl
-      found_predefinition_separator:
-       dec     edi
-       mov     ah,[esi-1]
-      predefinition_separator:
-       xchg    al,ah
-       or      al,al
-       jz      predefinition_converted
-       cmp     al,20h
-       je      convert_predefinition
-       cmp     al,3Bh
-       je      invalid_definition
-       cmp     al,5Ch
-       je      predefinition_backslash
-       stos    byte [edi]
-       jmp     convert_predefinition
-      predefinition_string:
-       mov     al,22h
-       stos    byte [edi]
-       scas    dword [edi]
-       mov     ebx,edi
-      copy_predefinition_string:
-       lods    byte [esi]
-       stos    byte [edi]
-       or      al,al
-       jz      invalid_definition
-       cmp     al,ah
-       jne     copy_predefinition_string
-       lods    byte [esi]
-       cmp     al,ah
-       je      copy_predefinition_string
-       dec     esi
-       dec     edi
-       mov     eax,edi
-       sub     eax,ebx
-       mov     [ebx-4],eax
-       jmp     convert_predefinition
-      predefinition_backslash:
-       mov     byte [edi],0
-       lods    byte [esi]
-       or      al,al
-       jz      invalid_definition
-       cmp     al,20h
-       je      invalid_definition
-       cmp     al,3Bh
-       je      invalid_definition
-       mov     al,1Ah
-       stos    byte [edi]
-       mov     ecx,edi
-       mov     ax,5C01h
-       stos    word [edi]
-       dec     esi
-      group_predefinition_backslashes:
-       lods    byte [esi]
-       cmp     al,5Ch
-       jne     predefinition_backslashed_symbol
-       stos    byte [edi]
-       inc     byte [ecx]
-       jmp     group_predefinition_backslashes
-      predefinition_backslashed_symbol:
-       cmp     al,20h
-       je      invalid_definition
-       cmp     al,22h
-       je      invalid_definition
-       cmp     al,27h
-       je      invalid_definition
-       cmp     al,3Bh
-       je      invalid_definition
-       mov     ah,al
-       mov     ebx,characters
-       xlat    byte [ebx]
-       or      al,al
-       jz      predefinition_backslashed_symbol_character
-       mov     al,ah
-      convert_predefinition_backslashed_symbol:
-       stos    byte [edi]
-       xlat    byte [ebx]
-       or      al,al
-       jz      found_predefinition_separator
-       inc     byte [ecx]
-       jz      invalid_definition
-       lods    byte [esi]
-       jmp     convert_predefinition_backslashed_symbol
-      predefinition_backslashed_symbol_character:
-       mov     al,ah
-       stos    byte [edi]
-       inc     byte [ecx]
-       jmp     convert_predefinition
-      predefinition_converted:
-       mov     [memory_start],edi
-       sub     edi,[edx+8]
-       mov     [edx+12],edi
-       jmp     process_predefinitions
-      predefinitions_ok:
-       mov     esi,[input_file]
-       mov     edx,esi
-       call    open
-       jc      main_file_not_found
-       mov     edi,[memory_start]
-       call    preprocess_file
-       cmp     [macro_status],0
-       je      process_postponed
-       mov     eax,[error_line]
-       mov     [current_line],eax
-       jmp     incomplete_macro
-      process_postponed:
-       mov     edx,hash_tree
-       mov     ecx,32
-      find_postponed_list:
-       mov     edx,[edx]
-       or      edx,edx
-       loopnz  find_postponed_list
-       jz      preprocessing_finished
-      process_postponed_list:
-       mov     eax,[edx]
-       or      eax,eax
-       jz      preprocessing_finished
-       push    edx
-       mov     ebx,edx
-      find_earliest_postponed:
-       mov     eax,[edx]
-       or      eax,eax
-       jz      earliest_postponed_found
-       mov     ebx,edx
-       mov     edx,eax
-       jmp     find_earliest_postponed
-      earliest_postponed_found:
-       mov     [ebx],eax
-       call    use_postponed_macro
-       pop     edx
-       cmp     [macro_status],0
-       je      process_postponed_list
-       mov     eax,[error_line]
-       mov     [current_line],eax
-       jmp     incomplete_macro
-      preprocessing_finished:
-       mov     [source_start],edi
-       ret
-      use_postponed_macro:
-       lea     esi,[edi-1]
-       push    ecx esi
-       mov     [struc_name],0
-       jmp     use_macro
-
-preprocess_file:
-       push    [memory_end]
-       push    esi
-       mov     al,2
-       xor     edx,edx
-       call    lseek
-       push    eax
-       xor     al,al
-       xor     edx,edx
-       call    lseek
-       pop     ecx
-       mov     edx,[memory_end]
-       dec     edx
-       mov     byte [edx],1Ah
-       sub     edx,ecx
-       jc      out_of_memory
-       mov     esi,edx
-       cmp     edx,edi
-       jbe     out_of_memory
-       mov     [memory_end],edx
-       call    read
-       call    close
-       pop     edx
-       xor     ecx,ecx
-       mov     ebx,esi
-      preprocess_source:
-       inc     ecx
-       mov     [current_line],edi
-       mov     eax,edx
-       stos    dword [edi]
-       mov     eax,ecx
-       stos    dword [edi]
-       mov     eax,esi
-       sub     eax,ebx
-       stos    dword [edi]
-       xor     eax,eax
-       stos    dword [edi]
-       push    ebx edx
-       call    convert_line
-       call    preprocess_line
-       pop     edx ebx
-      next_line:
-       cmp     byte [esi-1],0
-       je      file_end
-       cmp     byte [esi-1],1Ah
-       jne     preprocess_source
-      file_end:
-       pop     [memory_end]
-       clc
-       ret
-
-convert_line:
-       push    ecx
-       test    [macro_status],0Fh
-       jz      convert_line_data
-       mov     ax,3Bh
-       stos    word [edi]
-      convert_line_data:
-       cmp     edi,[memory_end]
-       jae     out_of_memory
-       lods    byte [esi]
-       cmp     al,20h
-       je      convert_line_data
-       cmp     al,9
-       je      convert_line_data
-       mov     ah,al
-       mov     ebx,characters
-       xlat    byte [ebx]
-       or      al,al
-       jz      convert_separator
-       cmp     ah,27h
-       je      convert_string
-       cmp     ah,22h
-       je      convert_string
-       mov     byte [edi],1Ah
-       scas    word [edi]
-       xchg    al,ah
-       stos    byte [edi]
-       mov     ebx,characters
-       xor     ecx,ecx
-      convert_symbol:
-       lods    byte [esi]
-       stos    byte [edi]
-       xlat    byte [ebx]
-       or      al,al
-       loopnzd convert_symbol
-       neg     ecx
-       cmp     ecx,255
-       ja      name_too_long
-       mov     ebx,edi
-       sub     ebx,ecx
-       mov     byte [ebx-2],cl
-      found_separator:
-       dec     edi
-       mov     ah,[esi-1]
-      convert_separator:
-       xchg    al,ah
-       cmp     al,20h
-       jb      control_character
-       je      convert_line_data
-      symbol_character:
-       cmp     al,3Bh
-       je      ignore_comment
-       cmp     al,5Ch
-       je      backslash_character
-       stos    byte [edi]
-       jmp     convert_line_data
-      control_character:
-       cmp     al,1Ah
-       je      line_end
-       cmp     al,0Dh
-       je      cr_character
-       cmp     al,0Ah
-       je      lf_character
-       cmp     al,9
-       je      convert_line_data
-       or      al,al
-       jnz     symbol_character
-       jmp     line_end
-      lf_character:
-       lods    byte [esi]
-       cmp     al,0Dh
-       je      line_end
-       dec     esi
-       jmp     line_end
-      cr_character:
-       lods    byte [esi]
-       cmp     al,0Ah
-       je      line_end
-       dec     esi
-       jmp     line_end
-      convert_string:
-       mov     al,22h
-       stos    byte [edi]
-       scas    dword [edi]
-       mov     ebx,edi
-      copy_string:
-       lods    byte [esi]
-       stos    byte [edi]
-       cmp     al,0Ah
-       je      no_end_quote
-       cmp     al,0Dh
-       je      no_end_quote
-       or      al,al
-       jz      no_end_quote
-       cmp     al,1Ah
-       je      no_end_quote
-       cmp     al,ah
-       jne     copy_string
-       lods    byte [esi]
-       cmp     al,ah
-       je      copy_string
-       dec     esi
-       dec     edi
-       mov     eax,edi
-       sub     eax,ebx
-       mov     [ebx-4],eax
-       jmp     convert_line_data
-      backslash_character:
-       mov     byte [edi],0
-       lods    byte [esi]
-       cmp     al,20h
-       je      concatenate_lines
-       cmp     al,9
-       je      concatenate_lines
-       cmp     al,1Ah
-       je      line_end
-       or      al,al
-       jz      line_end
-       cmp     al,0Ah
-       je      concatenate_lf
-       cmp     al,0Dh
-       je      concatenate_cr
-       cmp     al,3Bh
-       je      find_concatenated_line
-       mov     al,1Ah
-       stos    byte [edi]
-       mov     ecx,edi
-       mov     ax,5C01h
-       stos    word [edi]
-       dec     esi
-      group_backslashes:
-       lods    byte [esi]
-       cmp     al,5Ch
-       jne     backslashed_symbol
-       stos    byte [edi]
-       inc     byte [ecx]
-       jz      name_too_long
-       jmp     group_backslashes
-      no_end_quote:
-       mov     byte [ebx-5],0
-       jmp     missing_end_quote
-      backslashed_symbol:
-       cmp     al,1Ah
-       je      extra_characters_on_line
-       or      al,al
-       jz      extra_characters_on_line
-       cmp     al,0Ah
-       je      extra_characters_on_line
-       cmp     al,0Dh
-       je      extra_characters_on_line
-       cmp     al,20h
-       je      extra_characters_on_line
-       cmp     al,9
-       je      extra_characters_on_line
-       cmp     al,22h
-       je      extra_characters_on_line
-       cmp     al,27h
-       je      extra_characters_on_line
-       cmp     al,3Bh
-       je      extra_characters_on_line
-       mov     ah,al
-       mov     ebx,characters
-       xlat    byte [ebx]
-       or      al,al
-       jz      backslashed_symbol_character
-       mov     al,ah
-      convert_backslashed_symbol:
-       stos    byte [edi]
-       xlat    byte [ebx]
-       or      al,al
-       jz      found_separator
-       inc     byte [ecx]
-       jz      name_too_long
-       lods    byte [esi]
-       jmp     convert_backslashed_symbol
-      backslashed_symbol_character:
-       mov     al,ah
-       stos    byte [edi]
-       inc     byte [ecx]
-       jmp     convert_line_data
-      concatenate_lines:
-       lods    byte [esi]
-       cmp     al,20h
-       je      concatenate_lines
-       cmp     al,9
-       je      concatenate_lines
-       cmp     al,1Ah
-       je      line_end
-       or      al,al
-       jz      line_end
-       cmp     al,0Ah
-       je      concatenate_lf
-       cmp     al,0Dh
-       je      concatenate_cr
-       cmp     al,3Bh
-       jne     extra_characters_on_line
-      find_concatenated_line:
-       lods    byte [esi]
-       cmp     al,0Ah
-       je      concatenate_lf
-       cmp     al,0Dh
-       je      concatenate_cr
-       or      al,al
-       jz      concatenate_ok
-       cmp     al,1Ah
-       jne     find_concatenated_line
-       jmp     line_end
-      concatenate_lf:
-       lods    byte [esi]
-       cmp     al,0Dh
-       je      concatenate_ok
-       dec     esi
-       jmp     concatenate_ok
-      concatenate_cr:
-       lods    byte [esi]
-       cmp     al,0Ah
-       je      concatenate_ok
-       dec     esi
-      concatenate_ok:
-       inc     dword [esp]
-       jmp     convert_line_data
-      ignore_comment:
-       lods    byte [esi]
-       cmp     al,0Ah
-       je      lf_character
-       cmp     al,0Dh
-       je      cr_character
-       or      al,al
-       jz      line_end
-       cmp     al,1Ah
-       jne     ignore_comment
-      line_end:
-       xor     al,al
-       stos    byte [edi]
-       pop     ecx
-       ret
-
-lower_case:
-       mov     edi,converted
-       mov     ebx,characters
-      convert_case:
-       lods    byte [esi]
-       xlat    byte [ebx]
-       stos    byte [edi]
-       loop    convert_case
-      case_ok:
-       ret
-
-get_directive:
-       push    edi
-       mov     edx,esi
-       mov     ebp,ecx
-       call    lower_case
-       pop     edi
-      scan_directives:
-       mov     esi,converted
-       movzx   eax,byte [edi]
-       or      al,al
-       jz      no_directive
-       mov     ecx,ebp
-       inc     edi
-       mov     ebx,edi
-       add     ebx,eax
-       mov     ah,[esi]
-       cmp     ah,[edi]
-       jb      no_directive
-       ja      next_directive
-       cmp     cl,al
-       jne     next_directive
-       repe    cmps byte [esi],[edi]
-       jb      no_directive
-       je      directive_found
-      next_directive:
-       mov     edi,ebx
-       add     edi,2
-       jmp     scan_directives
-      no_directive:
-       mov     esi,edx
-       mov     ecx,ebp
-       stc
-       ret
-      directive_found:
-       call    get_directive_handler_base
-      directive_handler:
-       lea     esi,[edx+ebp]
-       movzx   ecx,word [ebx]
-       add     eax,ecx
-       clc
-       ret
-      get_directive_handler_base:
-       mov     eax,[esp]
-       ret
-
-preprocess_line:
-       mov     eax,esp
-       sub     eax,[stack_limit]
-       cmp     eax,100h
-       jb      stack_overflow
-       push    ecx esi
-      preprocess_current_line:
-       mov     esi,[current_line]
-       add     esi,16
-       cmp     word [esi],3Bh
-       jne     line_start_ok
-       add     esi,2
-      line_start_ok:
-       test    [macro_status],0F0h
-       jnz     macro_preprocessing
-       cmp     byte [esi],1Ah
-       jne     not_fix_constant
-       movzx   edx,byte [esi+1]
-       lea     edx,[esi+2+edx]
-       cmp     word [edx],031Ah
-       jne     not_fix_constant
-       mov     ebx,characters
-       movzx   eax,byte [edx+2]
-       xlat    byte [ebx]
-       ror     eax,8
-       mov     al,[edx+3]
-       xlat    byte [ebx]
-       ror     eax,8
-       mov     al,[edx+4]
-       xlat    byte [ebx]
-       ror     eax,16
-       cmp     eax,'fix'
-       je      define_fix_constant
-      not_fix_constant:
-       call    process_fix_constants
-       jmp     initial_preprocessing_ok
-      macro_preprocessing:
-       call    process_macro_operators
-      initial_preprocessing_ok:
-       mov     esi,[current_line]
-       add     esi,16
-       mov     al,[macro_status]
-       test    al,2
-       jnz     skip_macro_block
-       test    al,1
-       jnz     find_macro_block
-      preprocess_instruction:
-       mov     [current_offset],esi
-       lods    byte [esi]
-       movzx   ecx,byte [esi]
-       inc     esi
-       cmp     al,1Ah
-       jne     not_preprocessor_symbol
-       cmp     cl,3
-       jb      not_preprocessor_directive
-       push    edi
-       mov     edi,preprocessor_directives
-       call    get_directive
-       pop     edi
-       jc      not_preprocessor_directive
-       mov     byte [edx-2],3Bh
-       jmp     near eax
-      not_preprocessor_directive:
-       xor     ch,ch
-       call    get_preprocessor_symbol
-       jc      not_macro
-       mov     byte [ebx-2],3Bh
-       mov     [struc_name],0
-       jmp     use_macro
-      not_macro:
-       mov     [struc_name],esi
-       add     esi,ecx
-       lods    byte [esi]
-       cmp     al,':'
-       je      preprocess_label
-       cmp     al,1Ah
-       jne     not_preprocessor_symbol
-       lods    byte [esi]
-       cmp     al,3
-       jne     not_symbolic_constant
-       mov     ebx,characters
-       movzx   eax,byte [esi]
-       xlat    byte [ebx]
-       ror     eax,8
-       mov     al,[esi+1]
-       xlat    byte [ebx]
-       ror     eax,8
-       mov     al,[esi+2]
-       xlat    byte [ebx]
-       ror     eax,16
-       cmp     eax,'equ'
-       je      define_equ_constant
-       mov     al,3
-      not_symbolic_constant:
-       mov     ch,1
-       mov     cl,al
-       call    get_preprocessor_symbol
-       jc      not_preprocessor_symbol
-       push    edx esi
-       mov     esi,[struc_name]
-       mov     [struc_label],esi
-       sub     [struc_label],2
-       mov     cl,[esi-1]
-       mov     ch,10b
-       call    get_preprocessor_symbol
-       jc      struc_name_ok
-       test    edx,edx
-       jz      reserved_word_used_as_symbol
-       mov     ecx,[edx+12]
-       add     ecx,3
-       lea     ebx,[edi+ecx]
-       mov     ecx,edi
-       sub     ecx,[struc_label]
-       lea     esi,[edi-1]
-       lea     edi,[ebx-1]
-       std
-       rep     movs byte [edi],[esi]
-       cld
-       mov     edi,[struc_label]
-       mov     esi,[edx+8]
-       mov     ecx,[edx+12]
-       add     [struc_name],ecx
-       add     [struc_name],3
-       call    move_data
-       mov     al,3Ah
-       stos    byte [edi]
-       mov     ax,3Bh
-       stos    word [edi]
-       mov     edi,ebx
-       pop     esi
-       add     esi,[edx+12]
-       add     esi,3
-       pop     edx
-       jmp     use_macro
-      struc_name_ok:
-       mov     edx,[struc_name]
-       movzx   eax,byte [edx-1]
-       add     edx,eax
-       push    edi
-       lea     esi,[edi-1]
-       mov     ecx,edi
-       sub     ecx,edx
-       std
-       rep     movs byte [edi],[esi]
-       cld
-       pop     edi
-       inc     edi
-       mov     al,3Ah
-       mov     [edx],al
-       inc     al
-       mov     [edx+1],al
-       pop     esi edx
-       inc     esi
-       jmp     use_macro
-      preprocess_label:
-       dec     esi
-       sub     esi,ecx
-       lea     ebp,[esi-2]
-       mov     ch,10b
-       call    get_preprocessor_symbol
-       jnc     symbolic_constant_in_label
-       lea     esi,[esi+ecx+1]
-       cmp     byte [esi],':'
-       jne     preprocess_instruction
-       inc     esi
-       jmp     preprocess_instruction
-      symbolic_constant_in_label:
-       test    edx,edx
-       jz      reserved_word_used_as_symbol
-       mov     ebx,[edx+8]
-       mov     ecx,[edx+12]
-       add     ecx,ebx
-      check_for_broken_label:
-       cmp     ebx,ecx
-       je      label_broken
-       cmp     byte [ebx],1Ah
-       jne     label_broken
-       movzx   eax,byte [ebx+1]
-       lea     ebx,[ebx+2+eax]
-       cmp     ebx,ecx
-       je      label_constant_ok
-       cmp     byte [ebx],':'
-       jne     label_broken
-       inc     ebx
-       cmp     byte [ebx],':'
-       jne     check_for_broken_label
-       inc     ebx
-       jmp     check_for_broken_label
-      label_broken:
-       call    replace_symbolic_constant
-       jmp     line_preprocessed
-      label_constant_ok:
-       mov     ecx,edi
-       sub     ecx,esi
-       mov     edi,[edx+12]
-       add     edi,ebp
-       push    edi
-       lea     eax,[edi+ecx]
-       push    eax
-       cmp     esi,edi
-       je      replace_label
-       jb      move_rest_of_line_up
-       rep     movs byte [edi],[esi]
-       jmp     replace_label
-      move_rest_of_line_up:
-       lea     esi,[esi+ecx-1]
-       lea     edi,[edi+ecx-1]
-       std
-       rep     movs byte [edi],[esi]
-       cld
-      replace_label:
-       mov     ecx,[edx+12]
-       mov     edi,[esp+4]
-       sub     edi,ecx
-       mov     esi,[edx+8]
-       rep     movs byte [edi],[esi]
-       pop     edi esi
-       inc     esi
-       jmp     preprocess_instruction
-      not_preprocessor_symbol:
-       mov     esi,[current_offset]
-       call    process_equ_constants
-      line_preprocessed:
-       pop     esi ecx
-       ret
-
-get_preprocessor_symbol:
-       push    ebp edi esi
-       mov     ebp,ecx
-       shl     ebp,22
-       mov     al,ch
-       and     al,11b
-       movzx   ecx,cl
-       cmp     al,10b
-       jne     no_preprocessor_special_symbol
-       cmp     cl,4
-       jbe     no_preprocessor_special_symbol
-       mov     ax,'__'
-       cmp     ax,[esi]
-       jne     no_preprocessor_special_symbol
-       cmp     ax,[esi+ecx-2]
-       jne     no_preprocessor_special_symbol
-       add     esi,2
-       sub     ecx,4
-       push    ebp
-       mov     edi,preprocessor_special_symbols
-       call    get_directive
-       pop     ebp
-       jc      preprocessor_special_symbol_not_recognized
-       add     esi,2
-       xor     edx,edx
-       jmp     preprocessor_symbol_found
-      preprocessor_special_symbol_not_recognized:
-       add     ecx,4
-       sub     esi,2
-      no_preprocessor_special_symbol:
-       mov     ebx,hash_tree
-       mov     edi,10
-      follow_hashes_roots:
-       mov     edx,[ebx]
-       or      edx,edx
-       jz      preprocessor_symbol_not_found
-       xor     eax,eax
-       shl     ebp,1
-       adc     eax,0
-       lea     ebx,[edx+eax*4]
-       dec     edi
-       jnz     follow_hashes_roots
-       mov     edi,ebx
-       call    calculate_hash
-       mov     ebp,eax
-       and     ebp,3FFh
-       shl     ebp,10
-       xor     ebp,eax
-       mov     ebx,edi
-       mov     edi,22
-      follow_hashes_tree:
-       mov     edx,[ebx]
-       or      edx,edx
-       jz      preprocessor_symbol_not_found
-       xor     eax,eax
-       shl     ebp,1
-       adc     eax,0
-       lea     ebx,[edx+eax*4]
-       dec     edi
-       jnz     follow_hashes_tree
-       mov     al,cl
-       mov     edx,[ebx]
-       or      edx,edx
-       jz      preprocessor_symbol_not_found
-      compare_with_preprocessor_symbol:
-       mov     edi,[edx+4]
-       cmp     edi,1
-       jbe     next_equal_hash
-       repe    cmps byte [esi],[edi]
-       je      preprocessor_symbol_found
-       mov     cl,al
-       mov     esi,[esp]
-      next_equal_hash:
-       mov     edx,[edx]
-       or      edx,edx
-       jnz     compare_with_preprocessor_symbol
-      preprocessor_symbol_not_found:
-       pop     esi edi ebp
-       stc
-       ret
-      preprocessor_symbol_found:
-       pop     ebx edi ebp
-       clc
-       ret
-      calculate_hash:
-       xor     ebx,ebx
-       mov     eax,2166136261
-       mov     ebp,16777619
-      fnv1a_hash:
-       xor     al,[esi+ebx]
-       mul     ebp
-       inc     bl
-       cmp     bl,cl
-       jb      fnv1a_hash
-       ret
-add_preprocessor_symbol:
-       push    edi esi
-       xor     eax,eax
-       or      cl,cl
-       jz      reshape_hash
-       cmp     ch,11b
-       je      preprocessor_symbol_name_ok
-       push    ecx
-       movzx   ecx,cl
-       mov     edi,preprocessor_directives
-       call    get_directive
-       jnc     reserved_word_used_as_symbol
-       pop     ecx
-      preprocessor_symbol_name_ok:
-       call    calculate_hash
-      reshape_hash:
-       mov     ebp,eax
-       and     ebp,3FFh
-       shr     eax,10
-       xor     ebp,eax
-       shl     ecx,22
-       or      ebp,ecx
-       mov     ebx,hash_tree
-       mov     ecx,32
-      find_leave_for_symbol:
-       mov     edx,[ebx]
-       or      edx,edx
-       jz      extend_hashes_tree
-       xor     eax,eax
-       rol     ebp,1
-       adc     eax,0
-       lea     ebx,[edx+eax*4]
-       dec     ecx
-       jnz     find_leave_for_symbol
-       mov     edx,[ebx]
-       or      edx,edx
-       jz      add_symbol_entry
-       shr     ebp,30
-       cmp     ebp,11b
-       je      reuse_symbol_entry
-       cmp     dword [edx+4],0
-       jne     add_symbol_entry
-      find_entry_to_reuse:
-       mov     edi,[edx]
-       or      edi,edi
-       jz      reuse_symbol_entry
-       cmp     dword [edi+4],0
-       jne     reuse_symbol_entry
-       mov     edx,edi
-       jmp     find_entry_to_reuse
-      add_symbol_entry:
-       mov     eax,edx
-       mov     edx,[labels_list]
-       sub     edx,16
-       cmp     edx,[free_additional_memory]
-       jb      out_of_memory
-       mov     [labels_list],edx
-       mov     [edx],eax
-       mov     [ebx],edx
-      reuse_symbol_entry:
-       pop     esi edi
-       mov     [edx+4],esi
-       ret
-      extend_hashes_tree:
-       mov     edx,[labels_list]
-       sub     edx,8
-       cmp     edx,[free_additional_memory]
-       jb      out_of_memory
-       mov     [labels_list],edx
-       xor     eax,eax
-       mov     [edx],eax
-       mov     [edx+4],eax
-       shl     ebp,1
-       adc     eax,0
-       mov     [ebx],edx
-       lea     ebx,[edx+eax*4]
-       dec     ecx
-       jnz     extend_hashes_tree
-       mov     edx,[labels_list]
-       sub     edx,16
-       cmp     edx,[free_additional_memory]
-       jb      out_of_memory
-       mov     [labels_list],edx
-       mov     dword [edx],0
-       mov     [ebx],edx
-       pop     esi edi
-       mov     [edx+4],esi
-       ret
-
-define_fix_constant:
-       add     edx,5
-       add     esi,2
-       push    edx
-       mov     ch,11b
-       jmp     define_preprocessor_constant
-define_equ_constant:
-       add     esi,3
-       push    esi
-       call    process_equ_constants
-       mov     esi,[struc_name]
-       mov     ch,10b
-      define_preprocessor_constant:
-       mov     byte [esi-2],3Bh
-       mov     cl,[esi-1]
-       call    add_preprocessor_symbol
-       pop     ebx
-       mov     ecx,edi
-       dec     ecx
-       sub     ecx,ebx
-       mov     [edx+8],ebx
-       mov     [edx+12],ecx
-       jmp     line_preprocessed
-define_symbolic_constant:
-       lods    byte [esi]
-       cmp     al,1Ah
-       jne     invalid_name
-       lods    byte [esi]
-       mov     cl,al
-       mov     ch,10b
-       call    add_preprocessor_symbol
-       movzx   eax,byte [esi-1]
-       add     esi,eax
-       lea     ecx,[edi-1]
-       sub     ecx,esi
-       mov     [edx+8],esi
-       mov     [edx+12],ecx
-       jmp     line_preprocessed
-
-define_struc:
-       mov     ch,1
-       jmp     make_macro
-define_macro:
-       xor     ch,ch
-      make_macro:
-       lods    byte [esi]
-       cmp     al,1Ah
-       jne     invalid_name
-       lods    byte [esi]
-       mov     cl,al
-       call    add_preprocessor_symbol
-       mov     eax,[current_line]
-       mov     [edx+12],eax
-       movzx   eax,byte [esi-1]
-       add     esi,eax
-       mov     [edx+8],esi
-       mov     al,[macro_status]
-       and     al,0F0h
-       or      al,1
-       mov     [macro_status],al
-       mov     eax,[current_line]
-       mov     [error_line],eax
-       xor     ebp,ebp
-       lods    byte [esi]
-       or      al,al
-       jz      line_preprocessed
-       cmp     al,'{'
-       je      found_macro_block
-       dec     esi
-      skip_macro_arguments:
-       lods    byte [esi]
-       cmp     al,1Ah
-       je      skip_macro_argument
-       cmp     al,'['
-       jne     invalid_macro_arguments
-       or      ebp,-1
-       jz      invalid_macro_arguments
-       lods    byte [esi]
-       cmp     al,1Ah
-       jne     invalid_macro_arguments
-      skip_macro_argument:
-       movzx   eax,byte [esi]
-       inc     esi
-       add     esi,eax
-       lods    byte [esi]
-       cmp     al,':'
-       je      macro_argument_with_default_value
-       cmp     al,'='
-       je      macro_argument_with_default_value
-       cmp     al,'*'
-       jne     macro_argument_end
-       lods    byte [esi]
-      macro_argument_end:
-       cmp     al,','
-       je      skip_macro_arguments
-       cmp     al,'&'
-       je      macro_arguments_finisher
-       cmp     al,']'
-       jne     end_macro_arguments
-       not     ebp
-      macro_arguments_finisher:
-       lods    byte [esi]
-      end_macro_arguments:
-       or      ebp,ebp
-       jnz     invalid_macro_arguments
-       or      al,al
-       jz      line_preprocessed
-       cmp     al,'{'
-       je      found_macro_block
-       jmp     invalid_macro_arguments
-      macro_argument_with_default_value:
-       or      [skip_default_argument_value],-1
-       call    skip_macro_argument_value
-       inc     esi
-       jmp     macro_argument_end
-      skip_macro_argument_value:
-       cmp     byte [esi],'<'
-       jne     simple_argument
-       mov     ecx,1
-       inc     esi
-      enclosed_argument:
-       lods    byte [esi]
-       or      al,al
-       jz      invalid_macro_arguments
-       cmp     al,1Ah
-       je      enclosed_symbol
-       cmp     al,22h
-       je      enclosed_string
-       cmp     al,'>'
-       je      enclosed_argument_end
-       cmp     al,'<'
-       jne     enclosed_argument
-       inc     ecx
-       jmp     enclosed_argument
-      enclosed_symbol:
-       movzx   eax,byte [esi]
-       inc     esi
-       add     esi,eax
-       jmp     enclosed_argument
-      enclosed_string:
-       lods    dword [esi]
-       add     esi,eax
-       jmp     enclosed_argument
-      enclosed_argument_end:
-       loop    enclosed_argument
-       lods    byte [esi]
-       or      al,al
-       jz      argument_value_end
-       cmp     al,','
-       je      argument_value_end
-       cmp     [skip_default_argument_value],0
-       je      invalid_macro_arguments
-       cmp     al,'{'
-       je      argument_value_end
-       cmp     al,'&'
-       je      argument_value_end
-       or      ebp,ebp
-       jz      invalid_macro_arguments
-       cmp     al,']'
-       je      argument_value_end
-       jmp     invalid_macro_arguments
-      simple_argument:
-       lods    byte [esi]
-       or      al,al
-       jz      argument_value_end
-       cmp     al,','
-       je      argument_value_end
-       cmp     al,22h
-       je      argument_string
-       cmp     al,1Ah
-       je      argument_symbol
-       cmp     [skip_default_argument_value],0
-       je      simple_argument
-       cmp     al,'{'
-       je      argument_value_end
-       cmp     al,'&'
-       je      argument_value_end
-       or      ebp,ebp
-       jz      simple_argument
-       cmp     al,']'
-       je      argument_value_end
-      argument_symbol:
-       movzx   eax,byte [esi]
-       inc     esi
-       add     esi,eax
-       jmp     simple_argument
-      argument_string:
-       lods    dword [esi]
-       add     esi,eax
-       jmp     simple_argument
-      argument_value_end:
-       dec     esi
-       ret
-      find_macro_block:
-       add     esi,2
-       lods    byte [esi]
-       or      al,al
-       jz      line_preprocessed
-       cmp     al,'{'
-       jne     unexpected_characters
-      found_macro_block:
-       or      [macro_status],2
-      skip_macro_block:
-       lods    byte [esi]
-       cmp     al,1Ah
-       je      skip_macro_symbol
-       cmp     al,3Bh
-       je      skip_macro_symbol
-       cmp     al,22h
-       je      skip_macro_string
-       or      al,al
-       jz      line_preprocessed
-       cmp     al,'}'
-       jne     skip_macro_block
-       mov     al,[macro_status]
-       and     [macro_status],0F0h
-       test    al,8
-       jnz     use_instant_macro
-       cmp     byte [esi],0
-       je      line_preprocessed
-       mov     ecx,edi
-       sub     ecx,esi
-       mov     edx,esi
-       lea     esi,[esi+ecx-1]
-       lea     edi,[edi+1+16]
-       mov     ebx,edi
-       dec     edi
-       std
-       rep     movs byte [edi],[esi]
-       cld
-       mov     edi,edx
-       xor     al,al
-       stos    byte [edi]
-       mov     esi,[current_line]
-       mov     [current_line],edi
-       mov     ecx,4
-       rep     movs dword [edi],[esi]
-       mov     edi,ebx
-       jmp     initial_preprocessing_ok
-      skip_macro_symbol:
-       movzx   eax,byte [esi]
-       inc     esi
-       add     esi,eax
-       jmp     skip_macro_block
-      skip_macro_string:
-       lods    dword [esi]
-       add     esi,eax
-       jmp     skip_macro_block
-postpone_directive:
-       push    esi
-       mov     esi,edx
-       xor     ecx,ecx
-       call    add_preprocessor_symbol
-       mov     eax,[current_line]
-       mov     [error_line],eax
-       mov     [edx+12],eax
-       pop     esi
-       mov     [edx+8],esi
-       mov     al,[macro_status]
-       and     al,0F0h
-       or      al,1
-       mov     [macro_status],al
-       lods    byte [esi]
-       or      al,al
-       jz      line_preprocessed
-       cmp     al,'{'
-       jne     unexpected_characters
-       jmp     found_macro_block
-rept_directive:
-       mov     [base_code],0
-       jmp     define_instant_macro
-irp_directive:
-       mov     [base_code],1
-       jmp     define_instant_macro
-irps_directive:
-       mov     [base_code],2
-       jmp     define_instant_macro
-irpv_directive:
-       mov     [base_code],3
-       jmp     define_instant_macro
-match_directive:
-       mov     [base_code],10h
-define_instant_macro:
-       mov     al,[macro_status]
-       and     al,0F0h
-       or      al,8+1
-       mov     [macro_status],al
-       mov     eax,[current_line]
-       mov     [error_line],eax
-       mov     [instant_macro_start],esi
-       cmp     [base_code],10h
-       je      prepare_match
-      skip_parameters:
-       lods    byte [esi]
-       or      al,al
-       jz      parameters_skipped
-       cmp     al,'{'
-       je      parameters_skipped
-       cmp     al,22h
-       je      skip_quoted_parameter
-       cmp     al,1Ah
-       jne     skip_parameters
-       lods    byte [esi]
-       movzx   eax,al
-       add     esi,eax
-       jmp     skip_parameters
-      skip_quoted_parameter:
-       lods    dword [esi]
-       add     esi,eax
-       jmp     skip_parameters
-      parameters_skipped:
-       dec     esi
-       mov     [parameters_end],esi
-       lods    byte [esi]
-       cmp     al,'{'
-       je      found_macro_block
-       or      al,al
-       jnz     invalid_macro_arguments
-       jmp     line_preprocessed
-prepare_match:
-       call    skip_pattern
-       mov     [value_type],80h+10b
-       call    process_symbolic_constants
-       jmp     parameters_skipped
-      skip_pattern:
-       lods    byte [esi]
-       or      al,al
-       jz      invalid_macro_arguments
-       cmp     al,','
-       je      pattern_skipped
-       cmp     al,22h
-       je      skip_quoted_string_in_pattern
-       cmp     al,1Ah
-       je      skip_symbol_in_pattern
-       cmp     al,'='
-       jne     skip_pattern
-       mov     al,[esi]
-       cmp     al,1Ah
-       je      skip_pattern
-       cmp     al,22h
-       je      skip_pattern
-       inc     esi
-       jmp     skip_pattern
-      skip_symbol_in_pattern:
-       lods    byte [esi]
-       movzx   eax,al
-       add     esi,eax
-       jmp     skip_pattern
-      skip_quoted_string_in_pattern:
-       lods    dword [esi]
-       add     esi,eax
-       jmp     skip_pattern
-      pattern_skipped:
-       ret
-
-purge_macro:
-       xor     ch,ch
-       jmp     restore_preprocessor_symbol
-purge_struc:
-       mov     ch,1
-       jmp     restore_preprocessor_symbol
-restore_equ_constant:
-       mov     ch,10b
-      restore_preprocessor_symbol:
-       push    ecx
-       lods    byte [esi]
-       cmp     al,1Ah
-       jne     invalid_name
-       lods    byte [esi]
-       mov     cl,al
-       call    get_preprocessor_symbol
-       jc      no_symbol_to_restore
-       test    edx,edx
-       jz      symbol_restored
-       mov     dword [edx+4],0
-       jmp     symbol_restored
-      no_symbol_to_restore:
-       add     esi,ecx
-      symbol_restored:
-       pop     ecx
-       lods    byte [esi]
-       cmp     al,','
-       je      restore_preprocessor_symbol
-       or      al,al
-       jnz     extra_characters_on_line
-       jmp     line_preprocessed
-
-process_fix_constants:
-       mov     [value_type],11b
-       jmp     process_symbolic_constants
-process_equ_constants:
-       mov     [value_type],10b
-      process_symbolic_constants:
-       mov     ebp,esi
-       lods    byte [esi]
-       cmp     al,1Ah
-       je      check_symbol
-       cmp     al,22h
-       je      ignore_string
-       cmp     al,'{'
-       je      check_brace
-       or      al,al
-       jnz     process_symbolic_constants
-       ret
-      ignore_string:
-       lods    dword [esi]
-       add     esi,eax
-       jmp     process_symbolic_constants
-      check_brace:
-       test    [value_type],80h
-       jz      process_symbolic_constants
-       ret
-      no_replacing:
-       movzx   ecx,byte [esi-1]
-       add     esi,ecx
-       jmp     process_symbolic_constants
-      check_symbol:
-       mov     cl,[esi]
-       inc     esi
-       mov     ch,[value_type]
-       call    get_preprocessor_symbol
-       jc      no_replacing
-       mov     [current_section],edi
-      replace_symbolic_constant:
-       test    edx,edx
-       jz      replace_special_symbolic_constant
-       mov     ecx,[edx+12]
-       mov     edx,[edx+8]
-       xchg    esi,edx
-       call    move_data
-       mov     esi,edx
-      process_after_replaced:
-       lods    byte [esi]
-       cmp     al,1Ah
-       je      symbol_after_replaced
-       stos    byte [edi]
-       cmp     al,22h
-       je      string_after_replaced
-       cmp     al,'{'
-       je      brace_after_replaced
-       or      al,al
-       jnz     process_after_replaced
-       mov     ecx,edi
-       sub     ecx,esi
-       mov     edi,ebp
-       call    move_data
-       mov     esi,edi
-       ret
-      move_data:
-       lea     eax,[edi+ecx]
-       cmp     eax,[memory_end]
-       jae     out_of_memory
-       shr     ecx,1
-       jnc     movsb_ok
-       movs    byte [edi],[esi]
-      movsb_ok:
-       shr     ecx,1
-       jnc     movsw_ok
-       movs    word [edi],[esi]
-      movsw_ok:
-       rep     movs dword [edi],[esi]
-       ret
-      string_after_replaced:
-       lods    dword [esi]
-       stos    dword [edi]
-       mov     ecx,eax
-       call    move_data
-       jmp     process_after_replaced
-      brace_after_replaced:
-       test    [value_type],80h
-       jz      process_after_replaced
-       mov     edx,edi
-       mov     ecx,[current_section]
-       sub     edx,ecx
-       sub     ecx,esi
-       rep     movs byte [edi],[esi]
-       mov     ecx,edi
-       sub     ecx,esi
-       mov     edi,ebp
-       call    move_data
-       lea     esi,[ebp+edx]
-       ret
-      symbol_after_replaced:
-       mov     cl,[esi]
-       inc     esi
-       mov     ch,[value_type]
-       call    get_preprocessor_symbol
-       jnc     replace_symbolic_constant
-       movzx   ecx,byte [esi-1]
-       mov     al,1Ah
-       mov     ah,cl
-       stos    word [edi]
-       call    move_data
-       jmp     process_after_replaced
-      replace_special_symbolic_constant:
-       jmp     near eax
-    preprocessed_file_value:
-       call    get_current_line_from_file
-       test    ebx,ebx
-       jz      process_after_replaced
-       push    esi edi
-       mov     esi,[ebx]
-       mov     edi,esi
-       xor     al,al
-       or      ecx,-1
-       repne   scas byte [edi]
-       add     ecx,2
-       neg     ecx
-       pop     edi
-       lea     eax,[edi+1+4+ecx]
-       cmp     eax,[memory_end]
-       ja      out_of_memory
-       mov     al,22h
-       stos    byte [edi]
-       mov     eax,ecx
-       stos    dword [edi]
-       rep     movs byte [edi],[esi]
-       pop     esi
-       jmp     process_after_replaced
-    preprocessed_line_value:
-       call    get_current_line_from_file
-       test    ebx,ebx
-       jz      process_after_replaced
-       lea     eax,[edi+1+4+20]
-       cmp     eax,[memory_end]
-       ja      out_of_memory
-       mov     ecx,[ebx+4]
-       call    store_number_symbol
-       jmp     process_after_replaced
-    get_current_line_from_file:
-       mov     ebx,[current_line]
-      find_line_from_file:
-       test    ebx,ebx
-       jz      line_from_file_found
-       test    byte [ebx+7],80h
-       jz      line_from_file_found
-       mov     ebx,[ebx+8]
-       jmp     find_line_from_file
-      line_from_file_found:
-       ret
-
-process_macro_operators:
-       xor     dl,dl
-       mov     ebp,edi
-      before_macro_operators:
-       mov     edi,esi
-       lods    byte [esi]
-       cmp     al,'`'
-       je      symbol_conversion
-       cmp     al,'#'
-       je      concatenation
-       cmp     al,1Ah
-       je      symbol_before_macro_operators
-       cmp     al,3Bh
-       je      no_more_macro_operators
-       cmp     al,22h
-       je      string_before_macro_operators
-       xor     dl,dl
-       or      al,al
-       jnz     before_macro_operators
-       mov     edi,esi
-       ret
-      no_more_macro_operators:
-       mov     edi,ebp
-       ret
-      symbol_before_macro_operators:
-       mov     dl,1Ah
-       mov     ebx,esi
-       lods    byte [esi]
-       movzx   ecx,al
-       jecxz   symbol_before_macro_operators_ok
-       mov     edi,esi
-       cmp     byte [esi],'\'
-       je      escaped_symbol
-      symbol_before_macro_operators_ok:
-       add     esi,ecx
-       jmp     before_macro_operators
-      string_before_macro_operators:
-       mov     dl,22h
-       mov     ebx,esi
-       lods    dword [esi]
-       add     esi,eax
-       jmp     before_macro_operators
-      escaped_symbol:
-       dec     byte [edi-1]
-       dec     ecx
-       inc     esi
-       cmp     ecx,1
-       rep     movs byte [edi],[esi]
-       jne     after_macro_operators
-       mov     al,[esi-1]
-       mov     ecx,ebx
-       mov     ebx,characters
-       xlat    byte [ebx]
-       mov     ebx,ecx
-       or      al,al
-       jnz     after_macro_operators
-       sub     edi,3
-       mov     al,[esi-1]
-       stos    byte [edi]
-       xor     dl,dl
-       jmp     after_macro_operators
-      reduce_symbol_conversion:
-       inc     esi
-      symbol_conversion:
-       mov     edx,esi
-       mov     al,[esi]
-       cmp     al,1Ah
-       jne     symbol_character_conversion
-       lods    word [esi]
-       movzx   ecx,ah
-       lea     ebx,[edi+3]
-       jecxz   convert_to_quoted_string
-       cmp     byte [esi],'\'
-       jne     convert_to_quoted_string
-       inc     esi
-       dec     ecx
-       dec     ebx
-       jmp     convert_to_quoted_string
-      symbol_character_conversion:
-       cmp     al,22h
-       je      after_macro_operators
-       cmp     al,'`'
-       je      reduce_symbol_conversion
-       lea     ebx,[edi+5]
-       xor     ecx,ecx
-       or      al,al
-       jz      convert_to_quoted_string
-       cmp     al,'#'
-       je      convert_to_quoted_string
-       inc     ecx
-      convert_to_quoted_string:
-       sub     ebx,edx
-       ja      shift_line_data
-       mov     al,22h
-       mov     dl,al
-       stos    byte [edi]
-       mov     ebx,edi
-       mov     eax,ecx
-       stos    dword [edi]
-       rep     movs byte [edi],[esi]
-       cmp     edi,esi
-       je      before_macro_operators
-       jmp     after_macro_operators
-      shift_line_data:
-       push    ecx
-       mov     edx,esi
-       lea     esi,[ebp-1]
-       add     ebp,ebx
-       lea     edi,[ebp-1]
-       lea     ecx,[esi+1]
-       sub     ecx,edx
-       std
-       rep     movs byte [edi],[esi]
-       cld
-       pop     eax
-       sub     edi,3
-       mov     dl,22h
-       mov     [edi-1],dl
-       mov     ebx,edi
-       mov     [edi],eax
-       lea     esi,[edi+4+eax]
-       jmp     before_macro_operators
-      concatenation:
-       cmp     dl,1Ah
-       je      symbol_concatenation
-       cmp     dl,22h
-       je      string_concatenation
-      no_concatenation:
-       cmp     esi,edi
-       je      before_macro_operators
-       jmp     after_macro_operators
-      symbol_concatenation:
-       cmp     byte [esi],1Ah
-       jne     no_concatenation
-       inc     esi
-       lods    byte [esi]
-       movzx   ecx,al
-       jecxz   do_symbol_concatenation
-       cmp     byte [esi],'\'
-       je      concatenate_escaped_symbol
-      do_symbol_concatenation:
-       add     [ebx],cl
-       jc      name_too_long
-       rep     movs byte [edi],[esi]
-       jmp     after_macro_operators
-      concatenate_escaped_symbol:
-       inc     esi
-       dec     ecx
-       jz      do_symbol_concatenation
-       movzx   eax,byte [esi]
-       cmp     byte [characters+eax],0
-       jne     do_symbol_concatenation
-       sub     esi,3
-       jmp     no_concatenation
-      string_concatenation:
-       cmp     byte [esi],22h
-       je      do_string_concatenation
-       cmp     byte [esi],'`'
-       jne     no_concatenation
-      concatenate_converted_symbol:
-       inc     esi
-       mov     al,[esi]
-       cmp     al,'`'
-       je      concatenate_converted_symbol
-       cmp     al,22h
-       je      do_string_concatenation
-       cmp     al,1Ah
-       jne     concatenate_converted_symbol_character
-       inc     esi
-       lods    byte [esi]
-       movzx   ecx,al
-       jecxz   finish_concatenating_converted_symbol
-       cmp     byte [esi],'\'
-       jne     finish_concatenating_converted_symbol
-       inc     esi
-       dec     ecx
-      finish_concatenating_converted_symbol:
-       add     [ebx],ecx
-       rep     movs byte [edi],[esi]
-       jmp     after_macro_operators
-      concatenate_converted_symbol_character:
-       or      al,al
-       jz      after_macro_operators
-       cmp     al,'#'
-       je      after_macro_operators
-       inc     dword [ebx]
-       movs    byte [edi],[esi]
-       jmp     after_macro_operators
-      do_string_concatenation:
-       inc     esi
-       lods    dword [esi]
-       mov     ecx,eax
-       add     [ebx],eax
-       rep     movs byte [edi],[esi]
-      after_macro_operators:
-       lods    byte [esi]
-       cmp     al,'`'
-       je      symbol_conversion
-       cmp     al,'#'
-       je      concatenation
-       stos    byte [edi]
-       cmp     al,1Ah
-       je      symbol_after_macro_operators
-       cmp     al,3Bh
-       je      no_more_macro_operators
-       cmp     al,22h
-       je      string_after_macro_operators
-       xor     dl,dl
-       or      al,al
-       jnz     after_macro_operators
-       ret
-      symbol_after_macro_operators:
-       mov     dl,1Ah
-       mov     ebx,edi
-       lods    byte [esi]
-       stos    byte [edi]
-       movzx   ecx,al
-       jecxz   symbol_after_macro_operatorss_ok
-       cmp     byte [esi],'\'
-       je      escaped_symbol
-      symbol_after_macro_operatorss_ok:
-       rep     movs byte [edi],[esi]
-       jmp     after_macro_operators
-      string_after_macro_operators:
-       mov     dl,22h
-       mov     ebx,edi
-       lods    dword [esi]
-       stos    dword [edi]
-       mov     ecx,eax
-       rep     movs byte [edi],[esi]
-       jmp     after_macro_operators
-
-use_macro:
-       push    [free_additional_memory]
-       push    [macro_symbols]
-       mov     [macro_symbols],0
-       push    [counter_limit]
-       push    dword [edx+4]
-       mov     dword [edx+4],1
-       push    edx
-       mov     ebx,esi
-       mov     esi,[edx+8]
-       mov     eax,[edx+12]
-       mov     [macro_line],eax
-       mov     [counter_limit],0
-       xor     ebp,ebp
-      process_macro_arguments:
-       mov     al,[esi]
-       or      al,al
-       jz      arguments_end
-       cmp     al,'{'
-       je      arguments_end
-       inc     esi
-       cmp     al,'['
-       jne     get_macro_arguments
-       mov     ebp,esi
-       inc     esi
-       inc     [counter_limit]
-      get_macro_arguments:
-       call    get_macro_argument
-       lods    byte [esi]
-       cmp     al,','
-       je      next_argument
-       cmp     al,']'
-       je      next_arguments_group
-       cmp     al,'&'
-       je      arguments_end
-       dec     esi
-       jmp     arguments_end
-      next_argument:
-       cmp     byte [ebx],','
-       jne     process_macro_arguments
-       inc     ebx
-       jmp     process_macro_arguments
-      next_arguments_group:
-       cmp     byte [ebx],','
-       jne     arguments_end
-       inc     ebx
-       inc     [counter_limit]
-       mov     esi,ebp
-       jmp     process_macro_arguments
-      get_macro_argument:
-       lods    byte [esi]
-       movzx   ecx,al
-       mov     eax,[counter_limit]
-       call    add_macro_symbol
-       add     esi,ecx
-       xor     eax,eax
-       mov     [default_argument_value],eax
-       cmp     byte [esi],'*'
-       je      required_value
-       cmp     byte [esi],':'
-       je      get_default_value
-       cmp     byte [esi],'='
-       jne     default_value_ok
-      get_default_value:
-       inc     esi
-       mov     [default_argument_value],esi
-       or      [skip_default_argument_value],-1
-       call    skip_macro_argument_value
-       jmp     default_value_ok
-      required_value:
-       inc     esi
-       or      [default_argument_value],-1
-      default_value_ok:
-       xchg    esi,ebx
-       mov     [edx+12],esi
-       mov     [skip_default_argument_value],0
-       cmp     byte [ebx],'&'
-       je      greedy_macro_argument
-       call    skip_macro_argument_value
-       call    finish_macro_argument
-       jmp     got_macro_argument
-      greedy_macro_argument:
-       call    skip_foreign_line
-       dec     esi
-       mov     eax,[edx+12]
-       mov     ecx,esi
-       sub     ecx,eax
-       mov     [edx+8],ecx
-      got_macro_argument:
-       xchg    esi,ebx
-       cmp     dword [edx+8],0
-       jne     macro_argument_ok
-       mov     eax,[default_argument_value]
-       or      eax,eax
-       jz      macro_argument_ok
-       cmp     eax,-1
-       je      invalid_macro_arguments
-       mov     [edx+12],eax
-       call    finish_macro_argument
-      macro_argument_ok:
-       ret
-      finish_macro_argument:
-       mov     eax,[edx+12]
-       mov     ecx,esi
-       sub     ecx,eax
-       cmp     byte [eax],'<'
-       jne     argument_value_length_ok
-       inc     dword [edx+12]
-       sub     ecx,2
-       or      ecx,80000000h
-      argument_value_length_ok:
-       mov     [edx+8],ecx
-       ret
-      arguments_end:
-       cmp     byte [ebx],0
-       jne     invalid_macro_arguments
-       mov     eax,[esp+4]
-       dec     eax
-       call    process_macro
-       pop     edx
-       pop     dword [edx+4]
-       pop     [counter_limit]
-       pop     [macro_symbols]
-       pop     [free_additional_memory]
-       jmp     line_preprocessed
-use_instant_macro:
-       push    edi
-       push    [current_line]
-       push    esi
-       mov     eax,[error_line]
-       mov     [current_line],eax
-       mov     [macro_line],eax
-       mov     esi,[instant_macro_start]
-       cmp     [base_code],10h
-       jae     do_match
-       cmp     [base_code],0
-       jne     do_irp
-       call    precalculate_value
-       cmp     eax,0
-       jl      value_out_of_range
-       push    [free_additional_memory]
-       push    [macro_symbols]
-       mov     [macro_symbols],0
-       push    [counter_limit]
-       mov     [struc_name],0
-       mov     [counter_limit],eax
-       lods    byte [esi]
-       or      al,al
-       jz      rept_counters_ok
-       cmp     al,'{'
-       je      rept_counters_ok
-       cmp     al,1Ah
-       jne     invalid_macro_arguments
-      add_rept_counter:
-       lods    byte [esi]
-       movzx   ecx,al
-       xor     eax,eax
-       call    add_macro_symbol
-       add     esi,ecx
-       xor     eax,eax
-       mov     dword [edx+12],eax
-       inc     eax
-       mov     dword [edx+8],eax
-       lods    byte [esi]
-       cmp     al,':'
-       jne     rept_counter_added
-       push    edx
-       call    precalculate_value
-       mov     edx,eax
-       add     edx,[counter_limit]
-       jo      value_out_of_range
-       pop     edx
-       mov     dword [edx+8],eax
-       lods    byte [esi]
-      rept_counter_added:
-       cmp     al,','
-       jne     rept_counters_ok
-       lods    byte [esi]
-       cmp     al,1Ah
-       jne     invalid_macro_arguments
-       jmp     add_rept_counter
-      rept_counters_ok:
-       dec     esi
-       cmp     [counter_limit],0
-       je      instant_macro_finish
-      instant_macro_parameters_ok:
-       xor     eax,eax
-       call    process_macro
-      instant_macro_finish:
-       pop     [counter_limit]
-       pop     [macro_symbols]
-       pop     [free_additional_memory]
-      instant_macro_done:
-       pop     ebx esi edx
-       cmp     byte [ebx],0
-       je      line_preprocessed
-       mov     [current_line],edi
-       mov     ecx,4
-       rep     movs dword [edi],[esi]
-       test    [macro_status],0Fh
-       jz      instant_macro_attached_line
-       mov     ax,3Bh
-       stos    word [edi]
-      instant_macro_attached_line:
-       mov     esi,ebx
-       sub     edx,ebx
-       mov     ecx,edx
-       call    move_data
-       jmp     initial_preprocessing_ok
-      precalculate_value:
-       push    edi
-       call    convert_expression
-       mov     al,')'
-       stosb
-       push    esi
-       mov     esi,[esp+4]
-       mov     [error_line],0
-       mov     [value_size],0
-       call    calculate_expression
-       cmp     [error_line],0
-       je      value_precalculated
-       jmp     [error]
-      value_precalculated:
-       mov     eax,[edi]
-       mov     ecx,[edi+4]
-       cdq
-       cmp     edx,ecx
-       jne     value_out_of_range
-       cmp     dl,[edi+13]
-       jne     value_out_of_range
-       pop     esi edi
-       ret
-do_irp:
-       cmp     byte [esi],1Ah
-       jne     invalid_macro_arguments
-       movzx   eax,byte [esi+1]
-       lea     esi,[esi+2+eax]
-       lods    byte [esi]
-       cmp     [base_code],1
-       ja      irps_name_ok
-       cmp     al,':'
-       je      irp_with_default_value
-       cmp     al,'='
-       je      irp_with_default_value
-       cmp     al,'*'
-       jne     irp_name_ok
-       lods    byte [esi]
-      irp_name_ok:
-       cmp     al,','
-       jne     invalid_macro_arguments
-       jmp     irp_parameters_start
-      irp_with_default_value:
-       xor     ebp,ebp
-       or      [skip_default_argument_value],-1
-       call    skip_macro_argument_value
-       cmp     byte [esi],','
-       jne     invalid_macro_arguments
-       inc     esi
-       jmp     irp_parameters_start
-      irps_name_ok:
-       cmp     al,','
-       jne     invalid_macro_arguments
-       cmp     [base_code],3
-       je      irp_parameters_start
-       mov     al,[esi]
-       or      al,al
-       jz      instant_macro_done
-       cmp     al,'{'
-       je      instant_macro_done
-      irp_parameters_start:
-       xor     eax,eax
-       push    [free_additional_memory]
-       push    [macro_symbols]
-       mov     [macro_symbols],eax
-       push    [counter_limit]
-       mov     [counter_limit],eax
-       mov     [struc_name],eax
-       cmp     [base_code],3
-       je      get_irpv_parameter
-       mov     ebx,esi
-       cmp     [base_code],2
-       je      get_irps_parameter
-       mov     edx,[parameters_end]
-       mov     al,[edx]
-       push    eax
-       mov     byte [edx],0
-      get_irp_parameter:
-       inc     [counter_limit]
-       mov     esi,[instant_macro_start]
-       inc     esi
-       call    get_macro_argument
-       cmp     byte [ebx],','
-       jne     irp_parameters_end
-       inc     ebx
-       jmp     get_irp_parameter
-      irp_parameters_end:
-       mov     esi,ebx
-       pop     eax
-       mov     [esi],al
-       jmp     instant_macro_parameters_ok
-      get_irps_parameter:
-       mov     esi,[instant_macro_start]
-       inc     esi
-       lods    byte [esi]
-       movzx   ecx,al
-       inc     [counter_limit]
-       mov     eax,[counter_limit]
-       call    add_macro_symbol
-       mov     [edx+12],ebx
-       cmp     byte [ebx],1Ah
-       je      irps_symbol
-       cmp     byte [ebx],22h
-       je      irps_quoted_string
-       mov     eax,1
-       jmp     irps_parameter_ok
-      irps_quoted_string:
-       mov     eax,[ebx+1]
-       add     eax,1+4
-       jmp     irps_parameter_ok
-      irps_symbol:
-       movzx   eax,byte [ebx+1]
-       add     eax,1+1
-      irps_parameter_ok:
-       mov     [edx+8],eax
-       add     ebx,eax
-       cmp     byte [ebx],0
-       je      irps_parameters_end
-       cmp     byte [ebx],'{'
-       jne     get_irps_parameter
-      irps_parameters_end:
-       mov     esi,ebx
-       jmp     instant_macro_parameters_ok
-      get_irpv_parameter:
-       lods    byte [esi]
-       cmp     al,1Ah
-       jne     invalid_macro_arguments
-       lods    byte [esi]
-       mov     ebp,esi
-       mov     cl,al
-       mov     ch,10b
-       call    get_preprocessor_symbol
-       jc      instant_macro_finish
-       test    edx,edx
-       jz      invalid_use_of_symbol
-       push    edx
-      mark_variable_value:
-       inc     [counter_limit]
-       mov     [edx+4],ebp
-      next_variable_value:
-       mov     edx,[edx]
-       or      edx,edx
-       jz      variable_values_marked
-       mov     eax,[edx+4]
-       cmp     eax,1
-       jbe     next_variable_value
-       mov     esi,ebp
-       movzx   ecx,byte [esi-1]
-       xchg    edi,eax
-       repe    cmps byte [esi],[edi]
-       xchg    edi,eax
-       je      mark_variable_value
-       jmp     next_variable_value
-      variable_values_marked:
-       pop     edx
-       push    [counter_limit]
-      add_irpv_value:
-       push    edx
-       mov     esi,[instant_macro_start]
-       inc     esi
-       lods    byte [esi]
-       movzx   ecx,al
-       mov     eax,[esp+4]
-       call    add_macro_symbol
-       mov     ebx,edx
-       pop     edx
-       mov     ecx,[edx+12]
-       mov     eax,[edx+8]
-       mov     [ebx+12],eax
-       mov     [ebx+8],ecx
-      collect_next_variable_value:
-       mov     edx,[edx]
-       or      edx,edx
-       jz      variable_values_collected
-       cmp     ebp,[edx+4]
-       jne     collect_next_variable_value
-       dec     dword [esp]
-       jnz     add_irpv_value
-      variable_values_collected:
-       pop     eax
-       mov     esi,ebp
-       movzx   ecx,byte [esi-1]
-       add     esi,ecx
-       cmp     byte [esi],0
-       je      instant_macro_parameters_ok
-       cmp     byte [esi],'{'
-       jne     invalid_macro_arguments
-       jmp     instant_macro_parameters_ok
-
-do_match:
-       mov     ebx,esi
-       call    skip_pattern
-       call    exact_match
-       mov     edx,edi
-       mov     al,[ebx]
-       cmp     al,1Ah
-       je      free_match
-       cmp     al,','
-       jne     instant_macro_done
-       cmp     esi,[parameters_end]
-       je      matched_pattern
-       jmp     instant_macro_done
-      free_match:
-       add     edx,12
-       cmp     edx,[memory_end]
-       ja      out_of_memory
-       mov     [edx-12],ebx
-       mov     [edx-8],esi
-       call    skip_match_element
-       jc      try_different_matching
-       mov     [edx-4],esi
-       movzx   eax,byte [ebx+1]
-       lea     ebx,[ebx+2+eax]
-       cmp     byte [ebx],1Ah
-       je      free_match
-      find_exact_match:
-       call    exact_match
-       cmp     esi,[parameters_end]
-       je      end_matching
-       cmp     byte [ebx],1Ah
-       je      free_match
-       mov     ebx,[edx-12]
-       movzx   eax,byte [ebx+1]
-       lea     ebx,[ebx+2+eax]
-       mov     esi,[edx-4]
-       jmp     match_more_elements
-      try_different_matching:
-       sub     edx,12
-       cmp     edx,edi
-       je      instant_macro_done
-       mov     ebx,[edx-12]
-       movzx   eax,byte [ebx+1]
-       lea     ebx,[ebx+2+eax]
-       cmp     byte [ebx],1Ah
-       je      try_different_matching
-       mov     esi,[edx-4]
-      match_more_elements:
-       call    skip_match_element
-       jc      try_different_matching
-       mov     [edx-4],esi
-       jmp     find_exact_match
-      skip_match_element:
-       cmp     esi,[parameters_end]
-       je      cannot_match
-       mov     al,[esi]
-       cmp     al,1Ah
-       je      skip_match_symbol
-       cmp     al,22h
-       je      skip_match_quoted_string
-       add     esi,1
-       ret
-      skip_match_quoted_string:
-       mov     eax,[esi+1]
-       add     esi,5
-       jmp     skip_match_ok
-      skip_match_symbol:
-       movzx   eax,byte [esi+1]
-       add     esi,2
-      skip_match_ok:
-       add     esi,eax
-       ret
-      cannot_match:
-       stc
-       ret
-      exact_match:
-       cmp     esi,[parameters_end]
-       je      exact_match_complete
-       mov     ah,[esi]
-       mov     al,[ebx]
-       cmp     al,','
-       je      exact_match_complete
-       cmp     al,1Ah
-       je      exact_match_complete
-       cmp     al,'='
-       je      match_verbatim
-       call    match_elements
-       je      exact_match
-      exact_match_complete:
-       ret
-      match_verbatim:
-       inc     ebx
-       call    match_elements
-       je      exact_match
-       dec     ebx
-       ret
-      match_elements:
-       mov     al,[ebx]
-       cmp     al,1Ah
-       je      match_symbols
-       cmp     al,22h
-       je      match_quoted_strings
-       cmp     al,ah
-       je      symbol_characters_matched
-       ret
-      symbol_characters_matched:
-       lea     ebx,[ebx+1]
-       lea     esi,[esi+1]
-       ret
-      match_quoted_strings:
-       mov     ecx,[ebx+1]
-       add     ecx,5
-       jmp     compare_elements
-      match_symbols:
-       movzx   ecx,byte [ebx+1]
-       add     ecx,2
-      compare_elements:
-       mov     eax,esi
-       mov     ebp,edi
-       mov     edi,ebx
-       repe    cmps byte [esi],[edi]
-       jne     elements_mismatch
-       mov     ebx,edi
-       mov     edi,ebp
-       ret
-      elements_mismatch:
-       mov     esi,eax
-       mov     edi,ebp
-       ret
-      end_matching:
-       cmp     byte [ebx],','
-       jne     instant_macro_done
-      matched_pattern:
-       xor     eax,eax
-       push    [free_additional_memory]
-       push    [macro_symbols]
-       mov     [macro_symbols],eax
-       push    [counter_limit]
-       mov     [counter_limit],eax
-       mov     [struc_name],eax
-       push    esi edi edx
-      add_matched_symbol:
-       cmp     edi,[esp]
-       je      matched_symbols_ok
-       mov     esi,[edi]
-       inc     esi
-       lods    byte [esi]
-       movzx   ecx,al
-       xor     eax,eax
-       call    add_macro_symbol
-       mov     eax,[edi+4]
-       mov     dword [edx+12],eax
-       mov     ecx,[edi+8]
-       sub     ecx,eax
-       mov     dword [edx+8],ecx
-       add     edi,12
-       jmp     add_matched_symbol
-      matched_symbols_ok:
-       pop     edx edi esi
-       jmp     instant_macro_parameters_ok
-
-process_macro:
-       push    dword [macro_status]
-       or      [macro_status],10h
-       push    [counter]
-       push    [macro_block]
-       push    [macro_block_line]
-       push    [macro_block_line_number]
-       push    [struc_label]
-       push    [struc_name]
-       push    eax
-       push    [current_line]
-       lods    byte [esi]
-       cmp     al,'{'
-       je      macro_instructions_start
-       or      al,al
-       jnz     unexpected_characters
-      find_macro_instructions:
-       mov     [macro_line],esi
-       add     esi,16+2
-       lods    byte [esi]
-       or      al,al
-       jz      find_macro_instructions
-       cmp     al,'{'
-       je      macro_instructions_start
-       cmp     al,3Bh
-       jne     unexpected_characters
-       call    skip_foreign_symbol
-       jmp     find_macro_instructions
-      macro_instructions_start:
-       mov     ecx,80000000h
-       mov     [macro_block],esi
-       mov     eax,[macro_line]
-       mov     [macro_block_line],eax
-       mov     [macro_block_line_number],ecx
-       xor     eax,eax
-       mov     [counter],eax
-       cmp     [counter_limit],eax
-       je      process_macro_line
-       inc     [counter]
-      process_macro_line:
-       lods    byte [esi]
-       or      al,al
-       jz      process_next_line
-       cmp     al,'}'
-       je      macro_block_processed
-       dec     esi
-       mov     [current_line],edi
-       lea     eax,[edi+10h]
-       cmp     eax,[memory_end]
-       jae     out_of_memory
-       mov     eax,[esp+4]
-       or      eax,eax
-       jz      instant_macro_line_header
-       stos    dword [edi]
-       mov     eax,ecx
-       stos    dword [edi]
-       mov     eax,[esp]
-       stos    dword [edi]
-       mov     eax,[macro_line]
-       stos    dword [edi]
-       jmp     macro_line_header_ok
-      instant_macro_line_header:
-       mov     eax,[esp]
-       add     eax,16
-      find_defining_directive:
-       inc     eax
-       cmp     byte [eax-1],3Bh
-       je      defining_directive_ok
-       cmp     byte [eax-1],1Ah
-       jne     find_defining_directive
-       push    eax
-       movzx   eax,byte [eax]
-       inc     eax
-       add     [esp],eax
-       pop     eax
-       jmp     find_defining_directive
-      defining_directive_ok:
-       stos    dword [edi]
-       mov     eax,ecx
-       stos    dword [edi]
-       mov     eax,[macro_line]
-       stos    dword [edi]
-       stos    dword [edi]
-      macro_line_header_ok:
-       or      [macro_status],20h
-       push    ebx ecx
-       test    [macro_status],0Fh
-       jz      process_macro_line_element
-       mov     ax,3Bh
-       stos    word [edi]
-      process_macro_line_element:
-       lea     eax,[edi+100h]
-       cmp     eax,[memory_end]
-       jae     out_of_memory
-       lods    byte [esi]
-       cmp     al,'}'
-       je      macro_line_processed
-       or      al,al
-       jz      macro_line_processed
-       cmp     al,1Ah
-       je      process_macro_symbol
-       cmp     al,3Bh
-       je      macro_foreign_line
-       and     [macro_status],not 20h
-       stos    byte [edi]
-       cmp     al,22h
-       jne     process_macro_line_element
-      copy_macro_string:
-       mov     ecx,[esi]
-       add     ecx,4
-       call    move_data
-       jmp     process_macro_line_element
-      process_macro_symbol:
-       push    esi edi
-       test    [macro_status],20h
-       jz      not_macro_directive
-       movzx   ecx,byte [esi]
-       inc     esi
-       mov     edi,macro_directives
-       call    get_directive
-       jnc     process_macro_directive
-       dec     esi
-       jmp     not_macro_directive
-      process_macro_directive:
-       mov     edx,eax
-       pop     edi eax
-       mov     byte [edi],0
-       inc     edi
-       pop     ecx ebx
-       jmp     near edx
-      not_macro_directive:
-       and     [macro_status],not 20h
-       movzx   ecx,byte [esi]
-       inc     esi
-       mov     eax,[counter]
-       call    get_macro_symbol
-       jnc     group_macro_symbol
-       xor     eax,eax
-       cmp     [counter],eax
-       je      multiple_macro_symbol_values
-       call    get_macro_symbol
-       jc      not_macro_symbol
-      replace_macro_symbol:
-       pop     edi eax
-       mov     ecx,[edx+8]
-       mov     edx,[edx+12]
-       or      edx,edx
-       jz      replace_macro_counter
-       and     ecx,not 80000000h
-       xchg    esi,edx
-       call    move_data
-       mov     esi,edx
-       jmp     process_macro_line_element
-      group_macro_symbol:
-       xor     eax,eax
-       cmp     [counter],eax
-       je      replace_macro_symbol
-       push    esi edx
-       sub     esi,ecx
-       call    get_macro_symbol
-       mov     ebx,edx
-       pop     edx esi
-       jc      replace_macro_symbol
-       cmp     edx,ebx
-       ja      replace_macro_symbol
-       mov     edx,ebx
-       jmp     replace_macro_symbol
-      multiple_macro_symbol_values:
-       inc     eax
-       push    eax
-       call    get_macro_symbol
-       pop     eax
-       jc      not_macro_symbol
-       pop     edi
-       push    ecx
-       mov     ecx,[edx+8]
-       mov     edx,[edx+12]
-       xchg    esi,edx
-       btr     ecx,31
-       jc      enclose_macro_symbol_value
-       rep     movs byte [edi],[esi]
-       jmp     macro_symbol_value_ok
-      enclose_macro_symbol_value:
-       mov     byte [edi],'<'
-       inc     edi
-       rep     movs byte [edi],[esi]
-       mov     byte [edi],'>'
-       inc     edi
-      macro_symbol_value_ok:
-       cmp     eax,[counter_limit]
-       je      multiple_macro_symbol_values_ok
-       mov     byte [edi],','
-       inc     edi
-       mov     esi,edx
-       pop     ecx
-       push    edi
-       sub     esi,ecx
-       jmp     multiple_macro_symbol_values
-      multiple_macro_symbol_values_ok:
-       pop     ecx eax
-       mov     esi,edx
-       jmp     process_macro_line_element
-      replace_macro_counter:
-       mov     eax,[counter]
-       and     eax,not 80000000h
-       jz      group_macro_counter
-       add     ecx,eax
-       dec     ecx
-       call    store_number_symbol
-       jmp     process_macro_line_element
-      group_macro_counter:
-       mov     edx,ecx
-       xor     ecx,ecx
-      multiple_macro_counter_values:
-       push    ecx edx
-       add     ecx,edx
-       call    store_number_symbol
-       pop     edx ecx
-       inc     ecx
-       cmp     ecx,[counter_limit]
-       je      process_macro_line_element
-       mov     byte [edi],','
-       inc     edi
-       jmp     multiple_macro_counter_values
-      store_number_symbol:
-       cmp     ecx,0
-       jge     numer_symbol_sign_ok
-       neg     ecx
-       mov     al,'-'
-       stos    byte [edi]
-      numer_symbol_sign_ok:
-       mov     ax,1Ah
-       stos    word [edi]
-       push    edi
-       mov     eax,ecx
-       mov     ecx,1000000000
-       xor     edx,edx
-       xor     bl,bl
-      store_number_digits:
-       div     ecx
-       push    edx
-       or      bl,bl
-       jnz     store_number_digit
-       cmp     ecx,1
-       je      store_number_digit
-       or      al,al
-       jz      number_digit_ok
-       not     bl
-      store_number_digit:
-       add     al,30h
-       stos    byte [edi]
-      number_digit_ok:
-       mov     eax,ecx
-       xor     edx,edx
-       mov     ecx,10
-       div     ecx
-       mov     ecx,eax
-       pop     eax
-       or      ecx,ecx
-       jnz     store_number_digits
-       pop     ebx
-       mov     eax,edi
-       sub     eax,ebx
-       mov     [ebx-1],al
-       ret
-      not_macro_symbol:
-       pop     edi esi
-       mov     al,1Ah
-       stos    byte [edi]
-       mov     al,[esi]
-       inc     esi
-       stos    byte [edi]
-       cmp     byte [esi],'.'
-       jne     copy_raw_symbol
-       mov     ebx,[esp+8+8]
-       or      ebx,ebx
-       jz      copy_raw_symbol
-       cmp     al,1
-       je      copy_struc_name
-       xchg    esi,ebx
-       movzx   ecx,byte [esi-1]
-       add     [edi-1],cl
-       jc      name_too_long
-       rep     movs byte [edi],[esi]
-       xchg    esi,ebx
-      copy_raw_symbol:
-       movzx   ecx,al
-       rep     movs byte [edi],[esi]
-       jmp     process_macro_line_element
-      copy_struc_name:
-       inc     esi
-       xchg    esi,ebx
-       movzx   ecx,byte [esi-1]
-       mov     [edi-1],cl
-       rep     movs byte [edi],[esi]
-       xchg    esi,ebx
-       mov     eax,[esp+8+12]
-       cmp     byte [eax],3Bh
-       je      process_macro_line_element
-       cmp     byte [eax],1Ah
-       jne     disable_replaced_struc_name
-       mov     byte [eax],3Bh
-       jmp     process_macro_line_element
-      disable_replaced_struc_name:
-       mov     ebx,[esp+8+8]
-       push    esi edi
-       lea     edi,[ebx-3]
-       lea     esi,[edi-2]
-       lea     ecx,[esi+1]
-       sub     ecx,eax
-       std
-       rep     movs byte [edi],[esi]
-       cld
-       mov     word [eax],3Bh
-       pop     edi esi
-       jmp     process_macro_line_element
-      skip_foreign_symbol:
-       lods    byte [esi]
-       movzx   eax,al
-       add     esi,eax
-      skip_foreign_line:
-       lods    byte [esi]
-       cmp     al,1Ah
-       je      skip_foreign_symbol
-       cmp     al,3Bh
-       je      skip_foreign_symbol
-       cmp     al,22h
-       je      skip_foreign_string
-       or      al,al
-       jnz     skip_foreign_line
-       ret
-      skip_foreign_string:
-       lods    dword [esi]
-       add     esi,eax
-       jmp     skip_foreign_line
-      macro_foreign_line:
-       call    skip_foreign_symbol
-      macro_line_processed:
-       mov     byte [edi],0
-       inc     edi
-       push    eax
-       call    preprocess_line
-       pop     eax
-       pop     ecx ebx
-       cmp     al,'}'
-       je      macro_block_processed
-      process_next_line:
-       inc     ecx
-       mov     [macro_line],esi
-       add     esi,16+2
-       jmp     process_macro_line
-      macro_block_processed:
-       call    close_macro_block
-       jc      process_macro_line
-       pop     [current_line]
-       add     esp,12
-       pop     [macro_block_line_number]
-       pop     [macro_block_line]
-       pop     [macro_block]
-       pop     [counter]
-       pop     eax
-       and     al,0F0h
-       and     [macro_status],0Fh
-       or      [macro_status],al
-       ret
-
-local_symbols:
-       lods    byte [esi]
-       cmp     al,1Ah
-       jne     invalid_argument
-       mov     byte [edi-1],3Bh
-       xor     al,al
-       stos    byte [edi]
-      make_local_symbol:
-       push    ecx
-       lods    byte [esi]
-       movzx   ecx,al
-       mov     eax,[counter]
-       call    add_macro_symbol
-       mov     [edx+12],edi
-       movzx   eax,[locals_counter]
-       add     eax,ecx
-       inc     eax
-       cmp     eax,100h
-       jae     name_too_long
-       lea     ebp,[edi+2+eax]
-       cmp     ebp,[memory_end]
-       jae     out_of_memory
-       mov     ah,al
-       mov     al,1Ah
-       stos    word [edi]
-       rep     movs byte [edi],[esi]
-       mov     al,'?'
-       stos    byte [edi]
-       push    esi
-       mov     esi,locals_counter+1
-       movzx   ecx,[locals_counter]
-       rep     movs byte [edi],[esi]
-       pop     esi
-       mov     eax,edi
-       sub     eax,[edx+12]
-       mov     [edx+8],eax
-       xor     al,al
-       stos    byte [edi]
-       mov     eax,locals_counter
-       movzx   ecx,byte [eax]
-      counter_loop:
-       inc     byte [eax+ecx]
-       cmp     byte [eax+ecx],'9'+1
-       jb      counter_ok
-       jne     letter_digit
-       mov     byte [eax+ecx],'A'
-       jmp     counter_ok
-      letter_digit:
-       cmp     byte [eax+ecx],'Z'+1
-       jb      counter_ok
-       jne     small_letter_digit
-       mov     byte [eax+ecx],'a'
-       jmp     counter_ok
-      small_letter_digit:
-       cmp     byte [eax+ecx],'z'+1
-       jb      counter_ok
-       mov     byte [eax+ecx],'0'
-       loop    counter_loop
-       inc     byte [eax]
-       movzx   ecx,byte [eax]
-       mov     byte [eax+ecx],'0'
-      counter_ok:
-       pop     ecx
-       lods    byte [esi]
-       cmp     al,'}'
-       je      macro_block_processed
-       or      al,al
-       jz      process_next_line
-       cmp     al,','
-       jne     extra_characters_on_line
-       dec     edi
-       lods    byte [esi]
-       cmp     al,1Ah
-       je      make_local_symbol
-       jmp     invalid_argument
-common_block:
-       call    close_macro_block
-       jc      process_macro_line
-       mov     [counter],0
-       jmp     new_macro_block
-forward_block:
-       cmp     [counter_limit],0
-       je      common_block
-       call    close_macro_block
-       jc      process_macro_line
-       mov     [counter],1
-       jmp     new_macro_block
-reverse_block:
-       cmp     [counter_limit],0
-       je      common_block
-       call    close_macro_block
-       jc      process_macro_line
-       mov     eax,[counter_limit]
-       or      eax,80000000h
-       mov     [counter],eax
-      new_macro_block:
-       mov     [macro_block],esi
-       mov     eax,[macro_line]
-       mov     [macro_block_line],eax
-       mov     [macro_block_line_number],ecx
-       jmp     process_macro_line
-close_macro_block:
-       cmp     esi,[macro_block]
-       je      block_closed
-       cmp     [counter],0
-       je      block_closed
-       jl      reverse_counter
-       mov     eax,[counter]
-       cmp     eax,[counter_limit]
-       je      block_closed
-       inc     [counter]
-       jmp     continue_block
-      reverse_counter:
-       mov     eax,[counter]
-       dec     eax
-       cmp     eax,80000000h
-       je      block_closed
-       mov     [counter],eax
-      continue_block:
-       mov     esi,[macro_block]
-       mov     eax,[macro_block_line]
-       mov     [macro_line],eax
-       mov     ecx,[macro_block_line_number]
-       stc
-       ret
-      block_closed:
-       clc
-       ret
-get_macro_symbol:
-       push    ecx
-       call    find_macro_symbol_leaf
-       jc      macro_symbol_not_found
-       mov     edx,[ebx]
-       mov     ebx,esi
-      try_macro_symbol:
-       or      edx,edx
-       jz      macro_symbol_not_found
-       mov     ecx,[esp]
-       mov     edi,[edx+4]
-       repe    cmps byte [esi],[edi]
-       je      macro_symbol_found
-       mov     esi,ebx
-       mov     edx,[edx]
-       jmp     try_macro_symbol
-      macro_symbol_found:
-       pop     ecx
-       clc
-       ret
-      macro_symbol_not_found:
-       pop     ecx
-       stc
-       ret
-      find_macro_symbol_leaf:
-       shl     eax,8
-       mov     al,cl
-       mov     ebp,eax
-       mov     ebx,macro_symbols
-      follow_macro_symbols_tree:
-       mov     edx,[ebx]
-       or      edx,edx
-       jz      no_such_macro_symbol
-       xor     eax,eax
-       shr     ebp,1
-       adc     eax,0
-       lea     ebx,[edx+eax*4]
-       or      ebp,ebp
-       jnz     follow_macro_symbols_tree
-       add     ebx,8
-       clc
-       ret
-      no_such_macro_symbol:
-       stc
-       ret
-add_macro_symbol:
-       push    ebx ebp
-       call    find_macro_symbol_leaf
-       jc      extend_macro_symbol_tree
-       mov     eax,[ebx]
-      make_macro_symbol:
-       mov     edx,[free_additional_memory]
-       add     edx,16
-       cmp     edx,[labels_list]
-       ja      out_of_memory
-       xchg    edx,[free_additional_memory]
-       mov     [ebx],edx
-       mov     [edx],eax
-       mov     [edx+4],esi
-       pop     ebp ebx
-       ret
-      extend_macro_symbol_tree:
-       mov     edx,[free_additional_memory]
-       add     edx,16
-       cmp     edx,[labels_list]
-       ja      out_of_memory
-       xchg    edx,[free_additional_memory]
-       xor     eax,eax
-       mov     [edx],eax
-       mov     [edx+4],eax
-       mov     [edx+8],eax
-       mov     [edx+12],eax
-       shr     ebp,1
-       adc     eax,0
-       mov     [ebx],edx
-       lea     ebx,[edx+eax*4]
-       or      ebp,ebp
-       jnz     extend_macro_symbol_tree
-       add     ebx,8
-       xor     eax,eax
-       jmp     make_macro_symbol
-
-include_file:
-       lods    byte [esi]
-       cmp     al,22h
-       jne     invalid_argument
-       lods    dword [esi]
-       cmp     byte [esi+eax],0
-       jne     extra_characters_on_line
-       push    esi
-       push    edi
-       mov     ebx,[current_line]
-      find_current_file_path:
-       mov     esi,[ebx]
-       test    byte [ebx+7],80h
-       jz      copy_current_file_path
-       mov     ebx,[ebx+8]
-       jmp     find_current_file_path
-      copy_current_file_path:
-       lods    byte [esi]
-       stos    byte [edi]
-       or      al,al
-       jnz     copy_current_file_path
-      cut_current_file_name:
-       cmp     edi,[esp]
-       je      current_file_path_ok
-       cmp     byte [edi-1],'\'
-       je      current_file_path_ok
-       cmp     byte [edi-1],'/'
-       je      current_file_path_ok
-       dec     edi
-       jmp     cut_current_file_name
-      current_file_path_ok:
-       mov     esi,[esp+4]
-       call    expand_path
-       pop     edx
-       mov     esi,edx
-       call    open
-       jnc     include_path_ok
-       mov     ebp,[include_paths]
-      try_include_directories:
-       mov     edi,esi
-       mov     esi,ebp
-       cmp     byte [esi],0
-       je      try_in_current_directory
-       push    ebp
-       push    edi
-       call    get_include_directory
-       mov     [esp+4],esi
-       mov     esi,[esp+8]
-       call    expand_path
-       pop     edx
-       mov     esi,edx
-       call    open
-       pop     ebp
-       jnc     include_path_ok
-       jmp     try_include_directories
-       mov     edi,esi
-      try_in_current_directory:
-       mov     esi,[esp]
-       push    edi
-       call    expand_path
-       pop     edx
-       mov     esi,edx
-       call    open
-       jc      file_not_found
-      include_path_ok:
-       mov     edi,[esp]
-      copy_preprocessed_path:
-       lods    byte [esi]
-       stos    byte [edi]
-       or      al,al
-       jnz     copy_preprocessed_path
-       pop     esi
-       lea     ecx,[edi-1]
-       sub     ecx,esi
-       mov     [esi-4],ecx
-       push    dword [macro_status]
-       and     [macro_status],0Fh
-       call    preprocess_file
-       pop     eax
-       and     al,0F0h
-       and     [macro_status],0Fh
-       or      [macro_status],al
-       jmp     line_preprocessed
diff --git a/source/symbdump.inc b/source/symbdump.inc
deleted file mode 100644 (file)
index c1abdad..0000000
+++ /dev/null
@@ -1,450 +0,0 @@
-
-; flat assembler core
-; Copyright (c) 1999-2022, Tomasz Grysztar.
-; All rights reserved.
-
-dump_symbols:
-       mov     edi,[code_start]
-       call    setup_dump_header
-       mov     esi,[input_file]
-       call    copy_asciiz
-       cmp     edi,[tagged_blocks]
-       jae     out_of_memory
-       mov     eax,edi
-       sub     eax,ebx
-       mov     [ebx-40h+0Ch],eax
-       mov     esi,[output_file]
-       call    copy_asciiz
-       cmp     edi,[tagged_blocks]
-       jae     out_of_memory
-       mov     edx,[symbols_stream]
-       mov     ebp,[free_additional_memory]
-       and     [number_of_sections],0
-       cmp     [output_format],4
-       je      prepare_strings_table
-       cmp     [output_format],5
-       jne     strings_table_ready
-       bt      [format_flags],0
-       jc      strings_table_ready
-      prepare_strings_table:
-       cmp     edx,ebp
-       je      strings_table_ready
-       mov     al,[edx]
-       test    al,al
-       jz      prepare_string
-       cmp     al,80h
-       je      prepare_string
-       add     edx,0Ch
-       cmp     al,0C0h
-       jb      prepare_strings_table
-       add     edx,4
-       jmp     prepare_strings_table
-      prepare_string:
-       mov     esi,edi
-       sub     esi,ebx
-       xchg    esi,[edx+4]
-       test    al,al
-       jz      prepare_section_string
-       or      dword [edx+4],1 shl 31
-       add     edx,0Ch
-      prepare_external_string:
-       mov     ecx,[esi]
-       add     esi,4
-       rep     movs byte [edi],[esi]
-       mov     byte [edi],0
-       inc     edi
-       cmp     edi,[tagged_blocks]
-       jae     out_of_memory
-       jmp     prepare_strings_table
-      prepare_section_string:
-       mov     ecx,[number_of_sections]
-       mov     eax,ecx
-       inc     eax
-       mov     [number_of_sections],eax
-       xchg    eax,[edx+4]
-       shl     ecx,2
-       add     ecx,[free_additional_memory]
-       mov     [ecx],eax
-       add     edx,20h
-       test    esi,esi
-       jz      prepare_default_section_string
-       cmp     [output_format],5
-       jne     prepare_external_string
-       bt      [format_flags],0
-       jc      prepare_external_string
-       mov     esi,[esi]
-       add     esi,[resource_data]
-      copy_elf_section_name:
-       lods    byte [esi]
-       cmp     edi,[tagged_blocks]
-       jae     out_of_memory
-       stos    byte [edi]
-       test    al,al
-       jnz     copy_elf_section_name
-       jmp     prepare_strings_table
-      prepare_default_section_string:
-       mov     eax,'.fla'
-       stos    dword [edi]
-       mov     ax,'t'
-       stos    word [edi]
-       cmp     edi,[tagged_blocks]
-       jae     out_of_memory
-       jmp     prepare_strings_table
-      strings_table_ready:
-       mov     edx,[tagged_blocks]
-       mov     ebp,[memory_end]
-       sub     ebp,[labels_list]
-       add     ebp,edx
-      prepare_labels_dump:
-       cmp     edx,ebp
-       je      labels_dump_ok
-       mov     eax,[edx+24]
-       test    eax,eax
-       jz      label_dump_name_ok
-       cmp     eax,[memory_start]
-       jb      label_name_outside_source
-       cmp     eax,[source_start]
-       ja      label_name_outside_source
-       sub     eax,[memory_start]
-       dec     eax
-       mov     [edx+24],eax
-       jmp     label_dump_name_ok
-      label_name_outside_source:
-       mov     esi,eax
-       mov     eax,edi
-       sub     eax,ebx
-       or      eax,1 shl 31
-       mov     [edx+24],eax
-       movzx   ecx,byte [esi-1]
-       lea     eax,[edi+ecx+1]
-       cmp     edi,[tagged_blocks]
-       jae     out_of_memory
-       rep     movsb
-       xor     al,al
-       stosb
-      label_dump_name_ok:
-       mov     eax,[edx+28]
-       test    eax,eax
-       jz      label_dump_line_ok
-       sub     eax,[memory_start]
-       mov     [edx+28],eax
-      label_dump_line_ok:
-       test    byte [edx+9],4
-       jz      convert_base_symbol_for_label
-       xor     eax,eax
-       mov     [edx],eax
-       mov     [edx+4],eax
-       jmp     base_symbol_for_label_ok
-      convert_base_symbol_for_label:
-       mov     eax,[edx+20]
-       test    eax,eax
-       jz      base_symbol_for_label_ok
-       cmp     eax,[symbols_stream]
-       mov     eax,[eax+4]
-       jae     base_symbol_for_label_ok
-       xor     eax,eax
-      base_symbol_for_label_ok:
-       mov     [edx+20],eax
-       mov     ax,[current_pass]
-       cmp     ax,[edx+16]
-       je      label_defined_flag_ok
-       and     byte [edx+8],not 1
-      label_defined_flag_ok:
-       cmp     ax,[edx+18]
-       je      label_used_flag_ok
-       and     byte [edx+8],not 8
-      label_used_flag_ok:
-       add     edx,LABEL_STRUCTURE_SIZE
-       jmp     prepare_labels_dump
-      labels_dump_ok:
-       mov     eax,edi
-       sub     eax,ebx
-       mov     [ebx-40h+14h],eax
-       add     eax,40h
-       mov     [ebx-40h+18h],eax
-       mov     ecx,[memory_end]
-       sub     ecx,[labels_list]
-       mov     [ebx-40h+1Ch],ecx
-       add     eax,ecx
-       mov     [ebx-40h+20h],eax
-       mov     ecx,[source_start]
-       sub     ecx,[memory_start]
-       mov     [ebx-40h+24h],ecx
-       add     eax,ecx
-       mov     [ebx-40h+28h],eax
-       mov     eax,[number_of_sections]
-       shl     eax,2
-       mov     [ebx-40h+34h],eax
-       call    prepare_preprocessed_source
-       mov     esi,[labels_list]
-       mov     ebp,edi
-      make_lines_dump:
-       cmp     esi,[tagged_blocks]
-       je      lines_dump_ok
-       mov     eax,[esi-4]
-       mov     ecx,[esi-8]
-       sub     esi,8
-       sub     esi,ecx
-       cmp     eax,1
-       je      process_line_dump
-       cmp     eax,2
-       jne     make_lines_dump
-       add     dword [ebx-40h+3Ch],8
-       jmp     make_lines_dump
-      process_line_dump:
-       push    ebx
-       mov     ebx,[esi+8]
-       mov     eax,[esi+4]
-       sub     eax,[code_start]
-       add     eax,[headers_size]
-       test    byte [ebx+0Ah],1
-       jz      store_offset
-       xor     eax,eax
-      store_offset:
-       stos    dword [edi]
-       mov     eax,[esi]
-       sub     eax,[memory_start]
-       stos    dword [edi]
-       mov     eax,[esi+4]
-       xor     edx,edx
-       xor     cl,cl
-       sub     eax,[ebx]
-       sbb     edx,[ebx+4]
-       sbb     cl,[ebx+8]
-       stos    dword [edi]
-       mov     eax,edx
-       stos    dword [edi]
-       mov     eax,[ebx+10h]
-       stos    dword [edi]
-       mov     eax,[ebx+14h]
-       test    eax,eax
-       jz      base_symbol_for_line_ok
-       cmp     eax,[symbols_stream]
-       mov     eax,[eax+4]
-       jae     base_symbol_for_line_ok
-       xor     eax,eax
-      base_symbol_for_line_ok:
-       stos    dword [edi]
-       mov     al,[ebx+9]
-       stos    byte [edi]
-       mov     al,[esi+10h]
-       stos    byte [edi]
-       mov     al,[ebx+0Ah]
-       and     al,1
-       stos    byte [edi]
-       mov     al,cl
-       stos    byte [edi]
-       pop     ebx
-       cmp     edi,[tagged_blocks]
-       jae     out_of_memory
-       mov     eax,edi
-       sub     eax,1Ch
-       sub     eax,ebp
-       mov     [esi],eax
-       jmp     make_lines_dump
-      lines_dump_ok:
-       mov     edx,edi
-       mov     eax,[current_offset]
-       sub     eax,[code_start]
-       add     eax,[headers_size]
-       stos    dword [edi]
-       mov     ecx,edi
-       sub     ecx,ebx
-       sub     ecx,[ebx-40h+14h]
-       mov     [ebx-40h+2Ch],ecx
-       add     ecx,[ebx-40h+28h]
-       mov     [ebx-40h+30h],ecx
-       add     ecx,[ebx-40h+34h]
-       mov     [ebx-40h+38h],ecx
-      find_inexisting_offsets:
-       sub     edx,1Ch
-       cmp     edx,ebp
-       jb      write_symbols
-       test    byte [edx+1Ah],1
-       jnz     find_inexisting_offsets
-       cmp     eax,[edx]
-       jb      correct_inexisting_offset
-       mov     eax,[edx]
-       jmp     find_inexisting_offsets
-      correct_inexisting_offset:
-       and     dword [edx],0
-       or      byte [edx+1Ah],2
-       jmp     find_inexisting_offsets
-      write_symbols:
-       mov     edx,[symbols_file]
-       call    create
-       jc      write_failed
-       mov     edx,[code_start]
-       mov     ecx,[edx+14h]
-       add     ecx,40h
-       call    write
-       jc      write_failed
-       mov     edx,[tagged_blocks]
-       mov     ecx,[memory_end]
-       sub     ecx,[labels_list]
-       call    write
-       jc      write_failed
-       mov     edx,[memory_start]
-       mov     ecx,[source_start]
-       sub     ecx,edx
-       call    write
-       jc      write_failed
-       mov     edx,ebp
-       mov     ecx,edi
-       sub     ecx,edx
-       call    write
-       jc      write_failed
-       mov     edx,[free_additional_memory]
-       mov     ecx,[number_of_sections]
-       shl     ecx,2
-       call    write
-       jc      write_failed
-       mov     esi,[labels_list]
-       mov     edi,[memory_start]
-      make_references_dump:
-       cmp     esi,[tagged_blocks]
-       je      references_dump_ok
-       mov     eax,[esi-4]
-       mov     ecx,[esi-8]
-       sub     esi,8
-       sub     esi,ecx
-       cmp     eax,2
-       je      dump_reference
-       cmp     eax,1
-       jne     make_references_dump
-       mov     edx,[esi]
-       jmp     make_references_dump
-      dump_reference:
-       mov     eax,[memory_end]
-       sub     eax,[esi]
-       sub     eax,LABEL_STRUCTURE_SIZE
-       stosd
-       mov     eax,edx
-       stosd
-       cmp     edi,[tagged_blocks]
-       jb      make_references_dump
-       jmp     out_of_memory
-      references_dump_ok:
-       mov     edx,[memory_start]
-       mov     ecx,edi
-       sub     ecx,edx
-       call    write
-       jc      write_failed
-       call    close
-       ret
-      setup_dump_header:
-       xor     eax,eax
-       mov     ecx,40h shr 2
-       rep     stos dword [edi]
-       mov     ebx,edi
-       mov     dword [ebx-40h],'fas'+1Ah shl 24
-       mov     dword [ebx-40h+4],VERSION_MAJOR + VERSION_MINOR shl 8 + 40h shl 16
-       mov     dword [ebx-40h+10h],40h
-       ret
-prepare_preprocessed_source:
-       mov     esi,[memory_start]
-       mov     ebp,[source_start]
-       test    ebp,ebp
-       jnz     prepare_preprocessed_line
-       mov     ebp,[current_line]
-       inc     ebp
-      prepare_preprocessed_line:
-       cmp     esi,ebp
-       jae     preprocessed_source_ok
-       mov     eax,[memory_start]
-       mov     edx,[input_file]
-       cmp     [esi],edx
-       jne     line_not_from_main_input
-       mov     [esi],eax
-      line_not_from_main_input:
-       sub     [esi],eax
-       test    byte [esi+7],1 shl 7
-       jz      prepare_next_preprocessed_line
-       sub     [esi+8],eax
-       sub     [esi+12],eax
-      prepare_next_preprocessed_line:
-       call    skip_preprocessed_line
-       jmp     prepare_preprocessed_line
-      preprocessed_source_ok:
-       ret
-      skip_preprocessed_line:
-       add     esi,16
-      skip_preprocessed_line_content:
-       lods    byte [esi]
-       cmp     al,1Ah
-       je      skip_preprocessed_symbol
-       cmp     al,3Bh
-       je      skip_preprocessed_symbol
-       cmp     al,22h
-       je      skip_preprocessed_string
-       or      al,al
-       jnz     skip_preprocessed_line_content
-       ret
-      skip_preprocessed_string:
-       lods    dword [esi]
-       add     esi,eax
-       jmp     skip_preprocessed_line_content
-      skip_preprocessed_symbol:
-       lods    byte [esi]
-       movzx   eax,al
-       add     esi,eax
-       jmp     skip_preprocessed_line_content
-restore_preprocessed_source:
-       mov     esi,[memory_start]
-       mov     ebp,[source_start]
-       test    ebp,ebp
-       jnz     restore_preprocessed_line
-       mov     ebp,[current_line]
-       inc     ebp
-      restore_preprocessed_line:
-       cmp     esi,ebp
-       jae     preprocessed_source_restored
-       mov     eax,[memory_start]
-       add     [esi],eax
-       cmp     [esi],eax
-       jne     preprocessed_line_source_restored
-       mov     edx,[input_file]
-       mov     [esi],edx
-      preprocessed_line_source_restored:
-       test    byte [esi+7],1 shl 7
-       jz      restore_next_preprocessed_line
-       add     [esi+8],eax
-       add     [esi+12],eax
-      restore_next_preprocessed_line:
-       call    skip_preprocessed_line
-       jmp     restore_preprocessed_line
-      preprocessed_source_restored:
-       ret
-dump_preprocessed_source:
-       mov     edi,[free_additional_memory]
-       call    setup_dump_header
-       mov     esi,[input_file]
-       call    copy_asciiz
-       cmp     edi,[additional_memory_end]
-       jae     out_of_memory
-       mov     eax,edi
-       sub     eax,ebx
-       dec     eax
-       mov     [ebx-40h+0Ch],eax
-       mov     eax,edi
-       sub     eax,ebx
-       mov     [ebx-40h+14h],eax
-       add     eax,40h
-       mov     [ebx-40h+20h],eax
-       call    prepare_preprocessed_source
-       sub     esi,[memory_start]
-       mov     [ebx-40h+24h],esi
-       mov     edx,[symbols_file]
-       call    create
-       jc      write_failed
-       mov     edx,[free_additional_memory]
-       mov     ecx,[edx+14h]
-       add     ecx,40h
-       call    write
-       jc      write_failed
-       mov     edx,[memory_start]
-       mov     ecx,esi
-       call    write
-       jc      write_failed
-       call    close
-       ret
diff --git a/source/tables.inc b/source/tables.inc
deleted file mode 100644 (file)
index bc104a0..0000000
+++ /dev/null
@@ -1,4393 +0,0 @@
-
-; flat assembler core
-; Copyright (c) 1999-2022, Tomasz Grysztar.
-; All rights reserved.
-
-include_variable db 'INCLUDE',0
-
-symbol_characters db 27
- db 9,0Ah,0Dh,1Ah,20h,'+-/*=<>()[]{}:,|&~#`;\'
-
-preprocessor_directives:
- db 6,'define'
- dw define_symbolic_constant-directive_handler
- db 7,'include'
- dw include_file-directive_handler
- db 3,'irp'
- dw irp_directive-directive_handler
- db 4,'irps'
- dw irps_directive-directive_handler
- db 4,'irpv'
- dw irpv_directive-directive_handler
- db 5,'macro'
- dw define_macro-directive_handler
- db 5,'match'
- dw match_directive-directive_handler
- db 8,'postpone'
- dw postpone_directive-directive_handler
- db 5,'purge'
- dw purge_macro-directive_handler
- db 4,'rept'
- dw rept_directive-directive_handler
- db 7,'restore'
- dw restore_equ_constant-directive_handler
- db 7,'restruc'
- dw purge_struc-directive_handler
- db 5,'struc'
- dw define_struc-directive_handler
- db 0
-
-macro_directives:
- db 6,'common'
- dw common_block-directive_handler
- db 7,'forward'
- dw forward_block-directive_handler
- db 5,'local'
- dw local_symbols-directive_handler
- db 7,'reverse'
- dw reverse_block-directive_handler
- db 0
-
-preprocessor_special_symbols:
- db 4,'file'
- dw preprocessed_file_value-directive_handler
- db 4,'line'
- dw preprocessed_line_value-directive_handler
- db 0
-
-operators:
- db 1,'+',80h
- db 1,'-',81h
- db 1,'*',90h
- db 1,'/',91h
- db 3,'and',0B0h
- db 3,'mod',0A0h
- db 2,'or',0B1h
- db 3,'shl',0C0h
- db 3,'shr',0C1h
- db 3,'xor',0B2h
- db 0
-
-single_operand_operators:
- db 1,'+',82h
- db 1,'-',83h
- db 3,'bsf',0E0h
- db 3,'bsr',0E1h
- db 3,'not',0D0h
- db 3,'plt',0F1h
- db 3,'rva',0F0h
- db 0
-
-directive_operators:
- db 5,'align',8Ch
- db 2,'as',86h
- db 2,'at',80h
- db 7,'defined',88h
- db 8,'definite',8Ah
- db 3,'dup',81h
- db 2,'eq',0F0h
- db 6,'eqtype',0F7h
- db 4,'from',82h
- db 2,'in',0F6h
- db 2,'on',84h
- db 3,'ptr',85h
- db 10,'relativeto',0F8h
- db 4,'used',89h
- db 0
-
-address_sizes:
- db 4,'byte',1
- db 5,'dword',4
- db 5,'qword',8
- db 4,'word',2
- db 0
-
-symbols:
- dw symbols_1-symbols,(symbols_2-symbols_1)/(1+2)
- dw symbols_2-symbols,(symbols_3-symbols_2)/(2+2)
- dw symbols_3-symbols,(symbols_4-symbols_3)/(3+2)
- dw symbols_4-symbols,(symbols_5-symbols_4)/(4+2)
- dw symbols_5-symbols,(symbols_6-symbols_5)/(5+2)
- dw symbols_6-symbols,(symbols_7-symbols_6)/(6+2)
- dw symbols_7-symbols,(symbols_8-symbols_7)/(7+2)
- dw symbols_8-symbols,(symbols_9-symbols_8)/(8+2)
- dw symbols_9-symbols,(symbols_10-symbols_9)/(9+2)
- dw symbols_10-symbols,(symbols_11-symbols_10)/(10+2)
- dw symbols_11-symbols,(symbols_end-symbols_11)/(11+2)
-
-symbols_1:
- db 'z',1Fh,0
-symbols_2:
- db 'ah',10h,04h
- db 'al',10h,10h
- db 'ax',10h,20h
- db 'bh',10h,07h
- db 'bl',10h,13h
- db 'bp',10h,25h
- db 'bx',10h,23h
- db 'ch',10h,05h
- db 'cl',10h,11h
- db 'cs',10h,32h
- db 'cx',10h,21h
- db 'dh',10h,06h
- db 'di',10h,27h
- db 'dl',10h,12h
- db 'ds',10h,34h
- db 'dx',10h,22h
- db 'es',10h,31h
- db 'fs',10h,35h
- db 'gs',10h,36h
- db 'k0',14h,50h
- db 'k1',14h,51h
- db 'k2',14h,52h
- db 'k3',14h,53h
- db 'k4',14h,54h
- db 'k5',14h,55h
- db 'k6',14h,56h
- db 'k7',14h,57h
- db 'ms',1Ch,41h
- db 'mz',18h,20h
- db 'nx',1Bh,83h
- db 'pe',18h,30h
- db 'r8',10h,88h
- db 'r9',10h,89h
- db 'rd',1Fh,21h
- db 'rn',1Fh,20h
- db 'ru',1Fh,22h
- db 'rz',1Fh,23h
- db 'si',10h,26h
- db 'sp',10h,24h
- db 'ss',10h,33h
- db 'st',10h,0A0h
-symbols_3:
- db 'bpl',10h,15h
- db 'cr0',14h,00h
- db 'cr1',14h,01h
- db 'cr2',14h,02h
- db 'cr3',14h,03h
- db 'cr4',14h,04h
- db 'cr5',14h,05h
- db 'cr6',14h,06h
- db 'cr7',14h,07h
- db 'cr8',14h,08h
- db 'cr9',14h,09h
- db 'dil',10h,17h
- db 'dll',1Bh,80h
- db 'dr0',14h,10h
- db 'dr1',14h,11h
- db 'dr2',14h,12h
- db 'dr3',14h,13h
- db 'dr4',14h,14h
- db 'dr5',14h,15h
- db 'dr6',14h,16h
- db 'dr7',14h,17h
- db 'dr8',14h,18h
- db 'dr9',14h,19h
- db 'eax',10h,40h
- db 'ebp',10h,45h
- db 'ebx',10h,43h
- db 'ecx',10h,41h
- db 'edi',10h,47h
- db 'edx',10h,42h
- db 'efi',1Bh,10
- db 'eip',10h,94h
- db 'elf',18h,50h
- db 'esi',10h,46h
- db 'esp',10h,44h
- db 'far',12h,3
- db 'gui',1Bh,2
- db 'mm0',10h,0B0h
- db 'mm1',10h,0B1h
- db 'mm2',10h,0B2h
- db 'mm3',10h,0B3h
- db 'mm4',10h,0B4h
- db 'mm5',10h,0B5h
- db 'mm6',10h,0B6h
- db 'mm7',10h,0B7h
- db 'r10',10h,8Ah
- db 'r11',10h,8Bh
- db 'r12',10h,8Ch
- db 'r13',10h,8Dh
- db 'r14',10h,8Eh
- db 'r15',10h,8Fh
- db 'r8b',10h,18h
- db 'r8d',10h,48h
- db 'r8l',10h,18h
- db 'r8w',10h,28h
- db 'r9b',10h,19h
- db 'r9d',10h,49h
- db 'r9l',10h,19h
- db 'r9w',10h,29h
- db 'rax',10h,80h
- db 'rbp',10h,85h
- db 'rbx',10h,83h
- db 'rcx',10h,81h
- db 'rdi',10h,87h
- db 'rdx',10h,82h
- db 'rip',10h,98h
- db 'rsi',10h,86h
- db 'rsp',10h,84h
- db 'sae',1Fh,30h
- db 'sil',10h,16h
- db 'spl',10h,14h
- db 'st0',10h,0A0h
- db 'st1',10h,0A1h
- db 'st2',10h,0A2h
- db 'st3',10h,0A3h
- db 'st4',10h,0A4h
- db 'st5',10h,0A5h
- db 'st6',10h,0A6h
- db 'st7',10h,0A7h
- db 'tr0',14h,40h
- db 'tr1',14h,41h
- db 'tr2',14h,42h
- db 'tr3',14h,43h
- db 'tr4',14h,44h
- db 'tr5',14h,45h
- db 'tr6',14h,46h
- db 'tr7',14h,47h
- db 'wdm',1Bh,81h
-symbols_4:
- db '1to2',1Fh,11h
- db '1to4',1Fh,12h
- db '1to8',1Fh,13h
- db 'bnd0',14h,60h
- db 'bnd1',14h,61h
- db 'bnd2',14h,62h
- db 'bnd3',14h,63h
- db 'byte',11h,1
- db 'code',19h,5
- db 'coff',18h,40h
- db 'cr10',14h,0Ah
- db 'cr11',14h,0Bh
- db 'cr12',14h,0Ch
- db 'cr13',14h,0Dh
- db 'cr14',14h,0Eh
- db 'cr15',14h,0Fh
- db 'data',19h,6
- db 'dr10',14h,1Ah
- db 'dr11',14h,1Bh
- db 'dr12',14h,1Ch
- db 'dr13',14h,1Dh
- db 'dr14',14h,1Eh
- db 'dr15',14h,1Fh
- db 'ms64',1Ch,49h
- db 'near',12h,2
- db 'note',1Eh,4
- db 'pe64',18h,3Ch
- db 'r10b',10h,1Ah
- db 'r10d',10h,4Ah
- db 'r10l',10h,1Ah
- db 'r10w',10h,2Ah
- db 'r11b',10h,1Bh
- db 'r11d',10h,4Bh
- db 'r11l',10h,1Bh
- db 'r11w',10h,2Bh
- db 'r12b',10h,1Ch
- db 'r12d',10h,4Ch
- db 'r12l',10h,1Ch
- db 'r12w',10h,2Ch
- db 'r13b',10h,1Dh
- db 'r13d',10h,4Dh
- db 'r13l',10h,1Dh
- db 'r13w',10h,2Dh
- db 'r14b',10h,1Eh
- db 'r14d',10h,4Eh
- db 'r14l',10h,1Eh
- db 'r14w',10h,2Eh
- db 'r15b',10h,1Fh
- db 'r15d',10h,4Fh
- db 'r15l',10h,1Fh
- db 'r15w',10h,2Fh
- db 'word',11h,2
- db 'xmm0',10h,0C0h
- db 'xmm1',10h,0C1h
- db 'xmm2',10h,0C2h
- db 'xmm3',10h,0C3h
- db 'xmm4',10h,0C4h
- db 'xmm5',10h,0C5h
- db 'xmm6',10h,0C6h
- db 'xmm7',10h,0C7h
- db 'xmm8',10h,0C8h
- db 'xmm9',10h,0C9h
- db 'ymm0',10h,0E0h
- db 'ymm1',10h,0E1h
- db 'ymm2',10h,0E2h
- db 'ymm3',10h,0E3h
- db 'ymm4',10h,0E4h
- db 'ymm5',10h,0E5h
- db 'ymm6',10h,0E6h
- db 'ymm7',10h,0E7h
- db 'ymm8',10h,0E8h
- db 'ymm9',10h,0E9h
- db 'zmm0',10h,60h
- db 'zmm1',10h,61h
- db 'zmm2',10h,62h
- db 'zmm3',10h,63h
- db 'zmm4',10h,64h
- db 'zmm5',10h,65h
- db 'zmm6',10h,66h
- db 'zmm7',10h,67h
- db 'zmm8',10h,68h
- db 'zmm9',10h,69h
-symbols_5:
- db '1to16',1Fh,14h
- db 'dword',11h,4
- db 'elf64',18h,58h
- db 'fword',11h,6
- db 'large',1Bh,82h
- db 'pword',11h,6
- db 'qword',11h,8
- db 'short',12h,1
- db 'tbyte',11h,0Ah
- db 'tword',11h,0Ah
- db 'use16',13h,16
- db 'use32',13h,32
- db 'use64',13h,64
- db 'xmm10',10h,0CAh
- db 'xmm11',10h,0CBh
- db 'xmm12',10h,0CCh
- db 'xmm13',10h,0CDh
- db 'xmm14',10h,0CEh
- db 'xmm15',10h,0CFh
- db 'xmm16',10h,0D0h
- db 'xmm17',10h,0D1h
- db 'xmm18',10h,0D2h
- db 'xmm19',10h,0D3h
- db 'xmm20',10h,0D4h
- db 'xmm21',10h,0D5h
- db 'xmm22',10h,0D6h
- db 'xmm23',10h,0D7h
- db 'xmm24',10h,0D8h
- db 'xmm25',10h,0D9h
- db 'xmm26',10h,0DAh
- db 'xmm27',10h,0DBh
- db 'xmm28',10h,0DCh
- db 'xmm29',10h,0DDh
- db 'xmm30',10h,0DEh
- db 'xmm31',10h,0DFh
- db 'xword',11h,16
- db 'ymm10',10h,0EAh
- db 'ymm11',10h,0EBh
- db 'ymm12',10h,0ECh
- db 'ymm13',10h,0EDh
- db 'ymm14',10h,0EEh
- db 'ymm15',10h,0EFh
- db 'ymm16',10h,0F0h
- db 'ymm17',10h,0F1h
- db 'ymm18',10h,0F2h
- db 'ymm19',10h,0F3h
- db 'ymm20',10h,0F4h
- db 'ymm21',10h,0F5h
- db 'ymm22',10h,0F6h
- db 'ymm23',10h,0F7h
- db 'ymm24',10h,0F8h
- db 'ymm25',10h,0F9h
- db 'ymm26',10h,0FAh
- db 'ymm27',10h,0FBh
- db 'ymm28',10h,0FCh
- db 'ymm29',10h,0FDh
- db 'ymm30',10h,0FEh
- db 'ymm31',10h,0FFh
- db 'yword',11h,32
- db 'zmm10',10h,6Ah
- db 'zmm11',10h,6Bh
- db 'zmm12',10h,6Ch
- db 'zmm13',10h,6Dh
- db 'zmm14',10h,6Eh
- db 'zmm15',10h,6Fh
- db 'zmm16',10h,70h
- db 'zmm17',10h,71h
- db 'zmm18',10h,72h
- db 'zmm19',10h,73h
- db 'zmm20',10h,74h
- db 'zmm21',10h,75h
- db 'zmm22',10h,76h
- db 'zmm23',10h,77h
- db 'zmm24',10h,78h
- db 'zmm25',10h,79h
- db 'zmm26',10h,7Ah
- db 'zmm27',10h,7Bh
- db 'zmm28',10h,7Ch
- db 'zmm29',10h,7Dh
- db 'zmm30',10h,7Eh
- db 'zmm31',10h,7Fh
- db 'zword',11h,64
-symbols_6:
- db 'binary',18h,10h
- db 'dqword',11h,16
- db 'export',1Ah,0
- db 'fixups',1Ah,5
- db 'import',1Ah,1
- db 'native',1Bh,1
- db 'qqword',11h,32
- db 'static',1Dh,1
-symbols_7:
- db 'console',1Bh,3
- db 'dqqword',11h,64
- db 'dynamic',1Eh,2
- db 'efiboot',1Bh,11
-symbols_8:
- db 'gnurelro',1Eh,52h
- db 'gnustack',1Eh,51h
- db 'linkinfo',19h,9
- db 'readable',19h,30
- db 'resource',1Ah,2
- db 'writable',19h,31
-symbols_9:
- db 'shareable',19h,28
- db 'writeable',19h,31
-symbols_10:
- db 'efiruntime',1Bh,12
- db 'executable',19h,29
- db 'gnuehframe',1Eh,50h
- db 'linkremove',19h,11
-symbols_11:
- db 'discardable',19h,25
- db 'interpreter',1Eh,3
- db 'notpageable',19h,27
-symbols_end:
-
-instructions:
- dw instructions_2-instructions,(instructions_3-instructions_2)/(2+3)
- dw instructions_3-instructions,(instructions_4-instructions_3)/(3+3)
- dw instructions_4-instructions,(instructions_5-instructions_4)/(4+3)
- dw instructions_5-instructions,(instructions_6-instructions_5)/(5+3)
- dw instructions_6-instructions,(instructions_7-instructions_6)/(6+3)
- dw instructions_7-instructions,(instructions_8-instructions_7)/(7+3)
- dw instructions_8-instructions,(instructions_9-instructions_8)/(8+3)
- dw instructions_9-instructions,(instructions_10-instructions_9)/(9+3)
- dw instructions_10-instructions,(instructions_11-instructions_10)/(10+3)
- dw instructions_11-instructions,(instructions_12-instructions_11)/(11+3)
- dw instructions_12-instructions,(instructions_13-instructions_12)/(12+3)
- dw instructions_13-instructions,(instructions_14-instructions_13)/(13+3)
- dw instructions_14-instructions,(instructions_15-instructions_14)/(14+3)
- dw instructions_15-instructions,(instructions_16-instructions_15)/(15+3)
- dw instructions_16-instructions,(instructions_17-instructions_16)/(16+3)
- dw instructions_17-instructions,(instructions_end-instructions_17)/(17+3)
-
-instructions_2:
- db 'bt',4
- dw bt_instruction-instruction_handler
- db 'if',0
- dw if_directive-instruction_handler
- db 'in',0
- dw in_instruction-instruction_handler
- db 'ja',77h
- dw conditional_jump-instruction_handler
- db 'jb',72h
- dw conditional_jump-instruction_handler
- db 'jc',72h
- dw conditional_jump-instruction_handler
- db 'je',74h
- dw conditional_jump-instruction_handler
- db 'jg',7Fh
- dw conditional_jump-instruction_handler
- db 'jl',7Ch
- dw conditional_jump-instruction_handler
- db 'jo',70h
- dw conditional_jump-instruction_handler
- db 'jp',7Ah
- dw conditional_jump-instruction_handler
- db 'js',78h
- dw conditional_jump-instruction_handler
- db 'jz',74h
- dw conditional_jump-instruction_handler
- db 'or',08h
- dw basic_instruction-instruction_handler
-instructions_3:
- db 'aaa',37h
- dw simple_instruction_except64-instruction_handler
- db 'aad',0D5h
- dw aa_instruction-instruction_handler
- db 'aam',0D4h
- dw aa_instruction-instruction_handler
- db 'aas',3Fh
- dw simple_instruction_except64-instruction_handler
- db 'adc',10h
- dw basic_instruction-instruction_handler
- db 'add',00h
- dw basic_instruction-instruction_handler
- db 'and',20h
- dw basic_instruction-instruction_handler
- db 'bnd',0F2h
- dw bnd_prefix_instruction-instruction_handler
- db 'bsf',0BCh
- dw bs_instruction-instruction_handler
- db 'bsr',0BDh
- dw bs_instruction-instruction_handler
- db 'btc',7
- dw bt_instruction-instruction_handler
- db 'btr',6
- dw bt_instruction-instruction_handler
- db 'bts',5
- dw bt_instruction-instruction_handler
- db 'cbw',98h
- dw simple_instruction_16bit-instruction_handler
- db 'cdq',99h
- dw simple_instruction_32bit-instruction_handler
- db 'clc',0F8h
- dw simple_instruction-instruction_handler
- db 'cld',0FCh
- dw simple_instruction-instruction_handler
- db 'cli',0FAh
- dw simple_instruction-instruction_handler
- db 'cmc',0F5h
- dw simple_instruction-instruction_handler
- db 'cmp',38h
- dw basic_instruction-instruction_handler
- db 'cqo',99h
- dw simple_instruction_64bit-instruction_handler
- db 'cwd',99h
- dw simple_instruction_16bit-instruction_handler
- db 'daa',27h
- dw simple_instruction_except64-instruction_handler
- db 'das',2Fh
- dw simple_instruction_except64-instruction_handler
- db 'dec',1
- dw inc_instruction-instruction_handler
- db 'div',6
- dw single_operand_instruction-instruction_handler
- db 'end',0
- dw end_directive-instruction_handler
- db 'err',0
- dw err_directive-instruction_handler
- db 'fld',0
- dw fld_instruction-instruction_handler
- db 'fst',2
- dw fld_instruction-instruction_handler
- db 'hlt',0F4h
- dw simple_instruction-instruction_handler
- db 'inc',0
- dw inc_instruction-instruction_handler
- db 'ins',6Ch
- dw ins_instruction-instruction_handler
- db 'int',0CDh
- dw int_instruction-instruction_handler
- db 'jae',73h
- dw conditional_jump-instruction_handler
- db 'jbe',76h
- dw conditional_jump-instruction_handler
- db 'jge',7Dh
- dw conditional_jump-instruction_handler
- db 'jle',7Eh
- dw conditional_jump-instruction_handler
- db 'jmp',0
- dw jmp_instruction-instruction_handler
- db 'jna',76h
- dw conditional_jump-instruction_handler
- db 'jnb',73h
- dw conditional_jump-instruction_handler
- db 'jnc',73h
- dw conditional_jump-instruction_handler
- db 'jne',75h
- dw conditional_jump-instruction_handler
- db 'jng',7Eh
- dw conditional_jump-instruction_handler
- db 'jnl',7Dh
- dw conditional_jump-instruction_handler
- db 'jno',71h
- dw conditional_jump-instruction_handler
- db 'jnp',7Bh
- dw conditional_jump-instruction_handler
- db 'jns',79h
- dw conditional_jump-instruction_handler
- db 'jnz',75h
- dw conditional_jump-instruction_handler
- db 'jpe',7Ah
- dw conditional_jump-instruction_handler
- db 'jpo',7Bh
- dw conditional_jump-instruction_handler
- db 'lar',2
- dw lar_instruction-instruction_handler
- db 'lds',3
- dw ls_instruction-instruction_handler
- db 'lea',0
- dw lea_instruction-instruction_handler
- db 'les',0
- dw ls_instruction-instruction_handler
- db 'lfs',4
- dw ls_instruction-instruction_handler
- db 'lgs',5
- dw ls_instruction-instruction_handler
- db 'lsl',3
- dw lar_instruction-instruction_handler
- db 'lss',2
- dw ls_instruction-instruction_handler
- db 'ltr',3
- dw pm_word_instruction-instruction_handler
- db 'mov',0
- dw mov_instruction-instruction_handler
- db 'mul',4
- dw single_operand_instruction-instruction_handler
- db 'neg',3
- dw single_operand_instruction-instruction_handler
- db 'nop',90h
- dw nop_instruction-instruction_handler
- db 'not',2
- dw single_operand_instruction-instruction_handler
- db 'org',0
- dw org_directive-instruction_handler
- db 'out',0
- dw out_instruction-instruction_handler
- db 'pop',0
- dw pop_instruction-instruction_handler
- db 'por',0EBh
- dw basic_mmx_instruction-instruction_handler
- db 'rcl',2
- dw sh_instruction-instruction_handler
- db 'rcr',3
- dw sh_instruction-instruction_handler
- db 'rep',0F3h
- dw prefix_instruction-instruction_handler
- db 'ret',0C2h
- dw ret_instruction-instruction_handler
- db 'rol',0
- dw sh_instruction-instruction_handler
- db 'ror',1
- dw sh_instruction-instruction_handler
- db 'rsm',0AAh
- dw simple_extended_instruction-instruction_handler
- db 'sal',4
- dw sh_instruction-instruction_handler
- db 'sar',7
- dw sh_instruction-instruction_handler
- db 'sbb',18h
- dw basic_instruction-instruction_handler
- db 'shl',4
- dw sh_instruction-instruction_handler
- db 'shr',5
- dw sh_instruction-instruction_handler
- db 'stc',0F9h
- dw simple_instruction-instruction_handler
- db 'std',0FDh
- dw simple_instruction-instruction_handler
- db 'sti',0FBh
- dw simple_instruction-instruction_handler
- db 'str',1
- dw pm_store_word_instruction-instruction_handler
- db 'sub',28h
- dw basic_instruction-instruction_handler
- db 'ud0',0FFh
- dw ud_instruction-instruction_handler
- db 'ud1',0B9h
- dw ud_instruction-instruction_handler
- db 'ud2',0Bh
- dw simple_extended_instruction-instruction_handler
- db 'xor',30h
- dw basic_instruction-instruction_handler
-instructions_4:
- db 'adcx',66h
- dw adx_instruction-instruction_handler
- db 'adox',0F3h
- dw adx_instruction-instruction_handler
- db 'andn',0F2h
- dw andn_instruction-instruction_handler
- db 'arpl',0
- dw arpl_instruction-instruction_handler
- db 'blci',26h
- dw tbm_instruction-instruction_handler
- db 'blcs',13h
- dw tbm_instruction-instruction_handler
- db 'blsi',3
- dw bmi_instruction-instruction_handler
- db 'blsr',1
- dw bmi_instruction-instruction_handler
- db 'bzhi',0F5h
- dw bzhi_instruction-instruction_handler
- db 'call',0
- dw call_instruction-instruction_handler
- db 'cdqe',98h
- dw simple_instruction_64bit-instruction_handler
- db 'clac',0CAh
- dw simple_instruction_0f_01-instruction_handler
- db 'clgi',0DDh
- dw simple_instruction_0f_01-instruction_handler
- db 'clts',6
- dw simple_extended_instruction-instruction_handler
- db 'clwb',6
- dw clflushopt_instruction-instruction_handler
- db 'cmps',0A6h
- dw cmps_instruction-instruction_handler
- db 'cwde',98h
- dw simple_instruction_32bit-instruction_handler
- db 'data',0
- dw data_directive-instruction_handler
- db 'dppd',41h
- dw sse4_instruction_66_3a_imm8-instruction_handler
- db 'dpps',40h
- dw sse4_instruction_66_3a_imm8-instruction_handler
- db 'else',0
- dw else_directive-instruction_handler
- db 'emms',77h
- dw simple_extended_instruction-instruction_handler
- db 'fabs',100001b
- dw simple_fpu_instruction-instruction_handler
- db 'fadd',0
- dw basic_fpu_instruction-instruction_handler
- db 'fbld',4
- dw fbld_instruction-instruction_handler
- db 'fchs',100000b
- dw simple_fpu_instruction-instruction_handler
- db 'fcom',2
- dw basic_fpu_instruction-instruction_handler
- db 'fcos',111111b
- dw simple_fpu_instruction-instruction_handler
- db 'fdiv',6
- dw basic_fpu_instruction-instruction_handler
- db 'feni',0E0h
- dw finit_instruction-instruction_handler
- db 'fild',0
- dw fild_instruction-instruction_handler
- db 'fist',2
- dw fild_instruction-instruction_handler
- db 'fld1',101000b
- dw simple_fpu_instruction-instruction_handler
- db 'fldz',101110b
- dw simple_fpu_instruction-instruction_handler
- db 'fmul',1
- dw basic_fpu_instruction-instruction_handler
- db 'fnop',010000b
- dw simple_fpu_instruction-instruction_handler
- db 'fsin',111110b
- dw simple_fpu_instruction-instruction_handler
- db 'fstp',3
- dw fld_instruction-instruction_handler
- db 'fsub',4
- dw basic_fpu_instruction-instruction_handler
- db 'ftst',100100b
- dw simple_fpu_instruction-instruction_handler
- db 'fxam',100101b
- dw simple_fpu_instruction-instruction_handler
- db 'fxch',0
- dw fxch_instruction-instruction_handler
- db 'heap',0
- dw heap_directive-instruction_handler
- db 'idiv',7
- dw single_operand_instruction-instruction_handler
- db 'imul',0
- dw imul_instruction-instruction_handler
- db 'insb',6Ch
- dw simple_instruction-instruction_handler
- db 'insd',6Dh
- dw simple_instruction_32bit-instruction_handler
- db 'insw',6Dh
- dw simple_instruction_16bit-instruction_handler
- db 'int1',0F1h
- dw simple_instruction-instruction_handler
- db 'int3',0CCh
- dw simple_instruction-instruction_handler
- db 'into',0CEh
- dw simple_instruction_except64-instruction_handler
- db 'invd',8
- dw simple_extended_instruction-instruction_handler
- db 'iret',0CFh
- dw iret_instruction-instruction_handler
- db 'jcxz',0E3h
- dw loop_instruction_16bit-instruction_handler
- db 'jnae',72h
- dw conditional_jump-instruction_handler
- db 'jnbe',77h
- dw conditional_jump-instruction_handler
- db 'jnge',7Ch
- dw conditional_jump-instruction_handler
- db 'jnle',7Fh
- dw conditional_jump-instruction_handler
- db 'korb',45h
- dw mask_instruction_b-instruction_handler
- db 'kord',45h
- dw mask_instruction_d-instruction_handler
- db 'korq',45h
- dw mask_instruction_q-instruction_handler
- db 'korw',45h
- dw mask_instruction_w-instruction_handler
- db 'lahf',9Fh
- dw simple_instruction-instruction_handler
- db 'lgdt',2
- dw lgdt_instruction-instruction_handler
- db 'lidt',3
- dw lgdt_instruction-instruction_handler
- db 'lldt',2
- dw pm_word_instruction-instruction_handler
- db 'lmsw',16h
- dw pm_word_instruction-instruction_handler
- db 'load',0
- dw load_directive-instruction_handler
- db 'lock',0F0h
- dw prefix_instruction-instruction_handler
- db 'lods',0ACh
- dw lods_instruction-instruction_handler
- db 'loop',0E2h
- dw loop_instruction-instruction_handler
- db 'movd',0
- dw movd_instruction-instruction_handler
- db 'movq',0
- dw movq_instruction-instruction_handler
- db 'movs',0A4h
- dw movs_instruction-instruction_handler
- db 'mulx',0F6h
- dw pdep_instruction-instruction_handler
- db 'orpd',56h
- dw sse_pd_instruction-instruction_handler
- db 'orps',56h
- dw sse_ps_instruction-instruction_handler
- db 'outs',6Eh
- dw outs_instruction-instruction_handler
- db 'pand',0DBh
- dw basic_mmx_instruction-instruction_handler
- db 'pdep',0F5h
- dw pdep_instruction-instruction_handler
- db 'pext',0F5h
- dw pext_instruction-instruction_handler
- db 'popa',61h
- dw simple_instruction_except64-instruction_handler
- db 'popd',4
- dw pop_instruction-instruction_handler
- db 'popf',9Dh
- dw simple_instruction-instruction_handler
- db 'popq',8
- dw pop_instruction-instruction_handler
- db 'popw',2
- dw pop_instruction-instruction_handler
- db 'push',0
- dw push_instruction-instruction_handler
- db 'pxor',0EFh
- dw basic_mmx_instruction-instruction_handler
- db 'repe',0F3h
- dw prefix_instruction-instruction_handler
- db 'repz',0F3h
- dw prefix_instruction-instruction_handler
- db 'retd',0C2h
- dw ret_instruction_32bit_except64-instruction_handler
- db 'retf',0CAh
- dw retf_instruction-instruction_handler
- db 'retn',0C2h
- dw ret_instruction-instruction_handler
- db 'retq',0C2h
- dw ret_instruction_only64-instruction_handler
- db 'retw',0C2h
- dw ret_instruction_16bit-instruction_handler
- db 'rorx',0F0h
- dw rorx_instruction-instruction_handler
- db 'sahf',9Eh
- dw simple_instruction-instruction_handler
- db 'salc',0D6h
- dw simple_instruction_except64-instruction_handler
- db 'sarx',0F7h
- dw sarx_instruction-instruction_handler
- db 'scas',0AEh
- dw stos_instruction-instruction_handler
- db 'seta',97h
- dw set_instruction-instruction_handler
- db 'setb',92h
- dw set_instruction-instruction_handler
- db 'setc',92h
- dw set_instruction-instruction_handler
- db 'sete',94h
- dw set_instruction-instruction_handler
- db 'setg',9Fh
- dw set_instruction-instruction_handler
- db 'setl',9Ch
- dw set_instruction-instruction_handler
- db 'seto',90h
- dw set_instruction-instruction_handler
- db 'setp',9Ah
- dw set_instruction-instruction_handler
- db 'sets',98h
- dw set_instruction-instruction_handler
- db 'setz',94h
- dw set_instruction-instruction_handler
- db 'sgdt',0
- dw lgdt_instruction-instruction_handler
- db 'shld',0A4h
- dw shd_instruction-instruction_handler
- db 'shlx',0F7h
- dw shlx_instruction-instruction_handler
- db 'shrd',0ACh
- dw shd_instruction-instruction_handler
- db 'shrx',0F7h
- dw shrx_instruction-instruction_handler
- db 'sidt',1
- dw lgdt_instruction-instruction_handler
- db 'sldt',0
- dw pm_store_word_instruction-instruction_handler
- db 'smsw',14h
- dw pm_store_word_instruction-instruction_handler
- db 'stac',0CBh
- dw simple_instruction_0f_01-instruction_handler
- db 'stgi',0DCh
- dw simple_instruction_0f_01-instruction_handler
- db 'stos',0AAh
- dw stos_instruction-instruction_handler
- db 'test',0
- dw test_instruction-instruction_handler
- db 'verr',4
- dw pm_word_instruction-instruction_handler
- db 'verw',5
- dw pm_word_instruction-instruction_handler
- db 'vpor',0EBh
- dw avx_pd_instruction_noevex-instruction_handler
- db 'wait',9Bh
- dw simple_instruction-instruction_handler
- db 'xadd',0C0h
- dw basic_486_instruction-instruction_handler
- db 'xchg',0
- dw xchg_instruction-instruction_handler
- db 'xend',0D5h
- dw simple_instruction_0f_01-instruction_handler
- db 'xlat',0D7h
- dw xlat_instruction-instruction_handler
-instructions_5:
- db 'addpd',58h
- dw sse_pd_instruction-instruction_handler
- db 'addps',58h
- dw sse_ps_instruction-instruction_handler
- db 'addsd',58h
- dw sse_sd_instruction-instruction_handler
- db 'addss',58h
- dw sse_ss_instruction-instruction_handler
- db 'align',0
- dw align_directive-instruction_handler
- db 'andpd',54h
- dw sse_pd_instruction-instruction_handler
- db 'andps',54h
- dw sse_ps_instruction-instruction_handler
- db 'bextr',0F7h
- dw bextr_instruction-instruction_handler
- db 'blcic',15h
- dw tbm_instruction-instruction_handler
- db 'blsic',16h
- dw tbm_instruction-instruction_handler
- db 'bndcl',1Ah
- dw bndcl_instruction-instruction_handler
- db 'bndcn',1Bh
- dw bndcu_instruction-instruction_handler
- db 'bndcu',1Ah
- dw bndcu_instruction-instruction_handler
- db 'bndmk',1Bh
- dw bndmk_instruction-instruction_handler
- db 'bound',0
- dw bound_instruction-instruction_handler
- db 'break',0
- dw break_directive-instruction_handler
- db 'bswap',0
- dw bswap_instruction-instruction_handler
- db 'cmova',47h
- dw bs_instruction-instruction_handler
- db 'cmovb',42h
- dw bs_instruction-instruction_handler
- db 'cmovc',42h
- dw bs_instruction-instruction_handler
- db 'cmove',44h
- dw bs_instruction-instruction_handler
- db 'cmovg',4Fh
- dw bs_instruction-instruction_handler
- db 'cmovl',4Ch
- dw bs_instruction-instruction_handler
- db 'cmovo',40h
- dw bs_instruction-instruction_handler
- db 'cmovp',4Ah
- dw bs_instruction-instruction_handler
- db 'cmovs',48h
- dw bs_instruction-instruction_handler
- db 'cmovz',44h
- dw bs_instruction-instruction_handler
- db 'cmppd',-1
- dw cmp_pd_instruction-instruction_handler
- db 'cmpps',-1
- dw cmp_ps_instruction-instruction_handler
- db 'cmpsb',0A6h
- dw simple_instruction-instruction_handler
- db 'cmpsd',-1
- dw cmpsd_instruction-instruction_handler
- db 'cmpsq',0A7h
- dw simple_instruction_64bit-instruction_handler
- db 'cmpss',-1
- dw cmp_ss_instruction-instruction_handler
- db 'cmpsw',0A7h
- dw simple_instruction_16bit-instruction_handler
- db 'cpuid',0A2h
- dw simple_extended_instruction-instruction_handler
- db 'crc32',0
- dw crc32_instruction-instruction_handler
- db 'divpd',5Eh
- dw sse_pd_instruction-instruction_handler
- db 'divps',5Eh
- dw sse_ps_instruction-instruction_handler
- db 'divsd',5Eh
- dw sse_sd_instruction-instruction_handler
- db 'divss',5Eh
- dw sse_ss_instruction-instruction_handler
- db 'enter',0
- dw enter_instruction-instruction_handler
- db 'entry',0
- dw entry_directive-instruction_handler
- db 'extrn',0
- dw extrn_directive-instruction_handler
- db 'extrq',0
- dw extrq_instruction-instruction_handler
- db 'f2xm1',110000b
- dw simple_fpu_instruction-instruction_handler
- db 'faddp',0
- dw faddp_instruction-instruction_handler
- db 'fbstp',6
- dw fbld_instruction-instruction_handler
- db 'fclex',0E2h
- dw finit_instruction-instruction_handler
- db 'fcomi',0F0h
- dw fcomi_instruction-instruction_handler
- db 'fcomp',3
- dw basic_fpu_instruction-instruction_handler
- db 'fdisi',0E1h
- dw finit_instruction-instruction_handler
- db 'fdivp',7
- dw faddp_instruction-instruction_handler
- db 'fdivr',7
- dw basic_fpu_instruction-instruction_handler
- db 'femms',0Eh
- dw simple_extended_instruction-instruction_handler
- db 'ffree',0
- dw ffree_instruction-instruction_handler
- db 'fiadd',0
- dw fi_instruction-instruction_handler
- db 'ficom',2
- dw fi_instruction-instruction_handler
- db 'fidiv',6
- dw fi_instruction-instruction_handler
- db 'fimul',1
- dw fi_instruction-instruction_handler
- db 'finit',0E3h
- dw finit_instruction-instruction_handler
- db 'fistp',3
- dw fild_instruction-instruction_handler
- db 'fisub',4
- dw fi_instruction-instruction_handler
- db 'fldcw',5
- dw fldcw_instruction-instruction_handler
- db 'fldpi',101011b
- dw simple_fpu_instruction-instruction_handler
- db 'fmulp',1
- dw faddp_instruction-instruction_handler
- db 'fneni',0E0h
- dw fninit_instruction-instruction_handler
- db 'fprem',111000b
- dw simple_fpu_instruction-instruction_handler
- db 'fptan',110010b
- dw simple_fpu_instruction-instruction_handler
- db 'fsave',6
- dw fsave_instruction-instruction_handler
- db 'fsqrt',111010b
- dw simple_fpu_instruction-instruction_handler
- db 'fstcw',7
- dw fstcw_instruction-instruction_handler
- db 'fstsw',0
- dw fstsw_instruction-instruction_handler
- db 'fsubp',5
- dw faddp_instruction-instruction_handler
- db 'fsubr',5
- dw basic_fpu_instruction-instruction_handler
- db 'fucom',4
- dw ffree_instruction-instruction_handler
- db 'fwait',9Bh
- dw simple_instruction-instruction_handler
- db 'fyl2x',110001b
- dw simple_fpu_instruction-instruction_handler
- db 'icebp',0F1h
- dw simple_instruction-instruction_handler
- db 'iretd',0CFh
- dw simple_instruction_32bit-instruction_handler
- db 'iretq',0CFh
- dw simple_instruction_64bit-instruction_handler
- db 'iretw',0CFh
- dw simple_instruction_16bit-instruction_handler
- db 'jecxz',0E3h
- dw loop_instruction_32bit-instruction_handler
- db 'jrcxz',0E3h
- dw loop_instruction_64bit-instruction_handler
- db 'kaddb',4Ah
- dw mask_instruction_b-instruction_handler
- db 'kaddd',4Ah
- dw mask_instruction_d-instruction_handler
- db 'kaddq',4Ah
- dw mask_instruction_q-instruction_handler
- db 'kaddw',4Ah
- dw mask_instruction_w-instruction_handler
- db 'kandb',41h
- dw mask_instruction_b-instruction_handler
- db 'kandd',41h
- dw mask_instruction_d-instruction_handler
- db 'kandq',41h
- dw mask_instruction_q-instruction_handler
- db 'kandw',41h
- dw mask_instruction_w-instruction_handler
- db 'kmovb',1
- dw kmov_instruction-instruction_handler
- db 'kmovd',4
- dw kmov_instruction-instruction_handler
- db 'kmovq',8
- dw kmov_instruction-instruction_handler
- db 'kmovw',2
- dw kmov_instruction-instruction_handler
- db 'knotb',44h
- dw mask_instruction_single_source_b-instruction_handler
- db 'knotd',44h
- dw mask_instruction_single_source_d-instruction_handler
- db 'knotq',44h
- dw mask_instruction_single_source_q-instruction_handler
- db 'knotw',44h
- dw mask_instruction_single_source_w-instruction_handler
- db 'kxorb',47h
- dw mask_instruction_b-instruction_handler
- db 'kxord',47h
- dw mask_instruction_d-instruction_handler
- db 'kxorq',47h
- dw mask_instruction_q-instruction_handler
- db 'kxorw',47h
- dw mask_instruction_w-instruction_handler
- db 'label',0
- dw label_directive-instruction_handler
- db 'lddqu',0
- dw lddqu_instruction-instruction_handler
- db 'leave',0C9h
- dw simple_instruction-instruction_handler
- db 'lodsb',0ACh
- dw simple_instruction-instruction_handler
- db 'lodsd',0ADh
- dw simple_instruction_32bit-instruction_handler
- db 'lodsq',0ADh
- dw simple_instruction_64bit-instruction_handler
- db 'lodsw',0ADh
- dw simple_instruction_16bit-instruction_handler
- db 'loopd',0E2h
- dw loop_instruction_32bit-instruction_handler
- db 'loope',0E1h
- dw loop_instruction-instruction_handler
- db 'loopq',0E2h
- dw loop_instruction_64bit-instruction_handler
- db 'loopw',0E2h
- dw loop_instruction_16bit-instruction_handler
- db 'loopz',0E1h
- dw loop_instruction-instruction_handler
- db 'lzcnt',0BDh
- dw popcnt_instruction-instruction_handler
- db 'maxpd',5Fh
- dw sse_pd_instruction-instruction_handler
- db 'maxps',5Fh
- dw sse_ps_instruction-instruction_handler
- db 'maxsd',5Fh
- dw sse_sd_instruction-instruction_handler
- db 'maxss',5Fh
- dw sse_ss_instruction-instruction_handler
- db 'minpd',5Dh
- dw sse_pd_instruction-instruction_handler
- db 'minps',5Dh
- dw sse_ps_instruction-instruction_handler
- db 'minsd',5Dh
- dw sse_sd_instruction-instruction_handler
- db 'minss',5Dh
- dw sse_ss_instruction-instruction_handler
- db 'movbe',0F0h
- dw movbe_instruction-instruction_handler
- db 'movsb',0A4h
- dw simple_instruction-instruction_handler
- db 'movsd',0
- dw movsd_instruction-instruction_handler
- db 'movsq',0A5h
- dw simple_instruction_64bit-instruction_handler
- db 'movss',0
- dw movss_instruction-instruction_handler
- db 'movsw',0A5h
- dw simple_instruction_16bit-instruction_handler
- db 'movsx',0BEh
- dw movx_instruction-instruction_handler
- db 'movzx',0B6h
- dw movx_instruction-instruction_handler
- db 'mulpd',59h
- dw sse_pd_instruction-instruction_handler
- db 'mulps',59h
- dw sse_ps_instruction-instruction_handler
- db 'mulsd',59h
- dw sse_sd_instruction-instruction_handler
- db 'mulss',59h
- dw sse_ss_instruction-instruction_handler
- db 'mwait',0C9h
- dw monitor_instruction-instruction_handler
- db 'outsb',6Eh
- dw simple_instruction-instruction_handler
- db 'outsd',6Fh
- dw simple_instruction_32bit-instruction_handler
- db 'outsw',6Fh
- dw simple_instruction_16bit-instruction_handler
- db 'pabsb',1Ch
- dw ssse3_instruction-instruction_handler
- db 'pabsd',1Eh
- dw ssse3_instruction-instruction_handler
- db 'pabsw',1Dh
- dw ssse3_instruction-instruction_handler
- db 'paddb',0FCh
- dw basic_mmx_instruction-instruction_handler
- db 'paddd',0FEh
- dw basic_mmx_instruction-instruction_handler
- db 'paddq',0D4h
- dw basic_mmx_instruction-instruction_handler
- db 'paddw',0FDh
- dw basic_mmx_instruction-instruction_handler
- db 'pandn',0DFh
- dw basic_mmx_instruction-instruction_handler
- db 'pause',0
- dw pause_instruction-instruction_handler
- db 'pavgb',0E0h
- dw basic_mmx_instruction-instruction_handler
- db 'pavgw',0E3h
- dw basic_mmx_instruction-instruction_handler
- db 'pf2id',1Dh
- dw amd3dnow_instruction-instruction_handler
- db 'pf2iw',1Ch
- dw amd3dnow_instruction-instruction_handler
- db 'pfacc',0AEh
- dw amd3dnow_instruction-instruction_handler
- db 'pfadd',9Eh
- dw amd3dnow_instruction-instruction_handler
- db 'pfmax',0A4h
- dw amd3dnow_instruction-instruction_handler
- db 'pfmin',94h
- dw amd3dnow_instruction-instruction_handler
- db 'pfmul',0B4h
- dw amd3dnow_instruction-instruction_handler
- db 'pfrcp',96h
- dw amd3dnow_instruction-instruction_handler
- db 'pfsub',9Ah
- dw amd3dnow_instruction-instruction_handler
- db 'pi2fd',0Dh
- dw amd3dnow_instruction-instruction_handler
- db 'pi2fw',0Ch
- dw amd3dnow_instruction-instruction_handler
- db 'popad',61h
- dw simple_instruction_32bit_except64-instruction_handler
- db 'popaw',61h
- dw simple_instruction_16bit_except64-instruction_handler
- db 'popfd',9Dh
- dw simple_instruction_32bit_except64-instruction_handler
- db 'popfq',9Dh
- dw simple_instruction_only64-instruction_handler
- db 'popfw',9Dh
- dw simple_instruction_16bit-instruction_handler
- db 'pslld',0F2h
- dw mmx_bit_shift_instruction-instruction_handler
- db 'psllq',0F3h
- dw mmx_bit_shift_instruction-instruction_handler
- db 'psllw',0F1h
- dw mmx_bit_shift_instruction-instruction_handler
- db 'psrad',0E2h
- dw mmx_bit_shift_instruction-instruction_handler
- db 'psraw',0E1h
- dw mmx_bit_shift_instruction-instruction_handler
- db 'psrld',0D2h
- dw mmx_bit_shift_instruction-instruction_handler
- db 'psrlq',0D3h
- dw mmx_bit_shift_instruction-instruction_handler
- db 'psrlw',0D1h
- dw mmx_bit_shift_instruction-instruction_handler
- db 'psubb',0F8h
- dw basic_mmx_instruction-instruction_handler
- db 'psubd',0FAh
- dw basic_mmx_instruction-instruction_handler
- db 'psubq',0FBh
- dw basic_mmx_instruction-instruction_handler
- db 'psubw',0F9h
- dw basic_mmx_instruction-instruction_handler
- db 'ptest',17h
- dw sse4_instruction_66_38-instruction_handler
- db 'pusha',60h
- dw simple_instruction_except64-instruction_handler
- db 'pushd',4
- dw push_instruction-instruction_handler
- db 'pushf',9Ch
- dw simple_instruction-instruction_handler
- db 'pushq',8
- dw push_instruction-instruction_handler
- db 'pushw',2
- dw push_instruction-instruction_handler
- db 'rcpps',53h
- dw sse_ps_instruction-instruction_handler
- db 'rcpss',53h
- dw sse_ss_instruction-instruction_handler
- db 'rdmsr',32h
- dw simple_extended_instruction-instruction_handler
- db 'rdpid',7
- dw rdpid_instruction-instruction_handler
- db 'rdpmc',33h
- dw simple_extended_instruction-instruction_handler
- db 'rdpru',0FDh
- dw simple_instruction_0f_01-instruction_handler
- db 'rdtsc',31h
- dw simple_extended_instruction-instruction_handler
- db 'repne',0F2h
- dw prefix_instruction-instruction_handler
- db 'repnz',0F2h
- dw prefix_instruction-instruction_handler
- db 'retfd',0CAh
- dw retf_instruction_32bit-instruction_handler
- db 'retfq',0CAh
- dw retf_instruction_64bit-instruction_handler
- db 'retfw',0CAh
- dw retf_instruction_16bit-instruction_handler
- db 'retnd',0C2h
- dw ret_instruction_32bit_except64-instruction_handler
- db 'retnq',0C2h
- dw ret_instruction_only64-instruction_handler
- db 'retnw',0C2h
- dw ret_instruction_16bit-instruction_handler
- db 'scasb',0AEh
- dw simple_instruction-instruction_handler
- db 'scasd',0AFh
- dw simple_instruction_32bit-instruction_handler
- db 'scasq',0AFh
- dw simple_instruction_64bit-instruction_handler
- db 'scasw',0AFh
- dw simple_instruction_16bit-instruction_handler
- db 'setae',93h
- dw set_instruction-instruction_handler
- db 'setbe',96h
- dw set_instruction-instruction_handler
- db 'setge',9Dh
- dw set_instruction-instruction_handler
- db 'setle',9Eh
- dw set_instruction-instruction_handler
- db 'setna',96h
- dw set_instruction-instruction_handler
- db 'setnb',93h
- dw set_instruction-instruction_handler
- db 'setnc',93h
- dw set_instruction-instruction_handler
- db 'setne',95h
- dw set_instruction-instruction_handler
- db 'setng',9Eh
- dw set_instruction-instruction_handler
- db 'setnl',9Dh
- dw set_instruction-instruction_handler
- db 'setno',91h
- dw set_instruction-instruction_handler
- db 'setnp',9Bh
- dw set_instruction-instruction_handler
- db 'setns',99h
- dw set_instruction-instruction_handler
- db 'setnz',95h
- dw set_instruction-instruction_handler
- db 'setpe',9Ah
- dw set_instruction-instruction_handler
- db 'setpo',9Bh
- dw set_instruction-instruction_handler
- db 'stack',0
- dw stack_directive-instruction_handler
- db 'store',0
- dw store_directive-instruction_handler
- db 'stosb',0AAh
- dw simple_instruction-instruction_handler
- db 'stosd',0ABh
- dw simple_instruction_32bit-instruction_handler
- db 'stosq',0ABh
- dw simple_instruction_64bit-instruction_handler
- db 'stosw',0ABh
- dw simple_instruction_16bit-instruction_handler
- db 'subpd',5Ch
- dw sse_pd_instruction-instruction_handler
- db 'subps',5Ch
- dw sse_ps_instruction-instruction_handler
- db 'subsd',5Ch
- dw sse_sd_instruction-instruction_handler
- db 'subss',5Ch
- dw sse_ss_instruction-instruction_handler
- db 'times',0
- dw times_directive-instruction_handler
- db 'tzcnt',0BCh
- dw popcnt_instruction-instruction_handler
- db 'tzmsk',14h
- dw tbm_instruction-instruction_handler
- db 'vdppd',41h
- dw avx_128bit_instruction_3a_imm8_noevex-instruction_handler
- db 'vdpps',40h
- dw avx_pi_instruction_3a_imm8_noevex-instruction_handler
- db 'vmovd',0
- dw avx_movd_instruction-instruction_handler
- db 'vmovq',0
- dw avx_movq_instruction-instruction_handler
- db 'vmrun',0D8h
- dw simple_svm_instruction-instruction_handler
- db 'vmxon',6
- dw vmxon_instruction-instruction_handler
- db 'vorpd',56h
- dw avx_pd_instruction-instruction_handler
- db 'vorps',56h
- dw avx_ps_instruction-instruction_handler
- db 'vpand',0DBh
- dw avx_pd_instruction_noevex-instruction_handler
- db 'vpord',0EBh
- dw avx_d_instruction_evex-instruction_handler
- db 'vporq',0EBh
- dw avx_q_instruction_evex-instruction_handler
- db 'vpxor',0EFh
- dw avx_pd_instruction_noevex-instruction_handler
- db 'while',0
- dw while_directive-instruction_handler
- db 'wrmsr',30h
- dw simple_extended_instruction-instruction_handler
- db 'wrssd',0F6h
- dw wrssd_instruction-instruction_handler
- db 'wrssq',0F6h
- dw wrssq_instruction-instruction_handler
- db 'xlatb',0D7h
- dw simple_instruction-instruction_handler
- db 'xorpd',57h
- dw sse_pd_instruction-instruction_handler
- db 'xorps',57h
- dw sse_ps_instruction-instruction_handler
- db 'xsave',100b
- dw fxsave_instruction-instruction_handler
- db 'xtest',0D6h
- dw simple_instruction_0f_01-instruction_handler
-instructions_6:
- db 'aesdec',0DEh
- dw sse4_instruction_66_38-instruction_handler
- db 'aesenc',0DCh
- dw sse4_instruction_66_38-instruction_handler
- db 'aesimc',0DBh
- dw sse4_instruction_66_38-instruction_handler
- db 'andnpd',55h
- dw sse_pd_instruction-instruction_handler
- db 'andnps',55h
- dw sse_ps_instruction-instruction_handler
- db 'assert',0
- dw assert_directive-instruction_handler
- db 'blcmsk',21h
- dw tbm_instruction-instruction_handler
- db 'blsmsk',2
- dw bmi_instruction-instruction_handler
- db 'bndldx',1Ah
- dw bndldx_instruction-instruction_handler
- db 'bndmov',1Ah
- dw bndmov_instruction-instruction_handler
- db 'bndstx',1Bh
- dw bndstx_instruction-instruction_handler
- db 'clzero',0
- dw clzero_instruction-instruction_handler
- db 'cmovae',43h
- dw bs_instruction-instruction_handler
- db 'cmovbe',46h
- dw bs_instruction-instruction_handler
- db 'cmovge',4Dh
- dw bs_instruction-instruction_handler
- db 'cmovle',4Eh
- dw bs_instruction-instruction_handler
- db 'cmovna',46h
- dw bs_instruction-instruction_handler
- db 'cmovnb',43h
- dw bs_instruction-instruction_handler
- db 'cmovnc',43h
- dw bs_instruction-instruction_handler
- db 'cmovne',45h
- dw bs_instruction-instruction_handler
- db 'cmovng',4Eh
- dw bs_instruction-instruction_handler
- db 'cmovnl',4Dh
- dw bs_instruction-instruction_handler
- db 'cmovno',41h
- dw bs_instruction-instruction_handler
- db 'cmovnp',4Bh
- dw bs_instruction-instruction_handler
- db 'cmovns',49h
- dw bs_instruction-instruction_handler
- db 'cmovnz',45h
- dw bs_instruction-instruction_handler
- db 'cmovpe',4Ah
- dw bs_instruction-instruction_handler
- db 'cmovpo',4Bh
- dw bs_instruction-instruction_handler
- db 'comisd',2Fh
- dw comisd_instruction-instruction_handler
- db 'comiss',2Fh
- dw comiss_instruction-instruction_handler
- db 'fcmovb',0C0h
- dw fcmov_instruction-instruction_handler
- db 'fcmove',0C8h
- dw fcmov_instruction-instruction_handler
- db 'fcmovu',0D8h
- dw fcmov_instruction-instruction_handler
- db 'fcomip',0F0h
- dw fcomip_instruction-instruction_handler
- db 'fcompp',0
- dw fcompp_instruction-instruction_handler
- db 'fdivrp',6
- dw faddp_instruction-instruction_handler
- db 'ffreep',0
- dw ffreep_instruction-instruction_handler
- db 'ficomp',3
- dw fi_instruction-instruction_handler
- db 'fidivr',7
- dw fi_instruction-instruction_handler
- db 'fisttp',1
- dw fild_instruction-instruction_handler
- db 'fisubr',5
- dw fi_instruction-instruction_handler
- db 'fldenv',4
- dw fldenv_instruction-instruction_handler
- db 'fldl2e',101010b
- dw simple_fpu_instruction-instruction_handler
- db 'fldl2t',101001b
- dw simple_fpu_instruction-instruction_handler
- db 'fldlg2',101100b
- dw simple_fpu_instruction-instruction_handler
- db 'fldln2',101101b
- dw simple_fpu_instruction-instruction_handler
- db 'fnclex',0E2h
- dw fninit_instruction-instruction_handler
- db 'fndisi',0E1h
- dw fninit_instruction-instruction_handler
- db 'fninit',0E3h
- dw fninit_instruction-instruction_handler
- db 'fnsave',6
- dw fnsave_instruction-instruction_handler
- db 'fnstcw',7
- dw fldcw_instruction-instruction_handler
- db 'fnstsw',0
- dw fnstsw_instruction-instruction_handler
- db 'format',0
- dw format_directive-instruction_handler
- db 'fpatan',110011b
- dw simple_fpu_instruction-instruction_handler
- db 'fprem1',110101b
- dw simple_fpu_instruction-instruction_handler
- db 'frstor',4
- dw fnsave_instruction-instruction_handler
- db 'frstpm',0E5h
- dw fninit_instruction-instruction_handler
- db 'fsaved',6
- dw fsave_instruction_32bit-instruction_handler
- db 'fsavew',6
- dw fsave_instruction_16bit-instruction_handler
- db 'fscale',111101b
- dw simple_fpu_instruction-instruction_handler
- db 'fsetpm',0E4h
- dw fninit_instruction-instruction_handler
- db 'fstenv',6
- dw fstenv_instruction-instruction_handler
- db 'fsubrp',4
- dw faddp_instruction-instruction_handler
- db 'fucomi',0E8h
- dw fcomi_instruction-instruction_handler
- db 'fucomp',5
- dw ffree_instruction-instruction_handler
- db 'fxsave',0
- dw fxsave_instruction-instruction_handler
- db 'getsec',37h
- dw simple_extended_instruction-instruction_handler
- db 'haddpd',07Ch
- dw sse_pd_instruction-instruction_handler
- db 'haddps',07Ch
- dw cvtpd2dq_instruction-instruction_handler
- db 'hsubpd',07Dh
- dw sse_pd_instruction-instruction_handler
- db 'hsubps',07Dh
- dw cvtpd2dq_instruction-instruction_handler
- db 'invept',80h
- dw vmx_inv_instruction-instruction_handler
- db 'invlpg',0
- dw invlpg_instruction-instruction_handler
- db 'kandnb',42h
- dw mask_instruction_b-instruction_handler
- db 'kandnd',42h
- dw mask_instruction_d-instruction_handler
- db 'kandnq',42h
- dw mask_instruction_q-instruction_handler
- db 'kandnw',42h
- dw mask_instruction_w-instruction_handler
- db 'ktestb',99h
- dw mask_instruction_single_source_b-instruction_handler
- db 'ktestd',99h
- dw mask_instruction_single_source_d-instruction_handler
- db 'ktestq',99h
- dw mask_instruction_single_source_q-instruction_handler
- db 'ktestw',99h
- dw mask_instruction_single_source_w-instruction_handler
- db 'kxnorb',46h
- dw mask_instruction_b-instruction_handler
- db 'kxnord',46h
- dw mask_instruction_d-instruction_handler
- db 'kxnorq',46h
- dw mask_instruction_q-instruction_handler
- db 'kxnorw',46h
- dw mask_instruction_w-instruction_handler
- db 'lfence',0E8h
- dw fence_instruction-instruction_handler
- db 'llwpcb',0
- dw llwpcb_instruction-instruction_handler
- db 'looped',0E1h
- dw loop_instruction_32bit-instruction_handler
- db 'loopeq',0E1h
- dw loop_instruction_64bit-instruction_handler
- db 'loopew',0E1h
- dw loop_instruction_16bit-instruction_handler
- db 'loopne',0E0h
- dw loop_instruction-instruction_handler
- db 'loopnz',0E0h
- dw loop_instruction-instruction_handler
- db 'loopzd',0E1h
- dw loop_instruction_32bit-instruction_handler
- db 'loopzq',0E1h
- dw loop_instruction_64bit-instruction_handler
- db 'loopzw',0E1h
- dw loop_instruction_16bit-instruction_handler
- db 'lwpins',0
- dw lwpins_instruction-instruction_handler
- db 'lwpval',1
- dw lwpins_instruction-instruction_handler
- db 'mfence',0F0h
- dw fence_instruction-instruction_handler
- db 'movapd',28h
- dw movpd_instruction-instruction_handler
- db 'movaps',28h
- dw movps_instruction-instruction_handler
- db 'movdqa',66h
- dw movdq_instruction-instruction_handler
- db 'movdqu',0F3h
- dw movdq_instruction-instruction_handler
- db 'movhpd',16h
- dw movlpd_instruction-instruction_handler
- db 'movhps',16h
- dw movlps_instruction-instruction_handler
- db 'movlpd',12h
- dw movlpd_instruction-instruction_handler
- db 'movlps',12h
- dw movlps_instruction-instruction_handler
- db 'movnti',0C3h
- dw movnti_instruction-instruction_handler
- db 'movntq',0E7h
- dw movntq_instruction-instruction_handler
- db 'movsxd',63h
- dw movsxd_instruction-instruction_handler
- db 'movupd',10h
- dw movpd_instruction-instruction_handler
- db 'movups',10h
- dw movps_instruction-instruction_handler
- db 'mwaitx',0FBh
- dw monitor_instruction-instruction_handler
- db 'paddsb',0ECh
- dw basic_mmx_instruction-instruction_handler
- db 'paddsw',0EDh
- dw basic_mmx_instruction-instruction_handler
- db 'pextrb',14h
- dw pextrb_instruction-instruction_handler
- db 'pextrd',16h
- dw pextrd_instruction-instruction_handler
- db 'pextrq',16h
- dw pextrq_instruction-instruction_handler
- db 'pextrw',15h
- dw pextrw_instruction-instruction_handler
- db 'pfnacc',8Ah
- dw amd3dnow_instruction-instruction_handler
- db 'pfsubr',0AAh
- dw amd3dnow_instruction-instruction_handler
- db 'phaddd',2
- dw ssse3_instruction-instruction_handler
- db 'phaddw',1
- dw ssse3_instruction-instruction_handler
- db 'phsubd',6
- dw ssse3_instruction-instruction_handler
- db 'phsubw',5
- dw ssse3_instruction-instruction_handler
- db 'pinsrb',20h
- dw pinsrb_instruction-instruction_handler
- db 'pinsrd',22h
- dw pinsrd_instruction-instruction_handler
- db 'pinsrq',22h
- dw pinsrq_instruction-instruction_handler
- db 'pinsrw',0C4h
- dw pinsrw_instruction-instruction_handler
- db 'pmaxsb',3Ch
- dw sse4_instruction_66_38-instruction_handler
- db 'pmaxsd',3Dh
- dw sse4_instruction_66_38-instruction_handler
- db 'pmaxsw',0EEh
- dw basic_mmx_instruction-instruction_handler
- db 'pmaxub',0DEh
- dw basic_mmx_instruction-instruction_handler
- db 'pmaxud',3Fh
- dw sse4_instruction_66_38-instruction_handler
- db 'pmaxuw',3Eh
- dw sse4_instruction_66_38-instruction_handler
- db 'pminsb',38h
- dw sse4_instruction_66_38-instruction_handler
- db 'pminsd',39h
- dw sse4_instruction_66_38-instruction_handler
- db 'pminsw',0EAh
- dw basic_mmx_instruction-instruction_handler
- db 'pminub',0DAh
- dw basic_mmx_instruction-instruction_handler
- db 'pminud',3Bh
- dw sse4_instruction_66_38-instruction_handler
- db 'pminuw',3Ah
- dw sse4_instruction_66_38-instruction_handler
- db 'pmuldq',28h
- dw sse4_instruction_66_38-instruction_handler
- db 'pmulhw',0E5h
- dw basic_mmx_instruction-instruction_handler
- db 'pmulld',40h
- dw sse4_instruction_66_38-instruction_handler
- db 'pmullw',0D5h
- dw basic_mmx_instruction-instruction_handler
- db 'popcnt',0B8h
- dw popcnt_instruction-instruction_handler
- db 'psadbw',0F6h
- dw basic_mmx_instruction-instruction_handler
- db 'pshufb',0
- dw ssse3_instruction-instruction_handler
- db 'pshufd',66h
- dw pshufd_instruction-instruction_handler
- db 'pshufw',0
- dw pshufw_instruction-instruction_handler
- db 'psignb',8
- dw ssse3_instruction-instruction_handler
- db 'psignd',0Ah
- dw ssse3_instruction-instruction_handler
- db 'psignw',9
- dw ssse3_instruction-instruction_handler
- db 'pslldq',111b
- dw pslldq_instruction-instruction_handler
- db 'psmash',0FFh
- dw simple_instruction_f3_0f_01-instruction_handler
- db 'psrldq',011b
- dw pslldq_instruction-instruction_handler
- db 'psubsb',0E8h
- dw basic_mmx_instruction-instruction_handler
- db 'psubsw',0E9h
- dw basic_mmx_instruction-instruction_handler
- db 'pswapd',0BBh
- dw amd3dnow_instruction-instruction_handler
- db 'public',0
- dw public_directive-instruction_handler
- db 'pushad',60h
- dw simple_instruction_32bit_except64-instruction_handler
- db 'pushaw',60h
- dw simple_instruction_16bit_except64-instruction_handler
- db 'pushfd',9Ch
- dw simple_instruction_32bit_except64-instruction_handler
- db 'pushfq',9Ch
- dw simple_instruction_only64-instruction_handler
- db 'pushfw',9Ch
- dw simple_instruction_16bit-instruction_handler
- db 'rdmsrq',32h
- dw simple_extended_instruction_64bit-instruction_handler
- db 'rdpkru',0EEh
- dw simple_instruction_0f_01-instruction_handler
- db 'rdrand',110b
- dw rdrand_instruction-instruction_handler
- db 'rdseed',111b
- dw rdrand_instruction-instruction_handler
- db 'rdsspd',1
- dw rdsspd_instruction-instruction_handler
- db 'rdsspq',1
- dw rdsspq_instruction-instruction_handler
- db 'rdtscp',0F9h
- dw simple_instruction_0f_01-instruction_handler
- db 'repeat',0
- dw repeat_directive-instruction_handler
- db 'setalc',0D6h
- dw simple_instruction_except64-instruction_handler
- db 'setnae',92h
- dw set_instruction-instruction_handler
- db 'setnbe',97h
- dw set_instruction-instruction_handler
- db 'setnge',9Ch
- dw set_instruction-instruction_handler
- db 'setnle',9Fh
- dw set_instruction-instruction_handler
- db 'sfence',0F8h
- dw fence_instruction-instruction_handler
- db 'shufpd',0C6h
- dw sse_pd_instruction_imm8-instruction_handler
- db 'shufps',0C6h
- dw sse_ps_instruction_imm8-instruction_handler
- db 'skinit',0
- dw skinit_instruction-instruction_handler
- db 'slwpcb',1
- dw llwpcb_instruction-instruction_handler
- db 'sqrtpd',51h
- dw sse_pd_instruction-instruction_handler
- db 'sqrtps',51h
- dw sse_ps_instruction-instruction_handler
- db 'sqrtsd',51h
- dw sse_sd_instruction-instruction_handler
- db 'sqrtss',51h
- dw sse_ss_instruction-instruction_handler
- db 'swapgs',0F8h
- dw swapgs_instruction-instruction_handler
- db 'sysret',07h
- dw simple_extended_instruction-instruction_handler
- db 't1mskc',17h
- dw tbm_instruction-instruction_handler
- db 'tpause',66h
- dw tpause_instruction-instruction_handler
- db 'umwait',0F2h
- dw tpause_instruction-instruction_handler
- db 'vaddpd',58h
- dw avx_pd_instruction_er-instruction_handler
- db 'vaddps',58h
- dw avx_ps_instruction_er-instruction_handler
- db 'vaddsd',58h
- dw avx_sd_instruction_er-instruction_handler
- db 'vaddss',58h
- dw avx_ss_instruction_er-instruction_handler
- db 'vandpd',54h
- dw avx_pd_instruction-instruction_handler
- db 'vandps',54h
- dw avx_ps_instruction-instruction_handler
- db 'vcmppd',-1
- dw avx_cmp_pd_instruction-instruction_handler
- db 'vcmpps',-1
- dw avx_cmp_ps_instruction-instruction_handler
- db 'vcmpsd',-1
- dw avx_cmp_sd_instruction-instruction_handler
- db 'vcmpss',-1
- dw avx_cmp_ss_instruction-instruction_handler
- db 'vdivpd',5Eh
- dw avx_pd_instruction_er-instruction_handler
- db 'vdivps',5Eh
- dw avx_ps_instruction_er-instruction_handler
- db 'vdivsd',5Eh
- dw avx_sd_instruction_er-instruction_handler
- db 'vdivss',5Eh
- dw avx_ss_instruction_er-instruction_handler
- db 'vlddqu',0F0h
- dw avx_lddqu_instruction-instruction_handler
- db 'vmaxpd',5Fh
- dw avx_pd_instruction_sae-instruction_handler
- db 'vmaxps',5Fh
- dw avx_ps_instruction_sae-instruction_handler
- db 'vmaxsd',5Fh
- dw avx_sd_instruction_sae-instruction_handler
- db 'vmaxss',5Fh
- dw avx_ss_instruction_sae-instruction_handler
- db 'vmcall',0C1h
- dw simple_instruction_0f_01-instruction_handler
- db 'vmfunc',0D4h
- dw simple_instruction_0f_01-instruction_handler
- db 'vminpd',5Dh
- dw avx_pd_instruction_sae-instruction_handler
- db 'vminps',5Dh
- dw avx_ps_instruction_sae-instruction_handler
- db 'vminsd',5Dh
- dw avx_sd_instruction_sae-instruction_handler
- db 'vminss',5Dh
- dw avx_ss_instruction_sae-instruction_handler
- db 'vmload',0DAh
- dw simple_svm_instruction-instruction_handler
- db 'vmovsd',0
- dw avx_movsd_instruction-instruction_handler
- db 'vmovss',0
- dw avx_movss_instruction-instruction_handler
- db 'vmread',0
- dw vmread_instruction-instruction_handler
- db 'vmsave',0DBh
- dw simple_svm_instruction-instruction_handler
- db 'vmulpd',59h
- dw avx_pd_instruction_er-instruction_handler
- db 'vmulps',59h
- dw avx_ps_instruction_er-instruction_handler
- db 'vmulsd',59h
- dw avx_sd_instruction_er-instruction_handler
- db 'vmulss',59h
- dw avx_ss_instruction_er-instruction_handler
- db 'vmxoff',0C4h
- dw simple_instruction_0f_01-instruction_handler
- db 'vpabsb',1Ch
- dw avx_single_source_bw_instruction_38-instruction_handler
- db 'vpabsd',1Eh
- dw avx_single_source_d_instruction_38-instruction_handler
- db 'vpabsq',1Fh
- dw avx_single_source_q_instruction_38_evex-instruction_handler
- db 'vpabsw',1Dh
- dw avx_single_source_bw_instruction_38-instruction_handler
- db 'vpaddb',0FCh
- dw avx_bw_instruction-instruction_handler
- db 'vpaddd',0FEh
- dw avx_d_instruction-instruction_handler
- db 'vpaddq',0D4h
- dw avx_q_instruction-instruction_handler
- db 'vpaddw',0FDh
- dw avx_bw_instruction-instruction_handler
- db 'vpandd',0DBh
- dw avx_d_instruction_evex-instruction_handler
- db 'vpandn',0DFh
- dw avx_pd_instruction_noevex-instruction_handler
- db 'vpandq',0DBh
- dw avx_q_instruction_evex-instruction_handler
- db 'vpavgb',0E0h
- dw avx_bw_instruction-instruction_handler
- db 'vpavgw',0E3h
- dw avx_bw_instruction-instruction_handler
- db 'vpcmov',0A2h
- dw vpcmov_instruction-instruction_handler
- db 'vpcmpb',-1
- dw avx512_cmp_b_instruction-instruction_handler
- db 'vpcmpd',-1
- dw avx512_cmp_d_instruction-instruction_handler
- db 'vpcmpq',-1
- dw avx512_cmp_q_instruction-instruction_handler
- db 'vpcmpw',-1
- dw avx512_cmp_w_instruction-instruction_handler
- db 'vpcomb',-1
- dw xop_pcom_b_instruction-instruction_handler
- db 'vpcomd',-1
- dw xop_pcom_d_instruction-instruction_handler
- db 'vpcomq',-1
- dw xop_pcom_q_instruction-instruction_handler
- db 'vpcomw',-1
- dw xop_pcom_w_instruction-instruction_handler
- db 'vpermb',8Dh
- dw avx_bw_instruction_38_evex-instruction_handler
- db 'vpermd',36h
- dw avx_permd_instruction-instruction_handler
- db 'vpermq',0
- dw avx_permq_instruction-instruction_handler
- db 'vpermw',8Dh
- dw avx_bw_instruction_38_w1_evex-instruction_handler
- db 'vpperm',0A3h
- dw xop_128bit_instruction-instruction_handler
- db 'vprold',1
- dw avx512_rotate_d_instruction-instruction_handler
- db 'vprolq',1
- dw avx512_rotate_q_instruction-instruction_handler
- db 'vprord',0
- dw avx512_rotate_d_instruction-instruction_handler
- db 'vprorq',0
- dw avx512_rotate_q_instruction-instruction_handler
- db 'vprotb',90h
- dw xop_shift_instruction-instruction_handler
- db 'vprotd',92h
- dw xop_shift_instruction-instruction_handler
- db 'vprotq',93h
- dw xop_shift_instruction-instruction_handler
- db 'vprotw',91h
- dw xop_shift_instruction-instruction_handler
- db 'vpshab',98h
- dw xop_shift_instruction-instruction_handler
- db 'vpshad',9Ah
- dw xop_shift_instruction-instruction_handler
- db 'vpshaq',9Bh
- dw xop_shift_instruction-instruction_handler
- db 'vpshaw',99h
- dw xop_shift_instruction-instruction_handler
- db 'vpshlb',94h
- dw xop_shift_instruction-instruction_handler
- db 'vpshld',96h
- dw xop_shift_instruction-instruction_handler
- db 'vpshlq',97h
- dw xop_shift_instruction-instruction_handler
- db 'vpshlw',95h
- dw xop_shift_instruction-instruction_handler
- db 'vpslld',0F2h
- dw avx_shift_d_instruction-instruction_handler
- db 'vpsllq',0F3h
- dw avx_shift_q_instruction-instruction_handler
- db 'vpsllw',0F1h
- dw avx_shift_bw_instruction-instruction_handler
- db 'vpsrad',0E2h
- dw avx_shift_d_instruction-instruction_handler
- db 'vpsraq',0E2h
- dw avx_shift_q_instruction_evex-instruction_handler
- db 'vpsraw',0E1h
- dw avx_shift_bw_instruction-instruction_handler
- db 'vpsrld',0D2h
- dw avx_shift_d_instruction-instruction_handler
- db 'vpsrlq',0D3h
- dw avx_shift_q_instruction-instruction_handler
- db 'vpsrlw',0D1h
- dw avx_shift_bw_instruction-instruction_handler
- db 'vpsubb',0F8h
- dw avx_bw_instruction-instruction_handler
- db 'vpsubd',0FAh
- dw avx_d_instruction-instruction_handler
- db 'vpsubq',0FBh
- dw avx_q_instruction-instruction_handler
- db 'vpsubw',0F9h
- dw avx_bw_instruction-instruction_handler
- db 'vptest',17h
- dw avx_single_source_instruction_38_noevex-instruction_handler
- db 'vpxord',0EFh
- dw avx_d_instruction_evex-instruction_handler
- db 'vpxorq',0EFh
- dw avx_q_instruction_evex-instruction_handler
- db 'vrcpps',53h
- dw avx_single_source_ps_instruction_noevex-instruction_handler
- db 'vrcpss',53h
- dw avx_ss_instruction_noevex-instruction_handler
- db 'vsubpd',5Ch
- dw avx_pd_instruction_er-instruction_handler
- db 'vsubps',5Ch
- dw avx_ps_instruction_er-instruction_handler
- db 'vsubsd',5Ch
- dw avx_sd_instruction_er-instruction_handler
- db 'vsubss',5Ch
- dw avx_ss_instruction_er-instruction_handler
- db 'vxorpd',57h
- dw avx_pd_instruction-instruction_handler
- db 'vxorps',57h
- dw avx_ps_instruction-instruction_handler
- db 'wbinvd',9
- dw simple_extended_instruction-instruction_handler
- db 'wrmsrq',30h
- dw simple_extended_instruction_64bit-instruction_handler
- db 'wrpkru',0EFh
- dw simple_instruction_0f_01-instruction_handler
- db 'wrussd',0F5h
- dw wrussd_instruction-instruction_handler
- db 'wrussq',0F5h
- dw wrussq_instruction-instruction_handler
- db 'xabort',0
- dw xabort_instruction-instruction_handler
- db 'xbegin',0
- dw xbegin_instruction-instruction_handler
- db 'xgetbv',0D0h
- dw simple_instruction_0f_01-instruction_handler
- db 'xrstor',101b
- dw fxsave_instruction-instruction_handler
- db 'xsavec',4
- dw xsaves_instruction-instruction_handler
- db 'xsaves',5
- dw xsaves_instruction-instruction_handler
- db 'xsetbv',0D1h
- dw simple_instruction_0f_01-instruction_handler
-instructions_7:
- db 'blcfill',11h
- dw tbm_instruction-instruction_handler
- db 'blendpd',0Dh
- dw sse4_instruction_66_3a_imm8-instruction_handler
- db 'blendps',0Ch
- dw sse4_instruction_66_3a_imm8-instruction_handler
- db 'blsfill',12h
- dw tbm_instruction-instruction_handler
- db 'clflush',111b
- dw clflush_instruction-instruction_handler
- db 'cmovnae',42h
- dw bs_instruction-instruction_handler
- db 'cmovnbe',47h
- dw bs_instruction-instruction_handler
- db 'cmovnge',4Ch
- dw bs_instruction-instruction_handler
- db 'cmovnle',4Fh
- dw bs_instruction-instruction_handler
- db 'cmpeqpd',0
- dw cmp_pd_instruction-instruction_handler
- db 'cmpeqps',0
- dw cmp_ps_instruction-instruction_handler
- db 'cmpeqsd',0
- dw cmp_sd_instruction-instruction_handler
- db 'cmpeqss',0
- dw cmp_ss_instruction-instruction_handler
- db 'cmplepd',2
- dw cmp_pd_instruction-instruction_handler
- db 'cmpleps',2
- dw cmp_ps_instruction-instruction_handler
- db 'cmplesd',2
- dw cmp_sd_instruction-instruction_handler
- db 'cmpless',2
- dw cmp_ss_instruction-instruction_handler
- db 'cmpltpd',1
- dw cmp_pd_instruction-instruction_handler
- db 'cmpltps',1
- dw cmp_ps_instruction-instruction_handler
- db 'cmpltsd',1
- dw cmp_sd_instruction-instruction_handler
- db 'cmpltss',1
- dw cmp_ss_instruction-instruction_handler
- db 'cmpxchg',0B0h
- dw basic_486_instruction-instruction_handler
- db 'display',0
- dw display_directive-instruction_handler
- db 'endbr32',0FBh
- dw endbr_instruction-instruction_handler
- db 'endbr64',0FAh
- dw endbr_instruction-instruction_handler
- db 'fcmovbe',0D0h
- dw fcmov_instruction-instruction_handler
- db 'fcmovnb',0C0h
- dw fcomi_instruction-instruction_handler
- db 'fcmovne',0C8h
- dw fcomi_instruction-instruction_handler
- db 'fcmovnu',0D8h
- dw fcomi_instruction-instruction_handler
- db 'fdecstp',110110b
- dw simple_fpu_instruction-instruction_handler
- db 'fincstp',110111b
- dw simple_fpu_instruction-instruction_handler
- db 'fldenvd',4
- dw fldenv_instruction_32bit-instruction_handler
- db 'fldenvw',4
- dw fldenv_instruction_16bit-instruction_handler
- db 'fnsaved',6
- dw fnsave_instruction_32bit-instruction_handler
- db 'fnsavew',6
- dw fnsave_instruction_16bit-instruction_handler
- db 'fnstenv',6
- dw fldenv_instruction-instruction_handler
- db 'frndint',111100b
- dw simple_fpu_instruction-instruction_handler
- db 'frstord',4
- dw fnsave_instruction_32bit-instruction_handler
- db 'frstorw',4
- dw fnsave_instruction_16bit-instruction_handler
- db 'fsincos',111011b
- dw simple_fpu_instruction-instruction_handler
- db 'fstenvd',6
- dw fstenv_instruction_32bit-instruction_handler
- db 'fstenvw',6
- dw fstenv_instruction_16bit-instruction_handler
- db 'fucomip',0E8h
- dw fcomip_instruction-instruction_handler
- db 'fucompp',0
- dw fucompp_instruction-instruction_handler
- db 'fxrstor',1
- dw fxsave_instruction-instruction_handler
- db 'fxtract',110100b
- dw simple_fpu_instruction-instruction_handler
- db 'fyl2xp1',111001b
- dw simple_fpu_instruction-instruction_handler
- db 'incsspd',5
- dw incsspd_instruction-instruction_handler
- db 'incsspq',5
- dw incsspq_instruction-instruction_handler
- db 'insertq',0
- dw insertq_instruction-instruction_handler
- db 'invlpga',0DFh
- dw invlpga_instruction-instruction_handler
- db 'invlpgb',0FEh
- dw simple_instruction_0f_01-instruction_handler
- db 'invpcid',82h
- dw vmx_inv_instruction-instruction_handler
- db 'invvpid',81h
- dw vmx_inv_instruction-instruction_handler
- db 'ldmxcsr',10b
- dw stmxcsr_instruction-instruction_handler
- db 'loopned',0E0h
- dw loop_instruction_32bit-instruction_handler
- db 'loopneq',0E0h
- dw loop_instruction_64bit-instruction_handler
- db 'loopnew',0E0h
- dw loop_instruction_16bit-instruction_handler
- db 'loopnzd',0E0h
- dw loop_instruction_32bit-instruction_handler
- db 'loopnzq',0E0h
- dw loop_instruction_64bit-instruction_handler
- db 'loopnzw',0E0h
- dw loop_instruction_16bit-instruction_handler
- db 'mcommit',0FAh
- dw simple_instruction_f3_0f_01-instruction_handler
- db 'monitor',0C8h
- dw monitor_instruction-instruction_handler
- db 'movddup',12h
- dw sse_sd_instruction-instruction_handler
- db 'movdiri',0F9h
- dw movdiri_instruction-instruction_handler
- db 'movdq2q',0
- dw movdq2q_instruction-instruction_handler
- db 'movhlps',12h
- dw movhlps_instruction-instruction_handler
- db 'movlhps',16h
- dw movhlps_instruction-instruction_handler
- db 'movntdq',0E7h
- dw movntpd_instruction-instruction_handler
- db 'movntpd',2Bh
- dw movntpd_instruction-instruction_handler
- db 'movntps',2Bh
- dw movntps_instruction-instruction_handler
- db 'movntsd',2Bh
- dw movntsd_instruction-instruction_handler
- db 'movntss',2Bh
- dw movntss_instruction-instruction_handler
- db 'movq2dq',0
- dw movq2dq_instruction-instruction_handler
- db 'mpsadbw',42h
- dw sse4_instruction_66_3a_imm8-instruction_handler
- db 'paddusb',0DCh
- dw basic_mmx_instruction-instruction_handler
- db 'paddusw',0DDh
- dw basic_mmx_instruction-instruction_handler
- db 'palignr',0
- dw palignr_instruction-instruction_handler
- db 'pavgusb',0BFh
- dw amd3dnow_instruction-instruction_handler
- db 'pblendw',0Eh
- dw sse4_instruction_66_3a_imm8-instruction_handler
- db 'pcmpeqb',74h
- dw basic_mmx_instruction-instruction_handler
- db 'pcmpeqd',76h
- dw basic_mmx_instruction-instruction_handler
- db 'pcmpeqq',29h
- dw sse4_instruction_66_38-instruction_handler
- db 'pcmpeqw',75h
- dw basic_mmx_instruction-instruction_handler
- db 'pcmpgtb',64h
- dw basic_mmx_instruction-instruction_handler
- db 'pcmpgtd',66h
- dw basic_mmx_instruction-instruction_handler
- db 'pcmpgtq',37h
- dw sse4_instruction_66_38-instruction_handler
- db 'pcmpgtw',65h
- dw basic_mmx_instruction-instruction_handler
- db 'pcommit',0F8h
- dw pcommit_instruction-instruction_handler
- db 'pconfig',0C5h
- dw pconfig_instruction-instruction_handler
- db 'pfcmpeq',0B0h
- dw amd3dnow_instruction-instruction_handler
- db 'pfcmpge',90h
- dw amd3dnow_instruction-instruction_handler
- db 'pfcmpgt',0A0h
- dw amd3dnow_instruction-instruction_handler
- db 'pfpnacc',8Eh
- dw amd3dnow_instruction-instruction_handler
- db 'pfrsqrt',97h
- dw amd3dnow_instruction-instruction_handler
- db 'phaddsw',3
- dw ssse3_instruction-instruction_handler
- db 'phsubsw',7
- dw ssse3_instruction-instruction_handler
- db 'pmaddwd',0F5h
- dw basic_mmx_instruction-instruction_handler
- db 'pmulhrw',0B7h
- dw amd3dnow_instruction-instruction_handler
- db 'pmulhuw',0E4h
- dw basic_mmx_instruction-instruction_handler
- db 'pmuludq',0F4h
- dw basic_mmx_instruction-instruction_handler
- db 'pshufhw',0F3h
- dw pshufd_instruction-instruction_handler
- db 'pshuflw',0F2h
- dw pshufd_instruction-instruction_handler
- db 'psubusb',0D8h
- dw basic_mmx_instruction-instruction_handler
- db 'psubusw',0D9h
- dw basic_mmx_instruction-instruction_handler
- db 'ptwrite',4
- dw ptwrite_instruction-instruction_handler
- db 'roundpd',9
- dw sse4_instruction_66_3a_imm8-instruction_handler
- db 'roundps',8
- dw sse4_instruction_66_3a_imm8-instruction_handler
- db 'roundsd',0Bh
- dw sse4_sd_instruction_66_3a_imm8-instruction_handler
- db 'roundss',0Ah
- dw sse4_ss_instruction_66_3a_imm8-instruction_handler
- db 'rsqrtps',52h
- dw sse_ps_instruction-instruction_handler
- db 'rsqrtss',52h
- dw sse_ss_instruction-instruction_handler
- db 'section',0
- dw section_directive-instruction_handler
- db 'segment',0
- dw segment_directive-instruction_handler
- db 'stmxcsr',11b
- dw stmxcsr_instruction-instruction_handler
- db 'syscall',05h
- dw simple_extended_instruction-instruction_handler
- db 'sysexit',35h
- dw simple_extended_instruction-instruction_handler
- db 'sysretq',07h
- dw simple_extended_instruction_64bit-instruction_handler
- db 'tlbsync',0FFh
- dw simple_instruction_0f_01-instruction_handler
- db 'ucomisd',2Eh
- dw comisd_instruction-instruction_handler
- db 'ucomiss',2Eh
- dw comiss_instruction-instruction_handler
- db 'vaesdec',0DEh
- dw avx_instruction_38_nomask-instruction_handler
- db 'vaesenc',0DCh
- dw avx_instruction_38_nomask-instruction_handler
- db 'vaesimc',0DBh
- dw avx_single_source_128bit_instruction_38_noevex-instruction_handler
- db 'valignd',3
- dw avx_d_instruction_3a_imm8_evex-instruction_handler
- db 'valignq',3
- dw avx_q_instruction_3a_imm8_evex-instruction_handler
- db 'vandnpd',55h
- dw avx_pd_instruction-instruction_handler
- db 'vandnps',55h
- dw avx_ps_instruction-instruction_handler
- db 'vcomisd',2Fh
- dw avx_comisd_instruction-instruction_handler
- db 'vcomiss',2Fh
- dw avx_comiss_instruction-instruction_handler
- db 'vexp2pd',0C8h
- dw avx512_exp2pd_instruction-instruction_handler
- db 'vexp2ps',0C8h
- dw avx512_exp2ps_instruction-instruction_handler
- db 'vfrczpd',81h
- dw xop_single_source_instruction-instruction_handler
- db 'vfrczps',80h
- dw xop_single_source_instruction-instruction_handler
- db 'vfrczsd',83h
- dw xop_single_source_sd_instruction-instruction_handler
- db 'vfrczss',82h
- dw xop_single_source_ss_instruction-instruction_handler
- db 'vhaddpd',07Ch
- dw avx_pd_instruction_noevex-instruction_handler
- db 'vhaddps',07Ch
- dw avx_ps_instruction_noevex-instruction_handler
- db 'vhsubpd',07Dh
- dw avx_pd_instruction_noevex-instruction_handler
- db 'vhsubps',07Dh
- dw avx_ps_instruction_noevex-instruction_handler
- db 'virtual',0
- dw virtual_directive-instruction_handler
- db 'vmclear',6
- dw vmclear_instruction-instruction_handler
- db 'vmmcall',0D9h
- dw simple_instruction_0f_01-instruction_handler
- db 'vmovapd',28h
- dw avx_movpd_instruction-instruction_handler
- db 'vmovaps',28h
- dw avx_movps_instruction-instruction_handler
- db 'vmovdqa',6Fh
- dw avx_movdqa_instruction-instruction_handler
- db 'vmovdqu',6Fh
- dw avx_movdqu_instruction-instruction_handler
- db 'vmovhpd',16h
- dw avx_movlpd_instruction-instruction_handler
- db 'vmovhps',16h
- dw avx_movlps_instruction-instruction_handler
- db 'vmovlpd',12h
- dw avx_movlpd_instruction-instruction_handler
- db 'vmovlps',12h
- dw avx_movlps_instruction-instruction_handler
- db 'vmovupd',10h
- dw avx_movpd_instruction-instruction_handler
- db 'vmovups',10h
- dw avx_movps_instruction-instruction_handler
- db 'vmptrld',6
- dw vmx_instruction-instruction_handler
- db 'vmptrst',7
- dw vmx_instruction-instruction_handler
- db 'vmwrite',0
- dw vmwrite_instruction-instruction_handler
- db 'vpaddsb',0ECh
- dw avx_bw_instruction-instruction_handler
- db 'vpaddsw',0EDh
- dw avx_bw_instruction-instruction_handler
- db 'vpandnd',0DFh
- dw avx_d_instruction_evex-instruction_handler
- db 'vpandnq',0DFh
- dw avx_q_instruction_evex-instruction_handler
- db 'vpcmpub',-1
- dw avx512_cmp_ub_instruction-instruction_handler
- db 'vpcmpud',-1
- dw avx512_cmp_ud_instruction-instruction_handler
- db 'vpcmpuq',-1
- dw avx512_cmp_uq_instruction-instruction_handler
- db 'vpcmpuw',-1
- dw avx512_cmp_uw_instruction-instruction_handler
- db 'vpcomub',-1
- dw xop_pcom_ub_instruction-instruction_handler
- db 'vpcomud',-1
- dw xop_pcom_ud_instruction-instruction_handler
- db 'vpcomuq',-1
- dw xop_pcom_uq_instruction-instruction_handler
- db 'vpcomuw',-1
- dw xop_pcom_uw_instruction-instruction_handler
- db 'vpermpd',1
- dw avx_permq_instruction-instruction_handler
- db 'vpermps',16h
- dw avx_permd_instruction-instruction_handler
- db 'vpextrb',14h
- dw avx_extract_b_instruction-instruction_handler
- db 'vpextrd',16h
- dw avx_extract_d_instruction-instruction_handler
- db 'vpextrq',16h
- dw avx_extract_q_instruction-instruction_handler
- db 'vpextrw',15h
- dw avx_extract_w_instruction-instruction_handler
- db 'vphaddd',2
- dw avx_pi_instruction_38_noevex-instruction_handler
- db 'vphaddw',1
- dw avx_pi_instruction_38_noevex-instruction_handler
- db 'vphsubd',6
- dw avx_pi_instruction_38_noevex-instruction_handler
- db 'vphsubw',5
- dw avx_pi_instruction_38_noevex-instruction_handler
- db 'vpinsrb',20h
- dw avx_pinsrb_instruction-instruction_handler
- db 'vpinsrd',22h
- dw avx_pinsrd_instruction-instruction_handler
- db 'vpinsrq',22h
- dw avx_pinsrq_instruction-instruction_handler
- db 'vpinsrw',0C4h
- dw avx_pinsrw_instruction-instruction_handler
- db 'vpmaxsb',3Ch
- dw avx_bw_instruction_38-instruction_handler
- db 'vpmaxsd',3Dh
- dw avx_d_instruction_38-instruction_handler
- db 'vpmaxsq',3Dh
- dw avx_q_instruction_38_evex-instruction_handler
- db 'vpmaxsw',0EEh
- dw avx_bw_instruction-instruction_handler
- db 'vpmaxub',0DEh
- dw avx_bw_instruction-instruction_handler
- db 'vpmaxud',3Fh
- dw avx_d_instruction_38-instruction_handler
- db 'vpmaxuq',3Fh
- dw avx_q_instruction_38_evex-instruction_handler
- db 'vpmaxuw',3Eh
- dw avx_bw_instruction_38-instruction_handler
- db 'vpminsb',38h
- dw avx_bw_instruction_38-instruction_handler
- db 'vpminsd',39h
- dw avx_d_instruction_38-instruction_handler
- db 'vpminsq',39h
- dw avx_q_instruction_38_evex-instruction_handler
- db 'vpminsw',0EAh
- dw avx_bw_instruction-instruction_handler
- db 'vpminub',0DAh
- dw avx_bw_instruction-instruction_handler
- db 'vpminud',3Bh
- dw avx_d_instruction_38-instruction_handler
- db 'vpminuq',3Bh
- dw avx_q_instruction_38_evex-instruction_handler
- db 'vpminuw',3Ah
- dw avx_bw_instruction_38-instruction_handler
- db 'vpmovdb',31h
- dw avx512_pmovdb_instruction-instruction_handler
- db 'vpmovdw',33h
- dw avx512_pmovwb_instruction-instruction_handler
- db 'vpmovqb',32h
- dw avx512_pmovqb_instruction-instruction_handler
- db 'vpmovqd',35h
- dw avx512_pmovwb_instruction-instruction_handler
- db 'vpmovqw',34h
- dw avx512_pmovdb_instruction-instruction_handler
- db 'vpmovwb',30h
- dw avx512_pmovwb_instruction-instruction_handler
- db 'vpmuldq',28h
- dw avx_q_instruction_38-instruction_handler
- db 'vpmulhw',0E5h
- dw avx_bw_instruction-instruction_handler
- db 'vpmulld',40h
- dw avx_d_instruction_38-instruction_handler
- db 'vpmullq',40h
- dw avx_q_instruction_38_evex-instruction_handler
- db 'vpmullw',0D5h
- dw avx_bw_instruction-instruction_handler
- db 'vprolvd',15h
- dw avx_d_instruction_38_evex-instruction_handler
- db 'vprolvq',15h
- dw avx_q_instruction_38_evex-instruction_handler
- db 'vprorvd',14h
- dw avx_d_instruction_38_evex-instruction_handler
- db 'vprorvq',14h
- dw avx_q_instruction_38_evex-instruction_handler
- db 'vpsadbw',0F6h
- dw avx_bw_instruction-instruction_handler
- db 'vpshldd',71h
- dw avx_d_instruction_3a_imm8_evex-instruction_handler
- db 'vpshldq',71h
- dw avx_q_instruction_3a_imm8_evex-instruction_handler
- db 'vpshldw',70h
- dw avx_bw_instruction_3a_imm8_w1_evex-instruction_handler
- db 'vpshrdd',73h
- dw avx_d_instruction_3a_imm8_evex-instruction_handler
- db 'vpshrdq',73h
- dw avx_q_instruction_3a_imm8_evex-instruction_handler
- db 'vpshrdw',72h
- dw avx_bw_instruction_3a_imm8_w1_evex-instruction_handler
- db 'vpshufb',0
- dw avx_bw_instruction_38-instruction_handler
- db 'vpshufd',70h
- dw avx_single_source_d_instruction_imm8-instruction_handler
- db 'vpsignb',8
- dw avx_pi_instruction_38_noevex-instruction_handler
- db 'vpsignd',0Ah
- dw avx_pi_instruction_38_noevex-instruction_handler
- db 'vpsignw',9
- dw avx_pi_instruction_38_noevex-instruction_handler
- db 'vpslldq',111b
- dw avx_shift_dq_instruction-instruction_handler
- db 'vpsllvd',47h
- dw avx_d_instruction_38-instruction_handler
- db 'vpsllvq',47h
- dw avx_q_instruction_38_w1-instruction_handler
- db 'vpsllvw',12h
- dw avx_bw_instruction_38_w1_evex-instruction_handler
- db 'vpsravd',46h
- dw avx_d_instruction_38-instruction_handler
- db 'vpsravq',46h
- dw avx_q_instruction_38_w1_evex-instruction_handler
- db 'vpsravw',11h
- dw avx_bw_instruction_38_w1_evex-instruction_handler
- db 'vpsrldq',011b
- dw avx_shift_dq_instruction-instruction_handler
- db 'vpsrlvd',45h
- dw avx_d_instruction_38-instruction_handler
- db 'vpsrlvq',45h
- dw avx_q_instruction_38_w1-instruction_handler
- db 'vpsrlvw',10h
- dw avx_bw_instruction_38_w1_evex-instruction_handler
- db 'vpsubsb',0E8h
- dw avx_bw_instruction-instruction_handler
- db 'vpsubsw',0E9h
- dw avx_bw_instruction-instruction_handler
- db 'vshufpd',0C6h
- dw avx_pd_instruction_imm8-instruction_handler
- db 'vshufps',0C6h
- dw avx_ps_instruction_imm8-instruction_handler
- db 'vsqrtpd',51h
- dw avx_single_source_pd_instruction_er-instruction_handler
- db 'vsqrtps',51h
- dw avx_single_source_ps_instruction_er-instruction_handler
- db 'vsqrtsd',51h
- dw avx_sd_instruction_er-instruction_handler
- db 'vsqrtss',51h
- dw avx_ss_instruction_er-instruction_handler
- db 'vtestpd',0Fh
- dw avx_single_source_instruction_38_noevex-instruction_handler
- db 'vtestps',0Eh
- dw avx_single_source_instruction_38_noevex-instruction_handler
- db 'xrstors',3
- dw xsaves_instruction-instruction_handler
- db 'xsave64',100b
- dw fxsave_instruction_64bit-instruction_handler
-instructions_8:
- db 'addsubpd',0D0h
- dw sse_pd_instruction-instruction_handler
- db 'addsubps',0D0h
- dw cvtpd2dq_instruction-instruction_handler
- db 'blendvpd',15h
- dw sse4_instruction_66_38_xmm0-instruction_handler
- db 'blendvps',14h
- dw sse4_instruction_66_38_xmm0-instruction_handler
- db 'cldemote',0
- dw cldemote_instruction-instruction_handler
- db 'clrssbsy',6
- dw clrssbsy_instruction-instruction_handler
- db 'cmpneqpd',4
- dw cmp_pd_instruction-instruction_handler
- db 'cmpneqps',4
- dw cmp_ps_instruction-instruction_handler
- db 'cmpneqsd',4
- dw cmp_sd_instruction-instruction_handler
- db 'cmpneqss',4
- dw cmp_ss_instruction-instruction_handler
- db 'cmpnlepd',6
- dw cmp_pd_instruction-instruction_handler
- db 'cmpnleps',6
- dw cmp_ps_instruction-instruction_handler
- db 'cmpnlesd',6
- dw cmp_sd_instruction-instruction_handler
- db 'cmpnless',6
- dw cmp_ss_instruction-instruction_handler
- db 'cmpnltpd',5
- dw cmp_pd_instruction-instruction_handler
- db 'cmpnltps',5
- dw cmp_ps_instruction-instruction_handler
- db 'cmpnltsd',5
- dw cmp_sd_instruction-instruction_handler
- db 'cmpnltss',5
- dw cmp_ss_instruction-instruction_handler
- db 'cmpordpd',7
- dw cmp_pd_instruction-instruction_handler
- db 'cmpordps',7
- dw cmp_ps_instruction-instruction_handler
- db 'cmpordsd',7
- dw cmp_sd_instruction-instruction_handler
- db 'cmpordss',7
- dw cmp_ss_instruction-instruction_handler
- db 'cvtdq2pd',0E6h
- dw cvtdq2pd_instruction-instruction_handler
- db 'cvtdq2ps',5Bh
- dw sse_ps_instruction-instruction_handler
- db 'cvtpd2dq',0E6h
- dw cvtpd2dq_instruction-instruction_handler
- db 'cvtpd2pi',2Dh
- dw cvtpd2pi_instruction-instruction_handler
- db 'cvtpd2ps',5Ah
- dw sse_pd_instruction-instruction_handler
- db 'cvtpi2pd',2Ah
- dw cvtpi2pd_instruction-instruction_handler
- db 'cvtpi2ps',2Ah
- dw cvtpi2ps_instruction-instruction_handler
- db 'cvtps2dq',5Bh
- dw sse_pd_instruction-instruction_handler
- db 'cvtps2pd',5Ah
- dw cvtps2pd_instruction-instruction_handler
- db 'cvtps2pi',2Dh
- dw cvtps2pi_instruction-instruction_handler
- db 'cvtsd2si',2Dh
- dw cvtsd2si_instruction-instruction_handler
- db 'cvtsd2ss',5Ah
- dw sse_sd_instruction-instruction_handler
- db 'cvtsi2sd',2Ah
- dw cvtsi2sd_instruction-instruction_handler
- db 'cvtsi2ss',2Ah
- dw cvtsi2ss_instruction-instruction_handler
- db 'cvtss2sd',5Ah
- dw sse_ss_instruction-instruction_handler
- db 'cvtss2si',2Dh
- dw cvtss2si_instruction-instruction_handler
- db 'fcmovnbe',0D0h
- dw fcomi_instruction-instruction_handler
- db 'fnstenvd',6
- dw fldenv_instruction_32bit-instruction_handler
- db 'fnstenvw',6
- dw fldenv_instruction_16bit-instruction_handler
- db 'fxsave64',0
- dw fxsave_instruction_64bit-instruction_handler
- db 'insertps',21h
- dw insertps_instruction-instruction_handler
- db 'kortestb',98h
- dw mask_instruction_single_source_b-instruction_handler
- db 'kortestd',98h
- dw mask_instruction_single_source_d-instruction_handler
- db 'kortestq',98h
- dw mask_instruction_single_source_q-instruction_handler
- db 'kortestw',98h
- dw mask_instruction_single_source_w-instruction_handler
- db 'kshiftlb',32h
- dw mask_shift_instruction_d-instruction_handler
- db 'kshiftld',33h
- dw mask_shift_instruction_d-instruction_handler
- db 'kshiftlq',33h
- dw mask_shift_instruction_q-instruction_handler
- db 'kshiftlw',32h
- dw mask_shift_instruction_q-instruction_handler
- db 'kshiftrb',30h
- dw mask_shift_instruction_d-instruction_handler
- db 'kshiftrd',31h
- dw mask_shift_instruction_d-instruction_handler
- db 'kshiftrq',31h
- dw mask_shift_instruction_q-instruction_handler
- db 'kshiftrw',30h
- dw mask_shift_instruction_q-instruction_handler
- db 'kunpckbw',4Bh
- dw mask_instruction_b-instruction_handler
- db 'kunpckdq',4Bh
- dw mask_instruction_q-instruction_handler
- db 'kunpckwd',4Bh
- dw mask_instruction_w-instruction_handler
- db 'maskmovq',0
- dw maskmovq_instruction-instruction_handler
- db 'monitorx',0FAh
- dw monitor_instruction-instruction_handler
- db 'movmskpd',0
- dw movmskpd_instruction-instruction_handler
- db 'movmskps',0
- dw movmskps_instruction-instruction_handler
- db 'movntdqa',2Ah
- dw movntdqa_instruction-instruction_handler
- db 'movshdup',16h
- dw movshdup_instruction-instruction_handler
- db 'movsldup',12h
- dw movshdup_instruction-instruction_handler
- db 'packssdw',6Bh
- dw basic_mmx_instruction-instruction_handler
- db 'packsswb',63h
- dw basic_mmx_instruction-instruction_handler
- db 'packusdw',2Bh
- dw sse4_instruction_66_38-instruction_handler
- db 'packuswb',67h
- dw basic_mmx_instruction-instruction_handler
- db 'pblendvb',10h
- dw sse4_instruction_66_38_xmm0-instruction_handler
- db 'pfrcpit1',0A6h
- dw amd3dnow_instruction-instruction_handler
- db 'pfrcpit2',0B6h
- dw amd3dnow_instruction-instruction_handler
- db 'pfrsqit1',0A7h
- dw amd3dnow_instruction-instruction_handler
- db 'pmovmskb',0D7h
- dw pmovmskb_instruction-instruction_handler
- db 'pmovsxbd',21h
- dw pmovsxbd_instruction-instruction_handler
- db 'pmovsxbq',22h
- dw pmovsxbq_instruction-instruction_handler
- db 'pmovsxbw',20h
- dw pmovsxbw_instruction-instruction_handler
- db 'pmovsxdq',25h
- dw pmovsxdq_instruction-instruction_handler
- db 'pmovsxwd',23h
- dw pmovsxwd_instruction-instruction_handler
- db 'pmovsxwq',24h
- dw pmovsxwq_instruction-instruction_handler
- db 'pmovzxbd',31h
- dw pmovsxbd_instruction-instruction_handler
- db 'pmovzxbq',32h
- dw pmovsxbq_instruction-instruction_handler
- db 'pmovzxbw',30h
- dw pmovsxbw_instruction-instruction_handler
- db 'pmovzxdq',35h
- dw pmovsxdq_instruction-instruction_handler
- db 'pmovzxwd',33h
- dw pmovsxwd_instruction-instruction_handler
- db 'pmovzxwq',34h
- dw pmovsxwq_instruction-instruction_handler
- db 'pmulhrsw',0Bh
- dw ssse3_instruction-instruction_handler
- db 'prefetch',0
- dw amd_prefetch_instruction-instruction_handler
- db 'rdfsbase',0
- dw rdfsbase_instruction-instruction_handler
- db 'rdgsbase',1
- dw rdfsbase_instruction-instruction_handler
- db 'rstorssp',5
- dw rstorssp_instruction-instruction_handler
- db 'setssbsy',0E8h
- dw setssbsy_instruction-instruction_handler
- db 'sha1msg1',0C9h
- dw sse4_instruction_38-instruction_handler
- db 'sha1msg2',0CAh
- dw sse4_instruction_38-instruction_handler
- db 'sysenter',34h
- dw simple_extended_instruction-instruction_handler
- db 'sysexitq',35h
- dw simple_extended_instruction_64bit-instruction_handler
- db 'umonitor',0
- dw umonitor_instruction-instruction_handler
- db 'unpckhpd',15h
- dw sse_pd_instruction-instruction_handler
- db 'unpckhps',15h
- dw sse_ps_instruction-instruction_handler
- db 'unpcklpd',14h
- dw sse_pd_instruction-instruction_handler
- db 'unpcklps',14h
- dw sse_ps_instruction-instruction_handler
- db 'vblendpd',0Dh
- dw avx_pi_instruction_3a_imm8_noevex-instruction_handler
- db 'vblendps',0Ch
- dw avx_pi_instruction_3a_imm8_noevex-instruction_handler
- db 'vcmpeqpd',0
- dw avx_cmp_pd_instruction-instruction_handler
- db 'vcmpeqps',0
- dw avx_cmp_ps_instruction-instruction_handler
- db 'vcmpeqsd',0
- dw avx_cmp_sd_instruction-instruction_handler
- db 'vcmpeqss',0
- dw avx_cmp_ss_instruction-instruction_handler
- db 'vcmpgepd',0Dh
- dw avx_cmp_pd_instruction-instruction_handler
- db 'vcmpgeps',0Dh
- dw avx_cmp_ps_instruction-instruction_handler
- db 'vcmpgesd',0Dh
- dw avx_cmp_sd_instruction-instruction_handler
- db 'vcmpgess',0Dh
- dw avx_cmp_ss_instruction-instruction_handler
- db 'vcmpgtpd',0Eh
- dw avx_cmp_pd_instruction-instruction_handler
- db 'vcmpgtps',0Eh
- dw avx_cmp_ps_instruction-instruction_handler
- db 'vcmpgtsd',0Eh
- dw avx_cmp_sd_instruction-instruction_handler
- db 'vcmpgtss',0Eh
- dw avx_cmp_ss_instruction-instruction_handler
- db 'vcmplepd',2
- dw avx_cmp_pd_instruction-instruction_handler
- db 'vcmpleps',2
- dw avx_cmp_ps_instruction-instruction_handler
- db 'vcmplesd',2
- dw avx_cmp_sd_instruction-instruction_handler
- db 'vcmpless',2
- dw avx_cmp_ss_instruction-instruction_handler
- db 'vcmpltpd',1
- dw avx_cmp_pd_instruction-instruction_handler
- db 'vcmpltps',1
- dw avx_cmp_ps_instruction-instruction_handler
- db 'vcmpltsd',1
- dw avx_cmp_sd_instruction-instruction_handler
- db 'vcmpltss',1
- dw avx_cmp_ss_instruction-instruction_handler
- db 'vfmaddpd',69h
- dw fma4_instruction_p-instruction_handler
- db 'vfmaddps',68h
- dw fma4_instruction_p-instruction_handler
- db 'vfmaddsd',6Bh
- dw fma4_instruction_sd-instruction_handler
- db 'vfmaddss',6Ah
- dw fma4_instruction_ss-instruction_handler
- db 'vfmsubpd',6Dh
- dw fma4_instruction_p-instruction_handler
- db 'vfmsubps',6Ch
- dw fma4_instruction_p-instruction_handler
- db 'vfmsubsd',6Fh
- dw fma4_instruction_sd-instruction_handler
- db 'vfmsubss',6Eh
- dw fma4_instruction_ss-instruction_handler
- db 'vldmxcsr',10b
- dw vstmxcsr_instruction-instruction_handler
- db 'vmlaunch',0C2h
- dw simple_instruction_0f_01-instruction_handler
- db 'vmovddup',12h
- dw avx_movddup_instruction-instruction_handler
- db 'vmovdqu8',6Fh
- dw avx512_movdqu8_instruction-instruction_handler
- db 'vmovhlps',12h
- dw avx_movhlps_instruction-instruction_handler
- db 'vmovlhps',16h
- dw avx_movhlps_instruction-instruction_handler
- db 'vmovntdq',0E7h
- dw avx_movntdq_instruction-instruction_handler
- db 'vmovntpd',2Bh
- dw avx_movntpd_instruction-instruction_handler
- db 'vmovntps',2Bh
- dw avx_movntps_instruction-instruction_handler
- db 'vmpsadbw',42h
- dw avx_pi_instruction_3a_imm8_noevex-instruction_handler
- db 'vmresume',0C3h
- dw simple_instruction_0f_01-instruction_handler
- db 'vpaddusb',0DCh
- dw avx_bw_instruction-instruction_handler
- db 'vpaddusw',0DDh
- dw avx_bw_instruction-instruction_handler
- db 'vpalignr',0Fh
- dw avx_pi_instruction_3a_imm8-instruction_handler
- db 'vpblendd',2
- dw avx_pi_instruction_3a_imm8_noevex-instruction_handler
- db 'vpblendw',0Eh
- dw avx_pi_instruction_3a_imm8_noevex-instruction_handler
- db 'vpcmpeqb',74h
- dw avx_cmpeqb_instruction-instruction_handler
- db 'vpcmpeqd',76h
- dw avx_cmpeqd_instruction-instruction_handler
- db 'vpcmpeqq',29h
- dw avx_cmpeqq_instruction-instruction_handler
- db 'vpcmpeqw',75h
- dw avx_cmpeqb_instruction-instruction_handler
- db 'vpcmpgtb',64h
- dw avx_cmpeqb_instruction-instruction_handler
- db 'vpcmpgtd',66h
- dw avx_cmpeqd_instruction-instruction_handler
- db 'vpcmpgtq',37h
- dw avx_cmpeqq_instruction-instruction_handler
- db 'vpcmpgtw',65h
- dw avx_cmpeqb_instruction-instruction_handler
- db 'vpcmpleb',2
- dw avx512_cmp_b_instruction-instruction_handler
- db 'vpcmpled',2
- dw avx512_cmp_d_instruction-instruction_handler
- db 'vpcmpleq',2
- dw avx512_cmp_q_instruction-instruction_handler
- db 'vpcmplew',2
- dw avx512_cmp_w_instruction-instruction_handler
- db 'vpcmpltb',1
- dw avx512_cmp_b_instruction-instruction_handler
- db 'vpcmpltd',1
- dw avx512_cmp_d_instruction-instruction_handler
- db 'vpcmpltq',1
- dw avx512_cmp_q_instruction-instruction_handler
- db 'vpcmpltw',1
- dw avx512_cmp_w_instruction-instruction_handler
- db 'vpcomeqb',4
- dw xop_pcom_b_instruction-instruction_handler
- db 'vpcomeqd',4
- dw xop_pcom_d_instruction-instruction_handler
- db 'vpcomeqq',4
- dw xop_pcom_q_instruction-instruction_handler
- db 'vpcomeqw',4
- dw xop_pcom_w_instruction-instruction_handler
- db 'vpcomgeb',3
- dw xop_pcom_b_instruction-instruction_handler
- db 'vpcomged',3
- dw xop_pcom_d_instruction-instruction_handler
- db 'vpcomgeq',3
- dw xop_pcom_q_instruction-instruction_handler
- db 'vpcomgew',3
- dw xop_pcom_w_instruction-instruction_handler
- db 'vpcomgtb',2
- dw xop_pcom_b_instruction-instruction_handler
- db 'vpcomgtd',2
- dw xop_pcom_d_instruction-instruction_handler
- db 'vpcomgtq',2
- dw xop_pcom_q_instruction-instruction_handler
- db 'vpcomgtw',2
- dw xop_pcom_w_instruction-instruction_handler
- db 'vpcomleb',1
- dw xop_pcom_b_instruction-instruction_handler
- db 'vpcomled',1
- dw xop_pcom_d_instruction-instruction_handler
- db 'vpcomleq',1
- dw xop_pcom_q_instruction-instruction_handler
- db 'vpcomlew',1
- dw xop_pcom_w_instruction-instruction_handler
- db 'vpcomltb',0
- dw xop_pcom_b_instruction-instruction_handler
- db 'vpcomltd',0
- dw xop_pcom_d_instruction-instruction_handler
- db 'vpcomltq',0
- dw xop_pcom_q_instruction-instruction_handler
- db 'vpcomltw',0
- dw xop_pcom_w_instruction-instruction_handler
- db 'vpdpbusd',50h
- dw avx_d_instruction_38_evex-instruction_handler
- db 'vpdpwssd',52h
- dw avx_d_instruction_38_evex-instruction_handler
- db 'vpermi2b',75h
- dw avx_bw_instruction_38_evex-instruction_handler
- db 'vpermi2d',76h
- dw avx_d_instruction_38_evex-instruction_handler
- db 'vpermi2q',76h
- dw avx_q_instruction_38_evex-instruction_handler
- db 'vpermi2w',75h
- dw avx_bw_instruction_38_w1_evex-instruction_handler
- db 'vpermt2b',7Dh
- dw avx_bw_instruction_38_evex-instruction_handler
- db 'vpermt2d',7Eh
- dw avx_d_instruction_38_evex-instruction_handler
- db 'vpermt2q',7Eh
- dw avx_q_instruction_38_evex-instruction_handler
- db 'vpermt2w',7Dh
- dw avx_bw_instruction_38_w1_evex-instruction_handler
- db 'vphaddbd',0C2h
- dw xop_single_source_128bit_instruction-instruction_handler
- db 'vphaddbq',0C3h
- dw xop_single_source_128bit_instruction-instruction_handler
- db 'vphaddbw',0C1h
- dw xop_single_source_128bit_instruction-instruction_handler
- db 'vphadddq',0CBh
- dw xop_single_source_128bit_instruction-instruction_handler
- db 'vphaddsw',3
- dw avx_pi_instruction_38_noevex-instruction_handler
- db 'vphaddwd',0C6h
- dw xop_single_source_128bit_instruction-instruction_handler
- db 'vphaddwq',0C7h
- dw xop_single_source_128bit_instruction-instruction_handler
- db 'vphsubbw',0E1h
- dw xop_single_source_128bit_instruction-instruction_handler
- db 'vphsubdq',0E3h
- dw xop_single_source_128bit_instruction-instruction_handler
- db 'vphsubsw',7
- dw avx_pi_instruction_38_noevex-instruction_handler
- db 'vphsubwd',0E2h
- dw xop_single_source_128bit_instruction-instruction_handler
- db 'vplzcntd',44h
- dw avx_single_source_d_instruction_38_evex-instruction_handler
- db 'vplzcntq',44h
- dw avx_single_source_q_instruction_38_evex-instruction_handler
- db 'vpmacsdd',9Eh
- dw xop_triple_source_128bit_instruction-instruction_handler
- db 'vpmacswd',96h
- dw xop_triple_source_128bit_instruction-instruction_handler
- db 'vpmacsww',95h
- dw xop_triple_source_128bit_instruction-instruction_handler
- db 'vpmaddwd',0F5h
- dw avx_bw_instruction-instruction_handler
- db 'vpmovb2m',29h
- dw avx512_pmov_2m_instruction-instruction_handler
- db 'vpmovd2m',39h
- dw avx512_pmov_2m_instruction-instruction_handler
- db 'vpmovm2b',28h
- dw avx512_pmov_m2_instruction-instruction_handler
- db 'vpmovm2d',38h
- dw avx512_pmov_m2_instruction-instruction_handler
- db 'vpmovm2q',38h
- dw avx512_pmov_m2_instruction_w1-instruction_handler
- db 'vpmovm2w',28h
- dw avx512_pmov_m2_instruction_w1-instruction_handler
- db 'vpmovq2m',39h
- dw avx512_pmov_2m_instruction_w1-instruction_handler
- db 'vpmovsdb',21h
- dw avx512_pmovdb_instruction-instruction_handler
- db 'vpmovsdw',23h
- dw avx512_pmovwb_instruction-instruction_handler
- db 'vpmovsqb',22h
- dw avx512_pmovqb_instruction-instruction_handler
- db 'vpmovsqd',25h
- dw avx512_pmovwb_instruction-instruction_handler
- db 'vpmovsqw',24h
- dw avx512_pmovdb_instruction-instruction_handler
- db 'vpmovswb',20h
- dw avx512_pmovwb_instruction-instruction_handler
- db 'vpmovw2m',29h
- dw avx512_pmov_2m_instruction_w1-instruction_handler
- db 'vpmulhuw',0E4h
- dw avx_bw_instruction-instruction_handler
- db 'vpmuludq',0F4h
- dw avx_q_instruction-instruction_handler
- db 'vpopcntb',54h
- dw avx_single_source_d_instruction_38_evex-instruction_handler
- db 'vpopcntd',55h
- dw avx512_single_source_ps_instruction-instruction_handler
- db 'vpopcntq',55h
- dw avx512_single_source_pd_instruction-instruction_handler
- db 'vpopcntw',54h
- dw avx_single_source_d_instruction_38_evex_w1-instruction_handler
- db 'vpshldvd',71h
- dw avx_d_instruction_38_evex-instruction_handler
- db 'vpshldvq',71h
- dw avx_q_instruction_38_evex-instruction_handler
- db 'vpshldvw',70h
- dw avx_bw_instruction_38_w1_evex-instruction_handler
- db 'vpshrdvd',73h
- dw avx_d_instruction_38_evex-instruction_handler
- db 'vpshrdvq',73h
- dw avx_q_instruction_38_evex-instruction_handler
- db 'vpshrdvw',72
- dw avx_bw_instruction_38_w1_evex-instruction_handler
- db 'vpshufhw',0F3h
- dw avx_pshuf_w_instruction-instruction_handler
- db 'vpshuflw',0F2h
- dw avx_pshuf_w_instruction-instruction_handler
- db 'vpsubusb',0D8h
- dw avx_bw_instruction-instruction_handler
- db 'vpsubusw',0D9h
- dw avx_bw_instruction-instruction_handler
- db 'vptestmb',26h
- dw avx512_ptestmb_instruction-instruction_handler
- db 'vptestmd',27h
- dw avx512_ptestmd_instruction-instruction_handler
- db 'vptestmq',27h
- dw avx512_ptestmq_instruction-instruction_handler
- db 'vptestmw',26h
- dw avx512_ptestmw_instruction-instruction_handler
- db 'vrangepd',50h
- dw avx512_pd_instruction_sae_imm8-instruction_handler
- db 'vrangeps',50h
- dw avx512_ps_instruction_sae_imm8-instruction_handler
- db 'vrangesd',51h
- dw avx512_sd_instruction_sae_imm8-instruction_handler
- db 'vrangess',51h
- dw avx512_ss_instruction_sae_imm8-instruction_handler
- db 'vrcp14pd',4Ch
- dw avx512_single_source_pd_instruction-instruction_handler
- db 'vrcp14ps',4Ch
- dw avx512_single_source_ps_instruction-instruction_handler
- db 'vrcp14sd',4Dh
- dw avx512_sd_instruction-instruction_handler
- db 'vrcp14ss',4Dh
- dw avx512_ss_instruction-instruction_handler
- db 'vrcp28pd',0CAh
- dw avx512_exp2pd_instruction-instruction_handler
- db 'vrcp28ps',0CAh
- dw avx512_exp2ps_instruction-instruction_handler
- db 'vrcp28sd',0CBh
- dw avx512_sd_instruction_sae-instruction_handler
- db 'vrcp28ss',0CBh
- dw avx512_ss_instruction_sae-instruction_handler
- db 'vroundpd',9
- dw avx_single_source_instruction_3a_imm8_noevex-instruction_handler
- db 'vroundps',8
- dw avx_single_source_instruction_3a_imm8_noevex-instruction_handler
- db 'vroundsd',0Bh
- dw avx_sd_instruction_3a_imm8_noevex-instruction_handler
- db 'vroundss',0Ah
- dw avx_ss_instruction_3a_imm8_noevex-instruction_handler
- db 'vrsqrtps',52h
- dw avx_single_source_ps_instruction_noevex-instruction_handler
- db 'vrsqrtss',52h
- dw avx_ss_instruction_noevex-instruction_handler
- db 'vstmxcsr',11b
- dw vstmxcsr_instruction-instruction_handler
- db 'vucomisd',2Eh
- dw avx_comisd_instruction-instruction_handler
- db 'vucomiss',2Eh
- dw avx_comiss_instruction-instruction_handler
- db 'vzeroall',77h
- dw vzeroall_instruction-instruction_handler
- db 'wbnoinvd',9
- dw simple_extended_instruction_f3-instruction_handler
- db 'wrfsbase',2
- dw rdfsbase_instruction-instruction_handler
- db 'wrgsbase',3
- dw rdfsbase_instruction-instruction_handler
- db 'xacquire',0F2h
- dw prefix_instruction-instruction_handler
- db 'xrelease',0F3h
- dw prefix_instruction-instruction_handler
- db 'xrstor64',101b
- dw fxsave_instruction_64bit-instruction_handler
- db 'xsavec64',4
- dw xsaves_instruction_64bit-instruction_handler
- db 'xsaveopt',110b
- dw fxsave_instruction-instruction_handler
- db 'xsaves64',5
- dw xsaves_instruction_64bit-instruction_handler
-instructions_9:
- db 'cmpxchg8b',8
- dw cmpxchgx_instruction-instruction_handler
- db 'cvttpd2dq',0E6h
- dw sse_pd_instruction-instruction_handler
- db 'cvttpd2pi',2Ch
- dw cvtpd2pi_instruction-instruction_handler
- db 'cvttps2dq',5Bh
- dw movshdup_instruction-instruction_handler
- db 'cvttps2pi',2Ch
- dw cvtps2pi_instruction-instruction_handler
- db 'cvttsd2si',2Ch
- dw cvtsd2si_instruction-instruction_handler
- db 'cvttss2si',2Ch
- dw cvtss2si_instruction-instruction_handler
- db 'extractps',17h
- dw extractps_instruction-instruction_handler
- db 'fxrstor64',1
- dw fxsave_instruction_64bit-instruction_handler
- db 'gf2p8mulb',0CFh
- dw sse4_instruction_66_38-instruction_handler
- db 'movdir64b',0F8h
- dw movdir64b_instruction-instruction_handler
- db 'pclmulqdq',-1
- dw pclmulqdq_instruction-instruction_handler
- db 'pcmpestri',61h
- dw sse4_instruction_66_3a_imm8-instruction_handler
- db 'pcmpestrm',60h
- dw sse4_instruction_66_3a_imm8-instruction_handler
- db 'pcmpistri',63h
- dw sse4_instruction_66_3a_imm8-instruction_handler
- db 'pcmpistrm',62h
- dw sse4_instruction_66_3a_imm8-instruction_handler
- db 'pmaddubsw',4
- dw ssse3_instruction-instruction_handler
- db 'prefetchw',1
- dw amd_prefetch_instruction-instruction_handler
- db 'punpckhbw',68h
- dw basic_mmx_instruction-instruction_handler
- db 'punpckhdq',6Ah
- dw basic_mmx_instruction-instruction_handler
- db 'punpckhwd',69h
- dw basic_mmx_instruction-instruction_handler
- db 'punpcklbw',60h
- dw basic_mmx_instruction-instruction_handler
- db 'punpckldq',62h
- dw basic_mmx_instruction-instruction_handler
- db 'punpcklwd',61h
- dw basic_mmx_instruction-instruction_handler
- db 'pvalidate',0FFh
- dw simple_instruction_f2_0f_01-instruction_handler
- db 'rmpadjust',0FEh
- dw simple_instruction_f3_0f_01-instruction_handler
- db 'rmpupdate',0FEh
- dw simple_instruction_f2_0f_01-instruction_handler
- db 'sha1nexte',0C8h
- dw sse4_instruction_38-instruction_handler
- db 'sha1rnds4',0CCh
- dw sse4_instruction_3a_imm8-instruction_handler
- db 'useavx256',0
- dw set_evex_mode-instruction_handler
- db 'useavx512',1
- dw set_evex_mode-instruction_handler
- db 'vaddsubpd',0D0h
- dw avx_pd_instruction_noevex-instruction_handler
- db 'vaddsubps',0D0h
- dw avx_ps_instruction_noevex-instruction_handler
- db 'vblendmpd',65h
- dw avx_pd_instruction_38_evex-instruction_handler
- db 'vblendmps',65h
- dw avx_ps_instruction_66_38_evex-instruction_handler
- db 'vblendvpd',4Bh
- dw avx_triple_source_instruction_3a_noevex-instruction_handler
- db 'vblendvps',4Ah
- dw avx_triple_source_instruction_3a_noevex-instruction_handler
- db 'vcmpneqpd',4
- dw avx_cmp_pd_instruction-instruction_handler
- db 'vcmpneqps',4
- dw avx_cmp_ps_instruction-instruction_handler
- db 'vcmpneqsd',4
- dw avx_cmp_sd_instruction-instruction_handler
- db 'vcmpneqss',4
- dw avx_cmp_ss_instruction-instruction_handler
- db 'vcmpngepd',9
- dw avx_cmp_pd_instruction-instruction_handler
- db 'vcmpngeps',9
- dw avx_cmp_ps_instruction-instruction_handler
- db 'vcmpngesd',9
- dw avx_cmp_sd_instruction-instruction_handler
- db 'vcmpngess',9
- dw avx_cmp_ss_instruction-instruction_handler
- db 'vcmpngtpd',0Ah
- dw avx_cmp_pd_instruction-instruction_handler
- db 'vcmpngtps',0Ah
- dw avx_cmp_ps_instruction-instruction_handler
- db 'vcmpngtsd',0Ah
- dw avx_cmp_sd_instruction-instruction_handler
- db 'vcmpngtss',0Ah
- dw avx_cmp_ss_instruction-instruction_handler
- db 'vcmpnlepd',6
- dw avx_cmp_pd_instruction-instruction_handler
- db 'vcmpnleps',6
- dw avx_cmp_ps_instruction-instruction_handler
- db 'vcmpnlesd',6
- dw avx_cmp_sd_instruction-instruction_handler
- db 'vcmpnless',6
- dw avx_cmp_ss_instruction-instruction_handler
- db 'vcmpnltpd',5
- dw avx_cmp_pd_instruction-instruction_handler
- db 'vcmpnltps',5
- dw avx_cmp_ps_instruction-instruction_handler
- db 'vcmpnltsd',5
- dw avx_cmp_sd_instruction-instruction_handler
- db 'vcmpnltss',5
- dw avx_cmp_ss_instruction-instruction_handler
- db 'vcmpordpd',7
- dw avx_cmp_pd_instruction-instruction_handler
- db 'vcmpordps',7
- dw avx_cmp_ps_instruction-instruction_handler
- db 'vcmpordsd',7
- dw avx_cmp_sd_instruction-instruction_handler
- db 'vcmpordss',7
- dw avx_cmp_ss_instruction-instruction_handler
- db 'vcvtdq2pd',0E6h
- dw avx_cvtdq2pd_instruction-instruction_handler
- db 'vcvtdq2ps',5Bh
- dw avx_single_source_ps_instruction_er-instruction_handler
- db 'vcvtpd2dq',0E6h
- dw avx_cvtpd2dq_instruction-instruction_handler
- db 'vcvtpd2ps',5Ah
- dw avx_cvtpd2ps_instruction-instruction_handler
- db 'vcvtpd2qq',7Bh
- dw avx_single_source_pd_instruction_er_evex-instruction_handler
- db 'vcvtph2ps',13h
- dw avx_cvtph2ps_instruction-instruction_handler
- db 'vcvtps2dq',5Bh
- dw avx_cvtps2dq_instruction-instruction_handler
- db 'vcvtps2pd',5Ah
- dw avx_cvtps2pd_instruction-instruction_handler
- db 'vcvtps2ph',1Dh
- dw avx_cvtps2ph_instruction-instruction_handler
- db 'vcvtps2qq',7Bh
- dw avx_cvtps2qq_instruction-instruction_handler
- db 'vcvtqq2pd',0E6h
- dw avx_cvtqq2pd_instruction-instruction_handler
- db 'vcvtqq2ps',5Bh
- dw avx_cvtpd2udq_instruction-instruction_handler
- db 'vcvtsd2si',2Dh
- dw avx_cvtsd2si_instruction-instruction_handler
- db 'vcvtsd2ss',5Ah
- dw avx_sd_instruction_er-instruction_handler
- db 'vcvtsi2sd',2Ah
- dw avx_cvtsi2sd_instruction-instruction_handler
- db 'vcvtsi2ss',2Ah
- dw avx_cvtsi2ss_instruction-instruction_handler
- db 'vcvtss2sd',5Ah
- dw avx_ss_instruction_sae-instruction_handler
- db 'vcvtss2si',2Dh
- dw avx_cvtss2si_instruction-instruction_handler
- db 'vdbpsadbw',42h
- dw avx_bw_instruction_3a_imm8_evex-instruction_handler
- db 'vexpandpd',88h
- dw avx_single_source_q_instruction_38_evex-instruction_handler
- db 'vexpandps',88h
- dw avx_single_source_d_instruction_38_evex-instruction_handler
- db 'vfnmaddpd',79h
- dw fma4_instruction_p-instruction_handler
- db 'vfnmaddps',78h
- dw fma4_instruction_p-instruction_handler
- db 'vfnmaddsd',7Bh
- dw fma4_instruction_sd-instruction_handler
- db 'vfnmaddss',7Ah
- dw fma4_instruction_ss-instruction_handler
- db 'vfnmsubpd',7Dh
- dw fma4_instruction_p-instruction_handler
- db 'vfnmsubps',7Ch
- dw fma4_instruction_p-instruction_handler
- db 'vfnmsubsd',7Fh
- dw fma4_instruction_sd-instruction_handler
- db 'vfnmsubss',7Eh
- dw fma4_instruction_ss-instruction_handler
- db 'vgetexppd',42h
- dw avx512_single_source_pd_instruction_sae-instruction_handler
- db 'vgetexpps',42h
- dw avx512_single_source_ps_instruction_sae-instruction_handler
- db 'vgetexpsd',43h
- dw avx512_sd_instruction_sae-instruction_handler
- db 'vgetexpss',43h
- dw avx512_ss_instruction_sae-instruction_handler
- db 'vinsertps',21h
- dw avx_insertps_instruction-instruction_handler
- db 'vmovdqa32',6Fh
- dw avx512_movdqa32_instruction-instruction_handler
- db 'vmovdqa64',6Fh
- dw avx512_movdqa64_instruction-instruction_handler
- db 'vmovdqu16',6Fh
- dw avx512_movdqu16_instruction-instruction_handler
- db 'vmovdqu32',6Fh
- dw avx512_movdqu32_instruction-instruction_handler
- db 'vmovdqu64',6Fh
- dw avx512_movdqu64_instruction-instruction_handler
- db 'vmovmskpd',0
- dw avx_movmskpd_instruction-instruction_handler
- db 'vmovmskps',0
- dw avx_movmskps_instruction-instruction_handler
- db 'vmovntdqa',2Ah
- dw avx_movntdqa_instruction-instruction_handler
- db 'vmovshdup',16h
- dw avx_movshdup_instruction-instruction_handler
- db 'vmovsldup',12h
- dw avx_movshdup_instruction-instruction_handler
- db 'vp4dpwssd',52h
- dw avx512_4vnniw_instruction-instruction_handler
- db 'vpackssdw',6Bh
- dw avx_d_instruction-instruction_handler
- db 'vpacksswb',63h
- dw avx_bw_instruction-instruction_handler
- db 'vpackusdw',2Bh
- dw avx_d_instruction_38-instruction_handler
- db 'vpackuswb',67h
- dw avx_bw_instruction-instruction_handler
- db 'vpblendmb',66h
- dw avx_bw_instruction_38_evex-instruction_handler
- db 'vpblendmd',64h
- dw avx_d_instruction_38_evex-instruction_handler
- db 'vpblendmq',64h
- dw avx_q_instruction_38_evex-instruction_handler
- db 'vpblendmw',66h
- dw avx_bw_instruction_38_w1_evex-instruction_handler
- db 'vpblendvb',4Ch
- dw avx_triple_source_instruction_3a_noevex-instruction_handler
- db 'vpcmpleub',2
- dw avx512_cmp_ub_instruction-instruction_handler
- db 'vpcmpleud',2
- dw avx512_cmp_ud_instruction-instruction_handler
- db 'vpcmpleuq',2
- dw avx512_cmp_uq_instruction-instruction_handler
- db 'vpcmpleuw',2
- dw avx512_cmp_uw_instruction-instruction_handler
- db 'vpcmpltub',1
- dw avx512_cmp_ub_instruction-instruction_handler
- db 'vpcmpltud',1
- dw avx512_cmp_ud_instruction-instruction_handler
- db 'vpcmpltuq',1
- dw avx512_cmp_uq_instruction-instruction_handler
- db 'vpcmpltuw',1
- dw avx512_cmp_uw_instruction-instruction_handler
- db 'vpcmpneqb',4
- dw avx512_cmp_b_instruction-instruction_handler
- db 'vpcmpneqd',4
- dw avx512_cmp_d_instruction-instruction_handler
- db 'vpcmpneqq',4
- dw avx512_cmp_q_instruction-instruction_handler
- db 'vpcmpneqw',4
- dw avx512_cmp_b_instruction-instruction_handler
- db 'vpcmpnleb',6
- dw avx512_cmp_b_instruction-instruction_handler
- db 'vpcmpnled',6
- dw avx512_cmp_d_instruction-instruction_handler
- db 'vpcmpnleq',6
- dw avx512_cmp_q_instruction-instruction_handler
- db 'vpcmpnlew',6
- dw avx512_cmp_b_instruction-instruction_handler
- db 'vpcmpnltb',5
- dw avx512_cmp_b_instruction-instruction_handler
- db 'vpcmpnltd',5
- dw avx512_cmp_d_instruction-instruction_handler
- db 'vpcmpnltq',5
- dw avx512_cmp_q_instruction-instruction_handler
- db 'vpcmpnltw',5
- dw avx512_cmp_b_instruction-instruction_handler
- db 'vpcomequb',4
- dw xop_pcom_ub_instruction-instruction_handler
- db 'vpcomequd',4
- dw xop_pcom_ud_instruction-instruction_handler
- db 'vpcomequq',4
- dw xop_pcom_uq_instruction-instruction_handler
- db 'vpcomequw',4
- dw xop_pcom_uw_instruction-instruction_handler
- db 'vpcomgeub',3
- dw xop_pcom_ub_instruction-instruction_handler
- db 'vpcomgeud',3
- dw xop_pcom_ud_instruction-instruction_handler
- db 'vpcomgeuq',3
- dw xop_pcom_uq_instruction-instruction_handler
- db 'vpcomgeuw',3
- dw xop_pcom_uw_instruction-instruction_handler
- db 'vpcomgtub',2
- dw xop_pcom_ub_instruction-instruction_handler
- db 'vpcomgtud',2
- dw xop_pcom_ud_instruction-instruction_handler
- db 'vpcomgtuq',2
- dw xop_pcom_uq_instruction-instruction_handler
- db 'vpcomgtuw',2
- dw xop_pcom_uw_instruction-instruction_handler
- db 'vpcomleub',1
- dw xop_pcom_ub_instruction-instruction_handler
- db 'vpcomleud',1
- dw xop_pcom_ud_instruction-instruction_handler
- db 'vpcomleuq',1
- dw xop_pcom_uq_instruction-instruction_handler
- db 'vpcomleuw',1
- dw xop_pcom_uw_instruction-instruction_handler
- db 'vpcomltub',0
- dw xop_pcom_ub_instruction-instruction_handler
- db 'vpcomltud',0
- dw xop_pcom_ud_instruction-instruction_handler
- db 'vpcomltuq',0
- dw xop_pcom_uq_instruction-instruction_handler
- db 'vpcomltuw',0
- dw xop_pcom_uw_instruction-instruction_handler
- db 'vpcomneqb',5
- dw xop_pcom_b_instruction-instruction_handler
- db 'vpcomneqd',5
- dw xop_pcom_d_instruction-instruction_handler
- db 'vpcomneqq',5
- dw xop_pcom_q_instruction-instruction_handler
- db 'vpcomneqw',5
- dw xop_pcom_w_instruction-instruction_handler
- db 'vpdpbusds',51h
- dw avx_d_instruction_38_evex-instruction_handler
- db 'vpdpwssds',53h
- dw avx_d_instruction_38_evex-instruction_handler
- db 'vpermi2pd',77h
- dw avx_q_instruction_38_evex-instruction_handler
- db 'vpermi2ps',77h
- dw avx_d_instruction_38_evex-instruction_handler
- db 'vpermilpd',5
- dw avx_permilpd_instruction-instruction_handler
- db 'vpermilps',4
- dw avx_permilps_instruction-instruction_handler
- db 'vpermt2pd',7Fh
- dw avx_q_instruction_38_evex-instruction_handler
- db 'vpermt2ps',7Fh
- dw avx_d_instruction_38_evex-instruction_handler
- db 'vpexpandb',62h
- dw avx_single_source_d_instruction_38_evex-instruction_handler
- db 'vpexpandd',89h
- dw avx_single_source_d_instruction_38_evex-instruction_handler
- db 'vpexpandq',89h
- dw avx_single_source_q_instruction_38_evex-instruction_handler
- db 'vpexpandw',62h
- dw avx_single_source_q_instruction_38_evex-instruction_handler
- db 'vphaddubd',0D2h
- dw xop_single_source_128bit_instruction-instruction_handler
- db 'vphaddubq',0D3h
- dw xop_single_source_128bit_instruction-instruction_handler
- db 'vphaddubw',0D1h
- dw xop_single_source_128bit_instruction-instruction_handler
- db 'vphaddudq',0DBh
- dw xop_single_source_128bit_instruction-instruction_handler
- db 'vphadduwd',0D6h
- dw xop_single_source_128bit_instruction-instruction_handler
- db 'vphadduwq',0D7h
- dw xop_single_source_128bit_instruction-instruction_handler
- db 'vpmacsdqh',9Fh
- dw xop_triple_source_128bit_instruction-instruction_handler
- db 'vpmacsdql',97h
- dw xop_triple_source_128bit_instruction-instruction_handler
- db 'vpmacssdd',8Eh
- dw xop_triple_source_128bit_instruction-instruction_handler
- db 'vpmacsswd',86h
- dw xop_triple_source_128bit_instruction-instruction_handler
- db 'vpmacssww',85h
- dw xop_triple_source_128bit_instruction-instruction_handler
- db 'vpmadcswd',0B6h
- dw xop_triple_source_128bit_instruction-instruction_handler
- db 'vpmovmskb',0D7h
- dw avx_pmovmskb_instruction-instruction_handler
- db 'vpmovsxbd',21h
- dw avx_pmovsxbd_instruction-instruction_handler
- db 'vpmovsxbq',22h
- dw avx_pmovsxbq_instruction-instruction_handler
- db 'vpmovsxbw',20h
- dw avx_pmovsxbw_instruction-instruction_handler
- db 'vpmovsxdq',25h
- dw avx_pmovsxbw_instruction-instruction_handler
- db 'vpmovsxwd',23h
- dw avx_pmovsxbw_instruction-instruction_handler
- db 'vpmovsxwq',24h
- dw avx_pmovsxbd_instruction-instruction_handler
- db 'vpmovusdb',11h
- dw avx512_pmovdb_instruction-instruction_handler
- db 'vpmovusdw',13h
- dw avx512_pmovwb_instruction-instruction_handler
- db 'vpmovusqb',12h
- dw avx512_pmovqb_instruction-instruction_handler
- db 'vpmovusqd',15h
- dw avx512_pmovwb_instruction-instruction_handler
- db 'vpmovusqw',14h
- dw avx512_pmovdb_instruction-instruction_handler
- db 'vpmovuswb',10h
- dw avx512_pmovwb_instruction-instruction_handler
- db 'vpmovzxbd',31h
- dw avx_pmovsxbd_instruction-instruction_handler
- db 'vpmovzxbq',32h
- dw avx_pmovsxbq_instruction-instruction_handler
- db 'vpmovzxbw',30h
- dw avx_pmovsxbw_instruction-instruction_handler
- db 'vpmovzxdq',35h
- dw avx_pmovsxbw_instruction-instruction_handler
- db 'vpmovzxwd',33h
- dw avx_pmovsxbw_instruction-instruction_handler
- db 'vpmovzxwq',34h
- dw avx_pmovsxbd_instruction-instruction_handler
- db 'vpmulhrsw',0Bh
- dw avx_bw_instruction_38-instruction_handler
- db 'vptestnmb',26h
- dw avx512_ptestnmb_instruction-instruction_handler
- db 'vptestnmd',27h
- dw avx512_ptestnmd_instruction-instruction_handler
- db 'vptestnmq',27h
- dw avx512_ptestnmq_instruction-instruction_handler
- db 'vptestnmw',26h
- dw avx512_ptestnmw_instruction-instruction_handler
- db 'vreducepd',56h
- dw avx512_single_source_pd_instruction_sae_imm8-instruction_handler
- db 'vreduceps',56h
- dw avx512_single_source_ps_instruction_sae_imm8-instruction_handler
- db 'vreducesd',57h
- dw avx512_sd_instruction_sae_imm8-instruction_handler
- db 'vreducess',57h
- dw avx512_ss_instruction_sae_imm8-instruction_handler
- db 'vscalefpd',2Ch
- dw avx512_pd_instruction_er-instruction_handler
- db 'vscalefps',2Ch
- dw avx512_ps_instruction_er-instruction_handler
- db 'vscalefsd',2Dh
- dw avx512_sd_instruction_er-instruction_handler
- db 'vscalefss',2Dh
- dw avx512_ss_instruction_er-instruction_handler
- db 'vunpckhpd',15h
- dw avx_pd_instruction-instruction_handler
- db 'vunpckhps',15h
- dw avx_ps_instruction-instruction_handler
- db 'vunpcklpd',14h
- dw avx_pd_instruction-instruction_handler
- db 'vunpcklps',14h
- dw avx_ps_instruction-instruction_handler
- db 'xrstors64',3
- dw xsaves_instruction_64bit-instruction_handler
-instructions_10:
- db 'aesdeclast',0DFh
- dw sse4_instruction_66_38-instruction_handler
- db 'aesenclast',0DDh
- dw sse4_instruction_66_38-instruction_handler
- db 'clflushopt',7
- dw clflushopt_instruction-instruction_handler
- db 'cmpunordpd',3
- dw cmp_pd_instruction-instruction_handler
- db 'cmpunordps',3
- dw cmp_ps_instruction-instruction_handler
- db 'cmpunordsd',3
- dw cmp_sd_instruction-instruction_handler
- db 'cmpunordss',3
- dw cmp_ss_instruction-instruction_handler
- db 'cmpxchg16b',16
- dw cmpxchgx_instruction-instruction_handler
- db 'loadall286',5
- dw simple_extended_instruction-instruction_handler
- db 'loadall386',7
- dw simple_extended_instruction-instruction_handler
- db 'maskmovdqu',0
- dw maskmovdqu_instruction-instruction_handler
- db 'phminposuw',41h
- dw sse4_instruction_66_38-instruction_handler
- db 'prefetcht0',1
- dw prefetch_instruction-instruction_handler
- db 'prefetcht1',2
- dw prefetch_instruction-instruction_handler
- db 'prefetcht2',3
- dw prefetch_instruction-instruction_handler
- db 'punpckhqdq',6Dh
- dw sse_pd_instruction-instruction_handler
- db 'punpcklqdq',6Ch
- dw sse_pd_instruction-instruction_handler
- db 'sha256msg1',0CCh
- dw sse4_instruction_38-instruction_handler
- db 'sha256msg2',0CDh
- dw sse4_instruction_38-instruction_handler
- db 'vcmptruepd',0Fh
- dw avx_cmp_pd_instruction-instruction_handler
- db 'vcmptrueps',0Fh
- dw avx_cmp_ps_instruction-instruction_handler
- db 'vcmptruesd',0Fh
- dw avx_cmp_sd_instruction-instruction_handler
- db 'vcmptruess',0Fh
- dw avx_cmp_ss_instruction-instruction_handler
- db 'vcvtpd2udq',79h
- dw avx_cvtpd2udq_instruction-instruction_handler
- db 'vcvtpd2uqq',79h
- dw avx_single_source_pd_instruction_er_evex-instruction_handler
- db 'vcvtps2udq',79h
- dw avx_single_source_ps_instruction_er_evex-instruction_handler
- db 'vcvtps2uqq',79h
- dw avx_cvtps2qq_instruction-instruction_handler
- db 'vcvtsd2usi',79h
- dw avx_cvtsd2usi_instruction-instruction_handler
- db 'vcvtss2usi',79h
- dw avx_cvtss2usi_instruction-instruction_handler
- db 'vcvttpd2dq',0E6h
- dw avx_cvttpd2dq_instruction-instruction_handler
- db 'vcvttpd2qq',7Ah
- dw avx_single_source_pd_instruction_sae_evex-instruction_handler
- db 'vcvttps2dq',5Bh
- dw avx_cvttps2dq_instruction-instruction_handler
- db 'vcvttps2qq',7Ah
- dw avx_cvttps2qq_instruction-instruction_handler
- db 'vcvttsd2si',2Ch
- dw avx_cvttsd2si_instruction-instruction_handler
- db 'vcvttss2si',2Ch
- dw avx_cvttss2si_instruction-instruction_handler
- db 'vcvtudq2pd',7Ah
- dw avx_cvtudq2pd_instruction-instruction_handler
- db 'vcvtudq2ps',7Ah
- dw avx_cvtudq2ps_instruction-instruction_handler
- db 'vcvtuqq2pd',7Ah
- dw avx_cvtqq2pd_instruction-instruction_handler
- db 'vcvtuqq2ps',7Ah
- dw avx_cvtuqq2ps_instruction-instruction_handler
- db 'vcvtusi2sd',7Bh
- dw avx_cvtusi2sd_instruction-instruction_handler
- db 'vcvtusi2ss',7Bh
- dw avx_cvtusi2ss_instruction-instruction_handler
- db 'vextractps',17h
- dw avx_extract_d_instruction-instruction_handler
- db 'vfpclasspd',66h
- dw avx512_fpclasspd_instruction-instruction_handler
- db 'vfpclassps',66h
- dw avx512_fpclassps_instruction-instruction_handler
- db 'vfpclasssd',67h
- dw avx512_fpclasssd_instruction-instruction_handler
- db 'vfpclassss',67h
- dw avx512_fpclassss_instruction-instruction_handler
- db 'vgatherdpd',92h
- dw gather_pd_instruction-instruction_handler
- db 'vgatherdps',92h
- dw gather_ps_instruction-instruction_handler
- db 'vgatherqpd',93h
- dw gather_pd_instruction-instruction_handler
- db 'vgatherqps',93h
- dw gather_ps_instruction-instruction_handler
- db 'vgetmantpd',26h
- dw avx512_single_source_pd_instruction_sae_imm8-instruction_handler
- db 'vgetmantps',26h
- dw avx512_single_source_ps_instruction_sae_imm8-instruction_handler
- db 'vgetmantsd',27h
- dw avx512_sd_instruction_sae_imm8-instruction_handler
- db 'vgetmantss',27h
- dw avx512_ss_instruction_sae_imm8-instruction_handler
- db 'vgf2p8mulb',0CFh
- dw avx_bw_instruction_38-instruction_handler
- db 'vmaskmovpd',2Dh
- dw avx_maskmov_instruction-instruction_handler
- db 'vmaskmovps',2Ch
- dw avx_maskmov_instruction-instruction_handler
- db 'vp4dpwssds',53h
- dw avx512_4vnniw_instruction-instruction_handler
- db 'vpclmulqdq',-1
- dw avx_pclmulqdq_instruction-instruction_handler
- db 'vpcmpestri',61h
- dw avx_single_source_128bit_instruction_3a_imm8_noevex-instruction_handler
- db 'vpcmpestrm',60h
- dw avx_single_source_128bit_instruction_3a_imm8_noevex-instruction_handler
- db 'vpcmpistri',63h
- dw avx_single_source_128bit_instruction_3a_imm8_noevex-instruction_handler
- db 'vpcmpistrm',62h
- dw avx_single_source_128bit_instruction_3a_imm8_noevex-instruction_handler
- db 'vpcmpnequb',4
- dw avx512_cmp_ub_instruction-instruction_handler
- db 'vpcmpnequd',4
- dw avx512_cmp_ud_instruction-instruction_handler
- db 'vpcmpnequq',4
- dw avx512_cmp_uq_instruction-instruction_handler
- db 'vpcmpnequw',4
- dw avx512_cmp_uw_instruction-instruction_handler
- db 'vpcmpnleub',6
- dw avx512_cmp_ub_instruction-instruction_handler
- db 'vpcmpnleud',6
- dw avx512_cmp_ud_instruction-instruction_handler
- db 'vpcmpnleuq',6
- dw avx512_cmp_uq_instruction-instruction_handler
- db 'vpcmpnleuw',6
- dw avx512_cmp_uw_instruction-instruction_handler
- db 'vpcmpnltub',5
- dw avx512_cmp_ub_instruction-instruction_handler
- db 'vpcmpnltud',5
- dw avx512_cmp_ud_instruction-instruction_handler
- db 'vpcmpnltuq',5
- dw avx512_cmp_uq_instruction-instruction_handler
- db 'vpcmpnltuw',5
- dw avx512_cmp_uw_instruction-instruction_handler
- db 'vpcomnequb',5
- dw xop_pcom_ub_instruction-instruction_handler
- db 'vpcomnequd',5
- dw xop_pcom_ud_instruction-instruction_handler
- db 'vpcomnequq',5
- dw xop_pcom_uq_instruction-instruction_handler
- db 'vpcomnequw',5
- dw xop_pcom_uw_instruction-instruction_handler
- db 'vpcomtrueb',7
- dw xop_pcom_b_instruction-instruction_handler
- db 'vpcomtrued',7
- dw xop_pcom_d_instruction-instruction_handler
- db 'vpcomtrueq',7
- dw xop_pcom_q_instruction-instruction_handler
- db 'vpcomtruew',7
- dw xop_pcom_w_instruction-instruction_handler
- db 'vperm2f128',6
- dw avx_perm2f128_instruction-instruction_handler
- db 'vperm2i128',46h
- dw avx_perm2f128_instruction-instruction_handler
- db 'vpermil2pd',49h
- dw vpermil2_instruction-instruction_handler
- db 'vpermil2ps',48h
- dw vpermil2_instruction-instruction_handler
- db 'vpgatherdd',90h
- dw gather_ps_instruction-instruction_handler
- db 'vpgatherdq',90h
- dw gather_pd_instruction-instruction_handler
- db 'vpgatherqd',91h
- dw gather_ps_instruction-instruction_handler
- db 'vpgatherqq',91h
- dw gather_pd_instruction-instruction_handler
- db 'vpmacssdqh',8Fh
- dw xop_triple_source_128bit_instruction-instruction_handler
- db 'vpmacssdql',87h
- dw xop_triple_source_128bit_instruction-instruction_handler
- db 'vpmadcsswd',0A6h
- dw xop_triple_source_128bit_instruction-instruction_handler
- db 'vpmaddubsw',4
- dw avx_bw_instruction_38-instruction_handler
- db 'vpmaskmovd',8Ch
- dw avx_maskmov_instruction-instruction_handler
- db 'vpmaskmovq',8Ch
- dw avx_maskmov_w1_instruction-instruction_handler
- db 'vpternlogd',25h
- dw avx_d_instruction_3a_imm8_evex-instruction_handler
- db 'vpternlogq',25h
- dw avx_q_instruction_3a_imm8_evex-instruction_handler
- db 'vpunpckhbw',68h
- dw avx_bw_instruction-instruction_handler
- db 'vpunpckhdq',6Ah
- dw avx_d_instruction-instruction_handler
- db 'vpunpckhwd',69h
- dw avx_bw_instruction-instruction_handler
- db 'vpunpcklbw',60h
- dw avx_bw_instruction-instruction_handler
- db 'vpunpckldq',62h
- dw avx_d_instruction-instruction_handler
- db 'vpunpcklwd',61h
- dw avx_bw_instruction-instruction_handler
- db 'vrsqrt14pd',4Eh
- dw avx512_single_source_pd_instruction-instruction_handler
- db 'vrsqrt14ps',4Eh
- dw avx512_single_source_ps_instruction-instruction_handler
- db 'vrsqrt14sd',4Fh
- dw avx512_sd_instruction-instruction_handler
- db 'vrsqrt14ss',4Fh
- dw avx512_ss_instruction-instruction_handler
- db 'vrsqrt28pd',0CCh
- dw avx512_exp2pd_instruction-instruction_handler
- db 'vrsqrt28ps',0CCh
- dw avx512_exp2ps_instruction-instruction_handler
- db 'vrsqrt28sd',0CDh
- dw avx512_sd_instruction_sae-instruction_handler
- db 'vrsqrt28ss',0CDh
- dw avx512_ss_instruction_sae-instruction_handler
- db 'vshuff32x4',23h
- dw avx512_shuf_d_instruction-instruction_handler
- db 'vshuff64x2',23h
- dw avx512_shuf_q_instruction-instruction_handler
- db 'vshufi32x4',43h
- dw avx512_shuf_d_instruction-instruction_handler
- db 'vshufi64x2',43h
- dw avx512_shuf_q_instruction-instruction_handler
- db 'vzeroupper',77h
- dw vzeroupper_instruction-instruction_handler
- db 'xsaveopt64',110b
- dw fxsave_instruction_64bit-instruction_handler
-instructions_11:
- db 'pclmulhqhdq',10001b
- dw pclmulqdq_instruction-instruction_handler
- db 'pclmullqhdq',10000b
- dw pclmulqdq_instruction-instruction_handler
- db 'prefetchnta',0
- dw prefetch_instruction-instruction_handler
- db 'prefetchwt1',2
- dw amd_prefetch_instruction-instruction_handler
- db 'saveprevssp',0EAh
- dw setssbsy_instruction-instruction_handler
- db 'sha256rnds2',0CBh
- dw sse4_instruction_38_xmm0-instruction_handler
- db 'vaesdeclast',0DFh
- dw avx_instruction_38_nomask-instruction_handler
- db 'vaesenclast',0DDh
- dw avx_instruction_38_nomask-instruction_handler
- db 'vcmpeq_ospd',10h
- dw avx_cmp_pd_instruction-instruction_handler
- db 'vcmpeq_osps',10h
- dw avx_cmp_ps_instruction-instruction_handler
- db 'vcmpeq_ossd',10h
- dw avx_cmp_sd_instruction-instruction_handler
- db 'vcmpeq_osss',10h
- dw avx_cmp_ss_instruction-instruction_handler
- db 'vcmpeq_uqpd',8
- dw avx_cmp_pd_instruction-instruction_handler
- db 'vcmpeq_uqps',8
- dw avx_cmp_ps_instruction-instruction_handler
- db 'vcmpeq_uqsd',8
- dw avx_cmp_sd_instruction-instruction_handler
- db 'vcmpeq_uqss',8
- dw avx_cmp_ss_instruction-instruction_handler
- db 'vcmpeq_uspd',18h
- dw avx_cmp_pd_instruction-instruction_handler
- db 'vcmpeq_usps',18h
- dw avx_cmp_ps_instruction-instruction_handler
- db 'vcmpeq_ussd',18h
- dw avx_cmp_sd_instruction-instruction_handler
- db 'vcmpeq_usss',18h
- dw avx_cmp_ss_instruction-instruction_handler
- db 'vcmpfalsepd',0Bh
- dw avx_cmp_pd_instruction-instruction_handler
- db 'vcmpfalseps',0Bh
- dw avx_cmp_ps_instruction-instruction_handler
- db 'vcmpfalsesd',0Bh
- dw avx_cmp_sd_instruction-instruction_handler
- db 'vcmpfalsess',0Bh
- dw avx_cmp_ss_instruction-instruction_handler
- db 'vcmpge_oqpd',1Dh
- dw avx_cmp_pd_instruction-instruction_handler
- db 'vcmpge_oqps',1Dh
- dw avx_cmp_ps_instruction-instruction_handler
- db 'vcmpge_oqsd',1Dh
- dw avx_cmp_sd_instruction-instruction_handler
- db 'vcmpge_oqss',1Dh
- dw avx_cmp_ss_instruction-instruction_handler
- db 'vcmpgt_oqpd',1Eh
- dw avx_cmp_pd_instruction-instruction_handler
- db 'vcmpgt_oqps',1Eh
- dw avx_cmp_ps_instruction-instruction_handler
- db 'vcmpgt_oqsd',1Eh
- dw avx_cmp_sd_instruction-instruction_handler
- db 'vcmpgt_oqss',1Eh
- dw avx_cmp_ss_instruction-instruction_handler
- db 'vcmple_oqpd',12h
- dw avx_cmp_pd_instruction-instruction_handler
- db 'vcmple_oqps',12h
- dw avx_cmp_ps_instruction-instruction_handler
- db 'vcmple_oqsd',12h
- dw avx_cmp_sd_instruction-instruction_handler
- db 'vcmple_oqss',12h
- dw avx_cmp_ss_instruction-instruction_handler
- db 'vcmplt_oqpd',11h
- dw avx_cmp_pd_instruction-instruction_handler
- db 'vcmplt_oqps',11h
- dw avx_cmp_ps_instruction-instruction_handler
- db 'vcmplt_oqsd',11h
- dw avx_cmp_sd_instruction-instruction_handler
- db 'vcmplt_oqss',11h
- dw avx_cmp_ss_instruction-instruction_handler
- db 'vcmpord_spd',17h
- dw avx_cmp_pd_instruction-instruction_handler
- db 'vcmpord_sps',17h
- dw avx_cmp_ps_instruction-instruction_handler
- db 'vcmpord_ssd',17h
- dw avx_cmp_sd_instruction-instruction_handler
- db 'vcmpord_sss',17h
- dw avx_cmp_ss_instruction-instruction_handler
- db 'vcmpunordpd',3
- dw avx_cmp_pd_instruction-instruction_handler
- db 'vcmpunordps',3
- dw avx_cmp_ps_instruction-instruction_handler
- db 'vcmpunordsd',3
- dw avx_cmp_sd_instruction-instruction_handler
- db 'vcmpunordss',3
- dw avx_cmp_ss_instruction-instruction_handler
- db 'vcompresspd',8Ah
- dw avx_compress_q_instruction-instruction_handler
- db 'vcompressps',8Ah
- dw avx_compress_d_instruction-instruction_handler
- db 'vcvttpd2udq',78h
- dw avx_cvttpd2udq_instruction-instruction_handler
- db 'vcvttpd2uqq',78h
- dw avx_single_source_pd_instruction_sae_evex-instruction_handler
- db 'vcvttps2udq',78h
- dw avx_cvttps2udq_instruction-instruction_handler
- db 'vcvttps2uqq',78h
- dw avx_cvttps2qq_instruction-instruction_handler
- db 'vcvttsd2usi',78h
- dw avx_cvttsd2usi_instruction-instruction_handler
- db 'vcvttss2usi',78h
- dw avx_cvttss2usi_instruction-instruction_handler
- db 'vfixupimmpd',54h
- dw avx512_pd_instruction_sae_imm8-instruction_handler
- db 'vfixupimmps',54h
- dw avx512_ps_instruction_sae_imm8-instruction_handler
- db 'vfixupimmsd',55h
- dw avx512_sd_instruction_sae_imm8-instruction_handler
- db 'vfixupimmss',55h
- dw avx512_ss_instruction_sae_imm8-instruction_handler
- db 'vfmadd132pd',98h
- dw fma_instruction_pd-instruction_handler
- db 'vfmadd132ps',98h
- dw fma_instruction_ps-instruction_handler
- db 'vfmadd132sd',99h
- dw fma_instruction_sd-instruction_handler
- db 'vfmadd132ss',99h
- dw fma_instruction_ss-instruction_handler
- db 'vfmadd213pd',0A8h
- dw fma_instruction_pd-instruction_handler
- db 'vfmadd213ps',0A8h
- dw fma_instruction_ps-instruction_handler
- db 'vfmadd213sd',0A9h
- dw fma_instruction_sd-instruction_handler
- db 'vfmadd213ss',0A9h
- dw fma_instruction_ss-instruction_handler
- db 'vfmadd231pd',0B8h
- dw fma_instruction_pd-instruction_handler
- db 'vfmadd231ps',0B8h
- dw fma_instruction_ps-instruction_handler
- db 'vfmadd231sd',0B9h
- dw fma_instruction_sd-instruction_handler
- db 'vfmadd231ss',0B9h
- dw fma_instruction_ss-instruction_handler
- db 'vfmaddsubpd',5Dh
- dw fma4_instruction_p-instruction_handler
- db 'vfmaddsubps',5Ch
- dw fma4_instruction_p-instruction_handler
- db 'vfmsub132pd',9Ah
- dw fma_instruction_pd-instruction_handler
- db 'vfmsub132ps',9Ah
- dw fma_instruction_ps-instruction_handler
- db 'vfmsub132sd',9Bh
- dw fma_instruction_sd-instruction_handler
- db 'vfmsub132ss',9Bh
- dw fma_instruction_ss-instruction_handler
- db 'vfmsub213pd',0AAh
- dw fma_instruction_pd-instruction_handler
- db 'vfmsub213ps',0AAh
- dw fma_instruction_ps-instruction_handler
- db 'vfmsub213sd',0ABh
- dw fma_instruction_sd-instruction_handler
- db 'vfmsub213ss',0ABh
- dw fma_instruction_ss-instruction_handler
- db 'vfmsub231pd',0BAh
- dw fma_instruction_pd-instruction_handler
- db 'vfmsub231ps',0BAh
- dw fma_instruction_ps-instruction_handler
- db 'vfmsub231sd',0BBh
- dw fma_instruction_sd-instruction_handler
- db 'vfmsub231ss',0BBh
- dw fma_instruction_ss-instruction_handler
- db 'vfmsubaddpd',5Fh
- dw fma4_instruction_p-instruction_handler
- db 'vfmsubaddps',5Eh
- dw fma4_instruction_p-instruction_handler
- db 'vinsertf128',18h
- dw avx_insertf128_instruction-instruction_handler
- db 'vinserti128',38h
- dw avx_insertf128_instruction-instruction_handler
- db 'vmaskmovdqu',0
- dw avx_maskmovdqu_instruction-instruction_handler
- db 'vpcomfalseb',6
- dw xop_pcom_b_instruction-instruction_handler
- db 'vpcomfalsed',6
- dw xop_pcom_d_instruction-instruction_handler
- db 'vpcomfalseq',6
- dw xop_pcom_q_instruction-instruction_handler
- db 'vpcomfalsew',6
- dw xop_pcom_w_instruction-instruction_handler
- db 'vpcompressb',63h
- dw avx_compress_d_instruction-instruction_handler
- db 'vpcompressd',8Bh
- dw avx_compress_d_instruction-instruction_handler
- db 'vpcompressq',8Bh
- dw avx_compress_q_instruction-instruction_handler
- db 'vpcompressw',63h
- dw avx_compress_q_instruction-instruction_handler
- db 'vpcomtrueub',7
- dw xop_pcom_ub_instruction-instruction_handler
- db 'vpcomtrueud',7
- dw xop_pcom_ud_instruction-instruction_handler
- db 'vpcomtrueuq',7
- dw xop_pcom_uq_instruction-instruction_handler
- db 'vpcomtrueuw',7
- dw xop_pcom_uw_instruction-instruction_handler
- db 'vpconflictd',0C4h
- dw avx_single_source_d_instruction_38_evex-instruction_handler
- db 'vpconflictq',0C4h
- dw avx_single_source_q_instruction_38_evex-instruction_handler
- db 'vphminposuw',41h
- dw avx_single_source_instruction_38_noevex-instruction_handler
- db 'vpmadd52huq',0B5h
- dw avx_q_instruction_38_evex-instruction_handler
- db 'vpmadd52luq',0B4h
- dw avx_q_instruction_38_evex-instruction_handler
- db 'vpscatterdd',0A0h
- dw scatter_ps_instruction-instruction_handler
- db 'vpscatterdq',0A0h
- dw scatter_pd_instruction-instruction_handler
- db 'vpscatterqd',0A1h
- dw scatter_ps_instruction-instruction_handler
- db 'vpscatterqq',0A1h
- dw scatter_pd_instruction-instruction_handler
- db 'vpunpckhqdq',6Dh
- dw avx_q_instruction-instruction_handler
- db 'vpunpcklqdq',6Ch
- dw avx_q_instruction-instruction_handler
- db 'vrndscalepd',9
- dw avx512_single_source_pd_instruction_sae_imm8-instruction_handler
- db 'vrndscaleps',8
- dw avx512_single_source_ps_instruction_sae_imm8-instruction_handler
- db 'vrndscalesd',0Bh
- dw avx512_sd_instruction_sae_imm8-instruction_handler
- db 'vrndscaless',0Ah
- dw avx512_ss_instruction_sae_imm8-instruction_handler
- db 'vscatterdpd',0A2h
- dw scatter_pd_instruction-instruction_handler
- db 'vscatterdps',0A2h
- dw scatter_ps_instruction-instruction_handler
- db 'vscatterqpd',0A3h
- dw scatter_pd_instruction-instruction_handler
- db 'vscatterqps',0A3h
- dw scatter_ps_instruction-instruction_handler
-instructions_12:
- db 'pclmulhqhqdq',10001b
- dw pclmulqdq_instruction-instruction_handler
- db 'pclmulhqlqdq',1
- dw pclmulqdq_instruction-instruction_handler
- db 'pclmullqhqdq',10000b
- dw pclmulqdq_instruction-instruction_handler
- db 'pclmullqlqdq',0
- dw pclmulqdq_instruction-instruction_handler
- db 'vbroadcastsd',19h
- dw avx_broadcastsd_instruction-instruction_handler
- db 'vbroadcastss',18h
- dw avx_broadcastss_instruction-instruction_handler
- db 'vcmpneq_oqpd',0Ch
- dw avx_cmp_pd_instruction-instruction_handler
- db 'vcmpneq_oqps',0Ch
- dw avx_cmp_ps_instruction-instruction_handler
- db 'vcmpneq_oqsd',0Ch
- dw avx_cmp_sd_instruction-instruction_handler
- db 'vcmpneq_oqss',0Ch
- dw avx_cmp_ss_instruction-instruction_handler
- db 'vcmpneq_ospd',1Ch
- dw avx_cmp_pd_instruction-instruction_handler
- db 'vcmpneq_osps',1Ch
- dw avx_cmp_ps_instruction-instruction_handler
- db 'vcmpneq_ossd',1Ch
- dw avx_cmp_sd_instruction-instruction_handler
- db 'vcmpneq_osss',1Ch
- dw avx_cmp_ss_instruction-instruction_handler
- db 'vcmpneq_uspd',14h
- dw avx_cmp_pd_instruction-instruction_handler
- db 'vcmpneq_usps',14h
- dw avx_cmp_ps_instruction-instruction_handler
- db 'vcmpneq_ussd',14h
- dw avx_cmp_sd_instruction-instruction_handler
- db 'vcmpneq_usss',14h
- dw avx_cmp_ss_instruction-instruction_handler
- db 'vcmpnge_uqpd',19h
- dw avx_cmp_pd_instruction-instruction_handler
- db 'vcmpnge_uqps',19h
- dw avx_cmp_ps_instruction-instruction_handler
- db 'vcmpnge_uqsd',19h
- dw avx_cmp_sd_instruction-instruction_handler
- db 'vcmpnge_uqss',19h
- dw avx_cmp_ss_instruction-instruction_handler
- db 'vcmpngt_uqpd',1Ah
- dw avx_cmp_pd_instruction-instruction_handler
- db 'vcmpngt_uqps',1Ah
- dw avx_cmp_ps_instruction-instruction_handler
- db 'vcmpngt_uqsd',1Ah
- dw avx_cmp_sd_instruction-instruction_handler
- db 'vcmpngt_uqss',1Ah
- dw avx_cmp_ss_instruction-instruction_handler
- db 'vcmpnle_uqpd',16h
- dw avx_cmp_pd_instruction-instruction_handler
- db 'vcmpnle_uqps',16h
- dw avx_cmp_ps_instruction-instruction_handler
- db 'vcmpnle_uqsd',16h
- dw avx_cmp_sd_instruction-instruction_handler
- db 'vcmpnle_uqss',16h
- dw avx_cmp_ss_instruction-instruction_handler
- db 'vcmpnlt_uqpd',15h
- dw avx_cmp_pd_instruction-instruction_handler
- db 'vcmpnlt_uqps',15h
- dw avx_cmp_ps_instruction-instruction_handler
- db 'vcmpnlt_uqsd',15h
- dw avx_cmp_sd_instruction-instruction_handler
- db 'vcmpnlt_uqss',15h
- dw avx_cmp_ss_instruction-instruction_handler
- db 'vextractf128',19h
- dw avx_extractf128_instruction-instruction_handler
- db 'vextracti128',39h
- dw avx_extractf128_instruction-instruction_handler
- db 'vfnmadd132pd',9Ch
- dw fma_instruction_pd-instruction_handler
- db 'vfnmadd132ps',9Ch
- dw fma_instruction_ps-instruction_handler
- db 'vfnmadd132sd',9Dh
- dw fma_instruction_sd-instruction_handler
- db 'vfnmadd132ss',9Dh
- dw fma_instruction_ss-instruction_handler
- db 'vfnmadd213pd',0ACh
- dw fma_instruction_pd-instruction_handler
- db 'vfnmadd213ps',0ACh
- dw fma_instruction_ps-instruction_handler
- db 'vfnmadd213sd',0ADh
- dw fma_instruction_sd-instruction_handler
- db 'vfnmadd213ss',0ADh
- dw fma_instruction_ss-instruction_handler
- db 'vfnmadd231pd',0BCh
- dw fma_instruction_pd-instruction_handler
- db 'vfnmadd231ps',0BCh
- dw fma_instruction_ps-instruction_handler
- db 'vfnmadd231sd',0BDh
- dw fma_instruction_sd-instruction_handler
- db 'vfnmadd231ss',0BDh
- dw fma_instruction_ss-instruction_handler
- db 'vfnmsub132pd',9Eh
- dw fma_instruction_pd-instruction_handler
- db 'vfnmsub132ps',9Eh
- dw fma_instruction_ps-instruction_handler
- db 'vfnmsub132sd',9Fh
- dw fma_instruction_sd-instruction_handler
- db 'vfnmsub132ss',9Fh
- dw fma_instruction_ss-instruction_handler
- db 'vfnmsub213pd',0AEh
- dw fma_instruction_pd-instruction_handler
- db 'vfnmsub213ps',0AEh
- dw fma_instruction_ps-instruction_handler
- db 'vfnmsub213sd',0AFh
- dw fma_instruction_sd-instruction_handler
- db 'vfnmsub213ss',0AFh
- dw fma_instruction_ss-instruction_handler
- db 'vfnmsub231pd',0BEh
- dw fma_instruction_pd-instruction_handler
- db 'vfnmsub231ps',0BEh
- dw fma_instruction_ps-instruction_handler
- db 'vfnmsub231sd',0BFh
- dw fma_instruction_sd-instruction_handler
- db 'vfnmsub231ss',0BFh
- dw fma_instruction_ss-instruction_handler
- db 'vinsertf32x4',18h
- dw avx512_insert_32x4_instruction-instruction_handler
- db 'vinsertf32x8',1Ah
- dw avx512_insert_32x8_instruction-instruction_handler
- db 'vinsertf64x2',18h
- dw avx512_insert_64x2_instruction-instruction_handler
- db 'vinsertf64x4',1Ah
- dw avx512_insert_64x4_instruction-instruction_handler
- db 'vinserti32x4',38h
- dw avx512_insert_32x4_instruction-instruction_handler
- db 'vinserti32x8',3Ah
- dw avx512_insert_32x8_instruction-instruction_handler
- db 'vinserti64x2',38h
- dw avx512_insert_64x2_instruction-instruction_handler
- db 'vinserti64x4',3Ah
- dw avx512_insert_64x4_instruction-instruction_handler
- db 'vpbroadcastb',78h
- dw avx_pbroadcastb_instruction-instruction_handler
- db 'vpbroadcastd',58h
- dw avx_pbroadcastd_instruction-instruction_handler
- db 'vpbroadcastq',59h
- dw avx_pbroadcastq_instruction-instruction_handler
- db 'vpbroadcastw',79h
- dw avx_pbroadcastw_instruction-instruction_handler
- db 'vpclmulhqhdq',10001b
- dw avx_pclmulqdq_instruction-instruction_handler
- db 'vpclmullqhdq',10000b
- dw avx_pclmulqdq_instruction-instruction_handler
- db 'vpcomfalseub',6
- dw xop_pcom_ub_instruction-instruction_handler
- db 'vpcomfalseud',6
- dw xop_pcom_ud_instruction-instruction_handler
- db 'vpcomfalseuq',6
- dw xop_pcom_uq_instruction-instruction_handler
- db 'vpcomfalseuw',6
- dw xop_pcom_uw_instruction-instruction_handler
- db 'vpermilmo2pd',10b
- dw vpermil_2pd_instruction-instruction_handler
- db 'vpermilmo2ps',10b
- dw vpermil_2ps_instruction-instruction_handler
- db 'vpermilmz2pd',11b
- dw vpermil_2pd_instruction-instruction_handler
- db 'vpermilmz2ps',11b
- dw vpermil_2ps_instruction-instruction_handler
- db 'vpermiltd2pd',0
- dw vpermil_2pd_instruction-instruction_handler
- db 'vpermiltd2ps',0
- dw vpermil_2ps_instruction-instruction_handler
- db 'vpshufbitqmb',8Fh
- dw avx512_ptestmb_instruction-instruction_handler
-instructions_13:
- db 'gf2p8affineqb',0CEh
- dw sse4_instruction_66_3a_imm8-instruction_handler
- db 'vcmptrue_uspd',1Fh
- dw avx_cmp_pd_instruction-instruction_handler
- db 'vcmptrue_usps',1Fh
- dw avx_cmp_ps_instruction-instruction_handler
- db 'vcmptrue_ussd',1Fh
- dw avx_cmp_sd_instruction-instruction_handler
- db 'vcmptrue_usss',1Fh
- dw avx_cmp_ss_instruction-instruction_handler
- db 'vcmpunord_spd',13h
- dw avx_cmp_pd_instruction-instruction_handler
- db 'vcmpunord_sps',13h
- dw avx_cmp_ps_instruction-instruction_handler
- db 'vcmpunord_ssd',13h
- dw avx_cmp_sd_instruction-instruction_handler
- db 'vcmpunord_sss',13h
- dw avx_cmp_ss_instruction-instruction_handler
- db 'vextractf32x4',19h
- dw avx512_extract_32x4_instruction-instruction_handler
- db 'vextractf32x8',1Bh
- dw avx512_extract_32x8_instruction-instruction_handler
- db 'vextractf64x2',19h
- dw avx512_extract_64x2_instruction-instruction_handler
- db 'vextractf64x4',1Bh
- dw avx512_extract_64x4_instruction-instruction_handler
- db 'vextracti32x4',39h
- dw avx512_extract_32x4_instruction-instruction_handler
- db 'vextracti32x8',3Bh
- dw avx512_extract_32x8_instruction-instruction_handler
- db 'vextracti64x2',39h
- dw avx512_extract_64x2_instruction-instruction_handler
- db 'vextracti64x4',3Bh
- dw avx512_extract_64x4_instruction-instruction_handler
- db 'vgatherpf0dpd',1
- dw gatherpf_dpd_instruction-instruction_handler
- db 'vgatherpf0dps',1
- dw gatherpf_dps_instruction-instruction_handler
- db 'vgatherpf0qpd',1
- dw gatherpf_qpd_instruction-instruction_handler
- db 'vgatherpf0qps',1
- dw gatherpf_qps_instruction-instruction_handler
- db 'vgatherpf1dpd',2
- dw gatherpf_dpd_instruction-instruction_handler
- db 'vgatherpf1dps',2
- dw gatherpf_dps_instruction-instruction_handler
- db 'vgatherpf1qpd',2
- dw gatherpf_qpd_instruction-instruction_handler
- db 'vgatherpf1qps',2
- dw gatherpf_qps_instruction-instruction_handler
- db 'vpclmulhqlqdq',1
- dw avx_pclmulqdq_instruction-instruction_handler
- db 'vpclmullqlqdq',0
- dw avx_pclmulqdq_instruction-instruction_handler
-instructions_14:
- db 'vbroadcastf128',1Ah
- dw avx_broadcast_128_instruction_noevex-instruction_handler
- db 'vbroadcasti128',5Ah
- dw avx_broadcast_128_instruction_noevex-instruction_handler
- db 'vcmpfalse_ospd',1Bh
- dw avx_cmp_pd_instruction-instruction_handler
- db 'vcmpfalse_osps',1Bh
- dw avx_cmp_ps_instruction-instruction_handler
- db 'vcmpfalse_ossd',1Bh
- dw avx_cmp_sd_instruction-instruction_handler
- db 'vcmpfalse_osss',1Bh
- dw avx_cmp_ss_instruction-instruction_handler
- db 'vfmaddsub132pd',96h
- dw fma_instruction_pd-instruction_handler
- db 'vfmaddsub132ps',96h
- dw fma_instruction_ps-instruction_handler
- db 'vfmaddsub213pd',0A6h
- dw fma_instruction_pd-instruction_handler
- db 'vfmaddsub213ps',0A6h
- dw fma_instruction_ps-instruction_handler
- db 'vfmaddsub231pd',0B6h
- dw fma_instruction_pd-instruction_handler
- db 'vfmaddsub231ps',0B6h
- dw fma_instruction_ps-instruction_handler
- db 'vfmsubadd132pd',97h
- dw fma_instruction_pd-instruction_handler
- db 'vfmsubadd132ps',97h
- dw fma_instruction_ps-instruction_handler
- db 'vfmsubadd213pd',0A7h
- dw fma_instruction_pd-instruction_handler
- db 'vfmsubadd213ps',0A7h
- dw fma_instruction_ps-instruction_handler
- db 'vfmsubadd231pd',0B7h
- dw fma_instruction_pd-instruction_handler
- db 'vfmsubadd231ps',0B7h
- dw fma_instruction_ps-instruction_handler
- db 'vgf2p8affineqb',0CEh
- dw avx_q_instruction_3a_imm8_w1-instruction_handler
- db 'vpmultishiftqb',83h
- dw avx_q_instruction_38_evex-instruction_handler
- db 'vscatterpf0dpd',5
- dw gatherpf_dpd_instruction-instruction_handler
- db 'vscatterpf0dps',5
- dw gatherpf_dps_instruction-instruction_handler
- db 'vscatterpf0qpd',5
- dw gatherpf_qpd_instruction-instruction_handler
- db 'vscatterpf0qps',5
- dw gatherpf_qps_instruction-instruction_handler
- db 'vscatterpf1dpd',6
- dw gatherpf_dpd_instruction-instruction_handler
- db 'vscatterpf1dps',6
- dw gatherpf_dps_instruction-instruction_handler
- db 'vscatterpf1qpd',6
- dw gatherpf_qpd_instruction-instruction_handler
- db 'vscatterpf1qps',6
- dw gatherpf_qps_instruction-instruction_handler
-instructions_15:
- db 'aeskeygenassist',0DFh
- dw sse4_instruction_66_3a_imm8-instruction_handler
- db 'vbroadcastf32x2',19h
- dw avx512_broadcast_32x2_instruction-instruction_handler
- db 'vbroadcastf32x4',1Ah
- dw avx512_broadcast_32x4_instruction-instruction_handler
- db 'vbroadcastf32x8',1Bh
- dw avx512_broadcast_32x8_instruction-instruction_handler
- db 'vbroadcastf64x2',1Ah
- dw avx512_broadcast_64x2_instruction-instruction_handler
- db 'vbroadcastf64x4',1Bh
- dw avx512_broadcast_64x4_instruction-instruction_handler
- db 'vbroadcasti32x2',59h
- dw avx512_broadcast_32x2_instruction-instruction_handler
- db 'vbroadcasti32x4',5Ah
- dw avx512_broadcast_32x4_instruction-instruction_handler
- db 'vbroadcasti32x8',5Bh
- dw avx512_broadcast_32x8_instruction-instruction_handler
- db 'vbroadcasti64x2',5Ah
- dw avx512_broadcast_64x2_instruction-instruction_handler
- db 'vbroadcasti64x4',5Bh
- dw avx512_broadcast_64x4_instruction-instruction_handler
- db 'vpbroadcastmb2q',2Ah
- dw avx512_pmov_m2_instruction_w1-instruction_handler
- db 'vpbroadcastmw2d',3Ah
- dw avx512_pmov_m2_instruction-instruction_handler
-instructions_16:
- db 'gf2p8affineinvqb',0CFh
- dw sse4_instruction_66_3a_imm8-instruction_handler
- db 'vaeskeygenassist',0DFh
- dw avx_single_source_128bit_instruction_3a_imm8_noevex-instruction_handler
-instructions_17:
- db 'vgf2p8affineinvqb',0CFh
- dw avx_q_instruction_3a_imm8_w1-instruction_handler
-instructions_end:
-
-data_directives:
- dw data_directives_2-data_directives,(data_directives_3-data_directives_2)/(2+3)
- dw data_directives_3-data_directives,(data_directives_4-data_directives_3)/(3+3)
- dw data_directives_4-data_directives,(data_directives_end-data_directives_4)/(4+3)
-
-data_directives_2:
- db 'db',1
- dw data_bytes-instruction_handler
- db 'dd',4
- dw data_dwords-instruction_handler
- db 'df',6
- dw data_pwords-instruction_handler
- db 'dp',6
- dw data_pwords-instruction_handler
- db 'dq',8
- dw data_qwords-instruction_handler
- db 'dt',10
- dw data_twords-instruction_handler
- db 'du',2
- dw data_unicode-instruction_handler
- db 'dw',2
- dw data_words-instruction_handler
- db 'rb',1
- dw reserve_bytes-instruction_handler
- db 'rd',4
- dw reserve_dwords-instruction_handler
- db 'rf',6
- dw reserve_pwords-instruction_handler
- db 'rp',6
- dw reserve_pwords-instruction_handler
- db 'rq',8
- dw reserve_qwords-instruction_handler
- db 'rt',10
- dw reserve_twords-instruction_handler
- db 'rw',2
- dw reserve_words-instruction_handler
-data_directives_3:
-data_directives_4:
- db 'file',1
- dw data_file-instruction_handler
-data_directives_end:
diff --git a/source/variable.inc b/source/variable.inc
deleted file mode 100644 (file)
index d4f0357..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-
-; flat assembler core variables
-; Copyright (c) 1999-2022, Tomasz Grysztar.
-; All rights reserved.
-
-; Variables which have to be set up by interface:
-
-memory_start dd ?
-memory_end dd ?
-
-additional_memory dd ?
-additional_memory_end dd ?
-
-stack_limit dd ?
-
-initial_definitions dd ?
-input_file dd ?
-output_file dd ?
-symbols_file dd ?
-
-passes_limit dw ?
-
-; Internal core variables:
-
-current_pass dw ?
-
-include_paths dd ?
-free_additional_memory dd ?
-source_start dd ?
-code_start dd ?
-code_size dd ?
-real_code_size dd ?
-written_size dd ?
-headers_size dd ?
-
-current_line dd ?
-macro_line dd ?
-macro_block dd ?
-macro_block_line dd ?
-macro_block_line_number dd ?
-macro_symbols dd ?
-struc_name dd ?
-struc_label dd ?
-instant_macro_start dd ?
-parameters_end dd ?
-default_argument_value dd ?
-locals_counter rb 8
-current_locals_prefix dd ?
-anonymous_reverse dd ?
-anonymous_forward dd ?
-labels_list dd ?
-label_hash dd ?
-label_leaf dd ?
-hash_tree dd ?
-addressing_space dd ?
-undefined_data_start dd ?
-undefined_data_end dd ?
-counter dd ?
-counter_limit dd ?
-error_info dd ?
-error_line dd ?
-error dd ?
-tagged_blocks dd ?
-structures_buffer dd ?
-number_start dd ?
-current_offset dd ?
-value dq ?
-fp_value rd 8
-adjustment dq ?
-symbol_identifier dd ?
-address_symbol dd ?
-address_high dd ?
-uncompressed_displacement dd ?
-format_flags dd ?
-resolver_flags dd ?
-symbols_stream dd ?
-number_of_relocations dd ?
-number_of_sections dd ?
-stub_size dd ?
-stub_file dd ?
-current_section dd ?
-machine dw ?
-subsystem dw ?
-subsystem_version dd ?
-image_base dd ?
-image_base_high dd ?
-merge_segment dd ?
-resource_data dd ?
-resource_size dd ?
-actual_fixups_size dd ?
-reserved_fixups dd ?
-reserved_fixups_size dd ?
-last_fixup_base dd ?
-last_fixup_header dd ?
-parenthesis_stack dd ?
-blocks_stack dd ?
-parsed_lines dd ?
-logical_value_parentheses dd ?
-file_extension dd ?
-
-operand_size db ?
-operand_flags db ?
-operand_prefix db ?
-rex_prefix db ?
-opcode_prefix db ?
-vex_required db ?
-vex_register db ?
-immediate_size db ?
-mask_register db ?
-broadcast_size db ?
-rounding_mode db ?
-
-base_code db ?
-extended_code db ?
-supplemental_code db ?
-postbyte_register db ?
-segment_register db ?
-xop_opcode_map db ?
-
-mmx_size db ?
-jump_type db ?
-push_size db ?
-value_size db ?
-address_size db ?
-label_size db ?
-size_declared db ?
-address_size_declared db ?
-displacement_compression db ?
-
-value_undefined db ?
-value_constant db ?
-value_type db ?
-value_sign db ?
-fp_sign db ?
-fp_format db ?
-address_sign db ?
-address_register db ?
-compare_type db ?
-logical_value_wrapping db ?
-next_pass_needed db ?
-output_format db ?
-code_type db ?
-adjustment_sign db ?
-evex_mode db ?
-
-macro_status db ?
-skip_default_argument_value db ?
-prefix_flags db ?
-formatter_symbols_allowed db ?
-decorator_symbols_allowed db ?
-free_address_range db ?
-
-characters rb 100h
-converted rb 100h
-message rb 180h
diff --git a/source/version.inc b/source/version.inc
deleted file mode 100644 (file)
index 7006d4c..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-
-; flat assembler  version 1.73
-; Copyright (c) 1999-2023, Tomasz Grysztar.
-; All rights reserved.
-;
-; This programs is free for commercial and non-commercial use as long as
-; the following conditions are adhered to.
-;
-; Redistribution and use in source and binary forms, with or without
-; modification, are permitted provided that the following conditions are
-; met:
-;
-; 1. Redistributions of source code must retain the above copyright notice,
-;    this list of conditions and the following disclaimer.
-; 2. Redistributions in binary form must reproduce the above copyright
-;    notice, this list of conditions and the following disclaimer in the
-;    documentation and/or other materials provided with the distribution.
-;
-; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-; "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-; TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-; PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
-; CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-; EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-; PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-; PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-; LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-;
-; The licence and distribution terms for any publically available
-; version or derivative of this code cannot be changed. i.e. this code
-; cannot simply be copied and put under another distribution licence
-; (including the GNU Public Licence).
-
-VERSION_STRING equ "1.73.32"
-
-VERSION_MAJOR = 1
-VERSION_MINOR = 73
diff --git a/source/x86_64.inc b/source/x86_64.inc
deleted file mode 100644 (file)
index bfb9327..0000000
+++ /dev/null
@@ -1,7391 +0,0 @@
-
-; flat assembler core
-; Copyright (c) 1999-2022, Tomasz Grysztar.
-; All rights reserved.
-
-simple_instruction_except64:
-       cmp     [code_type],64
-       je      illegal_instruction
-simple_instruction:
-       stos    byte [edi]
-       jmp     instruction_assembled
-simple_instruction_only64:
-       cmp     [code_type],64
-       jne     illegal_instruction
-       jmp     simple_instruction
-simple_instruction_16bit_except64:
-       cmp     [code_type],64
-       je      illegal_instruction
-simple_instruction_16bit:
-       cmp     [code_type],16
-       jne     size_prefix
-       stos    byte [edi]
-       jmp     instruction_assembled
-      size_prefix:
-       mov     ah,al
-       mov     al,66h
-       stos    word [edi]
-       jmp     instruction_assembled
-simple_instruction_32bit_except64:
-       cmp     [code_type],64
-       je      illegal_instruction
-simple_instruction_32bit:
-       cmp     [code_type],16
-       je      size_prefix
-       stos    byte [edi]
-       jmp     instruction_assembled
-iret_instruction:
-       cmp     [code_type],64
-       jne     simple_instruction
-simple_instruction_64bit:
-       cmp     [code_type],64
-       jne     illegal_instruction
-       mov     ah,al
-       mov     al,48h
-       stos    word [edi]
-       jmp     instruction_assembled
-simple_extended_instruction_64bit:
-       cmp     [code_type],64
-       jne     illegal_instruction
-       mov     byte [edi],48h
-       inc     edi
-simple_extended_instruction:
-       mov     ah,al
-       mov     al,0Fh
-       stos    word [edi]
-       jmp     instruction_assembled
-simple_extended_instruction_f3:
-       mov     byte [edi],0F3h
-       inc     edi
-       jmp     simple_extended_instruction
-prefix_instruction:
-       stos    byte [edi]
-       or      [prefix_flags],1
-       jmp     continue_line
-segment_prefix:
-       mov     ah,al
-       shr     ah,4
-       cmp     ah,3
-       jne     illegal_instruction
-       and     al,1111b
-       mov     [segment_register],al
-       call    store_segment_prefix
-       or      [prefix_flags],1
-       jmp     continue_line
-bnd_prefix_instruction:
-       stos    byte [edi]
-       or      [prefix_flags],1 + 10h
-       jmp     continue_line
-int_instruction:
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     ah,1
-       ja      invalid_operand_size
-       cmp     al,'('
-       jne     invalid_operand
-       call    get_byte_value
-       test    eax,eax
-       jns     int_imm_ok
-       call    recoverable_overflow
-      int_imm_ok:
-       mov     ah,al
-       mov     al,0CDh
-       stos    word [edi]
-       jmp     instruction_assembled
-aa_instruction:
-       cmp     [code_type],64
-       je      illegal_instruction
-       push    eax
-       mov     bl,10
-       cmp     byte [esi],'('
-       jne     aa_store
-       inc     esi
-       xor     al,al
-       xchg    al,[operand_size]
-       cmp     al,1
-       ja      invalid_operand_size
-       call    get_byte_value
-       mov     bl,al
-      aa_store:
-       cmp     [operand_size],0
-       jne     invalid_operand
-       pop     eax
-       mov     ah,bl
-       stos    word [edi]
-       jmp     instruction_assembled
-
-basic_instruction:
-       mov     [base_code],al
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      basic_reg
-       cmp     al,'['
-       jne     invalid_operand
-      basic_mem:
-       call    get_address
-       push    edx ebx ecx
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'('
-       je      basic_mem_imm
-       cmp     al,10h
-       jne     invalid_operand
-      basic_mem_reg:
-       lods    byte [esi]
-       call    convert_register
-       mov     [postbyte_register],al
-       pop     ecx ebx edx
-       mov     al,ah
-       cmp     al,1
-       je      instruction_ready
-       call    operand_autodetect
-       inc     [base_code]
-      instruction_ready:
-       call    store_instruction
-       jmp     instruction_assembled
-      basic_mem_imm:
-       mov     al,[operand_size]
-       cmp     al,1
-       jb      basic_mem_imm_nosize
-       je      basic_mem_imm_8bit
-       cmp     al,2
-       je      basic_mem_imm_16bit
-       cmp     al,4
-       je      basic_mem_imm_32bit
-       cmp     al,8
-       jne     invalid_operand_size
-      basic_mem_imm_64bit:
-       cmp     [size_declared],0
-       jne     long_immediate_not_encodable
-       call    operand_64bit
-       call    get_simm32
-       cmp     [value_type],4
-       jae     long_immediate_not_encodable
-       jmp     basic_mem_imm_32bit_ok
-      basic_mem_imm_nosize:
-       call    recoverable_unknown_size
-      basic_mem_imm_8bit:
-       call    get_byte_value
-       mov     byte [value],al
-       mov     al,[base_code]
-       shr     al,3
-       mov     [postbyte_register],al
-       pop     ecx ebx edx
-       mov     [base_code],80h
-       call    store_instruction_with_imm8
-       jmp     instruction_assembled
-      basic_mem_imm_16bit:
-       call    operand_16bit
-       call    get_word_value
-       mov     word [value],ax
-       mov     al,[base_code]
-       shr     al,3
-       mov     [postbyte_register],al
-       pop     ecx ebx edx
-       cmp     [value_type],0
-       jne     basic_mem_imm_16bit_store
-       cmp     [size_declared],0
-       jne     basic_mem_imm_16bit_store
-       cmp     word [value],80h
-       jb      basic_mem_simm_8bit
-       cmp     word [value],-80h
-       jae     basic_mem_simm_8bit
-      basic_mem_imm_16bit_store:
-       mov     [base_code],81h
-       call    store_instruction_with_imm16
-       jmp     instruction_assembled
-      basic_mem_simm_8bit:
-       mov     [base_code],83h
-       call    store_instruction_with_imm8
-       jmp     instruction_assembled
-      basic_mem_imm_32bit:
-       call    operand_32bit
-       call    get_dword_value
-      basic_mem_imm_32bit_ok:
-       mov     dword [value],eax
-       mov     al,[base_code]
-       shr     al,3
-       mov     [postbyte_register],al
-       pop     ecx ebx edx
-       cmp     [value_type],0
-       jne     basic_mem_imm_32bit_store
-       cmp     [size_declared],0
-       jne     basic_mem_imm_32bit_store
-       cmp     dword [value],80h
-       jb      basic_mem_simm_8bit
-       cmp     dword [value],-80h
-       jae     basic_mem_simm_8bit
-      basic_mem_imm_32bit_store:
-       mov     [base_code],81h
-       call    store_instruction_with_imm32
-       jmp     instruction_assembled
-      get_simm32:
-       call    get_qword_value
-       mov     ecx,edx
-       cdq
-       cmp     ecx,edx
-       je      simm32_range_ok
-       call    recoverable_overflow
-      simm32_range_ok:
-       cmp     [value_type],4
-       jne     get_simm32_ok
-       mov     [value_type],2
-      get_simm32_ok:
-       ret
-      basic_reg:
-       lods    byte [esi]
-       call    convert_register
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      basic_reg_reg
-       cmp     al,'('
-       je      basic_reg_imm
-       cmp     al,'['
-       jne     invalid_operand
-      basic_reg_mem:
-       call    get_address
-       mov     al,[operand_size]
-       cmp     al,1
-       je      basic_reg_mem_8bit
-       call    operand_autodetect
-       add     [base_code],3
-       jmp     instruction_ready
-      basic_reg_mem_8bit:
-       add     [base_code],2
-       jmp     instruction_ready
-      basic_reg_reg:
-       lods    byte [esi]
-       call    convert_register
-       mov     bl,[postbyte_register]
-       mov     [postbyte_register],al
-       mov     al,ah
-       cmp     al,1
-       je      nomem_instruction_ready
-       call    operand_autodetect
-       inc     [base_code]
-      nomem_instruction_ready:
-       call    store_nomem_instruction
-       jmp     instruction_assembled
-      basic_reg_imm:
-       mov     al,[operand_size]
-       cmp     al,1
-       je      basic_reg_imm_8bit
-       cmp     al,2
-       je      basic_reg_imm_16bit
-       cmp     al,4
-       je      basic_reg_imm_32bit
-       cmp     al,8
-       jne     invalid_operand_size
-      basic_reg_imm_64bit:
-       cmp     [size_declared],0
-       jne     long_immediate_not_encodable
-       call    operand_64bit
-       call    get_simm32
-       cmp     [value_type],4
-       jae     long_immediate_not_encodable
-       jmp     basic_reg_imm_32bit_ok
-      basic_reg_imm_8bit:
-       call    get_byte_value
-       mov     dl,al
-       mov     bl,[base_code]
-       shr     bl,3
-       xchg    bl,[postbyte_register]
-       or      bl,bl
-       jz      basic_al_imm
-       mov     [base_code],80h
-       call    store_nomem_instruction
-       mov     al,dl
-       stos    byte [edi]
-       jmp     instruction_assembled
-      basic_al_imm:
-       mov     al,[base_code]
-       add     al,4
-       stos    byte [edi]
-       mov     al,dl
-       stos    byte [edi]
-       jmp     instruction_assembled
-      basic_reg_imm_16bit:
-       call    operand_16bit
-       call    get_word_value
-       mov     dx,ax
-       mov     bl,[base_code]
-       shr     bl,3
-       xchg    bl,[postbyte_register]
-       cmp     [value_type],0
-       jne     basic_reg_imm_16bit_store
-       cmp     [size_declared],0
-       jne     basic_reg_imm_16bit_store
-       cmp     dx,80h
-       jb      basic_reg_simm_8bit
-       cmp     dx,-80h
-       jae     basic_reg_simm_8bit
-      basic_reg_imm_16bit_store:
-       or      bl,bl
-       jz      basic_ax_imm
-       mov     [base_code],81h
-       call    store_nomem_instruction
-      basic_store_imm_16bit:
-       mov     ax,dx
-       call    mark_relocation
-       stos    word [edi]
-       jmp     instruction_assembled
-      basic_reg_simm_8bit:
-       mov     [base_code],83h
-       call    store_nomem_instruction
-       mov     al,dl
-       stos    byte [edi]
-       jmp     instruction_assembled
-      basic_ax_imm:
-       add     [base_code],5
-       call    store_classic_instruction_code
-       jmp     basic_store_imm_16bit
-      basic_reg_imm_32bit:
-       call    operand_32bit
-       call    get_dword_value
-      basic_reg_imm_32bit_ok:
-       mov     edx,eax
-       mov     bl,[base_code]
-       shr     bl,3
-       xchg    bl,[postbyte_register]
-       cmp     [value_type],0
-       jne     basic_reg_imm_32bit_store
-       cmp     [size_declared],0
-       jne     basic_reg_imm_32bit_store
-       cmp     edx,80h
-       jb      basic_reg_simm_8bit
-       cmp     edx,-80h
-       jae     basic_reg_simm_8bit
-      basic_reg_imm_32bit_store:
-       or      bl,bl
-       jz      basic_eax_imm
-       mov     [base_code],81h
-       call    store_nomem_instruction
-      basic_store_imm_32bit:
-       mov     eax,edx
-       call    mark_relocation
-       stos    dword [edi]
-       jmp     instruction_assembled
-      basic_eax_imm:
-       add     [base_code],5
-       call    store_classic_instruction_code
-       jmp     basic_store_imm_32bit
-      recoverable_unknown_size:
-       cmp     [error_line],0
-       jne     ignore_unknown_size
-       push    [current_line]
-       pop     [error_line]
-       mov     [error],operand_size_not_specified
-      ignore_unknown_size:
-       ret
-single_operand_instruction:
-       mov     [base_code],0F6h
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      single_reg
-       cmp     al,'['
-       jne     invalid_operand
-      single_mem:
-       call    get_address
-       mov     al,[operand_size]
-       cmp     al,1
-       je      single_mem_8bit
-       jb      single_mem_nosize
-       call    operand_autodetect
-       inc     [base_code]
-       jmp     instruction_ready
-      single_mem_nosize:
-       call    recoverable_unknown_size
-      single_mem_8bit:
-       jmp     instruction_ready
-      single_reg:
-       lods    byte [esi]
-       call    convert_register
-       mov     bl,al
-       mov     al,ah
-       cmp     al,1
-       je      single_reg_8bit
-       call    operand_autodetect
-       inc     [base_code]
-      single_reg_8bit:
-       jmp     nomem_instruction_ready
-mov_instruction:
-       mov     [base_code],88h
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      mov_reg
-       cmp     al,14h
-       je      mov_creg
-       cmp     al,'['
-       jne     invalid_operand
-      mov_mem:
-       call    get_address
-       push    edx ebx ecx
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'('
-       je      mov_mem_imm
-       cmp     al,10h
-       jne     invalid_operand
-      mov_mem_reg:
-       lods    byte [esi]
-       cmp     al,30h
-       jb      mov_mem_general_reg
-       cmp     al,40h
-       jb      mov_mem_sreg
-      mov_mem_general_reg:
-       call    convert_register
-       mov     [postbyte_register],al
-       pop     ecx ebx edx
-       cmp     ah,1
-       je      mov_mem_reg_8bit
-       inc     [base_code]
-       mov     al,ah
-       call    operand_autodetect
-       mov     al,[postbyte_register]
-       or      al,bl
-       or      al,bh
-       jz      mov_mem_ax
-       jmp     instruction_ready
-      mov_mem_reg_8bit:
-       or      al,bl
-       or      al,bh
-       jnz     instruction_ready
-      mov_mem_al:
-       test    ch,22h
-       jnz     mov_mem_address16_al
-       test    ch,44h
-       jnz     mov_mem_address32_al
-       test    ch,not 88h
-       jnz     invalid_address_size
-       call    check_mov_address64
-       cmp     al,0
-       jg      mov_mem_address64_al
-       jl      instruction_ready
-       cmp     [code_type],16
-       jne     mov_mem_address32_al
-       cmp     edx,10000h
-       jb      mov_mem_address16_al
-      mov_mem_address32_al:
-       call    store_segment_prefix_if_necessary
-       call    address_32bit_prefix
-       mov     [base_code],0A2h
-      store_mov_address32:
-       call    store_classic_instruction_code
-       call    store_address_32bit_value
-       jmp     instruction_assembled
-      mov_mem_address16_al:
-       call    store_segment_prefix_if_necessary
-       call    address_16bit_prefix
-       mov     [base_code],0A2h
-      store_mov_address16:
-       cmp     [code_type],64
-       je      invalid_address
-       call    store_classic_instruction_code
-       mov     eax,edx
-       stos    word [edi]
-       cmp     edx,10000h
-       jge     value_out_of_range
-       jmp     instruction_assembled
-      check_mov_address64:
-       cmp     [code_type],64
-       jne     no_address64
-       test    ch,88h
-       jnz     address64_required
-       mov     eax,[address_high]
-       or      eax,eax
-       jz      no_address64
-       bt      edx,31
-       adc     eax,0
-       jz      address64_simm32
-      address64_required:
-       mov     al,1
-       ret
-      address64_simm32:
-       mov     al,-1
-       ret
-      no_address64:
-       test    ch,08h
-       jnz     invalid_address_size
-       xor     al,al
-       ret
-      mov_mem_address64_al:
-       call    store_segment_prefix_if_necessary
-       mov     [base_code],0A2h
-      store_mov_address64:
-       call    store_classic_instruction_code
-       call    store_address_64bit_value
-       jmp     instruction_assembled
-      mov_mem_ax:
-       test    ch,22h
-       jnz     mov_mem_address16_ax
-       test    ch,44h
-       jnz     mov_mem_address32_ax
-       test    ch,not 88h
-       jnz     invalid_address_size
-       call    check_mov_address64
-       cmp     al,0
-       jg      mov_mem_address64_ax
-       jl      instruction_ready
-       cmp     [code_type],16
-       jne     mov_mem_address32_ax
-       cmp     edx,10000h
-       jb      mov_mem_address16_ax
-      mov_mem_address32_ax:
-       call    store_segment_prefix_if_necessary
-       call    address_32bit_prefix
-       mov     [base_code],0A3h
-       jmp     store_mov_address32
-      mov_mem_address16_ax:
-       call    store_segment_prefix_if_necessary
-       call    address_16bit_prefix
-       mov     [base_code],0A3h
-       jmp     store_mov_address16
-      mov_mem_address64_ax:
-       call    store_segment_prefix_if_necessary
-       mov     [base_code],0A3h
-       jmp     store_mov_address64
-      mov_mem_sreg:
-       sub     al,31h
-       mov     [postbyte_register],al
-       pop     ecx ebx edx
-       mov     ah,[operand_size]
-       or      ah,ah
-       jz      mov_mem_sreg_store
-       cmp     ah,2
-       jne     invalid_operand_size
-      mov_mem_sreg_store:
-       mov     [base_code],8Ch
-       jmp     instruction_ready
-      mov_mem_imm:
-       mov     al,[operand_size]
-       cmp     al,1
-       jb      mov_mem_imm_nosize
-       je      mov_mem_imm_8bit
-       cmp     al,2
-       je      mov_mem_imm_16bit
-       cmp     al,4
-       je      mov_mem_imm_32bit
-       cmp     al,8
-       jne     invalid_operand_size
-      mov_mem_imm_64bit:
-       cmp     [size_declared],0
-       jne     long_immediate_not_encodable
-       call    operand_64bit
-       call    get_simm32
-       cmp     [value_type],4
-       jae     long_immediate_not_encodable
-       jmp     mov_mem_imm_32bit_store
-      mov_mem_imm_nosize:
-       call    recoverable_unknown_size
-      mov_mem_imm_8bit:
-       call    get_byte_value
-       mov     byte [value],al
-       mov     [postbyte_register],0
-       mov     [base_code],0C6h
-       pop     ecx ebx edx
-       call    store_instruction_with_imm8
-       jmp     instruction_assembled
-      mov_mem_imm_16bit:
-       call    operand_16bit
-       call    get_word_value
-       mov     word [value],ax
-       mov     [postbyte_register],0
-       mov     [base_code],0C7h
-       pop     ecx ebx edx
-       call    store_instruction_with_imm16
-       jmp     instruction_assembled
-      mov_mem_imm_32bit:
-       call    operand_32bit
-       call    get_dword_value
-      mov_mem_imm_32bit_store:
-       mov     dword [value],eax
-       mov     [postbyte_register],0
-       mov     [base_code],0C7h
-       pop     ecx ebx edx
-       call    store_instruction_with_imm32
-       jmp     instruction_assembled
-      mov_reg:
-       lods    byte [esi]
-       mov     ah,al
-       sub     ah,10h
-       and     ah,al
-       test    ah,0F0h
-       jnz     mov_sreg
-       call    convert_register
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       je      mov_reg_mem
-       cmp     al,'('
-       je      mov_reg_imm
-       cmp     al,14h
-       je      mov_reg_creg
-       cmp     al,10h
-       jne     invalid_operand
-      mov_reg_reg:
-       lods    byte [esi]
-       mov     ah,al
-       sub     ah,10h
-       and     ah,al
-       test    ah,0F0h
-       jnz     mov_reg_sreg
-       call    convert_register
-       mov     bl,[postbyte_register]
-       mov     [postbyte_register],al
-       mov     al,ah
-       cmp     al,1
-       je      mov_reg_reg_8bit
-       call    operand_autodetect
-       inc     [base_code]
-      mov_reg_reg_8bit:
-       jmp     nomem_instruction_ready
-      mov_reg_sreg:
-       mov     bl,[postbyte_register]
-       mov     ah,al
-       and     al,1111b
-       mov     [postbyte_register],al
-       shr     ah,4
-       cmp     ah,3
-       jne     invalid_operand
-       dec     [postbyte_register]
-       cmp     [operand_size],8
-       je      mov_reg_sreg64
-       cmp     [operand_size],4
-       je      mov_reg_sreg32
-       cmp     [operand_size],2
-       jne     invalid_operand_size
-       call    operand_16bit
-       jmp     mov_reg_sreg_store
-      mov_reg_sreg64:
-       call    operand_64bit
-       jmp     mov_reg_sreg_store
-      mov_reg_sreg32:
-       call    operand_32bit
-      mov_reg_sreg_store:
-       mov     [base_code],8Ch
-       jmp     nomem_instruction_ready
-      mov_reg_creg:
-       lods    byte [esi]
-       mov     bl,al
-       shr     al,4
-       cmp     al,4
-       ja      invalid_operand
-       add     al,20h
-       mov     [extended_code],al
-       and     bl,1111b
-       xchg    bl,[postbyte_register]
-       mov     [base_code],0Fh
-       cmp     [code_type],64
-       je      mov_reg_creg_64bit
-       cmp     [operand_size],4
-       jne     invalid_operand_size
-       cmp     [postbyte_register],8
-       jne     mov_reg_creg_store
-       cmp     [extended_code],20h
-       jne     mov_reg_creg_store
-       mov     al,0F0h
-       stos    byte [edi]
-       mov     [postbyte_register],0
-      mov_reg_creg_store:
-       jmp     nomem_instruction_ready
-      mov_reg_creg_64bit:
-       cmp     [operand_size],8
-       jne     invalid_operand_size
-       jmp     nomem_instruction_ready
-      mov_reg_mem:
-       add     [base_code],2
-       call    get_address
-       mov     al,[operand_size]
-       cmp     al,1
-       je      mov_reg_mem_8bit
-       inc     [base_code]
-       call    operand_autodetect
-       mov     al,[postbyte_register]
-       or      al,bl
-       or      al,bh
-       jz      mov_ax_mem
-       jmp     instruction_ready
-      mov_reg_mem_8bit:
-       mov     al,[postbyte_register]
-       or      al,bl
-       or      al,bh
-       jz      mov_al_mem
-       jmp     instruction_ready
-      mov_al_mem:
-       test    ch,22h
-       jnz     mov_al_mem_address16
-       test    ch,44h
-       jnz     mov_al_mem_address32
-       test    ch,not 88h
-       jnz     invalid_address_size
-       call    check_mov_address64
-       cmp     al,0
-       jg      mov_al_mem_address64
-       jl      instruction_ready
-       cmp     [code_type],16
-       jne     mov_al_mem_address32
-       cmp     edx,10000h
-       jb      mov_al_mem_address16
-      mov_al_mem_address32:
-       call    store_segment_prefix_if_necessary
-       call    address_32bit_prefix
-       mov     [base_code],0A0h
-       jmp     store_mov_address32
-      mov_al_mem_address16:
-       call    store_segment_prefix_if_necessary
-       call    address_16bit_prefix
-       mov     [base_code],0A0h
-       jmp     store_mov_address16
-      mov_al_mem_address64:
-       call    store_segment_prefix_if_necessary
-       mov     [base_code],0A0h
-       jmp     store_mov_address64
-      mov_ax_mem:
-       test    ch,22h
-       jnz     mov_ax_mem_address16
-       test    ch,44h
-       jnz     mov_ax_mem_address32
-       test    ch,not 88h
-       jnz     invalid_address_size
-       call    check_mov_address64
-       cmp     al,0
-       jg      mov_ax_mem_address64
-       jl      instruction_ready
-       cmp     [code_type],16
-       jne     mov_ax_mem_address32
-       cmp     edx,10000h
-       jb      mov_ax_mem_address16
-      mov_ax_mem_address32:
-       call    store_segment_prefix_if_necessary
-       call    address_32bit_prefix
-       mov     [base_code],0A1h
-       jmp     store_mov_address32
-      mov_ax_mem_address16:
-       call    store_segment_prefix_if_necessary
-       call    address_16bit_prefix
-       mov     [base_code],0A1h
-       jmp     store_mov_address16
-      mov_ax_mem_address64:
-       call    store_segment_prefix_if_necessary
-       mov     [base_code],0A1h
-       jmp     store_mov_address64
-      mov_reg_imm:
-       mov     al,[operand_size]
-       cmp     al,1
-       je      mov_reg_imm_8bit
-       cmp     al,2
-       je      mov_reg_imm_16bit
-       cmp     al,4
-       je      mov_reg_imm_32bit
-       cmp     al,8
-       jne     invalid_operand_size
-      mov_reg_imm_64bit:
-       call    operand_64bit
-       call    get_qword_value
-       mov     ecx,edx
-       cmp     [size_declared],0
-       jne     mov_reg_imm_64bit_store
-       cmp     [value_type],4
-       jae     mov_reg_imm_64bit_store
-       cdq
-       cmp     ecx,edx
-       je      mov_reg_64bit_imm_32bit
-      mov_reg_imm_64bit_store:
-       push    eax ecx
-       mov     al,0B8h
-       call    store_mov_reg_imm_code
-       pop     edx eax
-       call    mark_relocation
-       stos    dword [edi]
-       mov     eax,edx
-       stos    dword [edi]
-       jmp     instruction_assembled
-      mov_reg_imm_8bit:
-       call    get_byte_value
-       mov     dl,al
-       mov     al,0B0h
-       call    store_mov_reg_imm_code
-       mov     al,dl
-       stos    byte [edi]
-       jmp     instruction_assembled
-      mov_reg_imm_16bit:
-       call    get_word_value
-       mov     dx,ax
-       call    operand_16bit
-       mov     al,0B8h
-       call    store_mov_reg_imm_code
-       mov     ax,dx
-       call    mark_relocation
-       stos    word [edi]
-       jmp     instruction_assembled
-      mov_reg_imm_32bit:
-       call    operand_32bit
-       call    get_dword_value
-       mov     edx,eax
-       mov     al,0B8h
-       call    store_mov_reg_imm_code
-      mov_store_imm_32bit:
-       mov     eax,edx
-       call    mark_relocation
-       stos    dword [edi]
-       jmp     instruction_assembled
-      store_mov_reg_imm_code:
-       mov     ah,[postbyte_register]
-       test    ah,1000b
-       jz      mov_reg_imm_prefix_ok
-       or      [rex_prefix],41h
-      mov_reg_imm_prefix_ok:
-       and     ah,111b
-       add     al,ah
-       mov     [base_code],al
-       call    store_classic_instruction_code
-       ret
-      mov_reg_64bit_imm_32bit:
-       mov     edx,eax
-       mov     bl,[postbyte_register]
-       mov     [postbyte_register],0
-       mov     [base_code],0C7h
-       call    store_nomem_instruction
-       jmp     mov_store_imm_32bit
-      mov_sreg:
-       mov     ah,al
-       and     al,1111b
-       mov     [postbyte_register],al
-       shr     ah,4
-       cmp     ah,3
-       jne     invalid_operand
-       cmp     al,2
-       je      illegal_instruction
-       dec     [postbyte_register]
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       je      mov_sreg_mem
-       cmp     al,10h
-       jne     invalid_operand
-      mov_sreg_reg:
-       lods    byte [esi]
-       call    convert_register
-       or      ah,ah
-       jz      mov_sreg_reg_size_ok
-       cmp     ah,2
-       jne     invalid_operand_size
-       mov     bl,al
-      mov_sreg_reg_size_ok:
-       mov     [base_code],8Eh
-       jmp     nomem_instruction_ready
-      mov_sreg_mem:
-       call    get_address
-       mov     al,[operand_size]
-       or      al,al
-       jz      mov_sreg_mem_size_ok
-       cmp     al,2
-       jne     invalid_operand_size
-      mov_sreg_mem_size_ok:
-       mov     [base_code],8Eh
-       jmp     instruction_ready
-      mov_creg:
-       lods    byte [esi]
-       mov     ah,al
-       shr     ah,4
-       cmp     ah,4
-       ja      invalid_operand
-       add     ah,22h
-       mov     [extended_code],ah
-       and     al,1111b
-       mov     [postbyte_register],al
-       mov     [base_code],0Fh
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_register
-       mov     bl,al
-       cmp     [code_type],64
-       je      mov_creg_64bit
-       cmp     ah,4
-       jne     invalid_operand_size
-       cmp     [postbyte_register],8
-       jne     mov_creg_store
-       cmp     [extended_code],22h
-       jne     mov_creg_store
-       mov     al,0F0h
-       stos    byte [edi]
-       mov     [postbyte_register],0
-      mov_creg_store:
-       jmp     nomem_instruction_ready
-      mov_creg_64bit:
-       cmp     ah,8
-       je      mov_creg_store
-       jmp     invalid_operand_size
-test_instruction:
-       mov     [base_code],84h
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      test_reg
-       cmp     al,'['
-       jne     invalid_operand
-      test_mem:
-       call    get_address
-       push    edx ebx ecx
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'('
-       je      test_mem_imm
-       cmp     al,10h
-       jne     invalid_operand
-      test_mem_reg:
-       lods    byte [esi]
-       call    convert_register
-       mov     [postbyte_register],al
-       pop     ecx ebx edx
-       mov     al,ah
-       cmp     al,1
-       je      test_mem_reg_8bit
-       call    operand_autodetect
-       inc     [base_code]
-      test_mem_reg_8bit:
-       jmp     instruction_ready
-      test_mem_imm:
-       mov     al,[operand_size]
-       cmp     al,1
-       jb      test_mem_imm_nosize
-       je      test_mem_imm_8bit
-       cmp     al,2
-       je      test_mem_imm_16bit
-       cmp     al,4
-       je      test_mem_imm_32bit
-       cmp     al,8
-       jne     invalid_operand_size
-      test_mem_imm_64bit:
-       cmp     [size_declared],0
-       jne     long_immediate_not_encodable
-       call    operand_64bit
-       call    get_simm32
-       cmp     [value_type],4
-       jae     long_immediate_not_encodable
-       jmp     test_mem_imm_32bit_store
-      test_mem_imm_nosize:
-       call    recoverable_unknown_size
-      test_mem_imm_8bit:
-       call    get_byte_value
-       mov     byte [value],al
-       mov     [postbyte_register],0
-       mov     [base_code],0F6h
-       pop     ecx ebx edx
-       call    store_instruction_with_imm8
-       jmp     instruction_assembled
-      test_mem_imm_16bit:
-       call    operand_16bit
-       call    get_word_value
-       mov     word [value],ax
-       mov     [postbyte_register],0
-       mov     [base_code],0F7h
-       pop     ecx ebx edx
-       call    store_instruction_with_imm16
-       jmp     instruction_assembled
-      test_mem_imm_32bit:
-       call    operand_32bit
-       call    get_dword_value
-      test_mem_imm_32bit_store:
-       mov     dword [value],eax
-       mov     [postbyte_register],0
-       mov     [base_code],0F7h
-       pop     ecx ebx edx
-       call    store_instruction_with_imm32
-       jmp     instruction_assembled
-      test_reg:
-       lods    byte [esi]
-       call    convert_register
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       je      test_reg_mem
-       cmp     al,'('
-       je      test_reg_imm
-       cmp     al,10h
-       jne     invalid_operand
-      test_reg_reg:
-       lods    byte [esi]
-       call    convert_register
-       mov     bl,[postbyte_register]
-       mov     [postbyte_register],al
-       mov     al,ah
-       cmp     al,1
-       je      test_reg_reg_8bit
-       call    operand_autodetect
-       inc     [base_code]
-      test_reg_reg_8bit:
-       jmp     nomem_instruction_ready
-      test_reg_imm:
-       mov     al,[operand_size]
-       cmp     al,1
-       je      test_reg_imm_8bit
-       cmp     al,2
-       je      test_reg_imm_16bit
-       cmp     al,4
-       je      test_reg_imm_32bit
-       cmp     al,8
-       jne     invalid_operand_size
-      test_reg_imm_64bit:
-       cmp     [size_declared],0
-       jne     long_immediate_not_encodable
-       call    operand_64bit
-       call    get_simm32
-       cmp     [value_type],4
-       jae     long_immediate_not_encodable
-       jmp     test_reg_imm_32bit_store
-      test_reg_imm_8bit:
-       call    get_byte_value
-       mov     dl,al
-       mov     bl,[postbyte_register]
-       mov     [postbyte_register],0
-       mov     [base_code],0F6h
-       or      bl,bl
-       jz      test_al_imm
-       call    store_nomem_instruction
-       mov     al,dl
-       stos    byte [edi]
-       jmp     instruction_assembled
-      test_al_imm:
-       mov     [base_code],0A8h
-       call    store_classic_instruction_code
-       mov     al,dl
-       stos    byte [edi]
-       jmp     instruction_assembled
-      test_reg_imm_16bit:
-       call    operand_16bit
-       call    get_word_value
-       mov     dx,ax
-       mov     bl,[postbyte_register]
-       mov     [postbyte_register],0
-       mov     [base_code],0F7h
-       or      bl,bl
-       jz      test_ax_imm
-       call    store_nomem_instruction
-       mov     ax,dx
-       call    mark_relocation
-       stos    word [edi]
-       jmp     instruction_assembled
-      test_ax_imm:
-       mov     [base_code],0A9h
-       call    store_classic_instruction_code
-       mov     ax,dx
-       stos    word [edi]
-       jmp     instruction_assembled
-      test_reg_imm_32bit:
-       call    operand_32bit
-       call    get_dword_value
-      test_reg_imm_32bit_store:
-       mov     edx,eax
-       mov     bl,[postbyte_register]
-       mov     [postbyte_register],0
-       mov     [base_code],0F7h
-       or      bl,bl
-       jz      test_eax_imm
-       call    store_nomem_instruction
-       mov     eax,edx
-       call    mark_relocation
-       stos    dword [edi]
-       jmp     instruction_assembled
-      test_eax_imm:
-       mov     [base_code],0A9h
-       call    store_classic_instruction_code
-       mov     eax,edx
-       stos    dword [edi]
-       jmp     instruction_assembled
-      test_reg_mem:
-       call    get_address
-       mov     al,[operand_size]
-       cmp     al,1
-       je      test_reg_mem_8bit
-       call    operand_autodetect
-       inc     [base_code]
-      test_reg_mem_8bit:
-       jmp     instruction_ready
-xchg_instruction:
-       mov     [base_code],86h
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      xchg_reg
-       cmp     al,'['
-       jne     invalid_operand
-      xchg_mem:
-       call    get_address
-       push    edx ebx ecx
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      test_mem_reg
-       jmp     invalid_operand
-      xchg_reg:
-       lods    byte [esi]
-       call    convert_register
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       je      test_reg_mem
-       cmp     al,10h
-       jne     invalid_operand
-      xchg_reg_reg:
-       lods    byte [esi]
-       call    convert_register
-       mov     bl,al
-       mov     al,ah
-       cmp     al,1
-       je      xchg_reg_reg_8bit
-       call    operand_autodetect
-       cmp     [postbyte_register],0
-       je      xchg_ax_reg
-       or      bl,bl
-       jnz     xchg_reg_reg_store
-       mov     bl,[postbyte_register]
-      xchg_ax_reg:
-       cmp     [code_type],64
-       jne     xchg_ax_reg_ok
-       cmp     ah,4
-       jne     xchg_ax_reg_ok
-       or      bl,bl
-       jz      xchg_reg_reg_store
-      xchg_ax_reg_ok:
-       test    bl,1000b
-       jz      xchg_ax_reg_store
-       or      [rex_prefix],41h
-       and     bl,111b
-      xchg_ax_reg_store:
-       add     bl,90h
-       mov     [base_code],bl
-       call    store_classic_instruction_code
-       jmp     instruction_assembled
-      xchg_reg_reg_store:
-       inc     [base_code]
-      xchg_reg_reg_8bit:
-       jmp     nomem_instruction_ready
-push_instruction:
-       mov     [push_size],al
-      push_next:
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      push_reg
-       cmp     al,'('
-       je      push_imm
-       cmp     al,'['
-       jne     invalid_operand
-      push_mem:
-       call    get_address
-       mov     al,[operand_size]
-       mov     ah,[push_size]
-       cmp     al,2
-       je      push_mem_16bit
-       cmp     al,4
-       je      push_mem_32bit
-       cmp     al,8
-       je      push_mem_64bit
-       or      al,al
-       jnz     invalid_operand_size
-       cmp     ah,2
-       je      push_mem_16bit
-       cmp     ah,4
-       je      push_mem_32bit
-       cmp     ah,8
-       je      push_mem_64bit
-       call    recoverable_unknown_size
-       jmp     push_mem_store
-      push_mem_16bit:
-       test    ah,not 2
-       jnz     invalid_operand_size
-       call    operand_16bit
-       jmp     push_mem_store
-      push_mem_32bit:
-       test    ah,not 4
-       jnz     invalid_operand_size
-       cmp     [code_type],64
-       je      illegal_instruction
-       call    operand_32bit
-       jmp     push_mem_store
-      push_mem_64bit:
-       test    ah,not 8
-       jnz     invalid_operand_size
-       cmp     [code_type],64
-       jne     illegal_instruction
-      push_mem_store:
-       mov     [base_code],0FFh
-       mov     [postbyte_register],110b
-       call    store_instruction
-       jmp     push_done
-      push_reg:
-       lods    byte [esi]
-       mov     ah,al
-       sub     ah,10h
-       and     ah,al
-       test    ah,0F0h
-       jnz     push_sreg
-       call    convert_register
-       test    al,1000b
-       jz      push_reg_ok
-       or      [rex_prefix],41h
-       and     al,111b
-      push_reg_ok:
-       add     al,50h
-       mov     [base_code],al
-       mov     al,ah
-       mov     ah,[push_size]
-       cmp     al,2
-       je      push_reg_16bit
-       cmp     al,4
-       je      push_reg_32bit
-       cmp     al,8
-       jne     invalid_operand_size
-      push_reg_64bit:
-       test    ah,not 8
-       jnz     invalid_operand_size
-       cmp     [code_type],64
-       jne     illegal_instruction
-       jmp     push_reg_store
-      push_reg_32bit:
-       test    ah,not 4
-       jnz     invalid_operand_size
-       cmp     [code_type],64
-       je      illegal_instruction
-       call    operand_32bit
-       jmp     push_reg_store
-      push_reg_16bit:
-       test    ah,not 2
-       jnz     invalid_operand_size
-       call    operand_16bit
-      push_reg_store:
-       call    store_classic_instruction_code
-       jmp     push_done
-      push_sreg:
-       mov     bl,al
-       mov     dl,[operand_size]
-       mov     dh,[push_size]
-       cmp     dl,2
-       je      push_sreg16
-       cmp     dl,4
-       je      push_sreg32
-       cmp     dl,8
-       je      push_sreg64
-       or      dl,dl
-       jnz     invalid_operand_size
-       cmp     dh,2
-       je      push_sreg16
-       cmp     dh,4
-       je      push_sreg32
-       cmp     dh,8
-       je      push_sreg64
-       jmp     push_sreg_store
-      push_sreg16:
-       test    dh,not 2
-       jnz     invalid_operand_size
-       call    operand_16bit
-       jmp     push_sreg_store
-      push_sreg32:
-       test    dh,not 4
-       jnz     invalid_operand_size
-       cmp     [code_type],64
-       je      illegal_instruction
-       call    operand_32bit
-       jmp     push_sreg_store
-      push_sreg64:
-       test    dh,not 8
-       jnz     invalid_operand_size
-       cmp     [code_type],64
-       jne     illegal_instruction
-      push_sreg_store:
-       mov     al,bl
-       cmp     al,40h
-       jae     invalid_operand
-       sub     al,31h
-       jc      invalid_operand
-       cmp     al,4
-       jae     push_sreg_386
-       shl     al,3
-       add     al,6
-       mov     [base_code],al
-       cmp     [code_type],64
-       je      illegal_instruction
-       jmp     push_reg_store
-      push_sreg_386:
-       sub     al,4
-       shl     al,3
-       add     al,0A0h
-       mov     [extended_code],al
-       mov     [base_code],0Fh
-       jmp     push_reg_store
-      push_imm:
-       mov     al,[operand_size]
-       mov     ah,[push_size]
-       or      al,al
-       je      push_imm_size_ok
-       or      ah,ah
-       je      push_imm_size_ok
-       cmp     al,ah
-       jne     invalid_operand_size
-      push_imm_size_ok:
-       cmp     al,2
-       je      push_imm_16bit
-       cmp     al,4
-       je      push_imm_32bit
-       cmp     al,8
-       je      push_imm_64bit
-       cmp     ah,2
-       je      push_imm_optimized_16bit
-       cmp     ah,4
-       je      push_imm_optimized_32bit
-       cmp     ah,8
-       je      push_imm_optimized_64bit
-       or      al,al
-       jnz     invalid_operand_size
-       cmp     [code_type],16
-       je      push_imm_optimized_16bit
-       cmp     [code_type],32
-       je      push_imm_optimized_32bit
-      push_imm_optimized_64bit:
-       cmp     [code_type],64
-       jne     illegal_instruction
-       call    get_simm32
-       mov     edx,eax
-       cmp     [value_type],0
-       jne     push_imm_32bit_store
-       cmp     eax,-80h
-       jl      push_imm_32bit_store
-       cmp     eax,80h
-       jge     push_imm_32bit_store
-       jmp     push_imm_8bit
-      push_imm_optimized_32bit:
-       cmp     [code_type],64
-       je      illegal_instruction
-       call    get_dword_value
-       mov     edx,eax
-       call    operand_32bit
-       cmp     [value_type],0
-       jne     push_imm_32bit_store
-       cmp     eax,-80h
-       jl      push_imm_32bit_store
-       cmp     eax,80h
-       jge     push_imm_32bit_store
-       jmp     push_imm_8bit
-      push_imm_optimized_16bit:
-       call    get_word_value
-       mov     dx,ax
-       call    operand_16bit
-       cmp     [value_type],0
-       jne     push_imm_16bit_store
-       cmp     ax,-80h
-       jl      push_imm_16bit_store
-       cmp     ax,80h
-       jge     push_imm_16bit_store
-      push_imm_8bit:
-       mov     ah,al
-       mov     [base_code],6Ah
-       call    store_classic_instruction_code
-       mov     al,ah
-       stos    byte [edi]
-       jmp     push_done
-      push_imm_16bit:
-       call    get_word_value
-       mov     dx,ax
-       call    operand_16bit
-      push_imm_16bit_store:
-       mov     [base_code],68h
-       call    store_classic_instruction_code
-       mov     ax,dx
-       call    mark_relocation
-       stos    word [edi]
-       jmp     push_done
-      push_imm_64bit:
-       cmp     [code_type],64
-       jne     illegal_instruction
-       call    get_simm32
-       mov     edx,eax
-       jmp     push_imm_32bit_store
-      push_imm_32bit:
-       cmp     [code_type],64
-       je      illegal_instruction
-       call    get_dword_value
-       mov     edx,eax
-       call    operand_32bit
-      push_imm_32bit_store:
-       mov     [base_code],68h
-       call    store_classic_instruction_code
-       mov     eax,edx
-       call    mark_relocation
-       stos    dword [edi]
-      push_done:
-       lods    byte [esi]
-       dec     esi
-       cmp     al,0Fh
-       je      instruction_assembled
-       or      al,al
-       jz      instruction_assembled
-;       mov     [operand_size],0
-;       mov     [operand_flags],0
-;       mov     [operand_prefix],0
-;       mov     [rex_prefix],0
-       and     dword [operand_size],0
-       jmp     push_next
-pop_instruction:
-       mov     [push_size],al
-      pop_next:
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      pop_reg
-       cmp     al,'['
-       jne     invalid_operand
-      pop_mem:
-       call    get_address
-       mov     al,[operand_size]
-       mov     ah,[push_size]
-       cmp     al,2
-       je      pop_mem_16bit
-       cmp     al,4
-       je      pop_mem_32bit
-       cmp     al,8
-       je      pop_mem_64bit
-       or      al,al
-       jnz     invalid_operand_size
-       cmp     ah,2
-       je      pop_mem_16bit
-       cmp     ah,4
-       je      pop_mem_32bit
-       cmp     ah,8
-       je      pop_mem_64bit
-       call    recoverable_unknown_size
-       jmp     pop_mem_store
-      pop_mem_16bit:
-       test    ah,not 2
-       jnz     invalid_operand_size
-       call    operand_16bit
-       jmp     pop_mem_store
-      pop_mem_32bit:
-       test    ah,not 4
-       jnz     invalid_operand_size
-       cmp     [code_type],64
-       je      illegal_instruction
-       call    operand_32bit
-       jmp     pop_mem_store
-      pop_mem_64bit:
-       test    ah,not 8
-       jnz     invalid_operand_size
-       cmp     [code_type],64
-       jne     illegal_instruction
-      pop_mem_store:
-       mov     [base_code],08Fh
-       mov     [postbyte_register],0
-       call    store_instruction
-       jmp     pop_done
-      pop_reg:
-       lods    byte [esi]
-       mov     ah,al
-       sub     ah,10h
-       and     ah,al
-       test    ah,0F0h
-       jnz     pop_sreg
-       call    convert_register
-       test    al,1000b
-       jz      pop_reg_ok
-       or      [rex_prefix],41h
-       and     al,111b
-      pop_reg_ok:
-       add     al,58h
-       mov     [base_code],al
-       mov     al,ah
-       mov     ah,[push_size]
-       cmp     al,2
-       je      pop_reg_16bit
-       cmp     al,4
-       je      pop_reg_32bit
-       cmp     al,8
-       je      pop_reg_64bit
-       jmp     invalid_operand_size
-      pop_reg_64bit:
-       test    ah,not 8
-       jnz     invalid_operand_size
-       cmp     [code_type],64
-       jne     illegal_instruction
-       jmp     pop_reg_store
-      pop_reg_32bit:
-       test    ah,not 4
-       jnz     invalid_operand_size
-       cmp     [code_type],64
-       je      illegal_instruction
-       call    operand_32bit
-       jmp     pop_reg_store
-      pop_reg_16bit:
-       test    ah,not 2
-       jnz     invalid_operand_size
-       call    operand_16bit
-      pop_reg_store:
-       call    store_classic_instruction_code
-      pop_done:
-       lods    byte [esi]
-       dec     esi
-       cmp     al,0Fh
-       je      instruction_assembled
-       or      al,al
-       jz      instruction_assembled
-;       mov     [operand_size],0
-;       mov     [operand_flags],0
-;       mov     [operand_prefix],0
-;       mov     [rex_prefix],0
-       and     dword [operand_size],0
-       jmp     pop_next
-      pop_sreg:
-       mov     dl,[operand_size]
-       mov     dh,[push_size]
-       cmp     al,32h
-       je      pop_cs
-       mov     bl,al
-       cmp     dl,2
-       je      pop_sreg16
-       cmp     dl,4
-       je      pop_sreg32
-       cmp     dl,8
-       je      pop_sreg64
-       or      dl,dl
-       jnz     invalid_operand_size
-       cmp     dh,2
-       je      pop_sreg16
-       cmp     dh,4
-       je      pop_sreg32
-       cmp     dh,8
-       je      pop_sreg64
-       jmp     pop_sreg_store
-      pop_sreg16:
-       test    dh,not 2
-       jnz     invalid_operand_size
-       call    operand_16bit
-       jmp     pop_sreg_store
-      pop_sreg32:
-       test    dh,not 4
-       jnz     invalid_operand_size
-       cmp     [code_type],64
-       je      illegal_instruction
-       call    operand_32bit
-       jmp     pop_sreg_store
-      pop_sreg64:
-       test    dh,not 8
-       jnz     invalid_operand_size
-       cmp     [code_type],64
-       jne     illegal_instruction
-      pop_sreg_store:
-       mov     al,bl
-       cmp     al,40h
-       jae     invalid_operand
-       sub     al,31h
-       jc      invalid_operand
-       cmp     al,4
-       jae     pop_sreg_386
-       shl     al,3
-       add     al,7
-       mov     [base_code],al
-       cmp     [code_type],64
-       je      illegal_instruction
-       jmp     pop_reg_store
-      pop_cs:
-       cmp     [code_type],16
-       jne     illegal_instruction
-       cmp     dl,2
-       je      pop_cs_store
-       or      dl,dl
-       jnz     invalid_operand_size
-       cmp     dh,2
-       je      pop_cs_store
-       or      dh,dh
-       jnz     illegal_instruction
-      pop_cs_store:
-       test    dh,not 2
-       jnz     invalid_operand_size
-       mov     al,0Fh
-       stos    byte [edi]
-       jmp     pop_done
-      pop_sreg_386:
-       sub     al,4
-       shl     al,3
-       add     al,0A1h
-       mov     [extended_code],al
-       mov     [base_code],0Fh
-       jmp     pop_reg_store
-inc_instruction:
-       mov     [base_code],al
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      inc_reg
-       cmp     al,'['
-       je      inc_mem
-       jne     invalid_operand
-      inc_mem:
-       call    get_address
-       mov     al,[operand_size]
-       cmp     al,1
-       je      inc_mem_8bit
-       jb      inc_mem_nosize
-       call    operand_autodetect
-       mov     al,0FFh
-       xchg    al,[base_code]
-       mov     [postbyte_register],al
-       jmp     instruction_ready
-      inc_mem_nosize:
-       call    recoverable_unknown_size
-      inc_mem_8bit:
-       mov     al,0FEh
-       xchg    al,[base_code]
-       mov     [postbyte_register],al
-       jmp     instruction_ready
-      inc_reg:
-       lods    byte [esi]
-       call    convert_register
-       mov     bl,al
-       mov     al,0FEh
-       xchg    al,[base_code]
-       mov     [postbyte_register],al
-       mov     al,ah
-       cmp     al,1
-       je      inc_reg_8bit
-       call    operand_autodetect
-       cmp     [code_type],64
-       je      inc_reg_long_form
-       mov     al,[postbyte_register]
-       shl     al,3
-       add     al,bl
-       add     al,40h
-       mov     [base_code],al
-       call    store_classic_instruction_code
-       jmp     instruction_assembled
-      inc_reg_long_form:
-       inc     [base_code]
-      inc_reg_8bit:
-       jmp     nomem_instruction_ready
-set_instruction:
-       mov     [base_code],0Fh
-       mov     [extended_code],al
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      set_reg
-       cmp     al,'['
-       jne     invalid_operand
-      set_mem:
-       call    get_address
-       cmp     [operand_size],1
-       ja      invalid_operand_size
-       mov     [postbyte_register],0
-       jmp     instruction_ready
-      set_reg:
-       lods    byte [esi]
-       call    convert_register
-       cmp     ah,1
-       jne     invalid_operand_size
-       mov     bl,al
-       mov     [postbyte_register],0
-       jmp     nomem_instruction_ready
-arpl_instruction:
-       cmp     [code_type],64
-       je      illegal_instruction
-       mov     [base_code],63h
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      arpl_reg
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_register
-       mov     [postbyte_register],al
-       cmp     ah,2
-       jne     invalid_operand_size
-       jmp     instruction_ready
-      arpl_reg:
-       lods    byte [esi]
-       call    convert_register
-       cmp     ah,2
-       jne     invalid_operand_size
-       mov     bl,al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_register
-       mov     [postbyte_register],al
-       jmp     nomem_instruction_ready
-bound_instruction:
-       cmp     [code_type],64
-       je      illegal_instruction
-       call    take_register
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       mov     al,[operand_size]
-       cmp     al,2
-       je      bound_store
-       cmp     al,4
-       jne     invalid_operand_size
-      bound_store:
-       call    operand_autodetect
-       mov     [base_code],62h
-       jmp     instruction_ready
-enter_instruction:
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     ah,2
-       je      enter_imm16_size_ok
-       or      ah,ah
-       jnz     invalid_operand_size
-      enter_imm16_size_ok:
-       cmp     al,'('
-       jne     invalid_operand
-       call    get_word_value
-       cmp     [next_pass_needed],0
-       jne     enter_imm16_ok
-       cmp     [value_type],0
-       jne     invalid_use_of_symbol
-       test    eax,eax
-       js      value_out_of_range
-      enter_imm16_ok:
-       push    eax
-       mov     [operand_size],0
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     ah,1
-       je      enter_imm8_size_ok
-       or      ah,ah
-       jnz     invalid_operand_size
-      enter_imm8_size_ok:
-       cmp     al,'('
-       jne     invalid_operand
-       call    get_byte_value
-       cmp     [next_pass_needed],0
-       jne     enter_imm8_ok
-       test    eax,eax
-       js      value_out_of_range
-      enter_imm8_ok:
-       mov     dl,al
-       pop     ebx
-       mov     al,0C8h
-       stos    byte [edi]
-       mov     ax,bx
-       stos    word [edi]
-       mov     al,dl
-       stos    byte [edi]
-       jmp     instruction_assembled
-ret_instruction_only64:
-       cmp     [code_type],64
-       jne     illegal_instruction
-       jmp     ret_instruction
-ret_instruction_32bit_except64:
-       cmp     [code_type],64
-       je      illegal_instruction
-ret_instruction_32bit:
-       call    operand_32bit
-       jmp     ret_instruction
-ret_instruction_16bit:
-       call    operand_16bit
-       jmp     ret_instruction
-ret_instruction_64bit:
-       call    operand_64bit
-ret_instruction:
-       and     [prefix_flags],not 10h
-      ret_common:
-       mov     [base_code],al
-       lods    byte [esi]
-       dec     esi
-       or      al,al
-       jz      simple_ret
-       cmp     al,0Fh
-       je      simple_ret
-       lods    byte [esi]
-       call    get_size_operator
-       or      ah,ah
-       jz      ret_imm
-       cmp     ah,2
-       je      ret_imm
-       jmp     invalid_operand_size
-      ret_imm:
-       cmp     al,'('
-       jne     invalid_operand
-       call    get_word_value
-       cmp     [next_pass_needed],0
-       jne     ret_imm_ok
-       cmp     [value_type],0
-       jne     invalid_use_of_symbol
-       test    eax,eax
-       js      value_out_of_range
-      ret_imm_ok:
-       cmp     [size_declared],0
-       jne     ret_imm_store
-       or      ax,ax
-       jz      simple_ret
-      ret_imm_store:
-       mov     dx,ax
-       call    store_classic_instruction_code
-       mov     ax,dx
-       stos    word [edi]
-       jmp     instruction_assembled
-      simple_ret:
-       inc     [base_code]
-       call    store_classic_instruction_code
-       jmp     instruction_assembled
-retf_instruction:
-       cmp     [code_type],64
-       jne     ret_common
-retf_instruction_64bit:
-       call    operand_64bit
-       jmp     ret_common
-retf_instruction_32bit:
-       call    operand_32bit
-       jmp     ret_common
-retf_instruction_16bit:
-       call    operand_16bit
-       jmp     ret_common
-lea_instruction:
-       mov     [base_code],8Dh
-       call    take_register
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       xor     al,al
-       xchg    al,[operand_size]
-       push    eax
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       jne     invalid_operand
-       or      [operand_flags],1
-       call    get_address
-       pop     eax
-       mov     [operand_size],al
-       call    operand_autodetect
-       jmp     instruction_ready
-ls_instruction:
-       or      al,al
-       jz      les_instruction
-       cmp     al,3
-       jz      lds_instruction
-       add     al,0B0h
-       mov     [extended_code],al
-       mov     [base_code],0Fh
-       jmp     ls_code_ok
-      les_instruction:
-       mov     [base_code],0C4h
-       jmp     ls_short_code
-      lds_instruction:
-       mov     [base_code],0C5h
-      ls_short_code:
-       cmp     [code_type],64
-       je      illegal_instruction
-      ls_code_ok:
-       call    take_register
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       add     [operand_size],2
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       mov     al,[operand_size]
-       cmp     al,4
-       je      ls_16bit
-       cmp     al,6
-       je      ls_32bit
-       cmp     al,10
-       je      ls_64bit
-       jmp     invalid_operand_size
-      ls_16bit:
-       call    operand_16bit
-       jmp     instruction_ready
-      ls_32bit:
-       call    operand_32bit
-       jmp     instruction_ready
-      ls_64bit:
-       call    operand_64bit
-       jmp     instruction_ready
-sh_instruction:
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      sh_reg
-       cmp     al,'['
-       jne     invalid_operand
-      sh_mem:
-       call    get_address
-       push    edx ebx ecx
-       mov     al,[operand_size]
-       push    eax
-       mov     [operand_size],0
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'('
-       je      sh_mem_imm
-       cmp     al,10h
-       jne     invalid_operand
-      sh_mem_reg:
-       lods    byte [esi]
-       cmp     al,11h
-       jne     invalid_operand
-       pop     eax ecx ebx edx
-       cmp     al,1
-       je      sh_mem_cl_8bit
-       jb      sh_mem_cl_nosize
-       call    operand_autodetect
-       mov     [base_code],0D3h
-       jmp     instruction_ready
-      sh_mem_cl_nosize:
-       call    recoverable_unknown_size
-      sh_mem_cl_8bit:
-       mov     [base_code],0D2h
-       jmp     instruction_ready
-      sh_mem_imm:
-       mov     al,[operand_size]
-       or      al,al
-       jz      sh_mem_imm_size_ok
-       cmp     al,1
-       jne     invalid_operand_size
-      sh_mem_imm_size_ok:
-       call    get_byte_value
-       mov     byte [value],al
-       pop     eax ecx ebx edx
-       cmp     al,1
-       je      sh_mem_imm_8bit
-       jb      sh_mem_imm_nosize
-       call    operand_autodetect
-       cmp     byte [value],1
-       je      sh_mem_1
-       mov     [base_code],0C1h
-       call    store_instruction_with_imm8
-       jmp     instruction_assembled
-      sh_mem_1:
-       mov     [base_code],0D1h
-       jmp     instruction_ready
-      sh_mem_imm_nosize:
-       call    recoverable_unknown_size
-      sh_mem_imm_8bit:
-       cmp     byte [value],1
-       je      sh_mem_1_8bit
-       mov     [base_code],0C0h
-       call    store_instruction_with_imm8
-       jmp     instruction_assembled
-      sh_mem_1_8bit:
-       mov     [base_code],0D0h
-       jmp     instruction_ready
-      sh_reg:
-       lods    byte [esi]
-       call    convert_register
-       mov     bx,ax
-       mov     [operand_size],0
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'('
-       je      sh_reg_imm
-       cmp     al,10h
-       jne     invalid_operand
-      sh_reg_reg:
-       lods    byte [esi]
-       cmp     al,11h
-       jne     invalid_operand
-       mov     al,bh
-       cmp     al,1
-       je      sh_reg_cl_8bit
-       call    operand_autodetect
-       mov     [base_code],0D3h
-       jmp     nomem_instruction_ready
-      sh_reg_cl_8bit:
-       mov     [base_code],0D2h
-       jmp     nomem_instruction_ready
-      sh_reg_imm:
-       mov     al,[operand_size]
-       or      al,al
-       jz      sh_reg_imm_size_ok
-       cmp     al,1
-       jne     invalid_operand_size
-      sh_reg_imm_size_ok:
-       push    ebx
-       call    get_byte_value
-       mov     dl,al
-       pop     ebx
-       mov     al,bh
-       cmp     al,1
-       je      sh_reg_imm_8bit
-       call    operand_autodetect
-       cmp     dl,1
-       je      sh_reg_1
-       mov     [base_code],0C1h
-       call    store_nomem_instruction
-       mov     al,dl
-       stos    byte [edi]
-       jmp     instruction_assembled
-      sh_reg_1:
-       mov     [base_code],0D1h
-       jmp     nomem_instruction_ready
-      sh_reg_imm_8bit:
-       cmp     dl,1
-       je      sh_reg_1_8bit
-       mov     [base_code],0C0h
-       call    store_nomem_instruction
-       mov     al,dl
-       stos    byte [edi]
-       jmp     instruction_assembled
-      sh_reg_1_8bit:
-       mov     [base_code],0D0h
-       jmp     nomem_instruction_ready
-shd_instruction:
-       mov     [base_code],0Fh
-       mov     [extended_code],al
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      shd_reg
-       cmp     al,'['
-       jne     invalid_operand
-      shd_mem:
-       call    get_address
-       push    edx ebx ecx
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_register
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       mov     al,ah
-       mov     [operand_size],0
-       push    eax
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'('
-       je      shd_mem_reg_imm
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       cmp     al,11h
-       jne     invalid_operand
-       pop     eax ecx ebx edx
-       call    operand_autodetect
-       inc     [extended_code]
-       jmp     instruction_ready
-      shd_mem_reg_imm:
-       mov     al,[operand_size]
-       or      al,al
-       jz      shd_mem_reg_imm_size_ok
-       cmp     al,1
-       jne     invalid_operand_size
-      shd_mem_reg_imm_size_ok:
-       call    get_byte_value
-       mov     byte [value],al
-       pop     eax ecx ebx edx
-       call    operand_autodetect
-       call    store_instruction_with_imm8
-       jmp     instruction_assembled
-      shd_reg:
-       lods    byte [esi]
-       call    convert_register
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_register
-       mov     bl,[postbyte_register]
-       mov     [postbyte_register],al
-       mov     al,ah
-       push    eax ebx
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       mov     [operand_size],0
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'('
-       je      shd_reg_reg_imm
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       cmp     al,11h
-       jne     invalid_operand
-       pop     ebx eax
-       call    operand_autodetect
-       inc     [extended_code]
-       jmp     nomem_instruction_ready
-      shd_reg_reg_imm:
-       mov     al,[operand_size]
-       or      al,al
-       jz      shd_reg_reg_imm_size_ok
-       cmp     al,1
-       jne     invalid_operand_size
-      shd_reg_reg_imm_size_ok:
-       call    get_byte_value
-       mov     dl,al
-       pop     ebx eax
-       call    operand_autodetect
-       call    store_nomem_instruction
-       mov     al,dl
-       stos    byte [edi]
-       jmp     instruction_assembled
-movx_instruction:
-       mov     [base_code],0Fh
-       mov     [extended_code],al
-       call    take_register
-       mov     [postbyte_register],al
-       mov     al,ah
-       push    eax
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       mov     [operand_size],0
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      movx_reg
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       pop     eax
-       mov     ah,[operand_size]
-       or      ah,ah
-       jz      movx_unknown_size
-       cmp     ah,al
-       jae     invalid_operand_size
-       cmp     ah,1
-       je      movx_mem_store
-       cmp     ah,2
-       jne     invalid_operand_size
-       inc     [extended_code]
-      movx_mem_store:
-       call    operand_autodetect
-       jmp     instruction_ready
-      movx_unknown_size:
-       cmp     al,2
-       je      movx_mem_store
-       call    recoverable_unknown_size
-       jmp     movx_mem_store
-      movx_reg:
-       lods    byte [esi]
-       call    convert_register
-       pop     ebx
-       xchg    bl,al
-       cmp     ah,al
-       jae     invalid_operand_size
-       cmp     ah,1
-       je      movx_reg_8bit
-       cmp     ah,2
-       je      movx_reg_16bit
-       jmp     invalid_operand_size
-      movx_reg_8bit:
-       call    operand_autodetect
-       jmp     nomem_instruction_ready
-      movx_reg_16bit:
-       call    operand_autodetect
-       inc     [extended_code]
-       jmp     nomem_instruction_ready
-movsxd_instruction:
-       mov     [base_code],al
-       call    take_register
-       mov     [postbyte_register],al
-       cmp     ah,8
-       jne     invalid_operand_size
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       mov     [operand_size],0
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      movsxd_reg
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       cmp     [operand_size],4
-       je      movsxd_mem_store
-       cmp     [operand_size],0
-       jne     invalid_operand_size
-      movsxd_mem_store:
-       call    operand_64bit
-       jmp     instruction_ready
-      movsxd_reg:
-       lods    byte [esi]
-       call    convert_register
-       cmp     ah,4
-       jne     invalid_operand_size
-       mov     bl,al
-       call    operand_64bit
-       jmp     nomem_instruction_ready
-bt_instruction:
-       mov     [postbyte_register],al
-       shl     al,3
-       add     al,83h
-       mov     [extended_code],al
-       mov     [base_code],0Fh
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      bt_reg
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       push    eax ebx ecx
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       cmp     byte [esi],'('
-       je      bt_mem_imm
-       cmp     byte [esi],11h
-       jne     bt_mem_reg
-       cmp     byte [esi+2],'('
-       je      bt_mem_imm
-      bt_mem_reg:
-       call    take_register
-       mov     [postbyte_register],al
-       pop     ecx ebx edx
-       mov     al,ah
-       call    operand_autodetect
-       jmp     instruction_ready
-      bt_mem_imm:
-       xor     al,al
-       xchg    al,[operand_size]
-       push    eax
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'('
-       jne     invalid_operand
-       mov     al,[operand_size]
-       or      al,al
-       jz      bt_mem_imm_size_ok
-       cmp     al,1
-       jne     invalid_operand_size
-      bt_mem_imm_size_ok:
-       call    get_byte_value
-       mov     byte [value],al
-       pop     eax
-       or      al,al
-       jz      bt_mem_imm_nosize
-       call    operand_autodetect
-      bt_mem_imm_store:
-       pop     ecx ebx edx
-       mov     [extended_code],0BAh
-       call    store_instruction_with_imm8
-       jmp     instruction_assembled
-      bt_mem_imm_nosize:
-       call    recoverable_unknown_size
-       jmp     bt_mem_imm_store
-      bt_reg:
-       lods    byte [esi]
-       call    convert_register
-       mov     bl,al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       cmp     byte [esi],'('
-       je      bt_reg_imm
-       cmp     byte [esi],11h
-       jne     bt_reg_reg
-       cmp     byte [esi+2],'('
-       je      bt_reg_imm
-      bt_reg_reg:
-       call    take_register
-       mov     [postbyte_register],al
-       mov     al,ah
-       call    operand_autodetect
-       jmp     nomem_instruction_ready
-      bt_reg_imm:
-       xor     al,al
-       xchg    al,[operand_size]
-       push    eax ebx
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'('
-       jne     invalid_operand
-       mov     al,[operand_size]
-       or      al,al
-       jz      bt_reg_imm_size_ok
-       cmp     al,1
-       jne     invalid_operand_size
-      bt_reg_imm_size_ok:
-       call    get_byte_value
-       mov     byte [value],al
-       pop     ebx eax
-       call    operand_autodetect
-      bt_reg_imm_store:
-       mov     [extended_code],0BAh
-       call    store_nomem_instruction
-       mov     al,byte [value]
-       stos    byte [edi]
-       jmp     instruction_assembled
-bs_instruction:
-       mov     [extended_code],al
-       mov     [base_code],0Fh
-       call    get_reg_mem
-       jc      bs_reg_reg
-       mov     al,[operand_size]
-       call    operand_autodetect
-       jmp     instruction_ready
-      bs_reg_reg:
-       mov     al,ah
-       call    operand_autodetect
-       jmp     nomem_instruction_ready
-      get_reg_mem:
-       call    take_register
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      get_reg_reg
-       cmp     al,'['
-       jne     invalid_argument
-       call    get_address
-       clc
-       ret
-      get_reg_reg:
-       lods    byte [esi]
-       call    convert_register
-       mov     bl,al
-       stc
-       ret
-ud_instruction:
-       mov     [extended_code],al
-       mov     [base_code],0Fh
-       call    get_reg_mem
-       jc      ud_reg_reg
-       cmp     [operand_size],4
-       jne     invalid_operand_size
-       jmp     instruction_ready
-      ud_reg_reg:
-       cmp     ah,4
-       jne     invalid_operand_size
-       jmp     nomem_instruction_ready
-
-imul_instruction:
-       mov     [base_code],0F6h
-       mov     [postbyte_register],5
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      imul_reg
-       cmp     al,'['
-       jne     invalid_operand
-      imul_mem:
-       call    get_address
-       mov     al,[operand_size]
-       cmp     al,1
-       je      imul_mem_8bit
-       jb      imul_mem_nosize
-       call    operand_autodetect
-       inc     [base_code]
-       jmp     instruction_ready
-      imul_mem_nosize:
-       call    recoverable_unknown_size
-      imul_mem_8bit:
-       jmp     instruction_ready
-      imul_reg:
-       lods    byte [esi]
-       call    convert_register
-       cmp     byte [esi],','
-       je      imul_reg_
-       mov     bl,al
-       mov     al,ah
-       cmp     al,1
-       je      imul_reg_8bit
-       call    operand_autodetect
-       inc     [base_code]
-      imul_reg_8bit:
-       jmp     nomem_instruction_ready
-      imul_reg_:
-       mov     [postbyte_register],al
-       inc     esi
-       cmp     byte [esi],'('
-       je      imul_reg_imm
-       cmp     byte [esi],11h
-       jne     imul_reg_noimm
-       cmp     byte [esi+2],'('
-       je      imul_reg_imm
-      imul_reg_noimm:
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      imul_reg_reg
-       cmp     al,'['
-       jne     invalid_operand
-      imul_reg_mem:
-       call    get_address
-       push    edx ebx ecx
-       cmp     byte [esi],','
-       je      imul_reg_mem_imm
-       mov     al,[operand_size]
-       call    operand_autodetect
-       pop     ecx ebx edx
-       mov     [base_code],0Fh
-       mov     [extended_code],0AFh
-       jmp     instruction_ready
-      imul_reg_mem_imm:
-       inc     esi
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'('
-       jne     invalid_operand
-       mov     al,[operand_size]
-       cmp     al,2
-       je      imul_reg_mem_imm_16bit
-       cmp     al,4
-       je      imul_reg_mem_imm_32bit
-       cmp     al,8
-       jne     invalid_operand_size
-      imul_reg_mem_imm_64bit:
-       cmp     [size_declared],0
-       jne     long_immediate_not_encodable
-       call    operand_64bit
-       call    get_simm32
-       cmp     [value_type],4
-       jae     long_immediate_not_encodable
-       jmp     imul_reg_mem_imm_32bit_ok
-      imul_reg_mem_imm_16bit:
-       call    operand_16bit
-       call    get_word_value
-       mov     word [value],ax
-       cmp     [value_type],0
-       jne     imul_reg_mem_imm_16bit_store
-       cmp     [size_declared],0
-       jne     imul_reg_mem_imm_16bit_store
-       cmp     ax,-80h
-       jl      imul_reg_mem_imm_16bit_store
-       cmp     ax,80h
-       jl      imul_reg_mem_imm_8bit_store
-      imul_reg_mem_imm_16bit_store:
-       pop     ecx ebx edx
-       mov     [base_code],69h
-       call    store_instruction_with_imm16
-       jmp     instruction_assembled
-      imul_reg_mem_imm_32bit:
-       call    operand_32bit
-       call    get_dword_value
-      imul_reg_mem_imm_32bit_ok:
-       mov     dword [value],eax
-       cmp     [value_type],0
-       jne     imul_reg_mem_imm_32bit_store
-       cmp     [size_declared],0
-       jne     imul_reg_mem_imm_32bit_store
-       cmp     eax,-80h
-       jl      imul_reg_mem_imm_32bit_store
-       cmp     eax,80h
-       jl      imul_reg_mem_imm_8bit_store
-      imul_reg_mem_imm_32bit_store:
-       pop     ecx ebx edx
-       mov     [base_code],69h
-       call    store_instruction_with_imm32
-       jmp     instruction_assembled
-      imul_reg_mem_imm_8bit_store:
-       pop     ecx ebx edx
-       mov     [base_code],6Bh
-       call    store_instruction_with_imm8
-       jmp     instruction_assembled
-      imul_reg_imm:
-       mov     bl,[postbyte_register]
-       dec     esi
-       jmp     imul_reg_reg_imm
-      imul_reg_reg:
-       lods    byte [esi]
-       call    convert_register
-       mov     bl,al
-       cmp     byte [esi],','
-       je      imul_reg_reg_imm
-       mov     al,ah
-       call    operand_autodetect
-       mov     [base_code],0Fh
-       mov     [extended_code],0AFh
-       jmp     nomem_instruction_ready
-      imul_reg_reg_imm:
-       inc     esi
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'('
-       jne     invalid_operand
-       mov     al,[operand_size]
-       cmp     al,2
-       je      imul_reg_reg_imm_16bit
-       cmp     al,4
-       je      imul_reg_reg_imm_32bit
-       cmp     al,8
-       jne     invalid_operand_size
-      imul_reg_reg_imm_64bit:
-       cmp     [size_declared],0
-       jne     long_immediate_not_encodable
-       call    operand_64bit
-       push    ebx
-       call    get_simm32
-       cmp     [value_type],4
-       jae     long_immediate_not_encodable
-       jmp     imul_reg_reg_imm_32bit_ok
-      imul_reg_reg_imm_16bit:
-       call    operand_16bit
-       push    ebx
-       call    get_word_value
-       pop     ebx
-       mov     dx,ax
-       cmp     [value_type],0
-       jne     imul_reg_reg_imm_16bit_store
-       cmp     [size_declared],0
-       jne     imul_reg_reg_imm_16bit_store
-       cmp     ax,-80h
-       jl      imul_reg_reg_imm_16bit_store
-       cmp     ax,80h
-       jl      imul_reg_reg_imm_8bit_store
-      imul_reg_reg_imm_16bit_store:
-       mov     [base_code],69h
-       call    store_nomem_instruction
-       mov     ax,dx
-       call    mark_relocation
-       stos    word [edi]
-       jmp     instruction_assembled
-      imul_reg_reg_imm_32bit:
-       call    operand_32bit
-       push    ebx
-       call    get_dword_value
-      imul_reg_reg_imm_32bit_ok:
-       pop     ebx
-       mov     edx,eax
-       cmp     [value_type],0
-       jne     imul_reg_reg_imm_32bit_store
-       cmp     [size_declared],0
-       jne     imul_reg_reg_imm_32bit_store
-       cmp     eax,-80h
-       jl      imul_reg_reg_imm_32bit_store
-       cmp     eax,80h
-       jl      imul_reg_reg_imm_8bit_store
-      imul_reg_reg_imm_32bit_store:
-       mov     [base_code],69h
-       call    store_nomem_instruction
-       mov     eax,edx
-       call    mark_relocation
-       stos    dword [edi]
-       jmp     instruction_assembled
-      imul_reg_reg_imm_8bit_store:
-       mov     [base_code],6Bh
-       call    store_nomem_instruction
-       mov     al,dl
-       stos    byte [edi]
-       jmp     instruction_assembled
-in_instruction:
-       call    take_register
-       or      al,al
-       jnz     invalid_operand
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       mov     al,ah
-       push    eax
-       mov     [operand_size],0
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'('
-       je      in_imm
-       cmp     al,10h
-       je      in_reg
-       jmp     invalid_operand
-      in_reg:
-       lods    byte [esi]
-       cmp     al,22h
-       jne     invalid_operand
-       pop     eax
-       cmp     al,1
-       je      in_al_dx
-       cmp     al,2
-       je      in_ax_dx
-       cmp     al,4
-       jne     invalid_operand_size
-      in_ax_dx:
-       call    operand_autodetect
-       mov     [base_code],0EDh
-       call    store_classic_instruction_code
-       jmp     instruction_assembled
-      in_al_dx:
-       mov     al,0ECh
-       stos    byte [edi]
-       jmp     instruction_assembled
-      in_imm:
-       mov     al,[operand_size]
-       or      al,al
-       jz      in_imm_size_ok
-       cmp     al,1
-       jne     invalid_operand_size
-      in_imm_size_ok:
-       call    get_byte_value
-       mov     dl,al
-       pop     eax
-       cmp     al,1
-       je      in_al_imm
-       cmp     al,2
-       je      in_ax_imm
-       cmp     al,4
-       jne     invalid_operand_size
-      in_ax_imm:
-       call    operand_autodetect
-       mov     [base_code],0E5h
-       call    store_classic_instruction_code
-       mov     al,dl
-       stos    byte [edi]
-       jmp     instruction_assembled
-      in_al_imm:
-       mov     al,0E4h
-       stos    byte [edi]
-       mov     al,dl
-       stos    byte [edi]
-       jmp     instruction_assembled
-out_instruction:
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'('
-       je      out_imm
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       cmp     al,22h
-       jne     invalid_operand
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       mov     [operand_size],0
-       call    take_register
-       or      al,al
-       jnz     invalid_operand
-       mov     al,ah
-       cmp     al,1
-       je      out_dx_al
-       cmp     al,2
-       je      out_dx_ax
-       cmp     al,4
-       jne     invalid_operand_size
-      out_dx_ax:
-       call    operand_autodetect
-       mov     [base_code],0EFh
-       call    store_classic_instruction_code
-       jmp     instruction_assembled
-      out_dx_al:
-       mov     al,0EEh
-       stos    byte [edi]
-       jmp     instruction_assembled
-      out_imm:
-       mov     al,[operand_size]
-       or      al,al
-       jz      out_imm_size_ok
-       cmp     al,1
-       jne     invalid_operand_size
-      out_imm_size_ok:
-       call    get_byte_value
-       mov     dl,al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       mov     [operand_size],0
-       call    take_register
-       or      al,al
-       jnz     invalid_operand
-       mov     al,ah
-       cmp     al,1
-       je      out_imm_al
-       cmp     al,2
-       je      out_imm_ax
-       cmp     al,4
-       jne     invalid_operand_size
-      out_imm_ax:
-       call    operand_autodetect
-       mov     [base_code],0E7h
-       call    store_classic_instruction_code
-       mov     al,dl
-       stos    byte [edi]
-       jmp     instruction_assembled
-      out_imm_al:
-       mov     al,0E6h
-       stos    byte [edi]
-       mov     al,dl
-       stos    byte [edi]
-       jmp     instruction_assembled
-
-call_instruction:
-       mov     [postbyte_register],10b
-       mov     [base_code],0E8h
-       mov     [extended_code],9Ah
-       jmp     process_jmp
-jmp_instruction:
-       mov     [postbyte_register],100b
-       mov     [base_code],0E9h
-       mov     [extended_code],0EAh
-      process_jmp:
-       lods    byte [esi]
-       call    get_jump_operator
-       test    [prefix_flags],10h
-       jz      jmp_type_ok
-       test    [jump_type],not 2
-       jnz     illegal_instruction
-       mov     [jump_type],2
-       and     [prefix_flags],not 10h
-      jmp_type_ok:
-       call    get_size_operator
-       cmp     al,'('
-       je      jmp_imm
-       mov     [base_code],0FFh
-       cmp     al,10h
-       je      jmp_reg
-       cmp     al,'['
-       jne     invalid_operand
-      jmp_mem:
-       cmp     [jump_type],1
-       je      illegal_instruction
-       call    get_address
-       mov     edx,eax
-       mov     al,[operand_size]
-       or      al,al
-       jz      jmp_mem_size_not_specified
-       cmp     al,2
-       je      jmp_mem_16bit
-       cmp     al,4
-       je      jmp_mem_32bit
-       cmp     al,6
-       je      jmp_mem_48bit
-       cmp     al,8
-       je      jmp_mem_64bit
-       cmp     al,10
-       je      jmp_mem_80bit
-       jmp     invalid_operand_size
-      jmp_mem_size_not_specified:
-       cmp     [jump_type],3
-       je      jmp_mem_far
-       cmp     [jump_type],2
-       je      jmp_mem_near
-       call    recoverable_unknown_size
-      jmp_mem_near:
-       cmp     [code_type],16
-       je      jmp_mem_16bit
-       cmp     [code_type],32
-       je      jmp_mem_near_32bit
-      jmp_mem_64bit:
-       cmp     [jump_type],3
-       je      invalid_operand_size
-       cmp     [code_type],64
-       jne     illegal_instruction
-       jmp     instruction_ready
-      jmp_mem_far:
-       cmp     [code_type],16
-       je      jmp_mem_far_32bit
-      jmp_mem_48bit:
-       call    operand_32bit
-      jmp_mem_far_store:
-       cmp     [jump_type],2
-       je      invalid_operand_size
-       inc     [postbyte_register]
-       jmp     instruction_ready
-      jmp_mem_80bit:
-       call    operand_64bit
-       jmp     jmp_mem_far_store
-      jmp_mem_far_32bit:
-       call    operand_16bit
-       jmp     jmp_mem_far_store
-      jmp_mem_32bit:
-       cmp     [jump_type],3
-       je      jmp_mem_far_32bit
-       cmp     [jump_type],2
-       je      jmp_mem_near_32bit
-       cmp     [code_type],16
-       je      jmp_mem_far_32bit
-      jmp_mem_near_32bit:
-       cmp     [code_type],64
-       je      illegal_instruction
-       call    operand_32bit
-       jmp     instruction_ready
-      jmp_mem_16bit:
-       cmp     [jump_type],3
-       je      invalid_operand_size
-       call    operand_16bit
-       jmp     instruction_ready
-      jmp_reg:
-       test    [jump_type],1
-       jnz     invalid_operand
-       lods    byte [esi]
-       call    convert_register
-       mov     bl,al
-       mov     al,ah
-       cmp     al,2
-       je      jmp_reg_16bit
-       cmp     al,4
-       je      jmp_reg_32bit
-       cmp     al,8
-       jne     invalid_operand_size
-      jmp_reg_64bit:
-       cmp     [code_type],64
-       jne     illegal_instruction
-       jmp     nomem_instruction_ready
-      jmp_reg_32bit:
-       cmp     [code_type],64
-       je      illegal_instruction
-       call    operand_32bit
-       jmp     nomem_instruction_ready
-      jmp_reg_16bit:
-       call    operand_16bit
-       jmp     nomem_instruction_ready
-      jmp_imm:
-       cmp     byte [esi],'.'
-       je      invalid_value
-       mov     ebx,esi
-       dec     esi
-       call    skip_symbol
-       xchg    esi,ebx
-       cmp     byte [ebx],':'
-       je      jmp_far
-       cmp     [jump_type],3
-       je      invalid_operand
-      jmp_near:
-       mov     al,[operand_size]
-       cmp     al,2
-       je      jmp_imm_16bit
-       cmp     al,4
-       je      jmp_imm_32bit
-       cmp     al,8
-       je      jmp_imm_64bit
-       or      al,al
-       jnz     invalid_operand_size
-       cmp     [code_type],16
-       je      jmp_imm_16bit
-       cmp     [code_type],64
-       je      jmp_imm_64bit
-      jmp_imm_32bit:
-       cmp     [code_type],64
-       je      invalid_operand_size
-       call    get_address_dword_value
-       cmp     [code_type],16
-       jne     jmp_imm_32bit_prefix_ok
-       mov     byte [edi],66h
-       inc     edi
-      jmp_imm_32bit_prefix_ok:
-       call    calculate_jump_offset
-       cdq
-       call    check_for_short_jump
-       jc      jmp_short
-      jmp_imm_32bit_store:
-       mov     edx,eax
-       sub     edx,3
-       jno     jmp_imm_32bit_ok
-       cmp     [code_type],64
-       je      jump_out_of_range
-      jmp_imm_32bit_ok:
-       mov     al,[base_code]
-       stos    byte [edi]
-       mov     eax,edx
-       call    mark_relocation
-       stos    dword [edi]
-       jmp     instruction_assembled
-      jmp_imm_64bit:
-       cmp     [code_type],64
-       jne     invalid_operand_size
-       call    get_address_qword_value
-       call    calculate_jump_offset
-       mov     ecx,edx
-       cdq
-       cmp     edx,ecx
-       jne     jump_out_of_range
-       call    check_for_short_jump
-       jnc     jmp_imm_32bit_store
-      jmp_short:
-       mov     ah,al
-       mov     al,0EBh
-       stos    word [edi]
-       jmp     instruction_assembled
-      jmp_imm_16bit:
-       call    get_address_word_value
-       cmp     [code_type],16
-       je      jmp_imm_16bit_prefix_ok
-       mov     byte [edi],66h
-       inc     edi
-      jmp_imm_16bit_prefix_ok:
-       call    calculate_jump_offset
-       cwde
-       cdq
-       call    check_for_short_jump
-       jc      jmp_short
-       cmp     [value_type],0
-       jne     invalid_use_of_symbol
-       mov     edx,eax
-       dec     edx
-       mov     al,[base_code]
-       stos    byte [edi]
-       mov     eax,edx
-       stos    word [edi]
-       jmp     instruction_assembled
-      calculate_jump_offset:
-       add     edi,2
-       mov     ebp,[addressing_space]
-       call    calculate_relative_offset
-       sub     edi,2
-       ret
-      check_for_short_jump:
-       cmp     [jump_type],1
-       je      forced_short
-       ja      no_short_jump
-       cmp     [base_code],0E8h
-       je      no_short_jump
-       cmp     [value_type],0
-       jne     no_short_jump
-       cmp     eax,80h
-       jb      short_jump
-       cmp     eax,-80h
-       jae     short_jump
-      no_short_jump:
-       clc
-       ret
-      forced_short:
-       cmp     [base_code],0E8h
-       je      illegal_instruction
-       cmp     [next_pass_needed],0
-       jne     jmp_short_value_type_ok
-       cmp     [value_type],0
-       jne     invalid_use_of_symbol
-      jmp_short_value_type_ok:
-       cmp     eax,-80h
-       jae     short_jump
-       cmp     eax,80h
-       jae     jump_out_of_range
-      short_jump:
-       stc
-       ret
-      jump_out_of_range:
-       cmp     [error_line],0
-       jne     instruction_assembled
-       mov     eax,[current_line]
-       mov     [error_line],eax
-       mov     [error],relative_jump_out_of_range
-       jmp     instruction_assembled
-      jmp_far:
-       cmp     [jump_type],2
-       je      invalid_operand
-       cmp     [code_type],64
-       je      illegal_instruction
-       mov     al,[extended_code]
-       mov     [base_code],al
-       call    get_word_value
-       push    eax
-       inc     esi
-       lods    byte [esi]
-       cmp     al,'('
-       jne     invalid_operand
-       mov     al,[value_type]
-       push    eax
-       push    [symbol_identifier]
-       cmp     byte [esi],'.'
-       je      invalid_value
-       mov     al,[operand_size]
-       cmp     al,4
-       je      jmp_far_16bit
-       cmp     al,6
-       je      jmp_far_32bit
-       or      al,al
-       jnz     invalid_operand_size
-       cmp     [code_type],16
-       jne     jmp_far_32bit
-      jmp_far_16bit:
-       call    get_word_value
-       mov     ebx,eax
-       call    operand_16bit
-       call    store_classic_instruction_code
-       mov     ax,bx
-       call    mark_relocation
-       stos    word [edi]
-      jmp_far_segment:
-       pop     [symbol_identifier]
-       pop     eax
-       mov     [value_type],al
-       pop     eax
-       call    mark_relocation
-       stos    word [edi]
-       jmp     instruction_assembled
-      jmp_far_32bit:
-       call    get_dword_value
-       mov     ebx,eax
-       call    operand_32bit
-       call    store_classic_instruction_code
-       mov     eax,ebx
-       call    mark_relocation
-       stos    dword [edi]
-       jmp     jmp_far_segment
-conditional_jump:
-       mov     [base_code],al
-       and     [prefix_flags],not 10h
-       lods    byte [esi]
-       call    get_jump_operator
-       cmp     [jump_type],3
-       je      invalid_operand
-       call    get_size_operator
-       cmp     al,'('
-       jne     invalid_operand
-       cmp     byte [esi],'.'
-       je      invalid_value
-       mov     al,[operand_size]
-       cmp     al,2
-       je      conditional_jump_16bit
-       cmp     al,4
-       je      conditional_jump_32bit
-       cmp     al,8
-       je      conditional_jump_64bit
-       or      al,al
-       jnz     invalid_operand_size
-       cmp     [code_type],16
-       je      conditional_jump_16bit
-       cmp     [code_type],64
-       je      conditional_jump_64bit
-      conditional_jump_32bit:
-       cmp     [code_type],64
-       je      invalid_operand_size
-       call    get_address_dword_value
-       cmp     [code_type],16
-       jne     conditional_jump_32bit_prefix_ok
-       mov     byte [edi],66h
-       inc     edi
-      conditional_jump_32bit_prefix_ok:
-       call    calculate_jump_offset
-       cdq
-       call    check_for_short_jump
-       jc      conditional_jump_short
-      conditional_jump_32bit_store:
-       mov     edx,eax
-       sub     edx,4
-       jno     conditional_jump_32bit_range_ok
-       cmp     [code_type],64
-       je      jump_out_of_range
-      conditional_jump_32bit_range_ok:
-       mov     ah,[base_code]
-       add     ah,10h
-       mov     al,0Fh
-       stos    word [edi]
-       mov     eax,edx
-       call    mark_relocation
-       stos    dword [edi]
-       jmp     instruction_assembled
-      conditional_jump_64bit:
-       cmp     [code_type],64
-       jne     invalid_operand_size
-       call    get_address_qword_value
-       call    calculate_jump_offset
-       mov     ecx,edx
-       cdq
-       cmp     edx,ecx
-       jne     jump_out_of_range
-       call    check_for_short_jump
-       jnc     conditional_jump_32bit_store
-      conditional_jump_short:
-       mov     ah,al
-       mov     al,[base_code]
-       stos    word [edi]
-       jmp     instruction_assembled
-      conditional_jump_16bit:
-       call    get_address_word_value
-       cmp     [code_type],16
-       je      conditional_jump_16bit_prefix_ok
-       mov     byte [edi],66h
-       inc     edi
-      conditional_jump_16bit_prefix_ok:
-       call    calculate_jump_offset
-       cwde
-       cdq
-       call    check_for_short_jump
-       jc      conditional_jump_short
-       cmp     [value_type],0
-       jne     invalid_use_of_symbol
-       mov     edx,eax
-       sub     dx,2
-       mov     ah,[base_code]
-       add     ah,10h
-       mov     al,0Fh
-       stos    word [edi]
-       mov     eax,edx
-       stos    word [edi]
-       jmp     instruction_assembled
-loop_instruction_16bit:
-       cmp     [code_type],64
-       je      illegal_instruction
-       cmp     [code_type],16
-       je      loop_instruction
-       mov     [operand_prefix],67h
-       jmp     loop_instruction
-loop_instruction_32bit:
-       cmp     [code_type],32
-       je      loop_instruction
-       mov     [operand_prefix],67h
-      jmp     loop_instruction
-loop_instruction_64bit:
-       cmp     [code_type],64
-       jne     illegal_instruction
-loop_instruction:
-       mov     [base_code],al
-       lods    byte [esi]
-       call    get_jump_operator
-       cmp     [jump_type],1
-       ja      invalid_operand
-       call    get_size_operator
-       cmp     al,'('
-       jne     invalid_operand
-       cmp     byte [esi],'.'
-       je      invalid_value
-       mov     al,[operand_size]
-       cmp     al,2
-       je      loop_jump_16bit
-       cmp     al,4
-       je      loop_jump_32bit
-       cmp     al,8
-       je      loop_jump_64bit
-       or      al,al
-       jnz     invalid_operand_size
-       cmp     [code_type],16
-       je      loop_jump_16bit
-       cmp     [code_type],64
-       je      loop_jump_64bit
-      loop_jump_32bit:
-       cmp     [code_type],64
-       je      invalid_operand_size
-       call    get_address_dword_value
-       cmp     [code_type],16
-       jne     loop_jump_32bit_prefix_ok
-       mov     byte [edi],66h
-       inc     edi
-      loop_jump_32bit_prefix_ok:
-       call    loop_counter_size
-       call    calculate_jump_offset
-       cdq
-      make_loop_jump:
-       call    check_for_short_jump
-       jc      conditional_jump_short
-       scas    word [edi]
-       jmp     jump_out_of_range
-      loop_counter_size:
-       cmp     [operand_prefix],0
-       je      loop_counter_size_ok
-       push    eax
-       mov     al,[operand_prefix]
-       stos    byte [edi]
-       pop     eax
-      loop_counter_size_ok:
-       ret
-      loop_jump_64bit:
-       cmp     [code_type],64
-       jne     invalid_operand_size
-       call    get_address_qword_value
-       call    loop_counter_size
-       call    calculate_jump_offset
-       mov     ecx,edx
-       cdq
-       cmp     edx,ecx
-       jne     jump_out_of_range
-       jmp     make_loop_jump
-      loop_jump_16bit:
-       call    get_address_word_value
-       cmp     [code_type],16
-       je      loop_jump_16bit_prefix_ok
-       mov     byte [edi],66h
-       inc     edi
-      loop_jump_16bit_prefix_ok:
-       call    loop_counter_size
-       call    calculate_jump_offset
-       cwde
-       cdq
-       jmp     make_loop_jump
-
-movs_instruction:
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       or      eax,eax
-       jnz     invalid_address
-       or      bl,ch
-       jnz     invalid_address
-       cmp     [segment_register],1
-       ja      invalid_address
-       push    ebx
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       pop     edx
-       or      eax,eax
-       jnz     invalid_address
-       or      bl,ch
-       jnz     invalid_address
-       mov     al,dh
-       mov     ah,bh
-       shr     al,4
-       shr     ah,4
-       cmp     al,ah
-       jne     address_sizes_do_not_agree
-       and     bh,111b
-       and     dh,111b
-       cmp     bh,6
-       jne     invalid_address
-       cmp     dh,7
-       jne     invalid_address
-       cmp     al,2
-       je      movs_address_16bit
-       cmp     al,4
-       je      movs_address_32bit
-       cmp     [code_type],64
-       jne     invalid_address_size
-       jmp     movs_store
-      movs_address_32bit:
-       call    address_32bit_prefix
-       jmp     movs_store
-      movs_address_16bit:
-       cmp     [code_type],64
-       je      invalid_address_size
-       call    address_16bit_prefix
-      movs_store:
-       xor     ebx,ebx
-       call    store_segment_prefix_if_necessary
-       mov     al,0A4h
-      movs_check_size:
-       mov     bl,[operand_size]
-       cmp     bl,1
-       je      simple_instruction
-       inc     al
-       cmp     bl,2
-       je      simple_instruction_16bit
-       cmp     bl,4
-       je      simple_instruction_32bit
-       cmp     bl,8
-       je      simple_instruction_64bit
-       or      bl,bl
-       jnz     invalid_operand_size
-       call    recoverable_unknown_size
-       jmp     simple_instruction
-lods_instruction:
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       or      eax,eax
-       jnz     invalid_address
-       or      bl,ch
-       jnz     invalid_address
-       cmp     bh,26h
-       je      lods_address_16bit
-       cmp     bh,46h
-       je      lods_address_32bit
-       cmp     bh,86h
-       jne     invalid_address
-       cmp     [code_type],64
-       jne     invalid_address_size
-       jmp     lods_store
-      lods_address_32bit:
-       call    address_32bit_prefix
-       jmp     lods_store
-      lods_address_16bit:
-       cmp     [code_type],64
-       je      invalid_address_size
-       call    address_16bit_prefix
-      lods_store:
-       xor     ebx,ebx
-       call    store_segment_prefix_if_necessary
-       mov     al,0ACh
-       jmp     movs_check_size
-stos_instruction:
-       mov     [base_code],al
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       or      eax,eax
-       jnz     invalid_address
-       or      bl,ch
-       jnz     invalid_address
-       cmp     bh,27h
-       je      stos_address_16bit
-       cmp     bh,47h
-       je      stos_address_32bit
-       cmp     bh,87h
-       jne     invalid_address
-       cmp     [code_type],64
-       jne     invalid_address_size
-       jmp     stos_store
-      stos_address_32bit:
-       call    address_32bit_prefix
-       jmp     stos_store
-      stos_address_16bit:
-       cmp     [code_type],64
-       je      invalid_address_size
-       call    address_16bit_prefix
-      stos_store:
-       cmp     [segment_register],1
-       ja      invalid_address
-       mov     al,[base_code]
-       jmp     movs_check_size
-cmps_instruction:
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       or      eax,eax
-       jnz     invalid_address
-       or      bl,ch
-       jnz     invalid_address
-       mov     al,[segment_register]
-       push    eax ebx
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       or      eax,eax
-       jnz     invalid_address
-       or      bl,ch
-       jnz     invalid_address
-       pop     edx eax
-       cmp     [segment_register],1
-       ja      invalid_address
-       mov     [segment_register],al
-       mov     al,dh
-       mov     ah,bh
-       shr     al,4
-       shr     ah,4
-       cmp     al,ah
-       jne     address_sizes_do_not_agree
-       and     bh,111b
-       and     dh,111b
-       cmp     bh,7
-       jne     invalid_address
-       cmp     dh,6
-       jne     invalid_address
-       cmp     al,2
-       je      cmps_address_16bit
-       cmp     al,4
-       je      cmps_address_32bit
-       cmp     [code_type],64
-       jne     invalid_address_size
-       jmp     cmps_store
-      cmps_address_32bit:
-       call    address_32bit_prefix
-       jmp     cmps_store
-      cmps_address_16bit:
-       cmp     [code_type],64
-       je      invalid_address_size
-       call    address_16bit_prefix
-      cmps_store:
-       xor     ebx,ebx
-       call    store_segment_prefix_if_necessary
-       mov     al,0A6h
-       jmp     movs_check_size
-ins_instruction:
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       or      eax,eax
-       jnz     invalid_address
-       or      bl,ch
-       jnz     invalid_address
-       cmp     bh,27h
-       je      ins_address_16bit
-       cmp     bh,47h
-       je      ins_address_32bit
-       cmp     bh,87h
-       jne     invalid_address
-       cmp     [code_type],64
-       jne     invalid_address_size
-       jmp     ins_store
-      ins_address_32bit:
-       call    address_32bit_prefix
-       jmp     ins_store
-      ins_address_16bit:
-       cmp     [code_type],64
-       je      invalid_address_size
-       call    address_16bit_prefix
-      ins_store:
-       cmp     [segment_register],1
-       ja      invalid_address
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       cmp     al,22h
-       jne     invalid_operand
-       mov     al,6Ch
-      ins_check_size:
-       cmp     [operand_size],8
-       jne     movs_check_size
-       jmp     invalid_operand_size
-outs_instruction:
-       lods    byte [esi]
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       cmp     al,22h
-       jne     invalid_operand
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       or      eax,eax
-       jnz     invalid_address
-       or      bl,ch
-       jnz     invalid_address
-       cmp     bh,26h
-       je      outs_address_16bit
-       cmp     bh,46h
-       je      outs_address_32bit
-       cmp     bh,86h
-       jne     invalid_address
-       cmp     [code_type],64
-       jne     invalid_address_size
-       jmp     outs_store
-      outs_address_32bit:
-       call    address_32bit_prefix
-       jmp     outs_store
-      outs_address_16bit:
-       cmp     [code_type],64
-       je      invalid_address_size
-       call    address_16bit_prefix
-      outs_store:
-       xor     ebx,ebx
-       call    store_segment_prefix_if_necessary
-       mov     al,6Eh
-       jmp     ins_check_size
-xlat_instruction:
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       or      eax,eax
-       jnz     invalid_address
-       or      bl,ch
-       jnz     invalid_address
-       cmp     bh,23h
-       je      xlat_address_16bit
-       cmp     bh,43h
-       je      xlat_address_32bit
-       cmp     bh,83h
-       jne     invalid_address
-       cmp     [code_type],64
-       jne     invalid_address_size
-       jmp     xlat_store
-      xlat_address_32bit:
-       call    address_32bit_prefix
-       jmp     xlat_store
-      xlat_address_16bit:
-       cmp     [code_type],64
-       je      invalid_address_size
-       call    address_16bit_prefix
-      xlat_store:
-       call    store_segment_prefix_if_necessary
-       mov     al,0D7h
-       cmp     [operand_size],1
-       jbe     simple_instruction
-       jmp     invalid_operand_size
-
-pm_word_instruction:
-       mov     ah,al
-       shr     ah,4
-       and     al,111b
-       mov     [base_code],0Fh
-       mov     [extended_code],ah
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      pm_reg
-      pm_mem:
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       mov     al,[operand_size]
-       cmp     al,2
-       je      pm_mem_store
-       or      al,al
-       jnz     invalid_operand_size
-      pm_mem_store:
-       jmp     instruction_ready
-      pm_reg:
-       lods    byte [esi]
-       call    convert_register
-       mov     bl,al
-       cmp     ah,2
-       jne     invalid_operand_size
-       jmp     nomem_instruction_ready
-pm_store_word_instruction:
-       mov     ah,al
-       shr     ah,4
-       and     al,111b
-       mov     [base_code],0Fh
-       mov     [extended_code],ah
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     pm_mem
-       lods    byte [esi]
-       call    convert_register
-       mov     bl,al
-       mov     al,ah
-       call    operand_autodetect
-       jmp     nomem_instruction_ready
-lgdt_instruction:
-       mov     [base_code],0Fh
-       mov     [extended_code],1
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       mov     al,[operand_size]
-       cmp     al,6
-       je      lgdt_mem_48bit
-       cmp     al,10
-       je      lgdt_mem_80bit
-       or      al,al
-       jnz     invalid_operand_size
-       jmp     lgdt_mem_store
-      lgdt_mem_80bit:
-       cmp     [code_type],64
-       jne     illegal_instruction
-       jmp     lgdt_mem_store
-      lgdt_mem_48bit:
-       cmp     [code_type],64
-       je      illegal_instruction
-       cmp     [postbyte_register],2
-       jb      lgdt_mem_store
-       call    operand_32bit
-      lgdt_mem_store:
-       jmp     instruction_ready
-lar_instruction:
-       mov     [extended_code],al
-       mov     [base_code],0Fh
-       call    take_register
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       xor     al,al
-       xchg    al,[operand_size]
-       call    operand_autodetect
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      lar_reg_reg
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       mov     al,[operand_size]
-       or      al,al
-       jz      lar_reg_mem
-       cmp     al,2
-       jne     invalid_operand_size
-      lar_reg_mem:
-       jmp     instruction_ready
-      lar_reg_reg:
-       lods    byte [esi]
-       call    convert_register
-       cmp     ah,2
-       jne     invalid_operand_size
-       mov     bl,al
-       jmp     nomem_instruction_ready
-invlpg_instruction:
-       mov     [base_code],0Fh
-       mov     [extended_code],1
-       mov     [postbyte_register],7
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       jmp     instruction_ready
-simple_instruction_f2_0f_01:
-       mov     byte [edi],0F2h
-       inc     edi
-       jmp     simple_instruction_0f_01
-simple_instruction_f3_0f_01:
-       mov     byte [edi],0F3h
-       inc     edi
-       jmp     simple_instruction_0f_01
-swapgs_instruction:
-       cmp     [code_type],64
-       jne     illegal_instruction
-simple_instruction_0f_01:
-       mov     ah,al
-       mov     al,0Fh
-       stos    byte [edi]
-       mov     al,1
-       stos    word [edi]
-       jmp     instruction_assembled
-
-basic_486_instruction:
-       mov     [base_code],0Fh
-       mov     [extended_code],al
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      basic_486_reg
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       push    edx ebx ecx
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_register
-       mov     [postbyte_register],al
-       pop     ecx ebx edx
-       mov     al,ah
-       cmp     al,1
-       je      basic_486_mem_reg_8bit
-       call    operand_autodetect
-       inc     [extended_code]
-      basic_486_mem_reg_8bit:
-       jmp     instruction_ready
-      basic_486_reg:
-       lods    byte [esi]
-       call    convert_register
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_register
-       mov     bl,al
-       xchg    bl,[postbyte_register]
-       mov     al,ah
-       cmp     al,1
-       je      basic_486_reg_reg_8bit
-       call    operand_autodetect
-       inc     [extended_code]
-      basic_486_reg_reg_8bit:
-       jmp     nomem_instruction_ready
-bswap_instruction:
-       call    take_register
-       test    al,1000b
-       jz      bswap_reg_code_ok
-       or      [rex_prefix],41h
-       and     al,111b
-      bswap_reg_code_ok:
-       add     al,0C8h
-       mov     [extended_code],al
-       mov     [base_code],0Fh
-       cmp     ah,8
-       je      bswap_reg64
-       cmp     ah,4
-       jne     invalid_operand_size
-       call    operand_32bit
-       call    store_classic_instruction_code
-       jmp     instruction_assembled
-      bswap_reg64:
-       call    operand_64bit
-       call    store_classic_instruction_code
-       jmp     instruction_assembled
-cmpxchgx_instruction:
-       mov     [base_code],0Fh
-       mov     [extended_code],0C7h
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       mov     ah,1
-       xchg    [postbyte_register],ah
-       mov     al,[operand_size]
-       or      al,al
-       jz      cmpxchgx_size_ok
-       cmp     al,ah
-       jne     invalid_operand_size
-      cmpxchgx_size_ok:
-       cmp     ah,16
-       jne     cmpxchgx_store
-       call    operand_64bit
-      cmpxchgx_store:
-       jmp     instruction_ready
-nop_instruction:
-       mov     ah,[esi]
-       cmp     ah,10h
-       je      extended_nop
-       cmp     ah,11h
-       je      extended_nop
-       cmp     ah,'['
-       je      extended_nop
-       stos    byte [edi]
-       jmp     instruction_assembled
-      extended_nop:
-       mov     [base_code],0Fh
-       mov     [extended_code],1Fh
-       mov     [postbyte_register],0
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      extended_nop_reg
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       mov     al,[operand_size]
-       or      al,al
-       jz      extended_nop_store
-       call    operand_autodetect
-      extended_nop_store:
-       jmp     instruction_ready
-      extended_nop_reg:
-       lods    byte [esi]
-       call    convert_register
-       mov     bl,al
-       mov     al,ah
-       call    operand_autodetect
-       jmp     nomem_instruction_ready
-
-basic_fpu_instruction:
-       mov     [postbyte_register],al
-       mov     [base_code],0D8h
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      basic_fpu_streg
-       cmp     al,'['
-       je      basic_fpu_mem
-       dec     esi
-       mov     ah,[postbyte_register]
-       cmp     ah,2
-       jb      invalid_operand
-       cmp     ah,3
-       ja      invalid_operand
-       mov     bl,1
-       jmp     nomem_instruction_ready
-      basic_fpu_mem:
-       call    get_address
-       mov     al,[operand_size]
-       cmp     al,4
-       je      basic_fpu_mem_32bit
-       cmp     al,8
-       je      basic_fpu_mem_64bit
-       or      al,al
-       jnz     invalid_operand_size
-       call    recoverable_unknown_size
-      basic_fpu_mem_32bit:
-       jmp     instruction_ready
-      basic_fpu_mem_64bit:
-       mov     [base_code],0DCh
-       jmp     instruction_ready
-      basic_fpu_streg:
-       lods    byte [esi]
-       call    convert_fpu_register
-       mov     bl,al
-       mov     ah,[postbyte_register]
-       cmp     ah,2
-       je      basic_fpu_single_streg
-       cmp     ah,3
-       je      basic_fpu_single_streg
-       or      al,al
-       jz      basic_fpu_st0
-       test    ah,110b
-       jz      basic_fpu_streg_st0
-       xor     [postbyte_register],1
-      basic_fpu_streg_st0:
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_fpu_register
-       or      al,al
-       jnz     invalid_operand
-       mov     [base_code],0DCh
-       jmp     nomem_instruction_ready
-      basic_fpu_st0:
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_fpu_register
-       mov     bl,al
-      basic_fpu_single_streg:
-       mov     [base_code],0D8h
-       jmp     nomem_instruction_ready
-simple_fpu_instruction:
-       mov     ah,al
-       or      ah,11000000b
-       mov     al,0D9h
-       stos    word [edi]
-       jmp     instruction_assembled
-fi_instruction:
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       mov     al,[operand_size]
-       cmp     al,2
-       je      fi_mem_16bit
-       cmp     al,4
-       je      fi_mem_32bit
-       or      al,al
-       jnz     invalid_operand_size
-       call    recoverable_unknown_size
-      fi_mem_32bit:
-       mov     [base_code],0DAh
-       jmp     instruction_ready
-      fi_mem_16bit:
-       mov     [base_code],0DEh
-       jmp     instruction_ready
-fld_instruction:
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      fld_streg
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       mov     al,[operand_size]
-       cmp     al,4
-       je      fld_mem_32bit
-       cmp     al,8
-       je      fld_mem_64bit
-       cmp     al,10
-       je      fld_mem_80bit
-       or      al,al
-       jnz     invalid_operand_size
-       call    recoverable_unknown_size
-      fld_mem_32bit:
-       mov     [base_code],0D9h
-       jmp     instruction_ready
-      fld_mem_64bit:
-       mov     [base_code],0DDh
-       jmp     instruction_ready
-      fld_mem_80bit:
-       mov     al,[postbyte_register]
-       cmp     al,0
-       je      fld_mem_80bit_store
-       dec     [postbyte_register]
-       cmp     al,3
-       je      fld_mem_80bit_store
-       jmp     invalid_operand_size
-      fld_mem_80bit_store:
-       add     [postbyte_register],5
-       mov     [base_code],0DBh
-       jmp     instruction_ready
-      fld_streg:
-       lods    byte [esi]
-       call    convert_fpu_register
-       mov     bl,al
-       cmp     [postbyte_register],2
-       jae     fst_streg
-       mov     [base_code],0D9h
-       jmp     nomem_instruction_ready
-      fst_streg:
-       mov     [base_code],0DDh
-       jmp     nomem_instruction_ready
-fild_instruction:
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       mov     al,[operand_size]
-       cmp     al,2
-       je      fild_mem_16bit
-       cmp     al,4
-       je      fild_mem_32bit
-       cmp     al,8
-       je      fild_mem_64bit
-       or      al,al
-       jnz     invalid_operand_size
-       call    recoverable_unknown_size
-      fild_mem_32bit:
-       mov     [base_code],0DBh
-       jmp     instruction_ready
-      fild_mem_16bit:
-       mov     [base_code],0DFh
-       jmp     instruction_ready
-      fild_mem_64bit:
-       mov     al,[postbyte_register]
-       cmp     al,1
-       je      fisttp_64bit_store
-       jb      fild_mem_64bit_store
-       dec     [postbyte_register]
-       cmp     al,3
-       je      fild_mem_64bit_store
-       jmp     invalid_operand_size
-      fild_mem_64bit_store:
-       add     [postbyte_register],5
-       mov     [base_code],0DFh
-       jmp     instruction_ready
-      fisttp_64bit_store:
-       mov     [base_code],0DDh
-       jmp     instruction_ready
-fbld_instruction:
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       mov     al,[operand_size]
-       or      al,al
-       jz      fbld_mem_80bit
-       cmp     al,10
-       je      fbld_mem_80bit
-       jmp     invalid_operand_size
-      fbld_mem_80bit:
-       mov     [base_code],0DFh
-       jmp     instruction_ready
-faddp_instruction:
-       mov     [postbyte_register],al
-       mov     [base_code],0DEh
-       mov     edx,esi
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      faddp_streg
-       mov     esi,edx
-       mov     bl,1
-       jmp     nomem_instruction_ready
-      faddp_streg:
-       lods    byte [esi]
-       call    convert_fpu_register
-       mov     bl,al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_fpu_register
-       or      al,al
-       jnz     invalid_operand
-       jmp     nomem_instruction_ready
-fcompp_instruction:
-       mov     ax,0D9DEh
-       stos    word [edi]
-       jmp     instruction_assembled
-fucompp_instruction:
-       mov     ax,0E9DAh
-       stos    word [edi]
-       jmp     instruction_assembled
-fxch_instruction:
-       mov     dx,01D9h
-       jmp     fpu_single_operand
-ffreep_instruction:
-       mov     dx,00DFh
-       jmp     fpu_single_operand
-ffree_instruction:
-       mov     dl,0DDh
-       mov     dh,al
-      fpu_single_operand:
-       mov     ebx,esi
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      fpu_streg
-       or      dh,dh
-       jz      invalid_operand
-       mov     esi,ebx
-       shl     dh,3
-       or      dh,11000001b
-       mov     ax,dx
-       stos    word [edi]
-       jmp     instruction_assembled
-      fpu_streg:
-       lods    byte [esi]
-       call    convert_fpu_register
-       shl     dh,3
-       or      dh,al
-       or      dh,11000000b
-       mov     ax,dx
-       stos    word [edi]
-       jmp     instruction_assembled
-
-fstenv_instruction:
-       mov     byte [edi],9Bh
-       inc     edi
-fldenv_instruction:
-       mov     [base_code],0D9h
-       jmp     fpu_mem
-fstenv_instruction_16bit:
-       mov     byte [edi],9Bh
-       inc     edi
-fldenv_instruction_16bit:
-       call    operand_16bit
-       jmp     fldenv_instruction
-fstenv_instruction_32bit:
-       mov     byte [edi],9Bh
-       inc     edi
-fldenv_instruction_32bit:
-       call    operand_32bit
-       jmp     fldenv_instruction
-fsave_instruction_32bit:
-       mov     byte [edi],9Bh
-       inc     edi
-fnsave_instruction_32bit:
-       call    operand_32bit
-       jmp     fnsave_instruction
-fsave_instruction_16bit:
-       mov     byte [edi],9Bh
-       inc     edi
-fnsave_instruction_16bit:
-       call    operand_16bit
-       jmp     fnsave_instruction
-fsave_instruction:
-       mov     byte [edi],9Bh
-       inc     edi
-fnsave_instruction:
-       mov     [base_code],0DDh
-      fpu_mem:
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       cmp     [operand_size],0
-       jne     invalid_operand_size
-       jmp     instruction_ready
-fstcw_instruction:
-       mov     byte [edi],9Bh
-       inc     edi
-fldcw_instruction:
-       mov     [postbyte_register],al
-       mov     [base_code],0D9h
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       mov     al,[operand_size]
-       or      al,al
-       jz      fldcw_mem_16bit
-       cmp     al,2
-       je      fldcw_mem_16bit
-       jmp     invalid_operand_size
-      fldcw_mem_16bit:
-       jmp     instruction_ready
-fstsw_instruction:
-       mov     al,9Bh
-       stos    byte [edi]
-fnstsw_instruction:
-       mov     [base_code],0DDh
-       mov     [postbyte_register],7
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      fstsw_reg
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       mov     al,[operand_size]
-       or      al,al
-       jz      fstsw_mem_16bit
-       cmp     al,2
-       je      fstsw_mem_16bit
-       jmp     invalid_operand_size
-      fstsw_mem_16bit:
-       jmp     instruction_ready
-      fstsw_reg:
-       lods    byte [esi]
-       call    convert_register
-       cmp     ax,0200h
-       jne     invalid_operand
-       mov     ax,0E0DFh
-       stos    word [edi]
-       jmp     instruction_assembled
-finit_instruction:
-       mov     byte [edi],9Bh
-       inc     edi
-fninit_instruction:
-       mov     ah,al
-       mov     al,0DBh
-       stos    word [edi]
-       jmp     instruction_assembled
-fcmov_instruction:
-       mov     dh,0DAh
-       jmp     fcomi_streg
-fcomi_instruction:
-       mov     dh,0DBh
-       jmp     fcomi_streg
-fcomip_instruction:
-       mov     dh,0DFh
-      fcomi_streg:
-       mov     dl,al
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_fpu_register
-       mov     ah,al
-       cmp     byte [esi],','
-       je      fcomi_st0_streg
-       add     ah,dl
-       mov     al,dh
-       stos    word [edi]
-       jmp     instruction_assembled
-      fcomi_st0_streg:
-       or      ah,ah
-       jnz     invalid_operand
-       inc     esi
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_fpu_register
-       mov     ah,al
-       add     ah,dl
-       mov     al,dh
-       stos    word [edi]
-       jmp     instruction_assembled
-
-basic_mmx_instruction:
-       mov     [base_code],0Fh
-       mov     [extended_code],al
-      mmx_instruction:
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_mmx_register
-       call    make_mmx_prefix
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      mmx_mmreg_mmreg
-       cmp     al,'['
-       jne     invalid_operand
-      mmx_mmreg_mem:
-       call    get_address
-       jmp     instruction_ready
-      mmx_mmreg_mmreg:
-       lods    byte [esi]
-       call    convert_mmx_register
-       mov     bl,al
-       jmp     nomem_instruction_ready
-mmx_bit_shift_instruction:
-       mov     [base_code],0Fh
-       mov     [extended_code],al
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_mmx_register
-       call    make_mmx_prefix
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       mov     [operand_size],0
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      mmx_mmreg_mmreg
-       cmp     al,'('
-       je      mmx_ps_mmreg_imm8
-       cmp     al,'['
-       je      mmx_mmreg_mem
-       jmp     invalid_operand
-      mmx_ps_mmreg_imm8:
-       call    get_byte_value
-       mov     byte [value],al
-       test    [operand_size],not 1
-       jnz     invalid_value
-       mov     bl,[extended_code]
-       mov     al,bl
-       shr     bl,4
-       and     al,1111b
-       add     al,70h
-       mov     [extended_code],al
-       sub     bl,0Ch
-       shl     bl,1
-       xchg    bl,[postbyte_register]
-       call    store_nomem_instruction
-       mov     al,byte [value]
-       stos    byte [edi]
-       jmp     instruction_assembled
-pmovmskb_instruction:
-       mov     [base_code],0Fh
-       mov     [extended_code],al
-       call    take_register
-       cmp     ah,4
-       je      pmovmskb_reg_size_ok
-       cmp     [code_type],64
-       jne     invalid_operand_size
-       cmp     ah,8
-       jnz     invalid_operand_size
-      pmovmskb_reg_size_ok:
-       mov     [postbyte_register],al
-       mov     [operand_size],0
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_mmx_register
-       mov     bl,al
-       call    make_mmx_prefix
-       cmp     [extended_code],0C5h
-       je      mmx_nomem_imm8
-       jmp     nomem_instruction_ready
-      mmx_imm8:
-       push    ebx ecx edx
-       xor     cl,cl
-       xchg    cl,[operand_size]
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       test    ah,not 1
-       jnz     invalid_operand_size
-       mov     [operand_size],cl
-       cmp     al,'('
-       jne     invalid_operand
-       call    get_byte_value
-       mov     byte [value],al
-       pop     edx ecx ebx
-       call    store_instruction_with_imm8
-       jmp     instruction_assembled
-      mmx_nomem_imm8:
-       call    store_nomem_instruction
-       call    append_imm8
-       jmp     instruction_assembled
-      append_imm8:
-       mov     [operand_size],0
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       test    ah,not 1
-       jnz     invalid_operand_size
-       cmp     al,'('
-       jne     invalid_operand
-       call    get_byte_value
-       stosb
-       ret
-pinsrw_instruction:
-       mov     [extended_code],al
-       mov     [base_code],0Fh
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_mmx_register
-       call    make_mmx_prefix
-       mov     [postbyte_register],al
-       mov     [operand_size],0
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      pinsrw_mmreg_reg
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       cmp     [operand_size],0
-       je      mmx_imm8
-       cmp     [operand_size],2
-       jne     invalid_operand_size
-       jmp     mmx_imm8
-      pinsrw_mmreg_reg:
-       lods    byte [esi]
-       call    convert_register
-       cmp     ah,4
-       jne     invalid_operand_size
-       mov     bl,al
-       jmp     mmx_nomem_imm8
-pshufw_instruction:
-       mov     [mmx_size],8
-       mov     [opcode_prefix],al
-       jmp     pshuf_instruction
-pshufd_instruction:
-       mov     [mmx_size],16
-       mov     [opcode_prefix],al
-      pshuf_instruction:
-       mov     [base_code],0Fh
-       mov     [extended_code],70h
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_mmx_register
-       cmp     ah,[mmx_size]
-       jne     invalid_operand_size
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      pshuf_mmreg_mmreg
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       jmp     mmx_imm8
-      pshuf_mmreg_mmreg:
-       lods    byte [esi]
-       call    convert_mmx_register
-       mov     bl,al
-       jmp     mmx_nomem_imm8
-movd_instruction:
-       mov     [base_code],0Fh
-       mov     [extended_code],7Eh
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      movd_reg
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       test    [operand_size],not 4
-       jnz     invalid_operand_size
-       call    get_mmx_source_register
-       jmp     instruction_ready
-      movd_reg:
-       lods    byte [esi]
-       cmp     al,0B0h
-       jae     movd_mmreg
-       call    convert_register
-       cmp     ah,4
-       jne     invalid_operand_size
-       mov     bl,al
-       call    get_mmx_source_register
-       jmp     nomem_instruction_ready
-      movd_mmreg:
-       mov     [extended_code],6Eh
-       call    convert_mmx_register
-       mov     [postbyte_register],al
-       call    make_mmx_prefix
-       mov     [operand_size],0
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      movd_mmreg_reg
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       test    [operand_size],not 4
-       jnz     invalid_operand_size
-       jmp     instruction_ready
-      movd_mmreg_reg:
-       lods    byte [esi]
-       call    convert_register
-       cmp     ah,4
-       jne     invalid_operand_size
-       mov     bl,al
-       jmp     nomem_instruction_ready
-      get_mmx_source_register:
-       mov     [operand_size],0
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_mmx_register
-       mov     [postbyte_register],al
-      make_mmx_prefix:
-       cmp     [operand_size],16
-       jne     no_mmx_prefix
-       mov     [operand_prefix],66h
-      no_mmx_prefix:
-       ret
-movq_instruction:
-       mov     [base_code],0Fh
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      movq_reg
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       test    [operand_size],not 8
-       jnz     invalid_operand_size
-       call    get_mmx_source_register
-       mov     al,7Fh
-       cmp     ah,8
-       je      movq_mem_ready
-       mov     al,0D6h
-     movq_mem_ready:
-       mov     [extended_code],al
-       jmp     instruction_ready
-     movq_reg:
-       lods    byte [esi]
-       cmp     al,0B0h
-       jae     movq_mmreg
-       call    convert_register
-       cmp     ah,8
-       jne     invalid_operand_size
-       mov     bl,al
-       mov     [extended_code],7Eh
-       call    operand_64bit
-       call    get_mmx_source_register
-       jmp     nomem_instruction_ready
-     movq_mmreg:
-       call    convert_mmx_register
-       mov     [postbyte_register],al
-       mov     [extended_code],6Fh
-       mov     [mmx_size],ah
-       cmp     ah,16
-       jne     movq_mmreg_
-       mov     [extended_code],7Eh
-       mov     [opcode_prefix],0F3h
-      movq_mmreg_:
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       mov     [operand_size],0
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      movq_mmreg_reg
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       test    [operand_size],not 8
-       jnz     invalid_operand_size
-       jmp     instruction_ready
-      movq_mmreg_reg:
-       lods    byte [esi]
-       cmp     al,0B0h
-       jae     movq_mmreg_mmreg
-       mov     [operand_size],0
-       call    convert_register
-       cmp     ah,8
-       jne     invalid_operand_size
-       mov     [extended_code],6Eh
-       mov     [opcode_prefix],0
-       mov     bl,al
-       cmp     [mmx_size],16
-       jne     movq_mmreg_reg_store
-       mov     [opcode_prefix],66h
-      movq_mmreg_reg_store:
-       call    operand_64bit
-       jmp     nomem_instruction_ready
-      movq_mmreg_mmreg:
-       call    convert_mmx_register
-       cmp     ah,[mmx_size]
-       jne     invalid_operand_size
-       mov     bl,al
-       jmp     nomem_instruction_ready
-movdq_instruction:
-       mov     [opcode_prefix],al
-       mov     [base_code],0Fh
-       mov     [extended_code],6Fh
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      movdq_mmreg
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_xmm_register
-       mov     [postbyte_register],al
-       mov     [extended_code],7Fh
-       jmp     instruction_ready
-      movdq_mmreg:
-       lods    byte [esi]
-       call    convert_xmm_register
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      movdq_mmreg_mmreg
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       jmp     instruction_ready
-      movdq_mmreg_mmreg:
-       lods    byte [esi]
-       call    convert_xmm_register
-       mov     bl,al
-       jmp     nomem_instruction_ready
-lddqu_instruction:
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_xmm_register
-       push    eax
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       pop     eax
-       mov     [postbyte_register],al
-       mov     [opcode_prefix],0F2h
-       mov     [base_code],0Fh
-       mov     [extended_code],0F0h
-       jmp     instruction_ready
-
-movdq2q_instruction:
-       mov     [opcode_prefix],0F2h
-       mov     [mmx_size],8
-       jmp     movq2dq_
-movq2dq_instruction:
-       mov     [opcode_prefix],0F3h
-       mov     [mmx_size],16
-      movq2dq_:
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_mmx_register
-       cmp     ah,[mmx_size]
-       jne     invalid_operand_size
-       mov     [postbyte_register],al
-       mov     [operand_size],0
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_mmx_register
-       xor     [mmx_size],8+16
-       cmp     ah,[mmx_size]
-       jne     invalid_operand_size
-       mov     bl,al
-       mov     [base_code],0Fh
-       mov     [extended_code],0D6h
-       jmp     nomem_instruction_ready
-
-sse_ps_instruction_imm8:
-       mov     [immediate_size],1
-sse_ps_instruction:
-       mov     [mmx_size],16
-       jmp     sse_instruction
-sse_pd_instruction_imm8:
-       mov     [immediate_size],1
-sse_pd_instruction:
-       mov     [mmx_size],16
-       mov     [opcode_prefix],66h
-       jmp     sse_instruction
-sse_ss_instruction:
-       mov     [mmx_size],4
-       mov     [opcode_prefix],0F3h
-       jmp     sse_instruction
-sse_sd_instruction:
-       mov     [mmx_size],8
-       mov     [opcode_prefix],0F2h
-       jmp     sse_instruction
-cmp_pd_instruction:
-       mov     [opcode_prefix],66h
-cmp_ps_instruction:
-       mov     [mmx_size],16
-       mov     byte [value],al
-       mov     al,0C2h
-       jmp     sse_instruction
-cmp_ss_instruction:
-       mov     [mmx_size],4
-       mov     [opcode_prefix],0F3h
-       jmp     cmp_sx_instruction
-cmpsd_instruction:
-       mov     al,0A7h
-       mov     ah,[esi]
-       or      ah,ah
-       jz      simple_instruction_32bit
-       cmp     ah,0Fh
-       je      simple_instruction_32bit
-       mov     al,-1
-cmp_sd_instruction:
-       mov     [mmx_size],8
-       mov     [opcode_prefix],0F2h
-      cmp_sx_instruction:
-       mov     byte [value],al
-       mov     al,0C2h
-       jmp     sse_instruction
-comiss_instruction:
-       mov     [mmx_size],4
-       jmp     sse_instruction
-comisd_instruction:
-       mov     [mmx_size],8
-       mov     [opcode_prefix],66h
-       jmp     sse_instruction
-cvtdq2pd_instruction:
-       mov     [opcode_prefix],0F3h
-cvtps2pd_instruction:
-       mov     [mmx_size],8
-       jmp     sse_instruction
-cvtpd2dq_instruction:
-       mov     [mmx_size],16
-       mov     [opcode_prefix],0F2h
-       jmp     sse_instruction
-movshdup_instruction:
-       mov     [mmx_size],16
-       mov     [opcode_prefix],0F3h
-sse_instruction:
-       mov     [base_code],0Fh
-       mov     [extended_code],al
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-      sse_xmmreg:
-       lods    byte [esi]
-       call    convert_xmm_register
-      sse_reg:
-       mov     [postbyte_register],al
-       mov     [operand_size],0
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      sse_xmmreg_xmmreg
-      sse_reg_mem:
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       cmp     [operand_size],0
-       je      sse_mem_size_ok
-       mov     al,[mmx_size]
-       cmp     [operand_size],al
-       jne     invalid_operand_size
-      sse_mem_size_ok:
-       mov     al,[extended_code]
-       mov     ah,[supplemental_code]
-       cmp     al,0C2h
-       je      sse_cmp_mem_ok
-       cmp     ax,443Ah
-       je      sse_cmp_mem_ok
-       cmp     [immediate_size],1
-       je      mmx_imm8
-       cmp     [immediate_size],-1
-       jne     sse_ok
-       call    take_additional_xmm0
-       mov     [immediate_size],0
-      sse_ok:
-       jmp     instruction_ready
-      sse_cmp_mem_ok:
-       cmp     byte [value],-1
-       je      mmx_imm8
-       call    store_instruction_with_imm8
-       jmp     instruction_assembled
-      sse_xmmreg_xmmreg:
-       cmp     [operand_prefix],66h
-       jne     sse_xmmreg_xmmreg_ok
-       cmp     [extended_code],12h
-       je      invalid_operand
-       cmp     [extended_code],16h
-       je      invalid_operand
-      sse_xmmreg_xmmreg_ok:
-       lods    byte [esi]
-       call    convert_xmm_register
-       mov     bl,al
-       mov     al,[extended_code]
-       mov     ah,[supplemental_code]
-       cmp     al,0C2h
-       je      sse_cmp_nomem_ok
-       cmp     ax,443Ah
-       je      sse_cmp_nomem_ok
-       cmp     [immediate_size],1
-       je      mmx_nomem_imm8
-       cmp     [immediate_size],-1
-       jne     sse_nomem_ok
-       call    take_additional_xmm0
-       mov     [immediate_size],0
-      sse_nomem_ok:
-       jmp     nomem_instruction_ready
-      sse_cmp_nomem_ok:
-       cmp     byte [value],-1
-       je      mmx_nomem_imm8
-       call    store_nomem_instruction
-       mov     al,byte [value]
-       stosb
-       jmp     instruction_assembled
-      take_additional_xmm0:
-       cmp     byte [esi],','
-       jne     additional_xmm0_ok
-       inc     esi
-       lods    byte [esi]
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_xmm_register
-       test    al,al
-       jnz     invalid_operand
-      additional_xmm0_ok:
-       ret
-
-pslldq_instruction:
-       mov     [postbyte_register],al
-       mov     [opcode_prefix],66h
-       mov     [base_code],0Fh
-       mov     [extended_code],73h
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_xmm_register
-       mov     bl,al
-       jmp     mmx_nomem_imm8
-movpd_instruction:
-       mov     [opcode_prefix],66h
-movps_instruction:
-       mov     [base_code],0Fh
-       mov     [extended_code],al
-       mov     [mmx_size],16
-       jmp     sse_mov_instruction
-movss_instruction:
-       mov     [mmx_size],4
-       mov     [opcode_prefix],0F3h
-       jmp     sse_movs
-movsd_instruction:
-       mov     al,0A5h
-       mov     ah,[esi]
-       or      ah,ah
-       jz      simple_instruction_32bit
-       cmp     ah,0Fh
-       je      simple_instruction_32bit
-       mov     [mmx_size],8
-       mov     [opcode_prefix],0F2h
-      sse_movs:
-       mov     [base_code],0Fh
-       mov     [extended_code],10h
-       jmp     sse_mov_instruction
-sse_mov_instruction:
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      sse_xmmreg
-      sse_mem:
-       cmp     al,'['
-       jne     invalid_operand
-       inc     [extended_code]
-       call    get_address
-       cmp     [operand_size],0
-       je      sse_mem_xmmreg
-       mov     al,[mmx_size]
-       cmp     [operand_size],al
-       jne     invalid_operand_size
-       mov     [operand_size],0
-      sse_mem_xmmreg:
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_xmm_register
-       mov     [postbyte_register],al
-       jmp     instruction_ready
-movlpd_instruction:
-       mov     [opcode_prefix],66h
-movlps_instruction:
-       mov     [base_code],0Fh
-       mov     [extended_code],al
-       mov     [mmx_size],8
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     sse_mem
-       lods    byte [esi]
-       call    convert_xmm_register
-       mov     [postbyte_register],al
-       mov     [operand_size],0
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       jmp     sse_reg_mem
-movhlps_instruction:
-       mov     [base_code],0Fh
-       mov     [extended_code],al
-       mov     [mmx_size],0
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_xmm_register
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      sse_xmmreg_xmmreg_ok
-       jmp     invalid_operand
-maskmovq_instruction:
-       mov     cl,8
-       jmp     maskmov_instruction
-maskmovdqu_instruction:
-       mov     cl,16
-       mov     [opcode_prefix],66h
-      maskmov_instruction:
-       mov     [base_code],0Fh
-       mov     [extended_code],0F7h
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_mmx_register
-       cmp     ah,cl
-       jne     invalid_operand_size
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_mmx_register
-       mov     bl,al
-       jmp     nomem_instruction_ready
-movmskpd_instruction:
-       mov     [opcode_prefix],66h
-movmskps_instruction:
-       mov     [base_code],0Fh
-       mov     [extended_code],50h
-       call    take_register
-       mov     [postbyte_register],al
-       cmp     ah,4
-       je      movmskps_reg_ok
-       cmp     ah,8
-       jne     invalid_operand_size
-       cmp     [code_type],64
-       jne     invalid_operand
-      movmskps_reg_ok:
-       mov     [operand_size],0
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      sse_xmmreg_xmmreg_ok
-       jmp     invalid_operand
-
-cvtpi2pd_instruction:
-       mov     [opcode_prefix],66h
-cvtpi2ps_instruction:
-       mov     [base_code],0Fh
-       mov     [extended_code],al
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_xmm_register
-       mov     [postbyte_register],al
-       mov     [operand_size],0
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      cvtpi_xmmreg_xmmreg
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       cmp     [operand_size],0
-       je      cvtpi_size_ok
-       cmp     [operand_size],8
-       jne     invalid_operand_size
-      cvtpi_size_ok:
-       jmp     instruction_ready
-      cvtpi_xmmreg_xmmreg:
-       lods    byte [esi]
-       call    convert_mmx_register
-       cmp     ah,8
-       jne     invalid_operand_size
-       mov     bl,al
-       jmp     nomem_instruction_ready
-cvtsi2ss_instruction:
-       mov     [opcode_prefix],0F3h
-       jmp     cvtsi_instruction
-cvtsi2sd_instruction:
-       mov     [opcode_prefix],0F2h
-      cvtsi_instruction:
-       mov     [base_code],0Fh
-       mov     [extended_code],al
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_xmm_register
-       mov     [postbyte_register],al
-      cvtsi_xmmreg:
-       mov     [operand_size],0
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      cvtsi_xmmreg_reg
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       cmp     [operand_size],0
-       je      cvtsi_size_ok
-       cmp     [operand_size],4
-       je      cvtsi_size_ok
-       cmp     [operand_size],8
-       jne     invalid_operand_size
-       call    operand_64bit
-      cvtsi_size_ok:
-       jmp     instruction_ready
-      cvtsi_xmmreg_reg:
-       lods    byte [esi]
-       call    convert_register
-       cmp     ah,4
-       je      cvtsi_xmmreg_reg_store
-       cmp     ah,8
-       jne     invalid_operand_size
-       call    operand_64bit
-      cvtsi_xmmreg_reg_store:
-       mov     bl,al
-       jmp     nomem_instruction_ready
-cvtps2pi_instruction:
-       mov     [mmx_size],8
-       jmp     cvtpd_instruction
-cvtpd2pi_instruction:
-       mov     [opcode_prefix],66h
-       mov     [mmx_size],16
-      cvtpd_instruction:
-       mov     [base_code],0Fh
-       mov     [extended_code],al
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_mmx_register
-       cmp     ah,8
-       jne     invalid_operand_size
-       mov     [operand_size],0
-       jmp     sse_reg
-cvtss2si_instruction:
-       mov     [opcode_prefix],0F3h
-       mov     [mmx_size],4
-       jmp     cvt2si_instruction
-cvtsd2si_instruction:
-       mov     [opcode_prefix],0F2h
-       mov     [mmx_size],8
-      cvt2si_instruction:
-       mov     [extended_code],al
-       mov     [base_code],0Fh
-       call    take_register
-       mov     [operand_size],0
-       cmp     ah,4
-       je      sse_reg
-       cmp     ah,8
-       jne     invalid_operand_size
-       call    operand_64bit
-       jmp     sse_reg
-
-ssse3_instruction:
-       mov     [base_code],0Fh
-       mov     [extended_code],38h
-       mov     [supplemental_code],al
-       jmp     mmx_instruction
-palignr_instruction:
-       mov     [base_code],0Fh
-       mov     [extended_code],3Ah
-       mov     [supplemental_code],0Fh
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_mmx_register
-       call    make_mmx_prefix
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      palignr_mmreg_mmreg
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       jmp     mmx_imm8
-      palignr_mmreg_mmreg:
-       lods    byte [esi]
-       call    convert_mmx_register
-       mov     bl,al
-       jmp     mmx_nomem_imm8
-amd3dnow_instruction:
-       mov     [base_code],0Fh
-       mov     [extended_code],0Fh
-       mov     byte [value],al
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_mmx_register
-       cmp     ah,8
-       jne     invalid_operand_size
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      amd3dnow_mmreg_mmreg
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       call    store_instruction_with_imm8
-       jmp     instruction_assembled
-      amd3dnow_mmreg_mmreg:
-       lods    byte [esi]
-       call    convert_mmx_register
-       cmp     ah,8
-       jne     invalid_operand_size
-       mov     bl,al
-       call    store_nomem_instruction
-       mov     al,byte [value]
-       stos    byte [edi]
-       jmp     instruction_assembled
-
-sse4_instruction_38_xmm0:
-       mov     [immediate_size],-1
-       jmp     sse4_instruction_38
-sse4_instruction_66_38_xmm0:
-       mov     [immediate_size],-1
-sse4_instruction_66_38:
-       mov     [opcode_prefix],66h
-sse4_instruction_38:
-       mov     [mmx_size],16
-       mov     [supplemental_code],al
-       mov     al,38h
-       jmp     sse_instruction
-sse4_ss_instruction_66_3a_imm8:
-       mov     [immediate_size],1
-       mov     cl,4
-       jmp     sse4_instruction_66_3a_setup
-sse4_sd_instruction_66_3a_imm8:
-       mov     [immediate_size],1
-       mov     cl,8
-       jmp     sse4_instruction_66_3a_setup
-sse4_instruction_66_3a_imm8:
-       mov     [immediate_size],1
-       mov     cl,16
-      sse4_instruction_66_3a_setup:
-       mov     [opcode_prefix],66h
-      sse4_instruction_3a_setup:
-       mov     [supplemental_code],al
-       mov     al,3Ah
-       mov     [mmx_size],cl
-       jmp     sse_instruction
-sse4_instruction_3a_imm8:
-       mov     [immediate_size],1
-       mov     cl,16
-       jmp     sse4_instruction_3a_setup
-pclmulqdq_instruction:
-       mov     byte [value],al
-       mov     al,44h
-       mov     cl,16
-       jmp     sse4_instruction_66_3a_setup
-extractps_instruction:
-       call    setup_66_0f_3a
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      extractps_reg
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       cmp     [operand_size],4
-       je      extractps_size_ok
-       cmp     [operand_size],0
-       jne     invalid_operand_size
-      extractps_size_ok:
-       push    edx ebx ecx
-       mov     [operand_size],0
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_xmm_register
-       mov     [postbyte_register],al
-       pop     ecx ebx edx
-       jmp     mmx_imm8
-      extractps_reg:
-       lods    byte [esi]
-       call    convert_register
-       push    eax
-       mov     [operand_size],0
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_xmm_register
-       mov     [postbyte_register],al
-       pop     ebx
-       mov     al,bh
-       cmp     al,4
-       je      mmx_nomem_imm8
-       cmp     al,8
-       jne     invalid_operand_size
-       cmp     [code_type],64
-       jne     illegal_instruction
-       jmp     mmx_nomem_imm8
-      setup_66_0f_3a:
-       mov     [extended_code],3Ah
-       mov     [supplemental_code],al
-       mov     [base_code],0Fh
-       mov     [opcode_prefix],66h
-       ret
-insertps_instruction:
-       call    setup_66_0f_3a
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_xmm_register
-       mov     [postbyte_register],al
-       mov     [operand_size],0
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      insertps_xmmreg_reg
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       cmp     [operand_size],4
-       je      insertps_size_ok
-       cmp     [operand_size],0
-       jne     invalid_operand_size
-      insertps_size_ok:
-       jmp     mmx_imm8
-      insertps_xmmreg_reg:
-       lods    byte [esi]
-       call    convert_mmx_register
-       mov     bl,al
-       jmp     mmx_nomem_imm8
-pextrq_instruction:
-       mov     [mmx_size],8
-       jmp     pextr_instruction
-pextrd_instruction:
-       mov     [mmx_size],4
-       jmp     pextr_instruction
-pextrw_instruction:
-       mov     [mmx_size],2
-       jmp     pextr_instruction
-pextrb_instruction:
-       mov     [mmx_size],1
-      pextr_instruction:
-       call    setup_66_0f_3a
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      pextr_reg
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       mov     al,[mmx_size]
-       cmp     al,[operand_size]
-       je      pextr_size_ok
-       cmp     [operand_size],0
-       jne     invalid_operand_size
-      pextr_size_ok:
-       cmp     al,8
-       jne     pextr_prefix_ok
-       call    operand_64bit
-      pextr_prefix_ok:
-       push    edx ebx ecx
-       mov     [operand_size],0
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_xmm_register
-       mov     [postbyte_register],al
-       pop     ecx ebx edx
-       jmp     mmx_imm8
-      pextr_reg:
-       lods    byte [esi]
-       call    convert_register
-       cmp     [mmx_size],4
-       ja      pextrq_reg
-       cmp     ah,4
-       je      pextr_reg_size_ok
-       cmp     [code_type],64
-       jne     pextr_invalid_size
-       cmp     ah,8
-       je      pextr_reg_size_ok
-      pextr_invalid_size:
-       jmp     invalid_operand_size
-      pextrq_reg:
-       cmp     ah,8
-       jne     pextr_invalid_size
-       call    operand_64bit
-      pextr_reg_size_ok:
-       mov     [operand_size],0
-       push    eax
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_mmx_register
-       mov     ebx,eax
-       pop     eax
-       mov     [postbyte_register],al
-       mov     al,ah
-       cmp     [mmx_size],2
-       jne     pextr_reg_store
-       mov     [opcode_prefix],0
-       mov     [extended_code],0C5h
-       call    make_mmx_prefix
-       jmp     mmx_nomem_imm8
-      pextr_reg_store:
-       cmp     bh,16
-       jne     invalid_operand_size
-       xchg    bl,[postbyte_register]
-       jmp     mmx_nomem_imm8
-pinsrb_instruction:
-       mov     [mmx_size],1
-       jmp     pinsr_instruction
-pinsrd_instruction:
-       mov     [mmx_size],4
-       jmp     pinsr_instruction
-pinsrq_instruction:
-       mov     [mmx_size],8
-       call    operand_64bit
-      pinsr_instruction:
-       call    setup_66_0f_3a
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_xmm_register
-       mov     [postbyte_register],al
-      pinsr_xmmreg:
-       mov     [operand_size],0
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      pinsr_xmmreg_reg
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       cmp     [operand_size],0
-       je      mmx_imm8
-       mov     al,[mmx_size]
-       cmp     al,[operand_size]
-       je      mmx_imm8
-       jmp     invalid_operand_size
-      pinsr_xmmreg_reg:
-       lods    byte [esi]
-       call    convert_register
-       mov     bl,al
-       cmp     [mmx_size],8
-       je      pinsrq_xmmreg_reg
-       cmp     ah,4
-       je      mmx_nomem_imm8
-       jmp     invalid_operand_size
-      pinsrq_xmmreg_reg:
-       cmp     ah,8
-       je      mmx_nomem_imm8
-       jmp     invalid_operand_size
-pmovsxbw_instruction:
-       mov     [mmx_size],8
-       jmp     pmovsx_instruction
-pmovsxbd_instruction:
-       mov     [mmx_size],4
-       jmp     pmovsx_instruction
-pmovsxbq_instruction:
-       mov     [mmx_size],2
-       jmp     pmovsx_instruction
-pmovsxwd_instruction:
-       mov     [mmx_size],8
-       jmp     pmovsx_instruction
-pmovsxwq_instruction:
-       mov     [mmx_size],4
-       jmp     pmovsx_instruction
-pmovsxdq_instruction:
-       mov     [mmx_size],8
-      pmovsx_instruction:
-       call    setup_66_0f_38
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_xmm_register
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       mov     [operand_size],0
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      pmovsx_xmmreg_reg
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       cmp     [operand_size],0
-       je      instruction_ready
-       mov     al,[mmx_size]
-       cmp     al,[operand_size]
-       jne     invalid_operand_size
-       jmp     instruction_ready
-      pmovsx_xmmreg_reg:
-       lods    byte [esi]
-       call    convert_xmm_register
-       mov     bl,al
-       jmp     nomem_instruction_ready
-      setup_66_0f_38:
-       mov     [extended_code],38h
-       mov     [supplemental_code],al
-       mov     [base_code],0Fh
-       mov     [opcode_prefix],66h
-       ret
-
-xsaves_instruction_64bit:
-       call    operand_64bit
-xsaves_instruction:
-       mov     ah,0C7h
-       jmp     xsave_common
-fxsave_instruction_64bit:
-       call    operand_64bit
-fxsave_instruction:
-       mov     ah,0AEh
-       xor     cl,cl
-      xsave_common:
-       mov     [base_code],0Fh
-       mov     [extended_code],ah
-       mov     [postbyte_register],al
-       mov     [mmx_size],cl
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       mov     ah,[operand_size]
-       or      ah,ah
-       jz      xsave_size_ok
-       cmp     ah,[mmx_size]
-       jne     invalid_operand_size
-      xsave_size_ok:
-       jmp     instruction_ready
-clflush_instruction:
-       mov     ah,0AEh
-       mov     cl,1
-       jmp     xsave_common
-cldemote_instruction:
-       mov     ah,1Ch
-       mov     cl,1
-       jmp     xsave_common
-stmxcsr_instruction:
-       mov     ah,0AEh
-       mov     cl,4
-       jmp     xsave_common
-prefetch_instruction:
-       mov     [extended_code],18h
-      prefetch_mem_8bit:
-       mov     [base_code],0Fh
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       jne     invalid_operand
-       or      ah,ah
-       jz      prefetch_size_ok
-       cmp     ah,1
-       jne     invalid_operand_size
-      prefetch_size_ok:
-       call    get_address
-       jmp     instruction_ready
-amd_prefetch_instruction:
-       mov     [extended_code],0Dh
-       jmp     prefetch_mem_8bit
-clflushopt_instruction:
-       mov     [extended_code],0AEh
-       mov     [opcode_prefix],66h
-       jmp     prefetch_mem_8bit
-pcommit_instruction:
-       mov     byte [edi],66h
-       inc     edi
-fence_instruction:
-       mov     bl,al
-       mov     ax,0AE0Fh
-       stos    word [edi]
-       mov     al,bl
-       stos    byte [edi]
-       jmp     instruction_assembled
-pause_instruction:
-       mov     ax,90F3h
-       stos    word [edi]
-       jmp     instruction_assembled
-movntq_instruction:
-       mov     [mmx_size],8
-       jmp     movnt_instruction
-movntpd_instruction:
-       mov     [opcode_prefix],66h
-movntps_instruction:
-       mov     [mmx_size],16
-      movnt_instruction:
-       mov     [extended_code],al
-       mov     [base_code],0Fh
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_mmx_register
-       cmp     ah,[mmx_size]
-       jne     invalid_operand_size
-       mov     [postbyte_register],al
-       jmp     instruction_ready
-
-movntsd_instruction:
-       mov     [opcode_prefix],0F2h
-       mov     [mmx_size],8
-       jmp     movnts_instruction
-movntss_instruction:
-       mov     [opcode_prefix],0F3h
-       mov     [mmx_size],4
-      movnts_instruction:
-       mov     [extended_code],al
-       mov     [base_code],0Fh
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       mov     al,[operand_size]
-       cmp     al,[mmx_size]
-       je      movnts_size_ok
-       test    al,al
-       jnz     invalid_operand_size
-      movnts_size_ok:
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       mov     [operand_size],0
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_xmm_register
-       mov     [postbyte_register],al
-       jmp     instruction_ready
-
-movdiri_instruction:
-       mov     [supplemental_code],al
-       mov     al,38h
-movnti_instruction:
-       mov     [base_code],0Fh
-       mov     [extended_code],al
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_register
-       cmp     ah,4
-       je      movnti_store
-       cmp     ah,8
-       jne     invalid_operand_size
-       call    operand_64bit
-      movnti_store:
-       mov     [postbyte_register],al
-       jmp     instruction_ready
-monitor_instruction:
-       mov     [postbyte_register],al
-       cmp     byte [esi],0
-       je      monitor_instruction_store
-       cmp     byte [esi],0Fh
-       je      monitor_instruction_store
-       call    take_register
-       cmp     ax,0400h
-       jne     invalid_operand
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_register
-       cmp     ax,0401h
-       jne     invalid_operand
-       cmp     [postbyte_register],0C8h
-       jne     monitor_instruction_store
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_register
-       cmp     ax,0402h
-       jne     invalid_operand
-      monitor_instruction_store:
-       mov     ax,010Fh
-       stos    word [edi]
-       mov     al,[postbyte_register]
-       stos    byte [edi]
-       jmp     instruction_assembled
-pconfig_instruction:
-       mov     [postbyte_register],al
-       jmp     monitor_instruction_store
-movntdqa_instruction:
-       call    setup_66_0f_38
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_xmm_register
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       jmp     instruction_ready
-
-extrq_instruction:
-       mov     [opcode_prefix],66h
-       mov     [base_code],0Fh
-       mov     [extended_code],78h
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_xmm_register
-       mov     [postbyte_register],al
-       mov     [operand_size],0
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      extrq_xmmreg_xmmreg
-       test    ah,not 1
-       jnz     invalid_operand_size
-       cmp     al,'('
-       jne     invalid_operand
-       xor     bl,bl
-       xchg    bl,[postbyte_register]
-       call    store_nomem_instruction
-       call    get_byte_value
-       stosb
-       call    append_imm8
-       jmp     instruction_assembled
-      extrq_xmmreg_xmmreg:
-       inc     [extended_code]
-       lods    byte [esi]
-       call    convert_xmm_register
-       mov     bl,al
-       jmp     nomem_instruction_ready
-insertq_instruction:
-       mov     [opcode_prefix],0F2h
-       mov     [base_code],0Fh
-       mov     [extended_code],78h
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_xmm_register
-       mov     [postbyte_register],al
-       mov     [operand_size],0
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_xmm_register
-       mov     bl,al
-       cmp     byte [esi],','
-       je      insertq_with_imm
-       inc     [extended_code]
-       jmp     nomem_instruction_ready
-      insertq_with_imm:
-       call    store_nomem_instruction
-       call    append_imm8
-       call    append_imm8
-       jmp     instruction_assembled
-
-crc32_instruction:
-       mov     [opcode_prefix],0F2h
-       mov     [base_code],0Fh
-       mov     [extended_code],38h
-       mov     [supplemental_code],0F0h
-       call    take_register
-       mov     [postbyte_register],al
-       cmp     ah,4
-       je      crc32_reg_size_ok
-       cmp     ah,8
-       jne     invalid_operand
-       cmp     [code_type],64
-       jne     illegal_instruction
-      crc32_reg_size_ok:
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       mov     [operand_size],0
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      crc32_reg_reg
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       mov     al,[operand_size]
-       test    al,al
-       jz      crc32_unknown_size
-       cmp     al,1
-       je      crc32_reg_mem_store
-       inc     [supplemental_code]
-       call    operand_autodetect
-      crc32_reg_mem_store:
-       jmp     instruction_ready
-      crc32_unknown_size:
-       call    recoverable_unknown_size
-       jmp     crc32_reg_mem_store
-      crc32_reg_reg:
-       lods    byte [esi]
-       call    convert_register
-       mov     bl,al
-       mov     al,ah
-       cmp     al,1
-       je      crc32_reg_reg_store
-       inc     [supplemental_code]
-       call    operand_autodetect
-      crc32_reg_reg_store:
-       jmp     nomem_instruction_ready
-popcnt_instruction:
-       mov     [opcode_prefix],0F3h
-       jmp     bs_instruction
-movbe_instruction:
-       mov     [supplemental_code],al
-       mov     [extended_code],38h
-       mov     [base_code],0Fh
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       je      movbe_mem
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_register
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       jne     invalid_argument
-       call    get_address
-       mov     al,[operand_size]
-       call    operand_autodetect
-       jmp     instruction_ready
-      movbe_mem:
-       inc     [supplemental_code]
-       call    get_address
-       push    edx ebx ecx
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_register
-       mov     [postbyte_register],al
-       pop     ecx ebx edx
-       mov     al,[operand_size]
-       call    operand_autodetect
-       jmp     instruction_ready
-adx_instruction:
-       mov     [base_code],0Fh
-       mov     [extended_code],38h
-       mov     [supplemental_code],0F6h
-       mov     [operand_prefix],al
-       call    get_reg_mem
-       jc      adx_reg_reg
-       mov     al,[operand_size]
-       cmp     al,4
-       je      instruction_ready
-       cmp     al,8
-       jne     invalid_operand_size
-       call    operand_64bit
-       jmp     instruction_ready
-      adx_reg_reg:
-       cmp     ah,4
-       je      nomem_instruction_ready
-       cmp     ah,8
-       jne     invalid_operand_size
-       call    operand_64bit
-       jmp     nomem_instruction_ready
-rdpid_instruction:
-       mov     [postbyte_register],al
-       mov     [extended_code],0C7h
-       mov     [base_code],0Fh
-       mov     [opcode_prefix],0F3h
-       call    take_register
-       mov     bl,al
-       cmp     [code_type],64
-       je      rdpid_64bit
-       cmp     ah,4
-       jne     invalid_operand_size
-       jmp     nomem_instruction_ready
-      rdpid_64bit:
-       cmp     ah,8
-       jne     invalid_operand_size
-       jmp     nomem_instruction_ready
-ptwrite_instruction:
-       mov     [base_code],0Fh
-       mov     [extended_code],0AEh
-       mov     [postbyte_register],al
-       mov     [opcode_prefix],0F3h
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      ptwrite_reg
-      ptwrite_mem:
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       mov     al,[operand_size]
-       cmp     al,4
-       je      ptwrite_mem_store
-       cmp     al,8
-       je      ptwrite_mem_64bit
-       or      al,al
-       jnz     invalid_operand_size
-       call    recoverable_unknown_size
-       jmp     ptwrite_mem_store
-      ptwrite_mem_64bit:
-       call    operand_64bit
-      ptwrite_mem_store:
-       mov     al,[operand_size]
-       call    operand_autodetect
-       jmp     instruction_ready
-      ptwrite_reg:
-       lods    byte [esi]
-       call    convert_register
-       mov     bl,al
-       mov     al,ah
-       cmp     al,4
-       je      nomem_instruction_ready
-       cmp     al,8
-       jne     invalid_operand_size
-       call    operand_64bit
-       jmp     nomem_instruction_ready
-
-vmclear_instruction:
-       mov     [opcode_prefix],66h
-       jmp     vmx_instruction
-vmxon_instruction:
-       mov     [opcode_prefix],0F3h
-vmx_instruction:
-       mov     [postbyte_register],al
-       mov     [extended_code],0C7h
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       mov     al,[operand_size]
-       or      al,al
-       jz      vmx_size_ok
-       cmp     al,8
-       jne     invalid_operand_size
-      vmx_size_ok:
-       mov     [base_code],0Fh
-       jmp     instruction_ready
-vmread_instruction:
-       mov     [extended_code],78h
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      vmread_nomem
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_register
-       mov     [postbyte_register],al
-       call    vmread_check_size
-       jmp     vmx_size_ok
-      vmread_nomem:
-       lods    byte [esi]
-       call    convert_register
-       push    eax
-       call    vmread_check_size
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_register
-       mov     [postbyte_register],al
-       call    vmread_check_size
-       pop     ebx
-       mov     [base_code],0Fh
-       jmp     nomem_instruction_ready
-      vmread_check_size:
-       cmp     [code_type],64
-       je      vmread_long
-       cmp     [operand_size],4
-       jne     invalid_operand_size
-       ret
-      vmread_long:
-       cmp     [operand_size],8
-       jne     invalid_operand_size
-       ret
-vmwrite_instruction:
-       mov     [extended_code],79h
-       call    take_register
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      vmwrite_nomem
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       call    vmread_check_size
-       jmp     vmx_size_ok
-      vmwrite_nomem:
-       lods    byte [esi]
-       call    convert_register
-       mov     bl,al
-       mov     [base_code],0Fh
-       jmp     nomem_instruction_ready
-vmx_inv_instruction:
-       call    setup_66_0f_38
-       call    take_register
-       mov     [postbyte_register],al
-       call    vmread_check_size
-       mov     [operand_size],0
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       mov     al,[operand_size]
-       or      al,al
-       jz      vmx_size_ok
-       cmp     al,16
-       jne     invalid_operand_size
-       jmp     vmx_size_ok
-simple_svm_instruction:
-       push    eax
-       mov     [base_code],0Fh
-       mov     [extended_code],1
-       call    take_register
-       or      al,al
-       jnz     invalid_operand
-      simple_svm_detect_size:
-       cmp     ah,2
-       je      simple_svm_16bit
-       cmp     ah,4
-       je      simple_svm_32bit
-       cmp     [code_type],64
-       jne     invalid_operand_size
-       jmp     simple_svm_store
-      simple_svm_16bit:
-       cmp     [code_type],16
-       je      simple_svm_store
-       cmp     [code_type],64
-       je      invalid_operand_size
-       jmp     prefixed_svm_store
-      simple_svm_32bit:
-       cmp     [code_type],32
-       je      simple_svm_store
-      prefixed_svm_store:
-       mov     al,67h
-       stos    byte [edi]
-      simple_svm_store:
-       call    store_classic_instruction_code
-       pop     eax
-       stos    byte [edi]
-       jmp     instruction_assembled
-skinit_instruction:
-       call    take_register
-       cmp     ax,0400h
-       jne     invalid_operand
-       mov     al,0DEh
-       jmp     simple_instruction_0f_01
-clzero_instruction:
-       call    take_register
-       or      al,al
-       jnz     invalid_operand
-       mov     al,0FCh
-       cmp     [code_type],64
-       je      clzero_64bit
-       cmp     ah,4
-       jne     invalid_operand
-       jmp     simple_instruction_0f_01
-      clzero_64bit:
-       cmp     ah,8
-       jne     invalid_operand
-       jmp     simple_instruction_0f_01
-invlpga_instruction:
-       push    eax
-       mov     [base_code],0Fh
-       mov     [extended_code],1
-       call    take_register
-       or      al,al
-       jnz     invalid_operand
-       mov     bl,ah
-       mov     [operand_size],0
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_register
-       cmp     ax,0401h
-       jne     invalid_operand
-       mov     ah,bl
-       jmp     simple_svm_detect_size
-
-rdrand_instruction:
-       mov     [base_code],0Fh
-       mov     [extended_code],0C7h
-       mov     [postbyte_register],al
-       call    take_register
-       mov     bl,al
-       mov     al,ah
-       call    operand_autodetect
-       jmp     nomem_instruction_ready
-rdfsbase_instruction:
-       cmp     [code_type],64
-       jne     illegal_instruction
-       mov     [opcode_prefix],0F3h
-       mov     [base_code],0Fh
-       mov     [extended_code],0AEh
-       mov     [postbyte_register],al
-       call    take_register
-       mov     bl,al
-       mov     al,ah
-       cmp     ah,2
-       je      invalid_operand_size
-       call    operand_autodetect
-       jmp     nomem_instruction_ready
-
-xabort_instruction:
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     ah,1
-       ja      invalid_operand_size
-       cmp     al,'('
-       jne     invalid_operand
-       call    get_byte_value
-       mov     dl,al
-       mov     ax,0F8C6h
-       stos    word [edi]
-       mov     al,dl
-       stos    byte [edi]
-       jmp     instruction_assembled
-xbegin_instruction:
-       lods    byte [esi]
-       cmp     al,'('
-       jne     invalid_operand
-       mov     al,[code_type]
-       cmp     al,64
-       je      xbegin_64bit
-       cmp     al,32
-       je      xbegin_32bit
-      xbegin_16bit:
-       call    get_address_word_value
-       add     edi,4
-       mov     ebp,[addressing_space]
-       call    calculate_relative_offset
-       sub     edi,4
-       shl     eax,16
-       mov     ax,0F8C7h
-       stos    dword [edi]
-       jmp     instruction_assembled
-      xbegin_32bit:
-       call    get_address_dword_value
-       jmp     xbegin_address_ok
-      xbegin_64bit:
-       call    get_address_qword_value
-      xbegin_address_ok:
-       add     edi,5
-       mov     ebp,[addressing_space]
-       call    calculate_relative_offset
-       sub     edi,5
-       mov     edx,eax
-       cwde
-       cmp     eax,edx
-       jne     xbegin_rel32
-       mov     al,66h
-       stos    byte [edi]
-       mov     eax,edx
-       shl     eax,16
-       mov     ax,0F8C7h
-       stos    dword [edi]
-       jmp     instruction_assembled
-      xbegin_rel32:
-       sub     edx,1
-       jno     xbegin_rel32_ok
-       cmp     [code_type],64
-       je      jump_out_of_range
-      xbegin_rel32_ok:
-       mov     ax,0F8C7h
-       stos    word [edi]
-       mov     eax,edx
-       stos    dword [edi]
-       jmp     instruction_assembled
-
-bndcl_instruction:
-       mov     ah,0F3h
-       jmp     bndc_instruction
-bndcu_instruction:
-       mov     ah,0F2h
-      bndc_instruction:
-       mov     [opcode_prefix],ah
-       mov     [base_code],0Fh
-       mov     [extended_code],al
-       call    take_bnd_register
-       mov     [postbyte_register],al
-       call    get_bnd_size
-       mov     [operand_size],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       je      bndc_mem
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_register
-       mov     bl,al
-       jmp     nomem_instruction_ready
-      bndc_mem:
-       call    get_address_of_required_size
-       jmp     instruction_ready
-bndmov_instruction:
-       mov     [opcode_prefix],66h
-       mov     [base_code],0Fh
-       mov     [extended_code],al
-       call    get_bnd_size
-       shl     al,1
-       mov     [operand_size],al
-       lods    byte [esi]
-       cmp     al,14h
-       je      bndmov_reg
-       call    get_size_operator
-       cmp     al,'['
-       jne     invalid_operand
-       inc     [extended_code]
-       call    get_address_of_required_size
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_bnd_register
-       mov     [postbyte_register],al
-       jmp     instruction_ready
-       bndmov_reg:
-       lods    byte [esi]
-       call    convert_bnd_register
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       cmp     al,14h
-       je      bndmov_reg_reg
-       call    get_size_operator
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address_of_required_size
-       jmp     instruction_ready
-      bndmov_reg_reg:
-       lods    byte [esi]
-       call    convert_bnd_register
-       mov     bl,al
-       jmp     nomem_instruction_ready
-    take_bnd_register:
-       lods    byte [esi]
-       cmp     al,14h
-       jne     invalid_operand
-       lods    byte [esi]
-    convert_bnd_register:
-       mov     ah,al
-       shr     ah,4
-       cmp     ah,6
-       jne     invalid_operand
-       and     al,1111b
-       ret
-bndmk_instruction:
-       mov     [opcode_prefix],0F3h
-       mov     [base_code],0Fh
-       mov     [extended_code],al
-       call    take_bnd_register
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_bnd_size
-       call    get_address_prefixes
-       call    get_address_component
-       cmp     byte [esi-1],']'
-       je      bndmk_ready
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       cmp     al,'('
-       jne     invalid_operand
-       or      dl,bl
-       or      dl,[address_sign]
-       or      edx,[address_high]
-       jnz     invalid_address
-       mov     [address_register],bh
-       call    get_address_component
-       lods    byte [esi]
-       cmp     al,']'
-       jne     invalid_operand
-       or      bh,bh
-       jz      bndmk_selected_base
-       cmp     bl,bh
-       je      bndmk_to_index
-       or      bl,bl
-       jnz     invalid_address
-       mov     bl,bh
-      bndmk_to_index:
-       inc     cl
-      bndmk_selected_base:
-       mov     bh,[address_register]
-      bndmk_ready:
-       or      bx,bx
-       jz      instruction_ready
-       cmp     [address_size_declared],0
-       jne     instruction_ready
-       and     ch,not 0Fh
-       jmp     instruction_ready
-    get_bnd_size:
-       mov     al,4
-       cmp     [code_type],64
-       jne     bnd_size_ok
-       add     al,4
-      bnd_size_ok:
-       mov     [address_size],al
-       ret
-    get_address_component:
-       mov     [free_address_range],0
-       call    calculate_address
-       mov     [address_high],edx
-       mov     edx,eax
-       or      bx,bx
-       jz      address_component_ok
-       mov     al,bl
-       or      al,bh
-       shr     al,4
-       cmp     al,[address_size]
-       jne     invalid_address
-      address_component_ok:
-       ret
-bndldx_instruction:
-       mov     [base_code],0Fh
-       mov     [extended_code],al
-       call    take_bnd_register
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_bnd_mib
-       jmp     bndmk_ready
-bndstx_instruction:
-       mov     [base_code],0Fh
-       mov     [extended_code],al
-       call    take_bnd_mib
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_bnd_register
-       mov     [postbyte_register],al
-       jmp     bndmk_ready
-    take_bnd_mib:
-       lods    byte [esi]
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_bnd_size
-       call    get_address_prefixes
-       call    get_address_component
-       cmp     byte [esi-1],']'
-       je      bnd_mib_ok
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       cmp     al,'('
-       jne     invalid_operand
-       mov     al,[address_sign]
-       push    eax ebx ecx edx
-       push    [address_symbol]
-       call    get_address_component
-       lods    byte [esi]
-       cmp     al,']'
-       jne     invalid_operand
-       or      dl,bl
-       or      dl,[address_sign]
-       or      edx,[address_high]
-       jnz     invalid_address
-       mov     [address_register],bh
-       pop     [address_symbol]
-       pop     edx ecx ebx eax
-       mov     [address_sign],al
-       or      bl,bl
-       jz      mib_place_index
-       or      bh,bh
-       jnz     invalid_address
-       cmp     cl,1
-       jne     invalid_address
-       mov     bh,bl
-      mib_place_index:
-       mov     bl,[address_register]
-       xor     cl,cl
-       or      bl,bl
-       jz      bnd_mib_ok
-       inc     cl
-      bnd_mib_ok:
-       ret
-
-tpause_instruction:
-       mov     [postbyte_register],6
-       mov     [extended_code],0AEh
-       mov     [base_code],0Fh
-       mov     [opcode_prefix],al
-       call    take_register
-       cmp     ah,4
-       jne     invalid_operand_size
-       mov     bl,al
-       cmp     byte [esi],','
-       jne     nomem_instruction_ready
-       inc     esi
-       call    take_register
-       cmp     ax,0402h
-       jne     invalid_operand
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_register
-       cmp     ax,0400h
-       jne     invalid_operand
-       jmp     nomem_instruction_ready
-umonitor_instruction:
-       mov     [postbyte_register],6
-       mov     [extended_code],0AEh
-       mov     [base_code],0Fh
-       mov     [opcode_prefix],0F3h
-       call    take_register
-       mov     bl,al
-       mov     al,ah
-       call    operand_autodetect
-       jmp     nomem_instruction_ready
-movdir64b_instruction:
-       call    setup_66_0f_38
-       call    take_register
-       mov     [postbyte_register],al
-       xor     al,al
-       xchg    al,[operand_size]
-       push    eax
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       mov     al,[operand_size]
-       or      al,al
-       jz      movdir64b_ready
-       cmp     al,64
-       jne     invalid_operand_size
-      movdir64b_ready:
-       push    edi
-       call    store_instruction
-       pop     ebx eax
-       mov     cl,[code_type]
-       cmp     byte [ebx],67h
-       jne     movdir64b_size_check
-       shr     cl,1
-       cmp     cl,16
-       jae     movdir64b_size_check
-       mov     cl,32
-      movdir64b_size_check:
-       shl     al,3
-       cmp     al,cl
-       jne     invalid_operand_size
-       jmp     instruction_assembled
-
-setssbsy_instruction:
-       shl     eax,24
-       or      eax,010FF3h
-       stos    dword [edi]
-       jmp     instruction_assembled
-rstorssp_instruction:
-       mov     ah,1
-       jmp     setup_clrssbsy
-clrssbsy_instruction:
-       mov     ah,0AEh
-      setup_clrssbsy:
-       mov     [base_code],0Fh
-       mov     [extended_code],ah
-       mov     [postbyte_register],al
-       mov     [opcode_prefix],0F3h
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       test    [operand_size],not 8
-       jnz     invalid_operand_size
-       jmp     instruction_ready
-rdsspq_instruction:
-       mov     [rex_prefix],48h
-rdsspd_instruction:
-       mov     ah,1Eh
-       jmp     setup_incssp
-incsspq_instruction:
-       mov     [rex_prefix],48h
-incsspd_instruction:
-       mov     ah,0AEh
-      setup_incssp:
-       mov     [base_code],0Fh
-       mov     [extended_code],ah
-       mov     [postbyte_register],al
-       mov     [opcode_prefix],0F3h
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-       call    convert_register
-       mov     bl,al
-       call    cet_size_check
-       jmp     nomem_instruction_ready
-      cet_size_check:
-       cmp     [rex_prefix],0
-       je      cet_dword
-       cmp     [code_type],64
-       jne     illegal_instruction
-       shr     ah,1
-      cet_dword:
-       cmp     ah,4
-       jne     invalid_operand_size
-       ret
-wrussq_instruction:
-       mov     [opcode_prefix],66h
-wrssq_instruction:
-       mov     [rex_prefix],48h
-       jmp     wrssd_instruction
-wrussd_instruction:
-       mov     [opcode_prefix],66h
-wrssd_instruction:
-       mov     [base_code],0Fh
-       mov     [extended_code],38h
-       mov     [supplemental_code],al
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       je      wrss_reg
-       cmp     al,'['
-       jne     invalid_operand
-       call    get_address
-       push    edx ebx ecx
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_register
-       mov     [postbyte_register],al
-       pop     ecx ebx edx
-       call    cet_size_check
-       jmp     instruction_ready
-      wrss_reg:
-       lods    byte [esi]
-       call    convert_register
-       mov     [postbyte_register],al
-       lods    byte [esi]
-       cmp     al,','
-       jne     invalid_operand
-       call    take_register
-       mov     bl,al
-       xchg    bl,[postbyte_register]
-       call    cet_size_check
-       jmp     nomem_instruction_ready
-endbr_instruction:
-       shl     eax,24
-       or      eax,1E0FF3h
-       stos    dword [edi]
-       jmp     instruction_assembled
-
-take_register:
-       lods    byte [esi]
-       call    get_size_operator
-       cmp     al,10h
-       jne     invalid_operand
-       lods    byte [esi]
-convert_register:
-       mov     ah,al
-       shr     ah,4
-       and     al,0Fh
-       cmp     ah,8
-       je      match_register_size
-       cmp     ah,4
-       ja      invalid_operand
-       cmp     ah,1
-       ja      match_register_size
-       cmp     al,4
-       jb      match_register_size
-       or      ah,ah
-       jz      high_byte_register
-       or      [rex_prefix],40h
-      match_register_size:
-       cmp     ah,[operand_size]
-       je      register_size_ok
-       cmp     [operand_size],0
-       jne     operand_sizes_do_not_match
-       mov     [operand_size],ah
-      register_size_ok:
-       ret
-      high_byte_register:
-       mov     ah,1
-       or      [rex_prefix],10h
-       jmp     match_register_size
-convert_fpu_register:
-       mov     ah,al
-       shr     ah,4
-       and     al,111b
-       cmp     ah,10
-       jne     invalid_operand
-       jmp     match_register_size
-convert_mmx_register:
-       mov     ah,al
-       shr     ah,4
-       cmp     ah,0Ch
-       je      xmm_register
-       ja      invalid_operand
-       and     al,111b
-       cmp     ah,0Bh
-       jne     invalid_operand
-       mov     ah,8
-       jmp     match_register_size
-      xmm_register:
-       and     al,0Fh
-       mov     ah,16
-       cmp     al,8
-       jb      match_register_size
-       cmp     [code_type],64
-       jne     invalid_operand
-       jmp     match_register_size
-convert_xmm_register:
-       mov     ah,al
-       shr     ah,4
-       cmp     ah,0Ch
-       je      xmm_register
-       jmp     invalid_operand
-get_size_operator:
-       xor     ah,ah
-       cmp     al,11h
-       jne     no_size_operator
-       mov     [size_declared],1
-       lods    word [esi]
-       xchg    al,ah
-       or      [operand_flags],1
-       cmp     ah,[operand_size]
-       je      size_operator_ok
-       cmp     [operand_size],0
-       jne     operand_sizes_do_not_match
-       mov     [operand_size],ah
-      size_operator_ok:
-       ret
-      no_size_operator:
-       mov     [size_declared],0
-       cmp     al,'['
-       jne     size_operator_ok
-       and     [operand_flags],not 1
-       ret
-get_jump_operator:
-       mov     [jump_type],0
-       cmp     al,12h
-       jne     jump_operator_ok
-       lods    word [esi]
-       mov     [jump_type],al
-       mov     al,ah
-      jump_operator_ok:
-       ret
-get_address:
-       and     [address_size],0
-    get_address_of_required_size:
-       call    get_address_prefixes
-       and     [free_address_range],0
-       call    calculate_address
-       cmp     byte [esi-1],']'
-       jne     invalid_address
-       mov     [address_high],edx
-       mov     edx,eax
-       cmp     [address_size_declared],0
-       jne     address_ok
-       cmp     [segment_register],4
-       ja      address_ok
-       or      bx,bx
-       jnz     clear_address_size
-       cmp     [code_type],64
-       jne     address_ok
-      calculate_relative_address:
-       mov     edx,[address_symbol]
-       mov     [symbol_identifier],edx
-       mov     edx,[address_high]
-       mov     ebp,[addressing_space]
-       call    calculate_relative_offset
-       mov     [address_high],edx
-       cdq
-       cmp     edx,[address_high]
-       je      address_high_ok
-       call    recoverable_overflow
-      address_high_ok:
-       mov     edx,eax
-       ror     ecx,16
-       mov     cl,[value_type]
-       rol     ecx,16
-       mov     bx,9900h
-      clear_address_size:
-       and     ch,not 0Fh
-      address_ok:
-       ret
-get_address_prefixes:
-       and     [segment_register],0
-       and     [address_size_declared],0
-       mov     al,[code_type]
-       shr     al,3
-       mov     [value_size],al
-       mov     al,[esi]
-       and     al,11110000b
-       cmp     al,60h
-       jne     get_address_size_prefix
-       lods    byte [esi]
-       sub     al,60h
-       mov     [segment_register],al
-       mov     al,[esi]
-       and     al,11110000b
-      get_address_size_prefix:
-       cmp     al,70h
-       jne     address_size_prefix_ok
-       lods    byte [esi]
-       sub     al,70h
-       cmp     al,2
-       jb      invalid_address_size
-       cmp     al,8
-       ja      invalid_address_size
-       mov     [value_size],al
-       or      [address_size_declared],1
-       or      [address_size],al
-       cmp     al,[address_size]
-       jne     invalid_address_size
-      address_size_prefix_ok:
-       ret
-operand_16bit:
-       cmp     [code_type],16
-       je      size_prefix_ok
-       mov     [operand_prefix],66h
-       ret
-operand_32bit:
-       cmp     [code_type],16
-       jne     size_prefix_ok
-       mov     [operand_prefix],66h
-      size_prefix_ok:
-       ret
-operand_64bit:
-       cmp     [code_type],64
-       jne     illegal_instruction
-       or      [rex_prefix],48h
-       ret
-operand_autodetect:
-       cmp     al,2
-       je      operand_16bit
-       cmp     al,4
-       je      operand_32bit
-       cmp     al,8
-       je      operand_64bit
-       jmp     invalid_operand_size
-store_segment_prefix_if_necessary:
-       mov     al,[segment_register]
-       or      al,al
-       jz      segment_prefix_ok
-       cmp     al,4
-       ja      segment_prefix_386
-       cmp     [code_type],64
-       je      segment_prefix_ok
-       cmp     al,3
-       je      ss_prefix
-       jb      segment_prefix_86
-       cmp     bl,25h
-       je      segment_prefix_86
-       cmp     bh,25h
-       je      segment_prefix_86
-       cmp     bh,45h
-       je      segment_prefix_86
-       cmp     bh,44h
-       je      segment_prefix_86
-       ret
-      ss_prefix:
-       cmp     bl,25h
-       je      segment_prefix_ok
-       cmp     bh,25h
-       je      segment_prefix_ok
-       cmp     bh,45h
-       je      segment_prefix_ok
-       cmp     bh,44h
-       je      segment_prefix_ok
-       jmp     segment_prefix_86
-store_segment_prefix:
-       mov     al,[segment_register]
-       or      al,al
-       jz      segment_prefix_ok
-       cmp     al,5
-       jae     segment_prefix_386
-      segment_prefix_86:
-       dec     al
-       shl     al,3
-       add     al,26h
-       stos    byte [edi]
-       jmp     segment_prefix_ok
-      segment_prefix_386:
-       add     al,64h-5
-       stos    byte [edi]
-      segment_prefix_ok:
-       ret
-store_instruction_code:
-       cmp     [vex_required],0
-       jne     store_vex_instruction_code
-store_classic_instruction_code:
-       mov     al,[operand_prefix]
-       or      al,al
-       jz      operand_prefix_ok
-       stos    byte [edi]
-      operand_prefix_ok:
-       mov     al,[opcode_prefix]
-       or      al,al
-       jz      opcode_prefix_ok
-       stos    byte [edi]
-      opcode_prefix_ok:
-       mov     al,[rex_prefix]
-       test    al,40h
-       jz      rex_prefix_ok
-       cmp     [code_type],64
-       jne     invalid_operand
-       test    al,0B0h
-       jnz     disallowed_combination_of_registers
-       stos    byte [edi]
-      rex_prefix_ok:
-       mov     al,[base_code]
-       stos    byte [edi]
-       cmp     al,0Fh
-       jne     instruction_code_ok
-      store_extended_code:
-       mov     al,[extended_code]
-       stos    byte [edi]
-       cmp     al,38h
-       je      store_supplemental_code
-       cmp     al,3Ah
-       je      store_supplemental_code
-      instruction_code_ok:
-       ret
-      store_supplemental_code:
-       mov     al,[supplemental_code]
-       stos    byte [edi]
-       ret
-store_nomem_instruction:
-       test    [postbyte_register],10000b
-       jz      nomem_reg_high_code_ok
-       or      [vex_required],10h
-       and     [postbyte_register],1111b
-      nomem_reg_high_code_ok:
-       test    [postbyte_register],1000b
-       jz      nomem_reg_code_ok
-       or      [rex_prefix],44h
-       and     [postbyte_register],111b
-      nomem_reg_code_ok:
-       test    bl,10000b
-       jz      nomem_rm_high_code_ok
-       or      [rex_prefix],42h
-       or      [vex_required],8
-       and     bl,1111b
-      nomem_rm_high_code_ok:
-       test    bl,1000b
-       jz      nomem_rm_code_ok
-       or      [rex_prefix],41h
-       and     bl,111b
-      nomem_rm_code_ok:
-       and     [displacement_compression],0
-       call    store_instruction_code
-       mov     al,[postbyte_register]
-       shl     al,3
-       or      al,bl
-       or      al,11000000b
-       stos    byte [edi]
-       ret
-store_instruction:
-       mov     [current_offset],edi
-       and     [displacement_compression],0
-       test    [postbyte_register],10000b
-       jz      reg_high_code_ok
-       or      [vex_required],10h
-       and     [postbyte_register],1111b
-      reg_high_code_ok:
-       test    [postbyte_register],1000b
-       jz      reg_code_ok
-       or      [rex_prefix],44h
-       and     [postbyte_register],111b
-      reg_code_ok:
-       cmp     [code_type],64
-       jne     address_value_ok
-       xor     eax,eax
-       bt      edx,31
-       sbb     eax,[address_high]
-       jz      address_value_ok
-       cmp     [address_high],0
-       jne     address_value_out_of_range
-       test    ch,44h
-       jnz     address_value_ok
-       test    bx,8080h
-       jz      address_value_ok
-      address_value_out_of_range:
-       call    recoverable_overflow
-      address_value_ok:
-       call    store_segment_prefix_if_necessary
-       test    [vex_required],4
-       jnz     address_vsib
-       or      bx,bx
-       jz      address_immediate
-       cmp     bx,9800h
-       je      address_rip_based
-       cmp     bx,9400h
-       je      address_eip_based
-       cmp     bx,9900h
-       je      address_relative
-       mov     al,bl
-       or      al,bh
-       and     al,11110000b
-       cmp     al,80h
-       je      postbyte_64bit
-       cmp     al,40h
-       je      postbyte_32bit
-       cmp     al,20h
-       jne     invalid_address
-       cmp     [code_type],64
-       je      invalid_address_size
-       call    address_16bit_prefix
-       test    ch,22h
-       setz    [displacement_compression]
-       call    store_instruction_code
-       cmp     bl,bh
-       jbe     determine_16bit_address
-       xchg    bl,bh
-      determine_16bit_address:
-       cmp     bx,2600h
-       je      address_si
-       cmp     bx,2700h
-       je      address_di
-       cmp     bx,2300h
-       je      address_bx
-       cmp     bx,2500h
-       je      address_bp
-       cmp     bx,2625h
-       je      address_bp_si
-       cmp     bx,2725h
-       je      address_bp_di
-       cmp     bx,2723h
-       je      address_bx_di
-       cmp     bx,2623h
-       jne     invalid_address
-      address_bx_si:
-       xor     al,al
-       jmp     postbyte_16bit
-      address_bx_di:
-       mov     al,1
-       jmp     postbyte_16bit
-      address_bp_si:
-       mov     al,10b
-       jmp     postbyte_16bit
-      address_bp_di:
-       mov     al,11b
-       jmp     postbyte_16bit
-      address_si:
-       mov     al,100b
-       jmp     postbyte_16bit
-      address_di:
-       mov     al,101b
-       jmp     postbyte_16bit
-      address_bx:
-       mov     al,111b
-       jmp     postbyte_16bit
-      address_bp:
-       mov     al,110b
-      postbyte_16bit:
-       test    ch,22h
-       jnz     address_16bit_value
-       or      ch,ch
-       jnz     address_sizes_do_not_agree
-       cmp     edx,10000h
-       jge     value_out_of_range
-       cmp     edx,-8000h
-       jl      value_out_of_range
-       or      dx,dx
-       jz      address
-       cmp     [displacement_compression],2
-       ja      address_8bit_value
-       je      address_16bit_value
-       cmp     dx,80h
-       jb      address_8bit_value
-       cmp     dx,-80h
-       jae     address_8bit_value
-      address_16bit_value:
-       or      al,10000000b
-       mov     cl,[postbyte_register]
-       shl     cl,3
-       or      al,cl
-       stos    byte [edi]
-       mov     eax,edx
-       stos    word [edi]
-       ret
-      address_8bit_value:
-       or      al,01000000b
-       mov     cl,[postbyte_register]
-       shl     cl,3
-       or      al,cl
-       stos    byte [edi]
-       mov     al,dl
-       stos    byte [edi]
-       ret
-      address:
-       cmp     al,110b
-       je      address_8bit_value
-       mov     cl,[postbyte_register]
-       shl     cl,3
-       or      al,cl
-       stos    byte [edi]
-       ret
-      address_vsib:
-       mov     al,bl
-       shr     al,4
-       test    al,1
-       jz      vsib_high_code_ok
-       or      [vex_register],10000b
-       or      [vex_required],8
-       xor     al,1
-      vsib_high_code_ok:
-       cmp     al,6
-       je      vsib_index_ok
-       cmp     al,0Ch
-       jb      invalid_address
-      vsib_index_ok:
-       mov     al,bh
-       shr     al,4
-       cmp     al,4
-       je      postbyte_32bit
-       cmp     [code_type],64
-       je      address_prefix_ok
-       test    al,al
-       jnz     invalid_address
-      postbyte_32bit:
-       call    address_32bit_prefix
-       jmp     address_prefix_ok
-      postbyte_64bit:
-       cmp     [code_type],64
-       jne     invalid_address_size
-      address_prefix_ok:
-       cmp     bl,44h
-       je      invalid_address
-       cmp     bl,84h
-       je      invalid_address
-       test    bh,1000b
-       jz      base_code_ok
-       or      [rex_prefix],41h
-      base_code_ok:
-       test    bl,1000b
-       jz      index_code_ok
-       or      [rex_prefix],42h
-      index_code_ok:
-       test    ch,44h or 88h
-       setz    [displacement_compression]
-       call    store_instruction_code
-       or      cl,cl
-       jz      only_base_register
-      base_and_index:
-       mov     al,100b
-       xor     ah,ah
-       cmp     cl,1
-       je      scale_ok
-       cmp     cl,2
-       je      scale_1
-       cmp     cl,4
-       je      scale_2
-       or      ah,11000000b
-       jmp     scale_ok
-      scale_2:
-       or      ah,10000000b
-       jmp     scale_ok
-      scale_1:
-       or      ah,01000000b
-      scale_ok:
-       or      bh,bh
-       jz      only_index_register
-       and     bl,111b
-       shl     bl,3
-       or      ah,bl
-       and     bh,111b
-       or      ah,bh
-      sib_ready:
-       test    ch,44h or 88h
-       jnz     sib_address_32bit_value
-       or      ch,ch
-       jnz     address_sizes_do_not_agree
-       cmp     bh,5
-       je      address_value
-       or      edx,edx
-       jz      sib_address
-      address_value:
-       cmp     [displacement_compression],2
-       ja      sib_address_8bit_value
-       je      sib_address_32bit_value
-       cmp     edx,80h
-       jb      sib_address_8bit_value
-       cmp     edx,-80h
-       jnb     sib_address_8bit_value
-      sib_address_32bit_value:
-       or      al,10000000b
-       mov     cl,[postbyte_register]
-       shl     cl,3
-       or      al,cl
-       stos    word [edi]
-       jmp     store_address_32bit_value
-      sib_address_8bit_value:
-       or      al,01000000b
-       mov     cl,[postbyte_register]
-       shl     cl,3
-       or      al,cl
-       stos    word [edi]
-       mov     al,dl
-       stos    byte [edi]
-       ret
-      sib_address:
-       mov     cl,[postbyte_register]
-       shl     cl,3
-       or      al,cl
-       stos    word [edi]
-       ret
-      only_index_register:
-       or      ah,101b
-       and     bl,111b
-       shl     bl,3
-       or      ah,bl
-       mov     cl,[postbyte_register]
-       shl     cl,3
-       or      al,cl
-       stos    word [edi]
-       test    ch,44h or 88h
-       jnz     store_address_32bit_value
-       or      ch,ch
-       jnz     invalid_address_size
-       cmp     [displacement_compression],2
-       jbe     store_address_32bit_value
-       mov     edx,[uncompressed_displacement]
-       jmp     store_address_32bit_value
-      zero_index_register:
-       mov     bl,4
-       mov     cl,1
-       jmp     base_and_index
-      only_base_register:
-       mov     al,bh
-       and     al,111b
-       cmp     al,4
-       je      zero_index_register
-       test    ch,44h or 88h
-       jnz     simple_address_32bit_value
-       or      ch,ch
-       jnz     address_sizes_do_not_agree
-       or      edx,edx
-       jz      simple_address
-       cmp     [displacement_compression],2
-       ja      simple_address_8bit_value
-       je      simple_address_32bit_value
-       cmp     edx,80h
-       jb      simple_address_8bit_value
-       cmp     edx,-80h
-       jnb     simple_address_8bit_value
-      simple_address_32bit_value:
-       or      al,10000000b
-       mov     cl,[postbyte_register]
-       shl     cl,3
-       or      al,cl
-       stos    byte [edi]
-       jmp     store_address_32bit_value
-      simple_address_8bit_value:
-       or      al,01000000b
-       mov     cl,[postbyte_register]
-       shl     cl,3
-       or      al,cl
-       stos    byte [edi]
-       mov     al,dl
-       stos    byte [edi]
-       ret
-      simple_address:
-       cmp     al,5
-       je      simple_address_8bit_value
-       mov     cl,[postbyte_register]
-       shl     cl,3
-       or      al,cl
-       stos    byte [edi]
-       ret
-      address_immediate:
-       cmp     [code_type],64
-       je      address_immediate_sib
-       test    ch,44h or 88h
-       jnz     address_immediate_32bit
-       test    ch,22h
-       jnz     address_immediate_16bit
-       or      ch,ch
-       jnz     invalid_address_size
-       cmp     [code_type],16
-       je      addressing_16bit
-      address_immediate_32bit:
-       call    address_32bit_prefix
-       call    store_instruction_code
-      store_immediate_address:
-       mov     al,101b
-       mov     cl,[postbyte_register]
-       shl     cl,3
-       or      al,cl
-       stos    byte [edi]
-      store_address_32bit_value:
-       test    ch,0F0h
-       jz      address_32bit_relocation_ok
-       mov     eax,ecx
-       shr     eax,16
-       cmp     al,4
-       jne     address_32bit_relocation
-       mov     al,2
-      address_32bit_relocation:
-       xchg    [value_type],al
-       mov     ebx,[address_symbol]
-       xchg    ebx,[symbol_identifier]
-       call    mark_relocation
-       mov     [value_type],al
-       mov     [symbol_identifier],ebx
-      address_32bit_relocation_ok:
-       mov     eax,edx
-       stos    dword [edi]
-       ret
-      store_address_64bit_value:
-       test    ch,0F0h
-       jz      address_64bit_relocation_ok
-       mov     eax,ecx
-       shr     eax,16
-       xchg    [value_type],al
-       mov     ebx,[address_symbol]
-       xchg    ebx,[symbol_identifier]
-       call    mark_relocation
-       mov     [value_type],al
-       mov     [symbol_identifier],ebx
-      address_64bit_relocation_ok:
-       mov     eax,edx
-       stos    dword [edi]
-       mov     eax,[address_high]
-       stos    dword [edi]
-       ret
-      address_immediate_sib:
-       test    ch,44h
-       jnz     address_immediate_sib_32bit
-       test    ch,not 88h
-       jnz     invalid_address_size
-       test    edx,80000000h
-       jz      address_immediate_sib_store
-       cmp     [address_high],0
-       je      address_immediate_sib_nosignextend
-      address_immediate_sib_store:
-       call    store_instruction_code
-       mov     al,100b
-       mov     ah,100101b
-       mov     cl,[postbyte_register]
-       shl     cl,3
-       or      al,cl
-       stos    word [edi]
-       jmp     store_address_32bit_value
-      address_immediate_sib_32bit:
-       test    ecx,0FF0000h
-       jnz     address_immediate_sib_nosignextend
-       test    edx,80000000h
-       jz      address_immediate_sib_store
-      address_immediate_sib_nosignextend:
-       call    address_32bit_prefix
-       jmp     address_immediate_sib_store
-      address_eip_based:
-       mov     al,67h
-       stos    byte [edi]
-      address_rip_based:
-       cmp     [code_type],64
-       jne     invalid_address
-       call    store_instruction_code
-       jmp     store_immediate_address
-      address_relative:
-       call    store_instruction_code
-       movzx   eax,[immediate_size]
-       add     eax,edi
-       sub     eax,[current_offset]
-       add     eax,5
-       sub     edx,eax
-       jno     address_relative_ok
-       call    recoverable_overflow
-      address_relative_ok:
-       mov     al,101b
-       mov     cl,[postbyte_register]
-       shl     cl,3
-       or      al,cl
-       stos    byte [edi]
-       shr     ecx,16
-       xchg    [value_type],cl
-       mov     ebx,[address_symbol]
-       xchg    ebx,[symbol_identifier]
-       mov     eax,edx
-       call    mark_relocation
-       mov     [value_type],cl
-       mov     [symbol_identifier],ebx
-       stos    dword [edi]
-       ret
-      addressing_16bit:
-       cmp     edx,10000h
-       jge     address_immediate_32bit
-       cmp     edx,-8000h
-       jl      address_immediate_32bit
-       movzx   edx,dx
-      address_immediate_16bit:
-       call    address_16bit_prefix
-       call    store_instruction_code
-       mov     al,110b
-       mov     cl,[postbyte_register]
-       shl     cl,3
-       or      al,cl
-       stos    byte [edi]
-       mov     eax,edx
-       stos    word [edi]
-       cmp     edx,10000h
-       jge     value_out_of_range
-       cmp     edx,-8000h
-       jl      value_out_of_range
-       ret
-      address_16bit_prefix:
-       cmp     [code_type],16
-       je      instruction_prefix_ok
-       mov     al,67h
-       stos    byte [edi]
-       ret
-      address_32bit_prefix:
-       cmp     [code_type],32
-       je      instruction_prefix_ok
-       mov     al,67h
-       stos    byte [edi]
-      instruction_prefix_ok:
-       ret
-store_instruction_with_imm8:
-       mov     [immediate_size],1
-       call    store_instruction
-       mov     al,byte [value]
-       stos    byte [edi]
-       ret
-store_instruction_with_imm16:
-       mov     [immediate_size],2
-       call    store_instruction
-       mov     ax,word [value]
-       call    mark_relocation
-       stos    word [edi]
-       ret
-store_instruction_with_imm32:
-       mov     [immediate_size],4
-       call    store_instruction
-       mov     eax,dword [value]
-       call    mark_relocation
-       stos    dword [edi]
-       ret