Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1.  
  2. ; flat assembler core
  3. ; Copyright (c) 1999-2005, Tomasz Grysztar.
  4. ; All rights reserved.
  5.  
  6. simple_instruction_except64:
  7.         cmp     [code_type],64
  8.         je      illegal_instruction
  9. simple_instruction:
  10.         stos    byte [edi]
  11.         jmp     instruction_assembled
  12. simple_instruction_only64:
  13.         cmp     [code_type],64
  14.         jne     illegal_instruction
  15.         jmp     simple_instruction
  16. simple_instruction_16bit_except64:
  17.         cmp     [code_type],64
  18.         je      illegal_instruction
  19. simple_instruction_16bit:
  20.         cmp     [code_type],16
  21.         jne     size_prefix
  22.         stos    byte [edi]
  23.         jmp     instruction_assembled
  24.       size_prefix:
  25.         mov     ah,al
  26.         mov     al,66h
  27.         stos    word [edi]
  28.         jmp     instruction_assembled
  29. simple_instruction_32bit_except64:
  30.         cmp     [code_type],64
  31.         je      illegal_instruction
  32. simple_instruction_32bit:
  33.         cmp     [code_type],16
  34.         je      size_prefix
  35.         stos    byte [edi]
  36.         jmp     instruction_assembled
  37. simple_instruction_64bit:
  38.         cmp     [code_type],64
  39.         jne     illegal_instruction
  40.         mov     ah,al
  41.         mov     al,48h
  42.         stos    word [edi]
  43.         jmp     instruction_assembled
  44. simple_extended_instruction:
  45.         mov     ah,al
  46.         mov     al,0Fh
  47.         stos    word [edi]
  48.         jmp     instruction_assembled
  49. prefix_instruction:
  50.         stos    byte [edi]
  51.         or      [prefixed_instruction],-1
  52.         jmp     continue_line
  53. segment_prefix:
  54.         mov     ah,al
  55.         shr     ah,4
  56.         cmp     ah,6
  57.         jne     illegal_instruction
  58.         and     al,1111b
  59.         mov     [segment_register],al
  60.         call    store_segment_prefix
  61.         or      [prefixed_instruction],-1
  62.         jmp     continue_line
  63. int_instruction:
  64.         lods    byte [esi]
  65.         call    get_size_operator
  66.         cmp     ah,1
  67.         ja      invalid_operand_size
  68.         cmp     al,'('
  69.         jne     invalid_operand
  70.         call    get_byte_value
  71.         mov     ah,al
  72.         mov     al,0CDh
  73.         stos    word [edi]
  74.         jmp     instruction_assembled
  75. iret_instruction:
  76.         cmp     [code_type],64
  77.         jne     simple_instruction
  78.         call    operand_64bit
  79.         jmp     simple_instruction
  80. aa_instruction:
  81.         cmp     [code_type],64
  82.         je      illegal_instruction
  83.         push    eax
  84.         mov     bl,10
  85.         cmp     byte [esi],'('
  86.         jne     aa_store
  87.         inc     esi
  88.         xor     al,al
  89.         xchg    al,[operand_size]
  90.         cmp     al,1
  91.         ja      invalid_operand_size
  92.         call    get_byte_value
  93.         mov     bl,al
  94.       aa_store:
  95.         cmp     [operand_size],0
  96.         jne     invalid_operand
  97.         pop     eax
  98.         mov     ah,bl
  99.         stos    word [edi]
  100.         jmp     instruction_assembled
  101.  
  102. basic_instruction:
  103.         mov     [base_code],al
  104.         lods    byte [esi]
  105.         call    get_size_operator
  106.         cmp     al,10h
  107.         je      basic_reg
  108.         cmp     al,'['
  109.         jne     invalid_operand
  110.       basic_mem:
  111.         call    get_address
  112.         push    edx bx cx
  113.         lods    byte [esi]
  114.         cmp     al,','
  115.         jne     invalid_operand
  116.         lods    byte [esi]
  117.         call    get_size_operator
  118.         cmp     al,'('
  119.         je      basic_mem_imm
  120.         cmp     al,10h
  121.         jne     invalid_operand
  122.       basic_mem_reg:
  123.         lods    byte [esi]
  124.         call    convert_register
  125.         mov     [postbyte_register],al
  126.         pop     cx bx edx
  127.         mov     al,ah
  128.         cmp     al,1
  129.         je      basic_mem_reg_8bit
  130.         call    operand_autodetect
  131.         inc     [base_code]
  132.       basic_mem_reg_8bit:
  133.         call    store_instruction
  134.         jmp     instruction_assembled
  135.       basic_mem_imm:
  136.         mov     al,[operand_size]
  137.         cmp     al,1
  138.         je      basic_mem_imm_8bit
  139.         cmp     al,2
  140.         je      basic_mem_imm_16bit
  141.         cmp     al,4
  142.         je      basic_mem_imm_32bit
  143.         cmp     al,8
  144.         je      basic_mem_imm_64bit
  145.         or      al,al
  146.         jnz     invalid_operand_size
  147.         cmp     [error_line],0
  148.         jne     basic_mem_imm_8bit
  149.         mov     eax,[current_line]
  150.         mov     [error_line],eax
  151.         mov     [error],operand_size_not_specified
  152.       basic_mem_imm_8bit:
  153.         call    get_byte_value
  154.         mov     byte [value],al
  155.         mov     al,[base_code]
  156.         shr     al,3
  157.         mov     [postbyte_register],al
  158.         pop     cx bx edx
  159.         mov     [base_code],80h
  160.         call    store_instruction_with_imm8
  161.         jmp     instruction_assembled
  162.       basic_mem_imm_16bit:
  163.         call    operand_16bit
  164.         call    get_word_value
  165.         mov     word [value],ax
  166.         mov     al,[base_code]
  167.         shr     al,3
  168.         mov     [postbyte_register],al
  169.         pop     cx bx edx
  170.         cmp     [value_type],0
  171.         jne     basic_mem_imm_16bit_store
  172.         cmp     [size_declared],0
  173.         jne     basic_mem_imm_16bit_store
  174.         cmp     word [value],80h
  175.         jb      basic_mem_simm_8bit
  176.         cmp     word [value],-80h
  177.         jae     basic_mem_simm_8bit
  178.       basic_mem_imm_16bit_store:
  179.         mov     [base_code],81h
  180.         call    store_instruction_with_imm16
  181.         jmp     instruction_assembled
  182.       basic_mem_simm_8bit:
  183.         mov     [base_code],83h
  184.         call    store_instruction_with_imm8
  185.         jmp     instruction_assembled
  186.       basic_mem_imm_32bit:
  187.         call    operand_32bit
  188.         call    get_dword_value
  189.       basic_mem_imm_32bit_ok:
  190.         mov     dword [value],eax
  191.         mov     al,[base_code]
  192.         shr     al,3
  193.         mov     [postbyte_register],al
  194.         pop     cx bx edx
  195.         cmp     [value_type],0
  196.         jne     basic_mem_imm_32bit_store
  197.         cmp     [size_declared],0
  198.         jne     basic_mem_imm_32bit_store
  199.         cmp     dword [value],80h
  200.         jb      basic_mem_simm_8bit
  201.         cmp     dword [value],-80h
  202.         jae     basic_mem_simm_8bit
  203.       basic_mem_imm_32bit_store:
  204.         mov     [base_code],81h
  205.         call    store_instruction_with_imm32
  206.         jmp     instruction_assembled
  207.       basic_mem_imm_64bit:
  208.         cmp     [size_declared],0
  209.         jne     long_immediate_not_encodable
  210.         call    operand_64bit
  211.         call    get_simm32
  212.         cmp     [value_type],4
  213.         jae     long_immediate_not_encodable
  214.         jmp     basic_mem_imm_32bit_ok
  215.       get_simm32:
  216.         call    get_qword_value
  217.         mov     ecx,edx
  218.         cdq
  219.         cmp     ecx,edx
  220.         jne     value_out_of_range
  221.         ret
  222.       basic_reg:
  223.         lods    byte [esi]
  224.         call    convert_register
  225.         mov     [postbyte_register],al
  226.         lods    byte [esi]
  227.         cmp     al,','
  228.         jne     invalid_operand
  229.         lods    byte [esi]
  230.         call    get_size_operator
  231.         cmp     al,10h
  232.         je      basic_reg_reg
  233.         cmp     al,'('
  234.         je      basic_reg_imm
  235.         cmp     al,'['
  236.         jne     invalid_operand
  237.       basic_reg_mem:
  238.         call    get_address
  239.         mov     al,[operand_size]
  240.         cmp     al,1
  241.         je      basic_reg_mem_8bit
  242.         call    operand_autodetect
  243.         add     [base_code],3
  244.         call    store_instruction
  245.         jmp     instruction_assembled
  246.       basic_reg_mem_8bit:
  247.         add     [base_code],2
  248.         call    store_instruction
  249.         jmp     instruction_assembled
  250.       basic_reg_reg:
  251.         lods    byte [esi]
  252.         call    convert_register
  253.         mov     bl,[postbyte_register]
  254.         mov     [postbyte_register],al
  255.         mov     al,ah
  256.         cmp     al,1
  257.         je      basic_reg_reg_8bit
  258.         call    operand_autodetect
  259.         inc     [base_code]
  260.       basic_reg_reg_8bit:
  261.         call    store_nomem_instruction
  262.         jmp     instruction_assembled
  263.       basic_reg_imm:
  264.         mov     al,[operand_size]
  265.         cmp     al,1
  266.         je      basic_reg_imm_8bit
  267.         cmp     al,2
  268.         je      basic_reg_imm_16bit
  269.         cmp     al,4
  270.         je      basic_reg_imm_32bit
  271.         cmp     al,8
  272.         je      basic_reg_imm_64bit
  273.         or      al,al
  274.         jnz     invalid_operand_size
  275.         cmp     [error_line],0
  276.         jne     basic_reg_imm_32bit
  277.         mov     eax,[current_line]
  278.         mov     [error_line],eax
  279.         mov     [error],operand_size_not_specified
  280.         jmp     basic_reg_imm_32bit
  281.       basic_reg_imm_8bit:
  282.         call    get_byte_value
  283.         mov     dl,al
  284.         mov     bl,[base_code]
  285.         shr     bl,3
  286.         xchg    bl,[postbyte_register]
  287.         or      bl,bl
  288.         jz      basic_al_imm
  289.         mov     [base_code],80h
  290.         call    store_nomem_instruction
  291.         mov     al,dl
  292.         stos    byte [edi]
  293.         jmp     instruction_assembled
  294.       basic_al_imm:
  295.         mov     al,[base_code]
  296.         add     al,4
  297.         stos    byte [edi]
  298.         mov     al,dl
  299.         stos    byte [edi]
  300.         jmp     instruction_assembled
  301.       basic_reg_imm_16bit:
  302.         call    operand_16bit
  303.         call    get_word_value
  304.         mov     dx,ax
  305.         mov     bl,[base_code]
  306.         shr     bl,3
  307.         xchg    bl,[postbyte_register]
  308.         cmp     [value_type],0
  309.         jne     basic_reg_imm_16bit_store
  310.         cmp     [size_declared],0
  311.         jne     basic_reg_imm_16bit_store
  312.         cmp     dx,80h
  313.         jb      basic_reg_simm_8bit
  314.         cmp     dx,-80h
  315.         jae     basic_reg_simm_8bit
  316.       basic_reg_imm_16bit_store:
  317.         or      bl,bl
  318.         jz      basic_ax_imm
  319.         mov     [base_code],81h
  320.         call    store_nomem_instruction
  321.         mov     ax,dx
  322.         call    mark_relocation
  323.         stos    word [edi]
  324.         jmp     instruction_assembled
  325.       basic_reg_simm_8bit:
  326.         mov     [base_code],83h
  327.         call    store_nomem_instruction
  328.         mov     al,dl
  329.         stos    byte [edi]
  330.         jmp     instruction_assembled
  331.       basic_ax_imm:
  332.         add     [base_code],5
  333.         call    store_instruction_code
  334.         mov     ax,dx
  335.         call    mark_relocation
  336.         stos    word [edi]
  337.         jmp     instruction_assembled
  338.       basic_reg_imm_32bit:
  339.         call    operand_32bit
  340.         call    get_dword_value
  341.       basic_reg_imm_32bit_ok:
  342.         mov     edx,eax
  343.         mov     bl,[base_code]
  344.         shr     bl,3
  345.         xchg    bl,[postbyte_register]
  346.         cmp     [value_type],0
  347.         jne     basic_reg_imm_32bit_store
  348.         cmp     [size_declared],0
  349.         jne     basic_reg_imm_32bit_store
  350.         cmp     edx,80h
  351.         jb      basic_reg_simm_8bit
  352.         cmp     edx,-80h
  353.         jae     basic_reg_simm_8bit
  354.       basic_reg_imm_32bit_store:
  355.         or      bl,bl
  356.         jz      basic_eax_imm
  357.         mov     [base_code],81h
  358.         call    store_nomem_instruction
  359.         mov     eax,edx
  360.         call    mark_relocation
  361.         stos    dword [edi]
  362.         jmp     instruction_assembled
  363.       basic_eax_imm:
  364.         add     [base_code],5
  365.         call    store_instruction_code
  366.         mov     eax,edx
  367.         call    mark_relocation
  368.         stos    dword [edi]
  369.         jmp     instruction_assembled
  370.       basic_reg_imm_64bit:
  371.         cmp     [size_declared],0
  372.         jne     long_immediate_not_encodable
  373.         call    operand_64bit
  374.         call    get_simm32
  375.         cmp     [value_type],4
  376.         jae     long_immediate_not_encodable
  377.         jmp     basic_reg_imm_32bit_ok
  378. single_operand_instruction:
  379.         mov     [base_code],0F6h
  380.         mov     [postbyte_register],al
  381.         lods    byte [esi]
  382.         call    get_size_operator
  383.         cmp     al,10h
  384.         je      single_reg
  385.         cmp     al,'['
  386.         jne     invalid_operand
  387.       single_mem:
  388.         call    get_address
  389.         mov     al,[operand_size]
  390.         cmp     al,1
  391.         je      single_mem_8bit
  392.         jb      single_mem_nosize
  393.         call    operand_autodetect
  394.         inc     [base_code]
  395.         call    store_instruction
  396.         jmp     instruction_assembled
  397.       single_mem_nosize:
  398.         cmp     [error_line],0
  399.         jne     single_mem_8bit
  400.         mov     eax,[current_line]
  401.         mov     [error_line],eax
  402.         mov     [error],operand_size_not_specified
  403.       single_mem_8bit:
  404.         call    store_instruction
  405.         jmp     instruction_assembled
  406.       single_reg:
  407.         lods    byte [esi]
  408.         call    convert_register
  409.         mov     bl,al
  410.         mov     al,ah
  411.         cmp     al,1
  412.         je      single_reg_8bit
  413.         call    operand_autodetect
  414.         inc     [base_code]
  415.       single_reg_8bit:
  416.         call    store_nomem_instruction
  417.         jmp     instruction_assembled
  418. mov_instruction:
  419.         mov     [base_code],88h
  420.         lods    byte [esi]
  421.         call    get_size_operator
  422.         cmp     al,10h
  423.         je      mov_reg
  424.         cmp     al,'['
  425.         jne     invalid_operand
  426.       mov_mem:
  427.         call    get_address
  428.         push    edx bx cx
  429.         lods    byte [esi]
  430.         cmp     al,','
  431.         jne     invalid_operand
  432.         lods    byte [esi]
  433.         call    get_size_operator
  434.         cmp     al,'('
  435.         je      mov_mem_imm
  436.         cmp     al,10h
  437.         jne     invalid_operand
  438.       mov_mem_reg:
  439.         lods    byte [esi]
  440.         cmp     al,60h
  441.         jb      mov_mem_general_reg
  442.         cmp     al,70h
  443.         jb      mov_mem_sreg
  444.       mov_mem_general_reg:
  445.         call    convert_register
  446.         mov     [postbyte_register],al
  447.         pop     cx bx edx
  448.         cmp     ah,1
  449.         je      mov_mem_reg_8bit
  450.         mov     al,ah
  451.         call    operand_autodetect
  452.         mov     al,[postbyte_register]
  453.         or      al,bl
  454.         or      al,bh
  455.         jz      mov_mem_ax
  456.         inc     [base_code]
  457.         call    store_instruction
  458.         jmp     instruction_assembled
  459.       mov_mem_reg_8bit:
  460.         or      al,bl
  461.         or      al,bh
  462.         jz      mov_mem_al
  463.         call    store_instruction
  464.         jmp     instruction_assembled
  465.       mov_mem_al:
  466.         test    ch,22h
  467.         jnz     mov_mem_address16_al
  468.         test    ch,44h
  469.         jnz     mov_mem_address32_al
  470.         test    ch,88h
  471.         jnz     mov_mem_address64_al
  472.         or      ch,ch
  473.         jnz     invalid_address_size
  474.         cmp     [code_type],64
  475.         je      mov_mem_address64_al
  476.         cmp     [code_type],32
  477.         je      mov_mem_address32_al
  478.         cmp     edx,10000h
  479.         jb      mov_mem_address16_al
  480.       mov_mem_address32_al:
  481.         call    store_segment_prefix_if_necessary
  482.         call    address_32bit_prefix
  483.         mov     [base_code],0A2h
  484.       store_mov_address32:
  485.         call    store_instruction_code
  486.         push    instruction_assembled
  487.         jmp     store_address_32bit_value
  488.       mov_mem_address16_al:
  489.         call    store_segment_prefix_if_necessary
  490.         call    address_16bit_prefix
  491.         mov     [base_code],0A2h
  492.       store_mov_address16:
  493.         cmp     [code_type],64
  494.         je      invalid_address
  495.         call    store_instruction_code
  496.         mov     eax,edx
  497.         stos    word [edi]
  498.         cmp     edx,10000h
  499.         jge     value_out_of_range
  500.         jmp     instruction_assembled
  501.       mov_mem_address64_al:
  502.         call    store_segment_prefix_if_necessary
  503.         mov     [base_code],0A2h
  504.       store_mov_address64:
  505.         call    store_instruction_code
  506.         push    instruction_assembled
  507.         jmp     store_address_64bit_value
  508.       mov_mem_ax:
  509.         test    ch,22h
  510.         jnz     mov_mem_address16_ax
  511.         test    ch,44h
  512.         jnz     mov_mem_address32_ax
  513.         test    ch,88h
  514.         jnz     mov_mem_address64_ax
  515.         or      ch,ch
  516.         jnz     invalid_address_size
  517.         cmp     [code_type],64
  518.         je      mov_mem_address64_ax
  519.         cmp     [code_type],32
  520.         je      mov_mem_address32_ax
  521.         cmp     edx,10000h
  522.         jb      mov_mem_address16_ax
  523.       mov_mem_address32_ax:
  524.         call    store_segment_prefix_if_necessary
  525.         call    address_32bit_prefix
  526.         mov     [base_code],0A3h
  527.         jmp     store_mov_address32
  528.       mov_mem_address16_ax:
  529.         call    store_segment_prefix_if_necessary
  530.         call    address_16bit_prefix
  531.         mov     [base_code],0A3h
  532.         jmp     store_mov_address16
  533.       mov_mem_address64_ax:
  534.         call    store_segment_prefix_if_necessary
  535.         mov     [base_code],0A3h
  536.         jmp     store_mov_address64
  537.       mov_mem_sreg:
  538.         sub     al,61h
  539.         mov     [postbyte_register],al
  540.         pop     cx bx edx
  541.         mov     ah,[operand_size]
  542.         or      ah,ah
  543.         jz      mov_mem_sreg_store
  544.         cmp     ah,2
  545.         jne     invalid_operand_size
  546.       mov_mem_sreg_store:
  547.         mov     [base_code],8Ch
  548.         call    store_instruction
  549.         jmp     instruction_assembled
  550.       mov_mem_imm:
  551.         mov     al,[operand_size]
  552.         cmp     al,1
  553.         je      mov_mem_imm_8bit
  554.         cmp     al,2
  555.         je      mov_mem_imm_16bit
  556.         cmp     al,4
  557.         je      mov_mem_imm_32bit
  558.         cmp     al,8
  559.         je      mov_mem_imm_64bit
  560.         or      al,al
  561.         jnz     invalid_operand_size
  562.         cmp     [error_line],0
  563.         jne     mov_mem_imm_32bit
  564.         mov     eax,[current_line]
  565.         mov     [error_line],eax
  566.         mov     [error],operand_size_not_specified
  567.         jmp     mov_mem_imm_32bit
  568.       mov_mem_imm_8bit:
  569.         call    get_byte_value
  570.         mov     byte [value],al
  571.         mov     [postbyte_register],0
  572.         mov     [base_code],0C6h
  573.         pop     cx bx edx
  574.         call    store_instruction_with_imm8
  575.         jmp     instruction_assembled
  576.       mov_mem_imm_16bit:
  577.         call    operand_16bit
  578.         call    get_word_value
  579.         mov     word [value],ax
  580.         mov     [postbyte_register],0
  581.         mov     [base_code],0C7h
  582.         pop     cx bx edx
  583.         call    store_instruction_with_imm16
  584.         jmp     instruction_assembled
  585.       mov_mem_imm_32bit:
  586.         call    operand_32bit
  587.         call    get_dword_value
  588.       mov_mem_imm_32bit_store:
  589.         mov     dword [value],eax
  590.         mov     [postbyte_register],0
  591.         mov     [base_code],0C7h
  592.         pop     cx bx edx
  593.         call    store_instruction_with_imm32
  594.         jmp     instruction_assembled
  595.       mov_mem_imm_64bit:
  596.         cmp     [size_declared],0
  597.         jne     long_immediate_not_encodable
  598.         call    operand_64bit
  599.         call    get_simm32
  600.         cmp     [value_type],4
  601.         jae     long_immediate_not_encodable
  602.         jmp     mov_mem_imm_32bit_store
  603.       mov_reg:
  604.         lods    byte [esi]
  605.         mov     ah,al
  606.         sub     ah,10h
  607.         and     ah,al
  608.         test    ah,0F0h
  609.         jnz     mov_sreg
  610.         call    convert_register
  611.         mov     [postbyte_register],al
  612.         lods    byte [esi]
  613.         cmp     al,','
  614.         jne     invalid_operand
  615.         lods    byte [esi]
  616.         call    get_size_operator
  617.         cmp     al,'['
  618.         je      mov_reg_mem
  619.         cmp     al,'('
  620.         je      mov_reg_imm
  621.         cmp     al,10h
  622.         jne     invalid_operand
  623.       mov_reg_reg:
  624.         lods    byte [esi]
  625.         mov     ah,al
  626.         sub     ah,10h
  627.         and     ah,al
  628.         test    ah,0F0h
  629.         jnz     mov_reg_sreg
  630.         call    convert_register
  631.         mov     bl,[postbyte_register]
  632.         mov     [postbyte_register],al
  633.         mov     al,ah
  634.         cmp     al,1
  635.         je      mov_reg_reg_8bit
  636.         call    operand_autodetect
  637.         inc     [base_code]
  638.       mov_reg_reg_8bit:
  639.         call    store_nomem_instruction
  640.         jmp     instruction_assembled
  641.       mov_reg_sreg:
  642.         mov     bl,[postbyte_register]
  643.         mov     ah,al
  644.         and     al,1111b
  645.         mov     [postbyte_register],al
  646.         shr     ah,4
  647.         cmp     ah,5
  648.         je      mov_reg_creg
  649.         cmp     ah,7
  650.         je      mov_reg_dreg
  651.         ja      mov_reg_treg
  652.         dec     [postbyte_register]
  653.         cmp     [operand_size],8
  654.         je      mov_reg_sreg64
  655.         cmp     [operand_size],4
  656.         je      mov_reg_sreg32
  657.         cmp     [operand_size],2
  658.         jne     invalid_operand_size
  659.         call    operand_16bit
  660.         jmp     mov_reg_sreg_store
  661.       mov_reg_sreg64:
  662.         call    operand_64bit
  663.         jmp     mov_reg_sreg_store
  664.       mov_reg_sreg32:
  665.         call    operand_32bit
  666.       mov_reg_sreg_store:
  667.         mov     [base_code],8Ch
  668.         call    store_nomem_instruction
  669.         jmp     instruction_assembled
  670.       mov_reg_treg:
  671.         cmp     ah,9
  672.         jne     invalid_operand
  673.         mov     [extended_code],24h
  674.         jmp     mov_reg_xrx
  675.       mov_reg_dreg:
  676.         mov     [extended_code],21h
  677.         jmp     mov_reg_xrx
  678.       mov_reg_creg:
  679.         mov     [extended_code],20h
  680.       mov_reg_xrx:
  681.         mov     [base_code],0Fh
  682.         cmp     [code_type],64
  683.         je      mov_reg_xrx_64bit
  684.         cmp     [operand_size],4
  685.         jne     invalid_operand_size
  686.         call    store_nomem_instruction
  687.         jmp     instruction_assembled
  688.       mov_reg_xrx_64bit:
  689.         cmp     [operand_size],8
  690.         jne     invalid_operand_size
  691.         call    store_nomem_instruction
  692.         jmp     instruction_assembled
  693.       mov_reg_mem:
  694.         call    get_address
  695.         mov     al,[operand_size]
  696.         cmp     al,1
  697.         je      mov_reg_mem_8bit
  698.         call    operand_autodetect
  699.         mov     al,[postbyte_register]
  700.         or      al,bl
  701.         or      al,bh
  702.         jz      mov_ax_mem
  703.         add     [base_code],3
  704.         call    store_instruction
  705.         jmp     instruction_assembled
  706.       mov_reg_mem_8bit:
  707.         mov     al,[postbyte_register]
  708.         or      al,bl
  709.         or      al,bh
  710.         jz      mov_al_mem
  711.         add     [base_code],2
  712.         call    store_instruction
  713.         jmp     instruction_assembled
  714.       mov_al_mem:
  715.         test    ch,22h
  716.         jnz     mov_al_mem_address16
  717.         test    ch,44h
  718.         jnz     mov_al_mem_address32
  719.         test    ch,88h
  720.         jnz     mov_al_mem_address64
  721.         or      ch,ch
  722.         jnz     invalid_address_size
  723.         cmp     [code_type],64
  724.         je      mov_al_mem_address64
  725.         cmp     [code_type],32
  726.         je      mov_al_mem_address32
  727.         cmp     edx,10000h
  728.         jb      mov_al_mem_address16
  729.       mov_al_mem_address32:
  730.         call    store_segment_prefix_if_necessary
  731.         call    address_32bit_prefix
  732.         mov     [base_code],0A0h
  733.         jmp     store_mov_address32
  734.       mov_al_mem_address16:
  735.         call    store_segment_prefix_if_necessary
  736.         call    address_16bit_prefix
  737.         mov     [base_code],0A0h
  738.         jmp     store_mov_address16
  739.       mov_al_mem_address64:
  740.         call    store_segment_prefix_if_necessary
  741.         mov     [base_code],0A0h
  742.         jmp     store_mov_address64
  743.       mov_ax_mem:
  744.         test    ch,22h
  745.         jnz     mov_ax_mem_address16
  746.         test    ch,44h
  747.         jnz     mov_ax_mem_address32
  748.         test    ch,88h
  749.         jnz     mov_ax_mem_address64
  750.         or      ch,ch
  751.         jnz     invalid_address_size
  752.         cmp     [code_type],64
  753.         je      mov_ax_mem_address64
  754.         cmp     [code_type],32
  755.         je      mov_ax_mem_address32
  756.         cmp     edx,10000h
  757.         jb      mov_ax_mem_address16
  758.       mov_ax_mem_address32:
  759.         call    store_segment_prefix_if_necessary
  760.         call    address_32bit_prefix
  761.         mov     [base_code],0A1h
  762.         jmp     store_mov_address32
  763.       mov_ax_mem_address16:
  764.         call    store_segment_prefix_if_necessary
  765.         mov     [base_code],0A1h
  766.         jmp     store_mov_address16
  767.       mov_ax_mem_address64:
  768.         call    store_segment_prefix_if_necessary
  769.         mov     [base_code],0A1h
  770.         jmp     store_mov_address64
  771.       mov_reg_imm:
  772.         mov     al,[operand_size]
  773.         cmp     al,1
  774.         je      mov_reg_imm_8bit
  775.         cmp     al,2
  776.         je      mov_reg_imm_16bit
  777.         cmp     al,4
  778.         je      mov_reg_imm_32bit
  779.         cmp     al,8
  780.         je      mov_reg_imm_64bit
  781.         or      al,al
  782.         jnz     invalid_operand_size
  783.         cmp     [error_line],0
  784.         jne     mov_reg_imm_32bit
  785.         mov     eax,[current_line]
  786.         mov     [error_line],eax
  787.         mov     [error],operand_size_not_specified
  788.         jmp     mov_reg_imm_32bit
  789.       mov_reg_imm_8bit:
  790.         call    get_byte_value
  791.         mov     dl,al
  792.         mov     al,0B0h
  793.         call    store_mov_reg_imm_code
  794.         mov     al,dl
  795.         stos    byte [edi]
  796.         jmp     instruction_assembled
  797.       mov_reg_imm_16bit:
  798.         call    get_word_value
  799.         mov     dx,ax
  800.         call    operand_16bit
  801.         mov     al,0B8h
  802.         call    store_mov_reg_imm_code
  803.         mov     ax,dx
  804.         call    mark_relocation
  805.         stos    word [edi]
  806.         jmp     instruction_assembled
  807.       mov_reg_imm_32bit:
  808.         call    operand_32bit
  809.         call    get_dword_value
  810.         mov     edx,eax
  811.         mov     al,0B8h
  812.         call    store_mov_reg_imm_code
  813.         mov     eax,edx
  814.         call    mark_relocation
  815.         stos    dword [edi]
  816.         jmp     instruction_assembled
  817.       mov_reg_imm_64bit:
  818.         call    operand_64bit
  819.         call    get_qword_value
  820.         mov     ecx,edx
  821.         cmp     [size_declared],0
  822.         jne     mov_reg_imm_64bit_store
  823.         cmp     [value_type],4
  824.         jae     mov_reg_imm_64bit_store
  825.         cdq
  826.         cmp     ecx,edx
  827.         je      mov_reg_64bit_imm_32bit
  828.       mov_reg_imm_64bit_store:
  829.         push    eax ecx
  830.         mov     al,0B8h
  831.         call    store_mov_reg_imm_code
  832.         pop     edx eax
  833.         call    mark_relocation
  834.         stos    dword [edi]
  835.         mov     eax,edx
  836.         stos    dword [edi]
  837.         jmp     instruction_assembled
  838.       store_mov_reg_imm_code:
  839.         mov     ah,[postbyte_register]
  840.         test    ah,1000b
  841.         jz      mov_reg_imm_prefix_ok
  842.         or      [rex_prefix],41h
  843.       mov_reg_imm_prefix_ok:
  844.         and     ah,111b
  845.         add     al,ah
  846.         mov     [base_code],al
  847.         call    store_instruction_code
  848.         ret
  849.       mov_reg_64bit_imm_32bit:
  850.         mov     edx,eax
  851.         mov     bl,[postbyte_register]
  852.         mov     [postbyte_register],0
  853.         mov     [base_code],0C7h
  854.         call    store_nomem_instruction
  855.         mov     eax,edx
  856.         call    mark_relocation
  857.         stos    dword [edi]
  858.         jmp     instruction_assembled
  859.       mov_sreg:
  860.         mov     ah,al
  861.         and     al,111b
  862.         mov     [postbyte_register],al
  863.         shr     ah,4
  864.         cmp     ah,5
  865.         je      mov_creg
  866.         cmp     ah,7
  867.         je      mov_dreg
  868.         ja      mov_treg
  869.         cmp     al,2
  870.         je      illegal_instruction
  871.         dec     [postbyte_register]
  872.         lods    byte [esi]
  873.         cmp     al,','
  874.         jne     invalid_operand
  875.         lods    byte [esi]
  876.         call    get_size_operator
  877.         cmp     al,'['
  878.         je      mov_sreg_mem
  879.         cmp     al,10h
  880.         jne     invalid_operand
  881.       mov_sreg_reg:
  882.         lods    byte [esi]
  883.         call    convert_register
  884.         or      ah,ah
  885.         jz      mov_sreg_reg_size_ok
  886.         cmp     ah,2
  887.         jne     invalid_operand_size
  888.         mov     bl,al
  889.       mov_sreg_reg_size_ok:
  890.         mov     [base_code],8Eh
  891.         call    store_nomem_instruction
  892.         jmp     instruction_assembled
  893.       mov_sreg_mem:
  894.         call    get_address
  895.         mov     al,[operand_size]
  896.         or      al,al
  897.         jz      mov_sreg_mem_size_ok
  898.         cmp     al,2
  899.         jne     invalid_operand_size
  900.       mov_sreg_mem_size_ok:
  901.         mov     [base_code],8Eh
  902.         call    store_instruction
  903.         jmp     instruction_assembled
  904.       mov_treg:
  905.         cmp     ah,9
  906.         jne     invalid_operand
  907.         mov     [extended_code],26h
  908.         jmp     mov_xrx
  909.       mov_dreg:
  910.         mov     [extended_code],23h
  911.         jmp     mov_xrx
  912.       mov_creg:
  913.         mov     [extended_code],22h
  914.       mov_xrx:
  915.         mov     [base_code],0Fh
  916.         lods    byte [esi]
  917.         cmp     al,','
  918.         jne     invalid_operand
  919.         lods    byte [esi]
  920.         cmp     al,10h
  921.         jne     invalid_operand
  922.         lods    byte [esi]
  923.         call    convert_register
  924.         mov     bl,al
  925.         cmp     [code_type],64
  926.         je      mov_xrx_64bit
  927.         cmp     ah,4
  928.         jne     invalid_operand_size
  929.         call    store_nomem_instruction
  930.         jmp     instruction_assembled
  931.       mov_xrx_64bit:
  932.         cmp     ah,8
  933.         jne     invalid_operand_size
  934.         call    store_nomem_instruction
  935.         jmp     instruction_assembled
  936. cmov_instruction:
  937.         mov     [base_code],0Fh
  938.         mov     [extended_code],al
  939.         lods    byte [esi]
  940.         call    get_size_operator
  941.         cmp     al,10h
  942.         jne     invalid_operand
  943.         lods    byte [esi]
  944.         call    convert_register
  945.         mov     [postbyte_register],al
  946.         lods    byte [esi]
  947.         cmp     al,','
  948.         jne     invalid_operand
  949.         lods    byte [esi]
  950.         call    get_size_operator
  951.         cmp     al,'['
  952.         je      cmov_reg_mem
  953.         cmp     al,10h
  954.         jne     invalid_operand
  955.       cmov_reg_reg:
  956.         lods    byte [esi]
  957.         call    convert_register
  958.         mov     bl,al
  959.         mov     al,ah
  960.         call    operand_autodetect
  961.         call    store_nomem_instruction
  962.         jmp     instruction_assembled
  963.       cmov_reg_mem:
  964.         call    get_address
  965.         mov     al,[operand_size]
  966.         call    operand_autodetect
  967.         call    store_instruction
  968.         jmp     instruction_assembled
  969. test_instruction:
  970.         mov     [base_code],84h
  971.         lods    byte [esi]
  972.         call    get_size_operator
  973.         cmp     al,10h
  974.         je      test_reg
  975.         cmp     al,'['
  976.         jne     invalid_operand
  977.       test_mem:
  978.         call    get_address
  979.         push    edx bx cx
  980.         lods    byte [esi]
  981.         cmp     al,','
  982.         jne     invalid_operand
  983.         lods    byte [esi]
  984.         call    get_size_operator
  985.         cmp     al,'('
  986.         je      test_mem_imm
  987.         cmp     al,10h
  988.         jne     invalid_operand
  989.       test_mem_reg:
  990.         lods    byte [esi]
  991.         call    convert_register
  992.         mov     [postbyte_register],al
  993.         pop     cx bx edx
  994.         mov     al,ah
  995.         cmp     al,1
  996.         je      test_mem_reg_8bit
  997.         call    operand_autodetect
  998.         inc     [base_code]
  999.       test_mem_reg_8bit:
  1000.         call    store_instruction
  1001.         jmp     instruction_assembled
  1002.       test_mem_imm:
  1003.         mov     al,[operand_size]
  1004.         cmp     al,1
  1005.         je      test_mem_imm_8bit
  1006.         cmp     al,2
  1007.         je      test_mem_imm_16bit
  1008.         cmp     al,4
  1009.         je      test_mem_imm_32bit
  1010.         cmp     al,8
  1011.         je      test_mem_imm_64bit
  1012.         or      al,al
  1013.         jnz     invalid_operand_size
  1014.         cmp     [error_line],0
  1015.         jne     test_mem_imm_32bit
  1016.         mov     eax,[current_line]
  1017.         mov     [error_line],eax
  1018.         mov     [error],operand_size_not_specified
  1019.         jmp     test_mem_imm_32bit
  1020.       test_mem_imm_8bit:
  1021.         call    get_byte_value
  1022.         mov     byte [value],al
  1023.         mov     [postbyte_register],0
  1024.         mov     [base_code],0F6h
  1025.         pop     cx bx edx
  1026.         call    store_instruction_with_imm8
  1027.         jmp     instruction_assembled
  1028.       test_mem_imm_16bit:
  1029.         call    operand_16bit
  1030.         call    get_word_value
  1031.         mov     word [value],ax
  1032.         mov     [postbyte_register],0
  1033.         mov     [base_code],0F7h
  1034.         pop     cx bx edx
  1035.         call    store_instruction_with_imm16
  1036.         jmp     instruction_assembled
  1037.       test_mem_imm_32bit:
  1038.         call    operand_32bit
  1039.         call    get_dword_value
  1040.       test_mem_imm_32bit_store:
  1041.         mov     dword [value],eax
  1042.         mov     [postbyte_register],0
  1043.         mov     [base_code],0F7h
  1044.         pop     cx bx edx
  1045.         call    store_instruction_with_imm32
  1046.         jmp     instruction_assembled
  1047.       test_mem_imm_64bit:
  1048.         cmp     [size_declared],0
  1049.         jne     long_immediate_not_encodable
  1050.         call    operand_64bit
  1051.         call    get_simm32
  1052.         cmp     [value_type],4
  1053.         jae     long_immediate_not_encodable
  1054.         jmp     test_mem_imm_32bit_store
  1055.       test_reg:
  1056.         lods    byte [esi]
  1057.         call    convert_register
  1058.         mov     [postbyte_register],al
  1059.         lods    byte [esi]
  1060.         cmp     al,','
  1061.         jne     invalid_operand
  1062.         lods    byte [esi]
  1063.         call    get_size_operator
  1064.         cmp     al,'['
  1065.         je      test_reg_mem
  1066.         cmp     al,'('
  1067.         je      test_reg_imm
  1068.         cmp     al,10h
  1069.         jne     invalid_operand
  1070.       test_reg_reg:
  1071.         lods    byte [esi]
  1072.         call    convert_register
  1073.         mov     bl,[postbyte_register]
  1074.         mov     [postbyte_register],al
  1075.         mov     al,ah
  1076.         cmp     al,1
  1077.         je      test_reg_reg_8bit
  1078.         call    operand_autodetect
  1079.         inc     [base_code]
  1080.       test_reg_reg_8bit:
  1081.         call    store_nomem_instruction
  1082.         jmp     instruction_assembled
  1083.       test_reg_imm:
  1084.         mov     al,[operand_size]
  1085.         cmp     al,1
  1086.         je      test_reg_imm_8bit
  1087.         cmp     al,2
  1088.         je      test_reg_imm_16bit
  1089.         cmp     al,4
  1090.         je      test_reg_imm_32bit
  1091.         cmp     al,8
  1092.         je      test_reg_imm_64bit
  1093.         jmp     invalid_operand_size
  1094.       test_reg_imm_8bit:
  1095.         call    get_byte_value
  1096.         mov     dl,al
  1097.         mov     bl,[postbyte_register]
  1098.         mov     [postbyte_register],0
  1099.         mov     [base_code],0F6h
  1100.         or      bl,bl
  1101.         jz      test_al_imm
  1102.         call    store_nomem_instruction
  1103.         mov     al,dl
  1104.         stos    byte [edi]
  1105.         jmp     instruction_assembled
  1106.       test_al_imm:
  1107.         mov     [base_code],0A8h
  1108.         call    store_instruction_code
  1109.         mov     al,dl
  1110.         stos    byte [edi]
  1111.         jmp     instruction_assembled
  1112.       test_reg_imm_16bit:
  1113.         call    operand_16bit
  1114.         call    get_word_value
  1115.         mov     dx,ax
  1116.         mov     bl,[postbyte_register]
  1117.         mov     [postbyte_register],0
  1118.         mov     [base_code],0F7h
  1119.         or      bl,bl
  1120.         jz      test_ax_imm
  1121.         call    store_nomem_instruction
  1122.         mov     ax,dx
  1123.         call    mark_relocation
  1124.         stos    word [edi]
  1125.         jmp     instruction_assembled
  1126.       test_ax_imm:
  1127.         mov     [base_code],0A9h
  1128.         call    store_instruction_code
  1129.         mov     ax,dx
  1130.         stos    word [edi]
  1131.         jmp     instruction_assembled
  1132.       test_reg_imm_32bit:
  1133.         call    operand_32bit
  1134.         call    get_dword_value
  1135.       test_reg_imm_32bit_store:
  1136.         mov     edx,eax
  1137.         mov     bl,[postbyte_register]
  1138.         mov     [postbyte_register],0
  1139.         mov     [base_code],0F7h
  1140.         or      bl,bl
  1141.         jz      test_eax_imm
  1142.         call    store_nomem_instruction
  1143.         mov     eax,edx
  1144.         call    mark_relocation
  1145.         stos    dword [edi]
  1146.         jmp     instruction_assembled
  1147.       test_eax_imm:
  1148.         mov     [base_code],0A9h
  1149.         call    store_instruction_code
  1150.         mov     eax,edx
  1151.         stos    dword [edi]
  1152.         jmp     instruction_assembled
  1153.       test_reg_imm_64bit:
  1154.         cmp     [size_declared],0
  1155.         jne     long_immediate_not_encodable
  1156.         call    operand_64bit
  1157.         call    get_simm32
  1158.         cmp     [value_type],4
  1159.         jae     long_immediate_not_encodable
  1160.         jmp     test_reg_imm_32bit_store
  1161.       test_reg_mem:
  1162.         call    get_address
  1163.         mov     al,[operand_size]
  1164.         cmp     al,1
  1165.         je      test_reg_mem_8bit
  1166.         call    operand_autodetect
  1167.         inc     [base_code]
  1168.       test_reg_mem_8bit:
  1169.         call    store_instruction
  1170.         jmp     instruction_assembled
  1171. xchg_instruction:
  1172.         mov     [base_code],86h
  1173.         lods    byte [esi]
  1174.         call    get_size_operator
  1175.         cmp     al,10h
  1176.         je      xchg_reg
  1177.         cmp     al,'['
  1178.         jne     invalid_operand
  1179.       xchg_mem:
  1180.         call    get_address
  1181.         push    edx bx cx
  1182.         lods    byte [esi]
  1183.         cmp     al,','
  1184.         jne     invalid_operand
  1185.         lods    byte [esi]
  1186.         call    get_size_operator
  1187.         cmp     al,10h
  1188.         je      test_mem_reg
  1189.         jmp     invalid_operand
  1190.       xchg_reg:
  1191.         lods    byte [esi]
  1192.         call    convert_register
  1193.         mov     [postbyte_register],al
  1194.         lods    byte [esi]
  1195.         cmp     al,','
  1196.         jne     invalid_operand
  1197.         lods    byte [esi]
  1198.         call    get_size_operator
  1199.         cmp     al,'['
  1200.         je      test_reg_mem
  1201.         cmp     al,10h
  1202.         jne     invalid_operand
  1203.       xchg_reg_reg:
  1204.         lods    byte [esi]
  1205.         call    convert_register
  1206.         mov     bl,al
  1207.         mov     al,ah
  1208.         cmp     al,1
  1209.         je      xchg_reg_reg_8bit
  1210.         call    operand_autodetect
  1211.         cmp     [postbyte_register],0
  1212.         je      xchg_ax_reg
  1213.         or      bl,bl
  1214.         jnz     xchg_reg_reg_store
  1215.         mov     bl,[postbyte_register]
  1216.       xchg_ax_reg:
  1217.         cmp     [code_type],64
  1218.         jne     xchg_ax_reg_ok
  1219.         cmp     ah,4
  1220.         jne     xchg_ax_reg_ok
  1221.         or      bl,bl
  1222.         jz      xchg_reg_reg_store
  1223.       xchg_ax_reg_ok:
  1224.         test    bl,1000b
  1225.         jz      xchg_ax_reg_store
  1226.         or      [rex_prefix],41h
  1227.         and     bl,111b
  1228.       xchg_ax_reg_store:
  1229.         add     bl,90h
  1230.         mov     [base_code],bl
  1231.         call    store_instruction_code
  1232.         jmp     instruction_assembled
  1233.       xchg_reg_reg_store:
  1234.         inc     [base_code]
  1235.       xchg_reg_reg_8bit:
  1236.         call    store_nomem_instruction
  1237.         jmp     instruction_assembled
  1238. push_instruction:
  1239.         mov     [extended_code],al
  1240.       push_next:
  1241.         lods    byte [esi]
  1242.         call    get_size_operator
  1243.         cmp     al,10h
  1244.         je      push_reg
  1245.         cmp     al,'('
  1246.         je      push_imm
  1247.         cmp     al,'['
  1248.         jne     invalid_operand
  1249.       push_mem:
  1250.         call    get_address
  1251.         mov     al,[operand_size]
  1252.         mov     ah,[extended_code]
  1253.         cmp     al,2
  1254.         je      push_mem_16bit
  1255.         cmp     al,4
  1256.         je      push_mem_32bit
  1257.         cmp     al,8
  1258.         je      push_mem_64bit
  1259.         or      al,al
  1260.         jnz     invalid_operand_size
  1261.         cmp     ah,2
  1262.         je      push_mem_16bit
  1263.         cmp     ah,4
  1264.         je      push_mem_32bit
  1265.         cmp     ah,8
  1266.         je      push_mem_64bit
  1267.         cmp     [error_line],0
  1268.         jne     push_mem_store
  1269.         mov     eax,[current_line]
  1270.         mov     [error_line],eax
  1271.         mov     [error],operand_size_not_specified
  1272.         jmp     push_mem_store
  1273.       push_mem_16bit:
  1274.         test    ah,not 2
  1275.         jnz     invalid_operand_size
  1276.         call    operand_16bit
  1277.         jmp     push_mem_store
  1278.       push_mem_32bit:
  1279.         test    ah,not 4
  1280.         jnz     invalid_operand_size
  1281.         cmp     [code_type],64
  1282.         je      illegal_instruction
  1283.         call    operand_32bit
  1284.         jmp     push_mem_store
  1285.       push_mem_64bit:
  1286.         test    ah,not 8
  1287.         jnz     invalid_operand_size
  1288.         cmp     [code_type],64
  1289.         jne     illegal_instruction
  1290.       push_mem_store:
  1291.         mov     [base_code],0FFh
  1292.         mov     [postbyte_register],110b
  1293.         call    store_instruction
  1294.         jmp     push_done
  1295.       push_reg:
  1296.         lods    byte [esi]
  1297.         mov     ah,al
  1298.         sub     ah,10h
  1299.         and     ah,al
  1300.         test    ah,0F0h
  1301.         jnz     push_sreg
  1302.         call    convert_register
  1303.         test    al,1000b
  1304.         jz      push_reg_ok
  1305.         or      [rex_prefix],41h
  1306.         and     al,111b
  1307.       push_reg_ok:
  1308.         add     al,50h
  1309.         mov     [base_code],al
  1310.         mov     al,ah
  1311.         mov     ah,[extended_code]
  1312.         cmp     al,2
  1313.         je      push_reg_16bit
  1314.         cmp     al,4
  1315.         je      push_reg_32bit
  1316.         cmp     al,8
  1317.         jne     invalid_operand_size
  1318.       push_reg_64bit:
  1319.         test    ah,not 8
  1320.         jnz     invalid_operand_size
  1321.         cmp     [code_type],64
  1322.         jne     illegal_instruction
  1323.         jmp     push_reg_store
  1324.       push_reg_32bit:
  1325.         test    ah,not 4
  1326.         jnz     invalid_operand_size
  1327.         cmp     [code_type],64
  1328.         je      illegal_instruction
  1329.         call    operand_32bit
  1330.         jmp     push_reg_store
  1331.       push_reg_16bit:
  1332.         test    ah,not 2
  1333.         jnz     invalid_operand_size
  1334.         call    operand_16bit
  1335.       push_reg_store:
  1336.         call    store_instruction_code
  1337.         jmp     push_done
  1338.       push_sreg:
  1339.         mov     bl,al
  1340.         mov     dl,[operand_size]
  1341.         mov     dh,[extended_code]
  1342.         cmp     dl,2
  1343.         je      push_sreg16
  1344.         cmp     dl,4
  1345.         je      push_sreg32
  1346.         cmp     dl,8
  1347.         je      push_sreg64
  1348.         or      dl,dl
  1349.         jnz     invalid_operand_size
  1350.         cmp     dh,2
  1351.         je      push_sreg16
  1352.         cmp     dh,4
  1353.         je      push_sreg32
  1354.         cmp     dh,8
  1355.         je      push_sreg64
  1356.         jmp     push_sreg_store
  1357.       push_sreg16:
  1358.         test    dh,not 2
  1359.         jnz     invalid_operand_size
  1360.         call    operand_16bit
  1361.         jmp     push_sreg_store
  1362.       push_sreg32:
  1363.         test    dh,not 4
  1364.         jnz     invalid_operand_size
  1365.         cmp     [code_type],64
  1366.         je      illegal_instruction
  1367.         call    operand_32bit
  1368.         jmp     push_sreg_store
  1369.       push_sreg64:
  1370.         test    dh,not 8
  1371.         jnz     invalid_operand_size
  1372.         cmp     [code_type],64
  1373.         jne     illegal_instruction
  1374.       push_sreg_store:
  1375.         mov     al,bl
  1376.         cmp     al,70h
  1377.         jae     invalid_operand
  1378.         sub     al,61h
  1379.         cmp     al,4
  1380.         jae     push_sreg_386
  1381.         shl     al,3
  1382.         add     al,6
  1383.         mov     [base_code],al
  1384.         cmp     [code_type],64
  1385.         je      illegal_instruction
  1386.         jmp     push_reg_store
  1387.       push_sreg_386:
  1388.         sub     al,4
  1389.         shl     al,3
  1390.         add     al,0A0h
  1391.         mov     [extended_code],al
  1392.         mov     [base_code],0Fh
  1393.         jmp     push_reg_store
  1394.       push_imm:
  1395.         mov     al,[operand_size]
  1396.         mov     ah,[extended_code]
  1397.         or      al,al
  1398.         je      push_imm_size_ok
  1399.         or      ah,ah
  1400.         je      push_imm_size_ok
  1401.         cmp     al,ah
  1402.         jne     invalid_operand_size
  1403.       push_imm_size_ok:
  1404.         cmp     al,2
  1405.         je      push_imm_16bit
  1406.         cmp     al,4
  1407.         je      push_imm_32bit
  1408.         cmp     al,8
  1409.         je      push_imm_64bit
  1410.         cmp     ah,2
  1411.         je      push_imm_optimized_16bit
  1412.         cmp     ah,4
  1413.         je      push_imm_optimized_32bit
  1414.         cmp     ah,8
  1415.         je      push_imm_optimized_64bit
  1416.         or      al,al
  1417.         jnz     invalid_operand_size
  1418.         cmp     [code_type],16
  1419.         je      push_imm_optimized_16bit
  1420.         cmp     [code_type],32
  1421.         je      push_imm_optimized_32bit
  1422.       push_imm_optimized_64bit:
  1423.         cmp     [code_type],64
  1424.         jne     illegal_instruction
  1425.         call    get_simm32
  1426.         mov     edx,eax
  1427.         cmp     [value_type],0
  1428.         jne     push_imm_32bit_store
  1429.         cmp     eax,-80h
  1430.         jl      push_imm_32bit_store
  1431.         cmp     eax,80h
  1432.         jge     push_imm_32bit_store
  1433.         jmp     push_imm_8bit
  1434.       push_imm_optimized_32bit:
  1435.         cmp     [code_type],64
  1436.         je      illegal_instruction
  1437.         call    get_dword_value
  1438.         mov     edx,eax
  1439.         cmp     [value_type],0
  1440.         jne     push_imm_32bit_store
  1441.         cmp     eax,-80h
  1442.         jl      push_imm_32bit_store
  1443.         cmp     eax,80h
  1444.         jge     push_imm_32bit_store
  1445.         call    operand_32bit
  1446.         jmp     push_imm_8bit
  1447.       push_imm_optimized_16bit:
  1448.         call    get_word_value
  1449.         mov     dx,ax
  1450.         cmp     [value_type],0
  1451.         jne     push_imm_16bit_store
  1452.         cmp     ax,-80h
  1453.         jl      push_imm_16bit_store
  1454.         cmp     ax,80h
  1455.         jge     push_imm_16bit_store
  1456.         call    operand_16bit
  1457.       push_imm_8bit:
  1458.         mov     ah,al
  1459.         mov     al,6Ah
  1460.         stos    word [edi]
  1461.         jmp     push_done
  1462.       push_imm_16bit:
  1463.         call    get_word_value
  1464.         mov     dx,ax
  1465.         call    operand_16bit
  1466.       push_imm_16bit_store:
  1467.         mov     [base_code],68h
  1468.         call    store_instruction_code
  1469.         mov     ax,dx
  1470.         call    mark_relocation
  1471.         stos    word [edi]
  1472.         jmp     push_done
  1473.       push_imm_64bit:
  1474.         cmp     [code_type],64
  1475.         jne     illegal_instruction
  1476.         call    get_simm32
  1477.         mov     edx,eax
  1478.         jmp     push_imm_32bit_store
  1479.       push_imm_32bit:
  1480.         cmp     [code_type],64
  1481.         je      illegal_instruction
  1482.         call    get_dword_value
  1483.         mov     edx,eax
  1484.         call    operand_32bit
  1485.       push_imm_32bit_store:
  1486.         mov     [base_code],68h
  1487.         call    store_instruction_code
  1488.         mov     eax,edx
  1489.         call    mark_relocation
  1490.         stos    dword [edi]
  1491.       push_done:
  1492.         lods    byte [esi]
  1493.         dec     esi
  1494.         cmp     al,0Fh
  1495.         je      instruction_assembled
  1496.         or      al,al
  1497.         jz      instruction_assembled
  1498.         mov     [operand_size],0
  1499.         mov     [size_override],0
  1500.         mov     [operand_prefix],0
  1501.         mov     [rex_prefix],0
  1502.         jmp     push_next
  1503. pop_instruction:
  1504.         mov     [extended_code],al
  1505.       pop_next:
  1506.         lods    byte [esi]
  1507.         call    get_size_operator
  1508.         cmp     al,10h
  1509.         je      pop_reg
  1510.         cmp     al,'['
  1511.         jne     invalid_operand
  1512.       pop_mem:
  1513.         call    get_address
  1514.         mov     al,[operand_size]
  1515.         mov     ah,[extended_code]
  1516.         cmp     al,2
  1517.         je      pop_mem_16bit
  1518.         cmp     al,4
  1519.         je      pop_mem_32bit
  1520.         cmp     al,8
  1521.         je      pop_mem_64bit
  1522.         or      al,al
  1523.         jnz     invalid_operand_size
  1524.         cmp     ah,2
  1525.         je      pop_mem_16bit
  1526.         cmp     ah,4
  1527.         je      pop_mem_32bit
  1528.         cmp     ah,8
  1529.         je      pop_mem_64bit
  1530.         cmp     [error_line],0
  1531.         jne     pop_mem_store
  1532.         mov     eax,[current_line]
  1533.         mov     [error_line],eax
  1534.         mov     [error],operand_size_not_specified
  1535.         jmp     pop_mem_store
  1536.       pop_mem_16bit:
  1537.         test    ah,not 2
  1538.         jnz     invalid_operand_size
  1539.         call    operand_16bit
  1540.         jmp     pop_mem_store
  1541.       pop_mem_32bit:
  1542.         test    ah,not 4
  1543.         jnz     invalid_operand_size
  1544.         cmp     [code_type],64
  1545.         je      illegal_instruction
  1546.         call    operand_32bit
  1547.         jmp     pop_mem_store
  1548.       pop_mem_64bit:
  1549.         test    ah,not 8
  1550.         jnz     invalid_operand_size
  1551.         cmp     [code_type],64
  1552.         jne     illegal_instruction
  1553.       pop_mem_store:
  1554.         mov     [base_code],08Fh
  1555.         mov     [postbyte_register],0
  1556.         call    store_instruction
  1557.         jmp     pop_done
  1558.       pop_reg:
  1559.         lods    byte [esi]
  1560.         mov     ah,al
  1561.         sub     ah,10h
  1562.         and     ah,al
  1563.         test    ah,0F0h
  1564.         jnz     pop_sreg
  1565.         call    convert_register
  1566.         test    al,1000b
  1567.         jz      pop_reg_ok
  1568.         or      [rex_prefix],41h
  1569.         and     al,111b
  1570.       pop_reg_ok:
  1571.         add     al,58h
  1572.         mov     [base_code],al
  1573.         mov     al,ah
  1574.         mov     ah,[extended_code]
  1575.         cmp     al,2
  1576.         je      pop_reg_16bit
  1577.         cmp     al,4
  1578.         je      pop_reg_32bit
  1579.         cmp     al,8
  1580.         je      pop_reg_64bit
  1581.         jmp     invalid_operand_size
  1582.       pop_reg_64bit:
  1583.         test    ah,not 8
  1584.         jnz     invalid_operand_size
  1585.         cmp     [code_type],64
  1586.         jne     illegal_instruction
  1587.         jmp     pop_reg_store
  1588.       pop_reg_32bit:
  1589.         test    ah,not 4
  1590.         jnz     invalid_operand_size
  1591.         cmp     [code_type],64
  1592.         je      illegal_instruction
  1593.         call    operand_32bit
  1594.         jmp     pop_reg_store
  1595.       pop_reg_16bit:
  1596.         test    ah,not 2
  1597.         jnz     invalid_operand_size
  1598.         call    operand_16bit
  1599.       pop_reg_store:
  1600.         call    store_instruction_code
  1601.       pop_done:
  1602.         lods    byte [esi]
  1603.         dec     esi
  1604.         cmp     al,0Fh
  1605.         je      instruction_assembled
  1606.         or      al,al
  1607.         jz      instruction_assembled
  1608.         mov     [operand_size],0
  1609.         mov     [size_override],0
  1610.         mov     [operand_prefix],0
  1611.         mov     [rex_prefix],0
  1612.         jmp     pop_next
  1613.       pop_sreg:
  1614.         mov     bl,al
  1615.         mov     dl,[operand_size]
  1616.         mov     dh,[extended_code]
  1617.         cmp     dl,2
  1618.         je      pop_sreg16
  1619.         cmp     dl,4
  1620.         je      pop_sreg32
  1621.         cmp     dl,8
  1622.         je      pop_sreg64
  1623.         or      dl,dl
  1624.         jnz     invalid_operand_size
  1625.         cmp     dh,2
  1626.         je      pop_sreg16
  1627.         cmp     dh,4
  1628.         je      pop_sreg32
  1629.         cmp     dh,8
  1630.         je      pop_sreg64
  1631.         jmp     pop_sreg_store
  1632.       pop_sreg16:
  1633.         test    dh,not 2
  1634.         jnz     invalid_operand_size
  1635.         call    operand_16bit
  1636.         jmp     pop_sreg_store
  1637.       pop_sreg32:
  1638.         test    dh,not 4
  1639.         jnz     invalid_operand_size
  1640.         cmp     [code_type],64
  1641.         je      illegal_instruction
  1642.         call    operand_32bit
  1643.         jmp     pop_sreg_store
  1644.       pop_sreg64:
  1645.         test    dh,not 8
  1646.         jnz     invalid_operand_size
  1647.         cmp     [code_type],64
  1648.         jne     illegal_instruction
  1649.       pop_sreg_store:
  1650.         mov     al,bl
  1651.         cmp     al,70h
  1652.         jae     invalid_operand
  1653.         sub     al,61h
  1654.         cmp     al,4
  1655.         jae     pop_sreg_386
  1656.         shl     al,3
  1657.         add     al,7
  1658.         mov     [base_code],al
  1659.         cmp     [code_type],64
  1660.         je      illegal_instruction
  1661.         jmp     pop_reg_store
  1662.       pop_sreg_386:
  1663.         sub     al,4
  1664.         shl     al,3
  1665.         add     al,0A1h
  1666.         mov     [extended_code],al
  1667.         mov     [base_code],0Fh
  1668.         jmp     pop_reg_store
  1669. inc_instruction:
  1670.         mov     [base_code],al
  1671.         lods    byte [esi]
  1672.         call    get_size_operator
  1673.         cmp     al,10h
  1674.         je      inc_reg
  1675.         cmp     al,'['
  1676.         je      inc_mem
  1677.         jne     invalid_operand
  1678.       inc_mem:
  1679.         call    get_address
  1680.         mov     al,[operand_size]
  1681.         cmp     al,1
  1682.         je      inc_mem_8bit
  1683.         jb      inc_mem_nosize
  1684.         call    operand_autodetect
  1685.         mov     al,0FFh
  1686.         xchg    al,[base_code]
  1687.         mov     [postbyte_register],al
  1688.         call    store_instruction
  1689.         jmp     instruction_assembled
  1690.       inc_mem_nosize:
  1691.         cmp     [error_line],0
  1692.         jne     inc_mem_8bit
  1693.         mov     eax,[current_line]
  1694.         mov     [error_line],eax
  1695.         mov     [error],operand_size_not_specified
  1696.       inc_mem_8bit:
  1697.         mov     al,0FEh
  1698.         xchg    al,[base_code]
  1699.         mov     [postbyte_register],al
  1700.         call    store_instruction
  1701.         jmp     instruction_assembled
  1702.       inc_reg:
  1703.         lods    byte [esi]
  1704.         call    convert_register
  1705.         mov     bl,al
  1706.         mov     al,0FEh
  1707.         xchg    al,[base_code]
  1708.         mov     [postbyte_register],al
  1709.         mov     al,ah
  1710.         cmp     al,1
  1711.         je      inc_reg_8bit
  1712.         call    operand_autodetect
  1713.         cmp     [code_type],64
  1714.         je      inc_reg_long_form
  1715.         mov     al,[postbyte_register]
  1716.         shl     al,3
  1717.         add     al,bl
  1718.         add     al,40h
  1719.         mov     [base_code],al
  1720.         call    store_instruction_code
  1721.         jmp     instruction_assembled
  1722.       inc_reg_long_form:
  1723.         inc     [base_code]
  1724.       inc_reg_8bit:
  1725.         call    store_nomem_instruction
  1726.         jmp     instruction_assembled
  1727. set_instruction:
  1728.         mov     [base_code],0Fh
  1729.         mov     [extended_code],al
  1730.         lods    byte [esi]
  1731.         call    get_size_operator
  1732.         cmp     al,10h
  1733.         je      set_reg
  1734.         cmp     al,'['
  1735.         jne     invalid_operand
  1736.       set_mem:
  1737.         call    get_address
  1738.         cmp     [operand_size],1
  1739.         ja      invalid_operand_size
  1740.         mov     [postbyte_register],0
  1741.         call    store_instruction
  1742.         jmp     instruction_assembled
  1743.       set_reg:
  1744.         lods    byte [esi]
  1745.         call    convert_register
  1746.         cmp     ah,1
  1747.         jne     invalid_operand_size
  1748.         mov     bl,al
  1749.         mov     [postbyte_register],0
  1750.         call    store_nomem_instruction
  1751.         jmp     instruction_assembled
  1752. arpl_instruction:
  1753.         cmp     [code_type],64
  1754.         je      illegal_instruction
  1755.         mov     [base_code],63h
  1756.         lods    byte [esi]
  1757.         call    get_size_operator
  1758.         cmp     al,10h
  1759.         je      arpl_reg
  1760.         cmp     al,'['
  1761.         jne     invalid_operand
  1762.         call    get_address
  1763.         lods    byte [esi]
  1764.         cmp     al,','
  1765.         jne     invalid_operand
  1766.         lods    byte [esi]
  1767.         cmp     al,10h
  1768.         jne     invalid_operand
  1769.         lods    byte [esi]
  1770.         call    convert_register
  1771.         mov     [postbyte_register],al
  1772.         cmp     ah,2
  1773.         jne     invalid_operand_size
  1774.         call    store_instruction
  1775.         jmp     instruction_assembled
  1776.       arpl_reg:
  1777.         lods    byte [esi]
  1778.         call    convert_register
  1779.         cmp     ah,2
  1780.         jne     invalid_operand_size
  1781.         mov     bl,al
  1782.         lods    byte [esi]
  1783.         cmp     al,','
  1784.         jne     invalid_operand
  1785.         lods    byte [esi]
  1786.         cmp     al,10h
  1787.         jne     invalid_operand
  1788.         lods    byte [esi]
  1789.         call    convert_register
  1790.         cmp     ah,2
  1791.         jne     invalid_operand_size
  1792.         mov     [postbyte_register],al
  1793.         call    store_nomem_instruction
  1794.         jmp     instruction_assembled
  1795. bound_instruction:
  1796.         cmp     [code_type],64
  1797.         je      illegal_instruction
  1798.         lods    byte [esi]
  1799.         call    get_size_operator
  1800.         cmp     al,10h
  1801.         jne     invalid_operand
  1802.         lods    byte [esi]
  1803.         call    convert_register
  1804.         mov     [postbyte_register],al
  1805.         lods    byte [esi]
  1806.         cmp     al,','
  1807.         jne     invalid_operand
  1808.         lods    byte [esi]
  1809.         call    get_size_operator
  1810.         cmp     al,'['
  1811.         jne     invalid_operand
  1812.         call    get_address
  1813.         mov     al,[operand_size]
  1814.         cmp     al,2
  1815.         je      bound_16bit
  1816.         cmp     al,4
  1817.         je      bound_32bit
  1818.         jmp     invalid_operand_size
  1819.       bound_32bit:
  1820.         call    operand_32bit
  1821.         mov     [base_code],62h
  1822.         call    store_instruction
  1823.         jmp     instruction_assembled
  1824.       bound_16bit:
  1825.         call    operand_16bit
  1826.         mov     [base_code],62h
  1827.         call    store_instruction
  1828.         jmp     instruction_assembled
  1829. enter_instruction:
  1830.         lods    byte [esi]
  1831.         call    get_size_operator
  1832.         cmp     ah,2
  1833.         je      enter_imm16_size_ok
  1834.         or      ah,ah
  1835.         jnz     invalid_operand_size
  1836.       enter_imm16_size_ok:
  1837.         cmp     al,'('
  1838.         jne     invalid_operand
  1839.         call    get_word_value
  1840.         cmp     [next_pass_needed],0
  1841.         jne     enter_imm16_ok
  1842.         cmp     [value_type],0
  1843.         jne     invalid_use_of_symbol
  1844.       enter_imm16_ok:
  1845.         push    eax
  1846.         mov     [operand_size],0
  1847.         lods    byte [esi]
  1848.         cmp     al,','
  1849.         jne     invalid_operand
  1850.         lods    byte [esi]
  1851.         call    get_size_operator
  1852.         cmp     ah,1
  1853.         je      enter_imm8_size_ok
  1854.         or      ah,ah
  1855.         jnz     invalid_operand_size
  1856.       enter_imm8_size_ok:
  1857.         cmp     al,'('
  1858.         jne     invalid_operand
  1859.         call    get_byte_value
  1860.         mov     dl,al
  1861.         pop     ebx
  1862.         mov     al,0C8h
  1863.         stos    byte [edi]
  1864.         mov     ax,bx
  1865.         stos    word [edi]
  1866.         mov     al,dl
  1867.         stos    byte [edi]
  1868.         jmp     instruction_assembled
  1869. ret_instruction_only64:
  1870.         cmp     [code_type],64
  1871.         jne     illegal_instruction
  1872.         jmp     ret_instruction
  1873. ret_instruction_32bit_except64:
  1874.         cmp     [code_type],64
  1875.         je      illegal_instruction
  1876. ret_instruction_32bit:
  1877.         call    operand_32bit
  1878.         jmp     ret_instruction
  1879. ret_instruction_16bit:
  1880.         call    operand_16bit
  1881.         jmp     ret_instruction
  1882. retf_instruction:
  1883.         cmp     [code_type],64
  1884.         jne     ret_instruction
  1885. ret_instruction_64bit:
  1886.         call    operand_64bit
  1887. ret_instruction:
  1888.         mov     [base_code],al
  1889.         lods    byte [esi]
  1890.         dec     esi
  1891.         or      al,al
  1892.         jz      simple_ret
  1893.         cmp     al,0Fh
  1894.         je      simple_ret
  1895.         lods    byte [esi]
  1896.         call    get_size_operator
  1897.         or      ah,ah
  1898.         jz      ret_imm
  1899.         cmp     ah,2
  1900.         je      ret_imm
  1901.         jmp     invalid_operand_size
  1902.       ret_imm:
  1903.         cmp     al,'('
  1904.         jne     invalid_operand
  1905.         call    get_word_value
  1906.         cmp     [next_pass_needed],0
  1907.         jne     ret_imm_ok
  1908.         cmp     [value_type],0
  1909.         jne     invalid_use_of_symbol
  1910.       ret_imm_ok:
  1911.         mov     dx,ax
  1912.         call    store_instruction_code
  1913.         mov     ax,dx
  1914.         stos    word [edi]
  1915.         jmp     instruction_assembled
  1916.       simple_ret:
  1917.         inc     [base_code]
  1918.         call    store_instruction_code
  1919.         jmp     instruction_assembled
  1920. lea_instruction:
  1921.         mov     [base_code],8Dh
  1922.         lods    byte [esi]
  1923.         call    get_size_operator
  1924.         cmp     al,10h
  1925.         jne     invalid_operand
  1926.         lods    byte [esi]
  1927.         call    convert_register
  1928.         mov     [postbyte_register],al
  1929.         lods    byte [esi]
  1930.         cmp     al,','
  1931.         jne     invalid_operand
  1932.         xor     al,al
  1933.         xchg    al,[operand_size]
  1934.         push    eax
  1935.         lods    byte [esi]
  1936.         call    get_size_operator
  1937.         cmp     al,'['
  1938.         jne     invalid_operand
  1939.         call    get_address
  1940.         pop     eax
  1941.         call    operand_autodetect
  1942.         call    store_instruction
  1943.         jmp     instruction_assembled
  1944. ls_instruction:
  1945.         or      al,al
  1946.         jz      les_instruction
  1947.         cmp     al,3
  1948.         jz      lds_instruction
  1949.         add     al,0B0h
  1950.         mov     [extended_code],al
  1951.         mov     [base_code],0Fh
  1952.         jmp     ls_code_ok
  1953.       les_instruction:
  1954.         mov     [base_code],0C4h
  1955.         jmp     ls_short_code
  1956.       lds_instruction:
  1957.         mov     [base_code],0C5h
  1958.       ls_short_code:
  1959.         cmp     [code_type],64
  1960.         je      illegal_instruction
  1961.       ls_code_ok:
  1962.         lods    byte [esi]
  1963.         call    get_size_operator
  1964.         cmp     al,10h
  1965.         jne     invalid_operand
  1966.         lods    byte [esi]
  1967.         call    convert_register
  1968.         mov     [postbyte_register],al
  1969.         lods    byte [esi]
  1970.         cmp     al,','
  1971.         jne     invalid_operand
  1972.         add     [operand_size],2
  1973.         lods    byte [esi]
  1974.         call    get_size_operator
  1975.         cmp     al,'['
  1976.         jne     invalid_operand
  1977.         call    get_address
  1978.         mov     al,[operand_size]
  1979.         cmp     al,4
  1980.         je      ls_16bit
  1981.         cmp     al,6
  1982.         je      ls_32bit
  1983.         cmp     al,10
  1984.         je      ls_64bit
  1985.         jmp     invalid_operand_size
  1986.       ls_16bit:
  1987.         call    operand_16bit
  1988.         call    store_instruction
  1989.         jmp     instruction_assembled
  1990.       ls_32bit:
  1991.         call    operand_32bit
  1992.         call    store_instruction
  1993.         jmp     instruction_assembled
  1994.       ls_64bit:
  1995.         call    operand_64bit
  1996.         call    store_instruction
  1997.         jmp     instruction_assembled
  1998. sh_instruction:
  1999.         mov     [postbyte_register],al
  2000.         lods    byte [esi]
  2001.         call    get_size_operator
  2002.         cmp     al,10h
  2003.         je      sh_reg
  2004.         cmp     al,'['
  2005.         jne     invalid_operand
  2006.       sh_mem:
  2007.         call    get_address
  2008.         push    edx bx cx
  2009.         mov     al,[operand_size]
  2010.         push    eax
  2011.         mov     [operand_size],0
  2012.         lods    byte [esi]
  2013.         cmp     al,','
  2014.         jne     invalid_operand
  2015.         lods    byte [esi]
  2016.         call    get_size_operator
  2017.         cmp     al,'('
  2018.         je      sh_mem_imm
  2019.         cmp     al,10h
  2020.         jne     invalid_operand
  2021.       sh_mem_reg:
  2022.         lods    byte [esi]
  2023.         cmp     al,11h
  2024.         jne     invalid_operand
  2025.         pop     eax cx bx edx
  2026.         cmp     al,1
  2027.         je      sh_mem_cl_8bit
  2028.         jb      sh_mem_cl_nosize
  2029.         call    operand_autodetect
  2030.         mov     [base_code],0D3h
  2031.         call    store_instruction
  2032.         jmp     instruction_assembled
  2033.       sh_mem_cl_nosize:
  2034.         cmp     [error_line],0
  2035.         jne     sh_mem_cl_8bit
  2036.         mov     eax,[current_line]
  2037.         mov     [error_line],eax
  2038.         mov     [error],operand_size_not_specified
  2039.       sh_mem_cl_8bit:
  2040.         mov     [base_code],0D2h
  2041.         call    store_instruction
  2042.         jmp     instruction_assembled
  2043.       sh_mem_imm:
  2044.         mov     al,[operand_size]
  2045.         or      al,al
  2046.         jz      sh_mem_imm_size_ok
  2047.         cmp     al,1
  2048.         jne     invalid_operand_size
  2049.       sh_mem_imm_size_ok:
  2050.         call    get_byte_value
  2051.         mov     byte [value],al
  2052.         pop     eax cx bx edx
  2053.         cmp     al,1
  2054.         je      sh_mem_imm_8bit
  2055.         jb      sh_mem_imm_nosize
  2056.         call    operand_autodetect
  2057.         cmp     byte [value],1
  2058.         je      sh_mem_1
  2059.         mov     [base_code],0C1h
  2060.         call    store_instruction_with_imm8
  2061.         jmp     instruction_assembled
  2062.       sh_mem_1:
  2063.         mov     [base_code],0D1h
  2064.         call    store_instruction
  2065.         jmp     instruction_assembled
  2066.       sh_mem_imm_nosize:
  2067.         cmp     [error_line],0
  2068.         jne     sh_mem_imm_8bit
  2069.         mov     eax,[current_line]
  2070.         mov     [error_line],eax
  2071.         mov     [error],operand_size_not_specified
  2072.       sh_mem_imm_8bit:
  2073.         cmp     byte [value],1
  2074.         je      sh_mem_1_8bit
  2075.         mov     [base_code],0C0h
  2076.         call    store_instruction_with_imm8
  2077.         jmp     instruction_assembled
  2078.       sh_mem_1_8bit:
  2079.         mov     [base_code],0D0h
  2080.         call    store_instruction
  2081.         jmp     instruction_assembled
  2082.       sh_reg:
  2083.         lods    byte [esi]
  2084.         call    convert_register
  2085.         mov     bx,ax
  2086.         mov     [operand_size],0
  2087.         lods    byte [esi]
  2088.         cmp     al,','
  2089.         jne     invalid_operand
  2090.         lods    byte [esi]
  2091.         call    get_size_operator
  2092.         cmp     al,'('
  2093.         je      sh_reg_imm
  2094.         cmp     al,10h
  2095.         jne     invalid_operand
  2096.       sh_reg_reg:
  2097.         lods    byte [esi]
  2098.         cmp     al,11h
  2099.         jne     invalid_operand
  2100.         mov     al,bh
  2101.         cmp     al,1
  2102.         je      sh_reg_cl_8bit
  2103.         call    operand_autodetect
  2104.         mov     [base_code],0D3h
  2105.         call    store_nomem_instruction
  2106.         jmp     instruction_assembled
  2107.       sh_reg_cl_8bit:
  2108.         mov     [base_code],0D2h
  2109.         call    store_nomem_instruction
  2110.         jmp     instruction_assembled
  2111.       sh_reg_imm:
  2112.         mov     al,[operand_size]
  2113.         or      al,al
  2114.         jz      sh_reg_imm_size_ok
  2115.         cmp     al,1
  2116.         jne     invalid_operand_size
  2117.       sh_reg_imm_size_ok:
  2118.         push    ebx
  2119.         call    get_byte_value
  2120.         mov     dl,al
  2121.         pop     ebx
  2122.         mov     al,bh
  2123.         cmp     al,1
  2124.         je      sh_reg_imm_8bit
  2125.         call    operand_autodetect
  2126.         cmp     dl,1
  2127.         je      sh_reg_1
  2128.         mov     [base_code],0C1h
  2129.         call    store_nomem_instruction
  2130.         mov     al,dl
  2131.         stos    byte [edi]
  2132.         jmp     instruction_assembled
  2133.       sh_reg_1:
  2134.         mov     [base_code],0D1h
  2135.         call    store_nomem_instruction
  2136.         jmp     instruction_assembled
  2137.       sh_reg_imm_8bit:
  2138.         cmp     dl,1
  2139.         je      sh_reg_1_8bit
  2140.         mov     [base_code],0C0h
  2141.         call    store_nomem_instruction
  2142.         mov     al,dl
  2143.         stos    byte [edi]
  2144.         jmp     instruction_assembled
  2145.       sh_reg_1_8bit:
  2146.         mov     [base_code],0D0h
  2147.         call    store_nomem_instruction
  2148.         jmp     instruction_assembled
  2149. shd_instruction:
  2150.         mov     [base_code],0Fh
  2151.         mov     [extended_code],al
  2152.         lods    byte [esi]
  2153.         call    get_size_operator
  2154.         cmp     al,10h
  2155.         je      shd_reg
  2156.         cmp     al,'['
  2157.         jne     invalid_operand
  2158.       shd_mem:
  2159.         call    get_address
  2160.         push    edx bx cx
  2161.         lods    byte [esi]
  2162.         cmp     al,','
  2163.         jne     invalid_operand
  2164.         lods    byte [esi]
  2165.         call    get_size_operator
  2166.         cmp     al,10h
  2167.         jne     invalid_operand
  2168.         lods    byte [esi]
  2169.         call    convert_register
  2170.         mov     [postbyte_register],al
  2171.         lods    byte [esi]
  2172.         cmp     al,','
  2173.         jne     invalid_operand
  2174.         mov     al,ah
  2175.         mov     [operand_size],0
  2176.         push    eax
  2177.         lods    byte [esi]
  2178.         call    get_size_operator
  2179.         cmp     al,'('
  2180.         je      shd_mem_reg_imm
  2181.         cmp     al,10h
  2182.         jne     invalid_operand
  2183.         lods    byte [esi]
  2184.         cmp     al,11h
  2185.         jne     invalid_operand
  2186.         pop     eax cx bx edx
  2187.         call    operand_autodetect
  2188.         inc     [extended_code]
  2189.         call    store_instruction
  2190.         jmp     instruction_assembled
  2191.       shd_mem_reg_imm:
  2192.         mov     al,[operand_size]
  2193.         or      al,al
  2194.         jz      shd_mem_reg_imm_size_ok
  2195.         cmp     al,1
  2196.         jne     invalid_operand_size
  2197.       shd_mem_reg_imm_size_ok:
  2198.         call    get_byte_value
  2199.         mov     byte [value],al
  2200.         pop     eax cx bx edx
  2201.         call    operand_autodetect
  2202.         call    store_instruction_with_imm8
  2203.         jmp     instruction_assembled
  2204.       shd_reg:
  2205.         lods    byte [esi]
  2206.         call    convert_register
  2207.         mov     [postbyte_register],al
  2208.         lods    byte [esi]
  2209.         cmp     al,','
  2210.         jne     invalid_operand
  2211.         lods    byte [esi]
  2212.         call    get_size_operator
  2213.         cmp     al,10h
  2214.         jne     invalid_operand
  2215.         lods    byte [esi]
  2216.         call    convert_register
  2217.         mov     bl,[postbyte_register]
  2218.         mov     [postbyte_register],al
  2219.         mov     al,ah
  2220.         push    eax ebx
  2221.         lods    byte [esi]
  2222.         cmp     al,','
  2223.         jne     invalid_operand
  2224.         mov     [operand_size],0
  2225.         lods    byte [esi]
  2226.         call    get_size_operator
  2227.         cmp     al,'('
  2228.         je      shd_reg_reg_imm
  2229.         cmp     al,10h
  2230.         jne     invalid_operand
  2231.         lods    byte [esi]
  2232.         cmp     al,11h
  2233.         jne     invalid_operand
  2234.         pop     ebx eax
  2235.         call    operand_autodetect
  2236.         inc     [extended_code]
  2237.         call    store_nomem_instruction
  2238.         jmp     instruction_assembled
  2239.       shd_reg_reg_imm:
  2240.         mov     al,[operand_size]
  2241.         or      al,al
  2242.         jz      shd_reg_reg_imm_size_ok
  2243.         cmp     al,1
  2244.         jne     invalid_operand_size
  2245.       shd_reg_reg_imm_size_ok:
  2246.         call    get_byte_value
  2247.         mov     dl,al
  2248.         pop     ebx eax
  2249.         call    operand_autodetect
  2250.         call    store_nomem_instruction
  2251.         mov     al,dl
  2252.         stos    byte [edi]
  2253.         jmp     instruction_assembled
  2254. movx_instruction:
  2255.         mov     [base_code],0Fh
  2256.         mov     [extended_code],al
  2257.         lods    byte [esi]
  2258.         call    get_size_operator
  2259.         cmp     al,10h
  2260.         jne     invalid_operand
  2261.         lods    byte [esi]
  2262.         call    convert_register
  2263.         mov     [postbyte_register],al
  2264.         mov     al,ah
  2265.         push    eax
  2266.         lods    byte [esi]
  2267.         cmp     al,','
  2268.         jne     invalid_operand
  2269.         mov     [operand_size],0
  2270.         lods    byte [esi]
  2271.         call    get_size_operator
  2272.         cmp     al,10h
  2273.         je      movx_reg
  2274.         cmp     al,'['
  2275.         jne     invalid_operand
  2276.         call    get_address
  2277.         pop     eax
  2278.         mov     ah,[operand_size]
  2279.         cmp     ah,al
  2280.         jae     invalid_operand_size
  2281.         cmp     ah,1
  2282.         je      movx_mem_8bit
  2283.         cmp     ah,2
  2284.         je      movx_mem_16bit
  2285.         or      ah,ah
  2286.         jnz     invalid_operand_size
  2287.         cmp     [error_line],0
  2288.         jne     movx_mem_8bit
  2289.         mov     eax,[current_line]
  2290.         mov     [error_line],eax
  2291.         mov     [error],operand_size_not_specified
  2292.       movx_mem_8bit:
  2293.         call    operand_autodetect
  2294.         call    store_instruction
  2295.         jmp     instruction_assembled
  2296.       movx_mem_16bit:
  2297.         inc     [extended_code]
  2298.         call    operand_autodetect
  2299.         call    store_instruction
  2300.         jmp     instruction_assembled
  2301.       movx_reg:
  2302.         lods    byte [esi]
  2303.         call    convert_register
  2304.         pop     ebx
  2305.         xchg    bl,al
  2306.         cmp     ah,al
  2307.         jae     invalid_operand_size
  2308.         cmp     ah,1
  2309.         je      movx_reg_8bit
  2310.         cmp     ah,2
  2311.         je      movx_reg_16bit
  2312.         jmp     invalid_operand_size
  2313.       movx_reg_8bit:
  2314.         call    operand_autodetect
  2315.         call    store_nomem_instruction
  2316.         jmp     instruction_assembled
  2317.       movx_reg_16bit:
  2318.         call    operand_autodetect
  2319.         inc     [extended_code]
  2320.         call    store_nomem_instruction
  2321.         jmp     instruction_assembled
  2322. movsxd_instruction:
  2323.         mov     [base_code],al
  2324.         lods    byte [esi]
  2325.         call    get_size_operator
  2326.         cmp     al,10h
  2327.         jne     invalid_operand
  2328.         lods    byte [esi]
  2329.         call    convert_register
  2330.         mov     [postbyte_register],al
  2331.         cmp     ah,8
  2332.         jne     invalid_operand_size
  2333.         lods    byte [esi]
  2334.         cmp     al,','
  2335.         jne     invalid_operand
  2336.         mov     [operand_size],0
  2337.         lods    byte [esi]
  2338.         call    get_size_operator
  2339.         cmp     al,10h
  2340.         je      movsxd_reg
  2341.         cmp     al,'['
  2342.         jne     invalid_operand
  2343.         call    get_address
  2344.         cmp     [operand_size],4
  2345.         je      movsxd_mem_store
  2346.         cmp     [operand_size],0
  2347.         jne     invalid_operand_size
  2348.       movsxd_mem_store:
  2349.         call    operand_64bit
  2350.         call    store_instruction
  2351.         jmp     instruction_assembled
  2352.       movsxd_reg:
  2353.         lods    byte [esi]
  2354.         call    convert_register
  2355.         cmp     ah,4
  2356.         jne     invalid_operand_size
  2357.         call    operand_64bit
  2358.         call    store_nomem_instruction
  2359.         jmp     instruction_assembled
  2360. bt_instruction:
  2361.         mov     [postbyte_register],al
  2362.         shl     al,3
  2363.         add     al,83h
  2364.         mov     [extended_code],al
  2365.         mov     [base_code],0Fh
  2366.         lods    byte [esi]
  2367.         call    get_size_operator
  2368.         cmp     al,10h
  2369.         je      bt_reg
  2370.         cmp     al,'['
  2371.         jne     invalid_operand
  2372.         call    get_address
  2373.         push    eax bx cx
  2374.         lods    byte [esi]
  2375.         cmp     al,','
  2376.         jne     invalid_operand
  2377.         cmp     byte [esi],'('
  2378.         je      bt_mem_imm
  2379.         cmp     byte [esi],11h
  2380.         jne     bt_mem_reg
  2381.         cmp     byte [esi+2],'('
  2382.         je      bt_mem_imm
  2383.       bt_mem_reg:
  2384.         lods    byte [esi]
  2385.         call    get_size_operator
  2386.         cmp     al,10h
  2387.         jne     invalid_operand
  2388.         lods    byte [esi]
  2389.         call    convert_register
  2390.         mov     [postbyte_register],al
  2391.         pop     cx bx edx
  2392.         mov     al,ah
  2393.         call    operand_autodetect
  2394.         call    store_instruction
  2395.         jmp     instruction_assembled
  2396.       bt_mem_imm:
  2397.         xor     al,al
  2398.         xchg    al,[operand_size]
  2399.         push    eax
  2400.         lods    byte [esi]
  2401.         call    get_size_operator
  2402.         cmp     al,'('
  2403.         jne     invalid_operand
  2404.         mov     al,[operand_size]
  2405.         or      al,al
  2406.         jz      bt_mem_imm_size_ok
  2407.         cmp     al,1
  2408.         jne     invalid_operand_size
  2409.       bt_mem_imm_size_ok:
  2410.         call    get_byte_value
  2411.         mov     byte [value],al
  2412.         pop     eax
  2413.         or      al,al
  2414.         jz      bt_mem_imm_nosize
  2415.         call    operand_autodetect
  2416.       bt_mem_imm_store:
  2417.         pop     cx bx edx
  2418.         mov     [extended_code],0BAh
  2419.         call    store_instruction_with_imm8
  2420.         jmp     instruction_assembled
  2421.       bt_mem_imm_nosize:
  2422.         cmp     [error_line],0
  2423.         jne     bt_mem_imm_store
  2424.         mov     eax,[current_line]
  2425.         mov     [error_line],eax
  2426.         mov     [error],operand_size_not_specified
  2427.         jmp     bt_mem_imm_store
  2428.       bt_reg:
  2429.         lods    byte [esi]
  2430.         call    convert_register
  2431.         mov     bl,al
  2432.         lods    byte [esi]
  2433.         cmp     al,','
  2434.         jne     invalid_operand
  2435.         cmp     byte [esi],'('
  2436.         je      bt_reg_imm
  2437.         cmp     byte [esi],11h
  2438.         jne     bt_reg_reg
  2439.         cmp     byte [esi+2],'('
  2440.         je      bt_reg_imm
  2441.       bt_reg_reg:
  2442.         lods    byte [esi]
  2443.         call    get_size_operator
  2444.         cmp     al,10h
  2445.         jne     invalid_operand
  2446.         lods    byte [esi]
  2447.         call    convert_register
  2448.         mov     [postbyte_register],al
  2449.         mov     al,ah
  2450.         call    operand_autodetect
  2451.         call    store_nomem_instruction
  2452.         jmp     instruction_assembled
  2453.       bt_reg_imm:
  2454.         xor     al,al
  2455.         xchg    al,[operand_size]
  2456.         push    eax
  2457.         lods    byte [esi]
  2458.         call    get_size_operator
  2459.         cmp     al,'('
  2460.         jne     invalid_operand
  2461.         mov     al,[operand_size]
  2462.         or      al,al
  2463.         jz      bt_reg_imm_size_ok
  2464.         cmp     al,1
  2465.         jne     invalid_operand_size
  2466.       bt_reg_imm_size_ok:
  2467.         call    get_byte_value
  2468.         mov     byte [value],al
  2469.         pop     eax
  2470.         call    operand_autodetect
  2471.       bt_reg_imm_store:
  2472.         mov     [extended_code],0BAh
  2473.         call    store_nomem_instruction
  2474.         mov     al,byte [value]
  2475.         stos    byte [edi]
  2476.         jmp     instruction_assembled
  2477. bs_instruction:
  2478.         mov     [extended_code],al
  2479.         mov     [base_code],0Fh
  2480.         lods    byte [esi]
  2481.         call    get_size_operator
  2482.         cmp     al,10h
  2483.         jne     invalid_operand
  2484.         lods    byte [esi]
  2485.         call    convert_register
  2486.         mov     [postbyte_register],al
  2487.         lods    byte [esi]
  2488.         cmp     al,','
  2489.         jne     invalid_operand
  2490.         lods    byte [esi]
  2491.         call    get_size_operator
  2492.         cmp     al,10h
  2493.         je      bs_reg_reg
  2494.         cmp     al,'['
  2495.         jne     invalid_argument
  2496.         call    get_address
  2497.         mov     al,[operand_size]
  2498.         call    operand_autodetect
  2499.         call    store_instruction
  2500.         jmp     instruction_assembled
  2501.       bs_reg_reg:
  2502.         lods    byte [esi]
  2503.         call    convert_register
  2504.         mov     bl,al
  2505.         mov     al,ah
  2506.         call    operand_autodetect
  2507.         call    store_nomem_instruction
  2508.         jmp     instruction_assembled
  2509. imul_instruction:
  2510.         mov     [base_code],0F6h
  2511.         mov     [postbyte_register],5
  2512.         lods    byte [esi]
  2513.         call    get_size_operator
  2514.         cmp     al,10h
  2515.         je      imul_reg
  2516.         cmp     al,'['
  2517.         jne     invalid_operand
  2518.       imul_mem:
  2519.         call    get_address
  2520.         mov     al,[operand_size]
  2521.         cmp     al,1
  2522.         je      imul_mem_8bit
  2523.         jb      imul_mem_nosize
  2524.         call    operand_autodetect
  2525.         inc     [base_code]
  2526.         call    store_instruction
  2527.         jmp     instruction_assembled
  2528.       imul_mem_nosize:
  2529.         cmp     [error_line],0
  2530.         jne     imul_mem_8bit
  2531.         mov     eax,[current_line]
  2532.         mov     [error_line],eax
  2533.         mov     [error],operand_size_not_specified
  2534.       imul_mem_8bit:
  2535.         call    store_instruction
  2536.         jmp     instruction_assembled
  2537.       imul_reg:
  2538.         lods    byte [esi]
  2539.         call    convert_register
  2540.         cmp     byte [esi],','
  2541.         je      imul_reg_
  2542.         mov     bl,al
  2543.         mov     al,ah
  2544.         cmp     al,1
  2545.         je      imul_reg_8bit
  2546.         call    operand_autodetect
  2547.         inc     [base_code]
  2548.         call    store_nomem_instruction
  2549.         jmp     instruction_assembled
  2550.       imul_reg_8bit:
  2551.         call    store_nomem_instruction
  2552.         jmp     instruction_assembled
  2553.       imul_reg_:
  2554.         mov     [postbyte_register],al
  2555.         inc     esi
  2556.         cmp     byte [esi],'('
  2557.         je      imul_reg_imm
  2558.         cmp     byte [esi],11h
  2559.         jne     imul_reg_noimm
  2560.         cmp     byte [esi+2],'('
  2561.         je      imul_reg_imm
  2562.       imul_reg_noimm:
  2563.         lods    byte [esi]
  2564.         call    get_size_operator
  2565.         cmp     al,10h
  2566.         je      imul_reg_reg
  2567.         cmp     al,'['
  2568.         jne     invalid_operand
  2569.       imul_reg_mem:
  2570.         call    get_address
  2571.         push    edx bx cx
  2572.         cmp     byte [esi],','
  2573.         je      imul_reg_mem_imm
  2574.         mov     al,[operand_size]
  2575.         call    operand_autodetect
  2576.         pop     cx bx edx
  2577.         mov     [base_code],0Fh
  2578.         mov     [extended_code],0AFh
  2579.         call    store_instruction
  2580.         jmp     instruction_assembled
  2581.       imul_reg_mem_imm:
  2582.         inc     esi
  2583.         lods    byte [esi]
  2584.         call    get_size_operator
  2585.         cmp     al,'('
  2586.         jne     invalid_operand
  2587.         mov     al,[operand_size]
  2588.         cmp     al,2
  2589.         je      imul_reg_mem_imm_16bit
  2590.         cmp     al,4
  2591.         je      imul_reg_mem_imm_32bit
  2592.         cmp     al,8
  2593.         je      imul_reg_mem_imm_64bit
  2594.         jmp     invalid_operand_size
  2595.       imul_reg_mem_imm_16bit:
  2596.         call    operand_16bit
  2597.         call    get_word_value
  2598.         mov     word [value],ax
  2599.         cmp     [value_type],0
  2600.         jne     imul_reg_mem_imm_16bit_store
  2601.         cmp     [size_declared],0
  2602.         jne     imul_reg_mem_imm_16bit_store
  2603.         cmp     ax,-80h
  2604.         jl      imul_reg_mem_imm_16bit_store
  2605.         cmp     ax,80h
  2606.         jl      imul_reg_mem_imm_8bit_store
  2607.       imul_reg_mem_imm_16bit_store:
  2608.         pop     cx bx edx
  2609.         mov     [base_code],69h
  2610.         call    store_instruction_with_imm16
  2611.         jmp     instruction_assembled
  2612.       imul_reg_mem_imm_32bit:
  2613.         call    operand_32bit
  2614.         call    get_dword_value
  2615.       imul_reg_mem_imm_32bit_ok:
  2616.         mov     dword [value],eax
  2617.         cmp     [value_type],0
  2618.         jne     imul_reg_mem_imm_32bit_store
  2619.         cmp     [size_declared],0
  2620.         jne     imul_reg_mem_imm_32bit_store
  2621.         cmp     eax,-80h
  2622.         jl      imul_reg_mem_imm_32bit_store
  2623.         cmp     eax,80h
  2624.         jl      imul_reg_mem_imm_8bit_store
  2625.       imul_reg_mem_imm_32bit_store:
  2626.         pop     cx bx edx
  2627.         mov     [base_code],69h
  2628.         call    store_instruction_with_imm32
  2629.         jmp     instruction_assembled
  2630.       imul_reg_mem_imm_64bit:
  2631.         cmp     [size_declared],0
  2632.         jne     long_immediate_not_encodable
  2633.         call    operand_64bit
  2634.         call    get_simm32
  2635.         cmp     [value_type],4
  2636.         jae     long_immediate_not_encodable
  2637.         jmp     imul_reg_mem_imm_32bit_ok
  2638.       imul_reg_mem_imm_8bit_store:
  2639.         pop     cx bx edx
  2640.         mov     [base_code],6Bh
  2641.         call    store_instruction_with_imm8
  2642.         jmp     instruction_assembled
  2643.       imul_reg_imm:
  2644.         mov     bl,[postbyte_register]
  2645.         dec     esi
  2646.         jmp     imul_reg_reg_imm
  2647.       imul_reg_reg:
  2648.         lods    byte [esi]
  2649.         call    convert_register
  2650.         mov     bl,al
  2651.         cmp     byte [esi],','
  2652.         je      imul_reg_reg_imm
  2653.         mov     al,ah
  2654.         call    operand_autodetect
  2655.         mov     [base_code],0Fh
  2656.         mov     [extended_code],0AFh
  2657.         call    store_nomem_instruction
  2658.         jmp     instruction_assembled
  2659.       imul_reg_reg_imm:
  2660.         inc     esi
  2661.         lods    byte [esi]
  2662.         call    get_size_operator
  2663.         cmp     al,'('
  2664.         jne     invalid_operand
  2665.         mov     al,[operand_size]
  2666.         cmp     al,2
  2667.         je      imul_reg_reg_imm_16bit
  2668.         cmp     al,4
  2669.         je      imul_reg_reg_imm_32bit
  2670.         cmp     al,8
  2671.         je      imul_reg_reg_imm_64bit
  2672.         jmp     invalid_operand_size
  2673.       imul_reg_reg_imm_16bit:
  2674.         call    operand_16bit
  2675.         push    ebx
  2676.         call    get_word_value
  2677.         pop     ebx
  2678.         mov     dx,ax
  2679.         cmp     [value_type],0
  2680.         jne     imul_reg_reg_imm_16bit_store
  2681.         cmp     [size_declared],0
  2682.         jne     imul_reg_reg_imm_16bit_store
  2683.         cmp     ax,-80h
  2684.         jl      imul_reg_reg_imm_16bit_store
  2685.         cmp     ax,80h
  2686.         jl      imul_reg_reg_imm_8bit_store
  2687.       imul_reg_reg_imm_16bit_store:
  2688.         mov     [base_code],69h
  2689.         call    store_nomem_instruction
  2690.         mov     ax,dx
  2691.         call    mark_relocation
  2692.         stos    word [edi]
  2693.         jmp     instruction_assembled
  2694.       imul_reg_reg_imm_32bit:
  2695.         call    operand_32bit
  2696.         push    ebx
  2697.         call    get_dword_value
  2698.       imul_reg_reg_imm_32bit_ok:
  2699.         pop     ebx
  2700.         mov     edx,eax
  2701.         cmp     [value_type],0
  2702.         jne     imul_reg_reg_imm_32bit_store
  2703.         cmp     [size_declared],0
  2704.         jne     imul_reg_reg_imm_32bit_store
  2705.         cmp     eax,-80h
  2706.         jl      imul_reg_reg_imm_32bit_store
  2707.         cmp     eax,80h
  2708.         jl      imul_reg_reg_imm_8bit_store
  2709.       imul_reg_reg_imm_32bit_store:
  2710.         mov     [base_code],69h
  2711.         call    store_nomem_instruction
  2712.         mov     eax,edx
  2713.         call    mark_relocation
  2714.         stos    dword [edi]
  2715.         jmp     instruction_assembled
  2716.       imul_reg_reg_imm_64bit:
  2717.         cmp     [size_declared],0
  2718.         jne     long_immediate_not_encodable
  2719.         call    operand_64bit
  2720.         push    ebx
  2721.         call    get_simm32
  2722.         cmp     [value_type],4
  2723.         jae     long_immediate_not_encodable
  2724.         jmp     imul_reg_reg_imm_32bit_ok
  2725.       imul_reg_reg_imm_8bit_store:
  2726.         mov     [base_code],6Bh
  2727.         call    store_nomem_instruction
  2728.         mov     al,dl
  2729.         stos    byte [edi]
  2730.         jmp     instruction_assembled
  2731. in_instruction:
  2732.         lods    byte [esi]
  2733.         call    get_size_operator
  2734.         cmp     al,10h
  2735.         jne     invalid_operand
  2736.         lods    byte [esi]
  2737.         call    convert_register
  2738.         or      al,al
  2739.         jnz     invalid_operand
  2740.         lods    byte [esi]
  2741.         cmp     al,','
  2742.         jne     invalid_operand
  2743.         mov     al,ah
  2744.         push    eax
  2745.         mov     [operand_size],0
  2746.         lods    byte [esi]
  2747.         call    get_size_operator
  2748.         cmp     al,'('
  2749.         je      in_imm
  2750.         cmp     al,10h
  2751.         je      in_reg
  2752.         jmp     invalid_operand
  2753.       in_reg:
  2754.         lods    byte [esi]
  2755.         cmp     al,22h
  2756.         jne     invalid_operand
  2757.         pop     eax
  2758.         cmp     al,1
  2759.         je      in_al_dx
  2760.         cmp     al,2
  2761.         je      in_ax_dx
  2762.         cmp     al,4
  2763.         je      in_eax_dx
  2764.         jmp     invalid_operand_size
  2765.       in_al_dx:
  2766.         mov     al,0ECh
  2767.         stos    byte [edi]
  2768.         jmp     instruction_assembled
  2769.       in_ax_dx:
  2770.         call    operand_16bit
  2771.         mov     [base_code],0EDh
  2772.         call    store_instruction_code
  2773.         jmp     instruction_assembled
  2774.       in_eax_dx:
  2775.         call    operand_32bit
  2776.         mov     [base_code],0EDh
  2777.         call    store_instruction_code
  2778.         jmp     instruction_assembled
  2779.       in_imm:
  2780.         mov     al,[operand_size]
  2781.         or      al,al
  2782.         jz      in_imm_size_ok
  2783.         cmp     al,1
  2784.         jne     invalid_operand_size
  2785.       in_imm_size_ok:
  2786.         call    get_byte_value
  2787.         mov     dl,al
  2788.         pop     eax
  2789.         cmp     al,1
  2790.         je      in_al_imm
  2791.         cmp     al,2
  2792.         je      in_ax_imm
  2793.         cmp     al,4
  2794.         je      in_eax_imm
  2795.         jmp     invalid_operand_size
  2796.       in_al_imm:
  2797.         mov     al,0E4h
  2798.         stos    byte [edi]
  2799.         mov     al,dl
  2800.         stos    byte [edi]
  2801.         jmp     instruction_assembled
  2802.       in_ax_imm:
  2803.         call    operand_16bit
  2804.         mov     [base_code],0E5h
  2805.         call    store_instruction_code
  2806.         mov     al,dl
  2807.         stos    byte [edi]
  2808.         jmp     instruction_assembled
  2809.       in_eax_imm:
  2810.         call    operand_32bit
  2811.         mov     [base_code],0E5h
  2812.         call    store_instruction_code
  2813.         mov     al,dl
  2814.         stos    byte [edi]
  2815.         jmp     instruction_assembled
  2816. out_instruction:
  2817.         lods    byte [esi]
  2818.         call    get_size_operator
  2819.         cmp     al,'('
  2820.         je      out_imm
  2821.         cmp     al,10h
  2822.         jne     invalid_operand
  2823.         lods    byte [esi]
  2824.         cmp     al,22h
  2825.         jne     invalid_operand
  2826.         lods    byte [esi]
  2827.         cmp     al,','
  2828.         jne     invalid_operand
  2829.         mov     [operand_size],0
  2830.         lods    byte [esi]
  2831.         call    get_size_operator
  2832.         cmp     al,10h
  2833.         jne     invalid_operand
  2834.         lods    byte [esi]
  2835.         call    convert_register
  2836.         or      al,al
  2837.         jnz     invalid_operand
  2838.         mov     al,ah
  2839.         cmp     al,1
  2840.         je      out_dx_al
  2841.         cmp     al,2
  2842.         je      out_dx_ax
  2843.         cmp     al,4
  2844.         je      out_dx_eax
  2845.         jmp     invalid_operand_size
  2846.       out_dx_al:
  2847.         mov     al,0EEh
  2848.         stos    byte [edi]
  2849.         jmp     instruction_assembled
  2850.       out_dx_ax:
  2851.         call    operand_16bit
  2852.         mov     [base_code],0EFh
  2853.         call    store_instruction_code
  2854.         jmp     instruction_assembled
  2855.       out_dx_eax:
  2856.         call    operand_32bit
  2857.         mov     [base_code],0EFh
  2858.         call    store_instruction_code
  2859.         jmp     instruction_assembled
  2860.       out_imm:
  2861.         mov     al,[operand_size]
  2862.         or      al,al
  2863.         jz      out_imm_size_ok
  2864.         cmp     al,1
  2865.         jne     invalid_operand_size
  2866.       out_imm_size_ok:
  2867.         call    get_byte_value
  2868.         mov     dl,al
  2869.         lods    byte [esi]
  2870.         cmp     al,','
  2871.         jne     invalid_operand
  2872.         mov     [operand_size],0
  2873.         lods    byte [esi]
  2874.         call    get_size_operator
  2875.         cmp     al,10h
  2876.         jne     invalid_operand
  2877.         lods    byte [esi]
  2878.         call    convert_register
  2879.         or      al,al
  2880.         jnz     invalid_operand
  2881.         mov     al,ah
  2882.         cmp     al,1
  2883.         je      out_imm_al
  2884.         cmp     al,2
  2885.         je      out_imm_ax
  2886.         cmp     al,4
  2887.         je      out_imm_eax
  2888.         jmp     invalid_operand_size
  2889.       out_imm_al:
  2890.         mov     al,0E6h
  2891.         stos    byte [edi]
  2892.         mov     al,dl
  2893.         stos    byte [edi]
  2894.         jmp     instruction_assembled
  2895.       out_imm_ax:
  2896.         call    operand_16bit
  2897.         mov     [base_code],0E7h
  2898.         call    store_instruction_code
  2899.         mov     al,dl
  2900.         stos    byte [edi]
  2901.         jmp     instruction_assembled
  2902.       out_imm_eax:
  2903.         call    operand_32bit
  2904.         mov     [base_code],0E7h
  2905.         call    store_instruction_code
  2906.         mov     al,dl
  2907.         stos    byte [edi]
  2908.         jmp     instruction_assembled
  2909.  
  2910. conditional_jump:
  2911.         mov     [base_code],al
  2912.         lods    byte [esi]
  2913.         call    get_jump_operator
  2914.         cmp     [jump_type],2
  2915.         je      invalid_operand
  2916.         call    get_size_operator
  2917.         cmp     al,'('
  2918.         jne     invalid_operand
  2919.         cmp     byte [esi],'.'
  2920.         je      invalid_value
  2921.         call    get_relative_offset
  2922.         sub     eax,2
  2923.         jo      jump_out_of_range
  2924.         cmp     [next_pass_needed],0
  2925.         jne     conditional_jump_value_ok
  2926.         cmp     [value_type],1
  2927.         je      invalid_use_of_symbol
  2928.         ja      conditional_jump_32bit
  2929.       conditional_jump_value_ok:
  2930.         mov     bl,[operand_size]
  2931.         cmp     bl,1
  2932.         je      conditional_jump_8bit
  2933.         cmp     bl,2
  2934.         je      conditional_jump_16bit
  2935.         cmp     bl,4
  2936.         je      conditional_jump_32bit
  2937.         or      bl,bl
  2938.         jnz     invalid_operand_size
  2939.         cmp     eax,80h
  2940.         jb      conditional_jump_8bit
  2941.         cmp     eax,-80h
  2942.         jae     conditional_jump_8bit
  2943.         cmp     [code_type],16
  2944.         je      conditional_jump_16bit
  2945.       conditional_jump_32bit:
  2946.         sub     eax,2
  2947.         jo      jump_out_of_range
  2948.         mov     edx,eax
  2949.         mov     ecx,edi
  2950.         call    operand_32bit
  2951.         mov     al,[base_code]
  2952.         add     al,10h
  2953.         mov     [extended_code],al
  2954.         mov     [base_code],0Fh
  2955.         call    store_instruction_code
  2956.         mov     eax,edi
  2957.         sub     eax,ecx
  2958.         sub     edx,eax
  2959.         jo      jump_out_of_range
  2960.         mov     eax,edx
  2961.         call    mark_relocation
  2962.         stos    dword [edi]
  2963.         jmp     instruction_assembled
  2964.       conditional_jump_16bit:
  2965.         mov     edx,eax
  2966.         mov     ecx,edi
  2967.         call    operand_16bit
  2968.         mov     al,[base_code]
  2969.         add     al,10h
  2970.         mov     [extended_code],al
  2971.         mov     [base_code],0Fh
  2972.         call    store_instruction_code
  2973.         mov     eax,edi
  2974.         sub     eax,ecx
  2975.         sub     edx,eax
  2976.         jo      jump_out_of_range
  2977.         mov     eax,edx
  2978.         stos    word [edi]
  2979.         cmp     eax,10000h
  2980.         jge     jump_out_of_range
  2981.         cmp     eax,-10000h
  2982.         jl      jump_out_of_range
  2983.         jmp     instruction_assembled
  2984.       conditional_jump_8bit:
  2985.         mov     edx,eax
  2986.         mov     ah,al
  2987.         mov     al,[base_code]
  2988.         stos    word [edi]
  2989.         cmp     edx,80h
  2990.         jge     jump_out_of_range
  2991.         cmp     edx,-80h
  2992.         jl      jump_out_of_range
  2993.         jmp     instruction_assembled
  2994.       jump_out_of_range:
  2995.         cmp     [error_line],0
  2996.         jne     instruction_assembled
  2997.         mov     eax,[current_line]
  2998.         mov     [error_line],eax
  2999.         mov     [error],relative_jump_out_of_range
  3000.         jmp     instruction_assembled
  3001. loop_instruction_16bit:
  3002.         cmp     [code_type],64
  3003.         je      illegal_instruction
  3004.         mov     dl,al
  3005.         call    address_16bit_prefix
  3006.         mov     al,dl
  3007.         jmp     loop_instruction
  3008. loop_instruction_32bit:
  3009.         mov     dl,al
  3010.         call    address_32bit_prefix
  3011.         mov     al,dl
  3012.         jmp     loop_instruction
  3013. loop_instruction_64bit:
  3014.         cmp     [code_type],64
  3015.         jne     illegal_instruction
  3016. loop_instruction:
  3017.         mov     [base_code],al
  3018.         lods    byte [esi]
  3019.         call    get_jump_operator
  3020.         cmp     [jump_type],2
  3021.         je      invalid_operand
  3022.         call    get_size_operator
  3023.         cmp     al,'('
  3024.         jne     invalid_operand
  3025.         cmp     byte [esi],'.'
  3026.         je      invalid_value
  3027.         call    get_relative_offset
  3028.         cmp     [next_pass_needed],0
  3029.         jne     loop_value_ok
  3030.         cmp     [value_type],0
  3031.         jne     invalid_use_of_symbol
  3032.       loop_value_ok:
  3033.         mov     bl,[operand_size]
  3034.         cmp     bl,1
  3035.         je      loop_8bit
  3036.         or      bl,bl
  3037.         jnz     invalid_operand_size
  3038.       loop_8bit:
  3039.         sub     eax,2
  3040.         jo      jump_out_of_range
  3041.         mov     edx,eax
  3042.         mov     al,[base_code]
  3043.         stos    byte [edi]
  3044.         mov     al,dl
  3045.         stos    byte [edi]
  3046.         cmp     edx,80h
  3047.         jge     jump_out_of_range
  3048.         cmp     edx,-80h
  3049.         jl      jump_out_of_range
  3050.         jmp     instruction_assembled
  3051. call_instruction:
  3052.         mov     [postbyte_register],10b
  3053.         mov     [base_code],0E8h
  3054.         mov     [extended_code],9Ah
  3055.         jmp     process_jmp
  3056. jmp_instruction:
  3057.         mov     [postbyte_register],100b
  3058.         mov     [base_code],0E9h
  3059.         mov     [extended_code],0EAh
  3060.       process_jmp:
  3061.         lods    byte [esi]
  3062.         call    get_jump_operator
  3063.         call    get_size_operator
  3064.         cmp     al,'('
  3065.         je      jmp_imm
  3066.         mov     [base_code],0FFh
  3067.         cmp     al,10h
  3068.         je      jmp_reg
  3069.         cmp     al,'['
  3070.         jne     invalid_operand
  3071.       jmp_mem:
  3072.         call    get_address
  3073.         mov     edx,eax
  3074.         mov     al,[operand_size]
  3075.         or      al,al
  3076.         jz      jmp_mem_size_not_specified
  3077.         cmp     al,2
  3078.         je      jmp_mem_16bit
  3079.         cmp     al,4
  3080.         je      jmp_mem_32bit
  3081.         cmp     al,6
  3082.         je      jmp_mem_48bit
  3083.         cmp     al,8
  3084.         je      jmp_mem_64bit
  3085.         cmp     al,10
  3086.         je      jmp_mem_80bit
  3087.         jmp     invalid_operand_size
  3088.       jmp_mem_size_not_specified:
  3089.         cmp     [jump_type],2
  3090.         je      jmp_mem_far
  3091.         cmp     [jump_type],1
  3092.         je      jmp_mem_near
  3093.         cmp     [error_line],0
  3094.         jne     jmp_mem_near
  3095.         mov     eax,[current_line]
  3096.         mov     [error_line],eax
  3097.         mov     [error],operand_size_not_specified
  3098.       jmp_mem_near:
  3099.         cmp     [code_type],16
  3100.         je      jmp_mem_16bit
  3101.         cmp     [code_type],32
  3102.         je      jmp_mem_near_32bit
  3103.       jmp_mem_64bit:
  3104.         cmp     [jump_type],2
  3105.         je      invalid_operand_size
  3106.         cmp     [code_type],64
  3107.         jne     illegal_instruction
  3108.         call    store_instruction
  3109.         jmp     instruction_assembled
  3110.       jmp_mem_far:
  3111.         cmp     [code_type],16
  3112.         je      jmp_mem_far_32bit
  3113.       jmp_mem_48bit:
  3114.         call    operand_32bit
  3115.       jmp_mem_far_store:
  3116.         cmp     [jump_type],1
  3117.         je      invalid_operand_size
  3118.         inc     [postbyte_register]
  3119.         call    store_instruction
  3120.         jmp     instruction_assembled
  3121.       jmp_mem_80bit:
  3122.         call    operand_64bit
  3123.         jmp     jmp_mem_far_store
  3124.       jmp_mem_far_32bit:
  3125.         call    operand_16bit
  3126.         jmp     jmp_mem_far_store
  3127.       jmp_mem_32bit:
  3128.         cmp     [jump_type],2
  3129.         je      jmp_mem_far_32bit
  3130.         cmp     [jump_type],1
  3131.         je      jmp_mem_near_32bit
  3132.         cmp     [code_type],16
  3133.         je      jmp_mem_far_32bit
  3134.       jmp_mem_near_32bit:
  3135.         cmp     [code_type],64
  3136.         je      illegal_instruction
  3137.         call    operand_32bit
  3138.         call    store_instruction
  3139.         jmp     instruction_assembled
  3140.       jmp_mem_16bit:
  3141.         cmp     [jump_type],2
  3142.         je      invalid_operand_size
  3143.         call    operand_16bit
  3144.         call    store_instruction
  3145.         jmp     instruction_assembled
  3146.       jmp_reg:
  3147.         cmp     [jump_type],2
  3148.         je      invalid_operand
  3149.         lods    byte [esi]
  3150.         call    convert_register
  3151.         mov     bl,al
  3152.         mov     al,ah
  3153.         cmp     al,2
  3154.         je      jmp_reg_16bit
  3155.         cmp     al,4
  3156.         je      jmp_reg_32bit
  3157.         cmp     al,8
  3158.         jne     invalid_operand_size
  3159.       jmp_reg_64bit:
  3160.         cmp     [code_type],64
  3161.         jne     illegal_instruction
  3162.         call    store_nomem_instruction
  3163.         jmp     instruction_assembled
  3164.       jmp_reg_32bit:
  3165.         cmp     [code_type],64
  3166.         je      illegal_instruction
  3167.         call    store_nomem_instruction
  3168.         jmp     instruction_assembled
  3169.       jmp_reg_16bit:
  3170.         call    operand_16bit
  3171.         call    store_nomem_instruction
  3172.         jmp     instruction_assembled
  3173.       jmp_imm:
  3174.         cmp     byte [esi],'.'
  3175.         je      invalid_value
  3176.         mov     ebx,esi
  3177.         dec     esi
  3178.         call    skip_symbol
  3179.         xchg    esi,ebx
  3180.         cmp     byte [ebx],':'
  3181.         je      jmp_far
  3182.         call    get_relative_offset
  3183.         cmp     [jump_type],2
  3184.         je      invalid_operand
  3185.         sub     eax,2
  3186.         jo      jump_out_of_range
  3187.         cmp     [next_pass_needed],0
  3188.         jne     jmp_value_ok
  3189.         cmp     [value_type],1
  3190.         je      invalid_use_of_symbol
  3191.         ja      jmp_32bit
  3192.       jmp_value_ok:
  3193.         mov     bl,[operand_size]
  3194.         cmp     bl,1
  3195.         je      jmp_8bit
  3196.         cmp     bl,2
  3197.         je      jmp_16bit
  3198.         cmp     bl,4
  3199.         je      jmp_32bit
  3200.         or      bl,bl
  3201.         jnz     invalid_operand_size
  3202.         cmp     [base_code],0E9h
  3203.         jne     jmp_no8bit
  3204.         cmp     eax,80h
  3205.         jb      jmp_8bit
  3206.         cmp     eax,-80h
  3207.         jae     jmp_8bit
  3208.       jmp_no8bit:
  3209.         cmp     [code_type],16
  3210.         je      jmp_16bit
  3211.       jmp_32bit:
  3212.         test    [operand_size],not 4
  3213.         jnz     invalid_operand_size
  3214.         sub     eax,2
  3215.         jo      jump_out_of_range
  3216.         mov     edx,eax
  3217.         mov     ecx,edi
  3218.         call    operand_32bit
  3219.         call    store_instruction_code
  3220.         mov     eax,edi
  3221.         sub     eax,ecx
  3222.         sub     edx,eax
  3223.         jo      jump_out_of_range
  3224.         mov     eax,edx
  3225.         call    mark_relocation
  3226.         stos    dword [edi]
  3227.         jmp     instruction_assembled
  3228.       jmp_16bit:
  3229.         mov     edx,eax
  3230.         mov     ecx,edi
  3231.         call    operand_16bit
  3232.         call    store_instruction_code
  3233.         mov     eax,edi
  3234.         sub     eax,ecx
  3235.         sub     edx,eax
  3236.         jo      jump_out_of_range
  3237.         mov     eax,edx
  3238.         stos    word [edi]
  3239.         cmp     eax,10000h
  3240.         jge     jump_out_of_range
  3241.         cmp     eax,-10000h
  3242.         jl      jump_out_of_range
  3243.         jmp     instruction_assembled
  3244.       jmp_8bit:
  3245.         cmp     [base_code],0E9h
  3246.         jne     invalid_operand_size
  3247.         mov     edx,eax
  3248.         mov     ah,al
  3249.         mov     al,0EBh
  3250.         stos    word [edi]
  3251.         cmp     edx,80h
  3252.         jge     jump_out_of_range
  3253.         cmp     edx,-80h
  3254.         jl      jump_out_of_range
  3255.         jmp     instruction_assembled
  3256.       jmp_far:
  3257.         cmp     [jump_type],1
  3258.         je      invalid_operand
  3259.         cmp     [code_type],64
  3260.         je      illegal_instruction
  3261.         mov     al,[extended_code]
  3262.         mov     [base_code],al
  3263.         call    get_word_value
  3264.         push    eax
  3265.         inc     esi
  3266.         lods    byte [esi]
  3267.         cmp     al,'('
  3268.         jne     invalid_operand
  3269.         mov     al,[value_type]
  3270.         push    eax [symbol_identifier]
  3271.         cmp     byte [esi],'.'
  3272.         je      invalid_value
  3273.         mov     al,[operand_size]
  3274.         cmp     al,4
  3275.         je      jmp_far_16bit
  3276.         cmp     al,6
  3277.         je      jmp_far_32bit
  3278.         or      al,al
  3279.         jnz     invalid_operand_size
  3280.         cmp     [code_type],16
  3281.         jne     jmp_far_32bit
  3282.       jmp_far_16bit:
  3283.         call    get_word_value
  3284.         mov     ebx,eax
  3285.         call    operand_16bit
  3286.         call    store_instruction_code
  3287.         mov     ax,bx
  3288.         call    mark_relocation
  3289.         stos    word [edi]
  3290.       jmp_far_segment:
  3291.         pop     [symbol_identifier] eax
  3292.         mov     [value_type],al
  3293.         pop     eax
  3294.         call    mark_relocation
  3295.         stos    word [edi]
  3296.         jmp     instruction_assembled
  3297.       jmp_far_32bit:
  3298.         call    get_dword_value
  3299.         mov     ebx,eax
  3300.         call    operand_32bit
  3301.         call    store_instruction_code
  3302.         mov     eax,ebx
  3303.         call    mark_relocation
  3304.         stos    dword [edi]
  3305.         jmp     jmp_far_segment
  3306.  
  3307. movs_instruction:
  3308.         lods    byte [esi]
  3309.         call    get_size_operator
  3310.         cmp     al,'['
  3311.         jne     invalid_operand
  3312.         call    get_address
  3313.         or      eax,eax
  3314.         jnz     invalid_address
  3315.         or      bl,ch
  3316.         jnz     invalid_address
  3317.         cmp     [segment_register],1
  3318.         ja      invalid_address
  3319.         push    ebx
  3320.         lods    byte [esi]
  3321.         cmp     al,','
  3322.         jne     invalid_operand
  3323.         lods    byte [esi]
  3324.         call    get_size_operator
  3325.         cmp     al,'['
  3326.         jne     invalid_operand
  3327.         call    get_address
  3328.         pop     edx
  3329.         or      eax,eax
  3330.         jnz     invalid_address
  3331.         or      bl,ch
  3332.         jnz     invalid_address
  3333.         mov     al,dh
  3334.         mov     ah,bh
  3335.         shr     al,4
  3336.         shr     ah,4
  3337.         cmp     al,ah
  3338.         jne     address_sizes_do_not_agree
  3339.         and     bh,111b
  3340.         and     dh,111b
  3341.         cmp     bh,6
  3342.         jne     invalid_address
  3343.         cmp     dh,7
  3344.         jne     invalid_address
  3345.         cmp     al,2
  3346.         je      movs_address_16bit
  3347.         cmp     al,4
  3348.         je      movs_address_32bit
  3349.         cmp     [code_type],64
  3350.         jne     invalid_address_size
  3351.         jmp     movs_store
  3352.       movs_address_32bit:
  3353.         call    address_32bit_prefix
  3354.         jmp     movs_store
  3355.       movs_address_16bit:
  3356.         cmp     [code_type],64
  3357.         je      invalid_address_size
  3358.         call    address_16bit_prefix
  3359.       movs_store:
  3360.         cmp     [segment_register],4
  3361.         je      movs_segment_ok
  3362.         call    store_segment_prefix
  3363.       movs_segment_ok:
  3364.         mov     al,0A4h
  3365.         mov     bl,[operand_size]
  3366.         cmp     bl,1
  3367.         je      simple_instruction
  3368.         inc     al
  3369.         cmp     bl,2
  3370.         je      simple_instruction_16bit
  3371.         cmp     bl,4
  3372.         je      simple_instruction_32bit
  3373.         cmp     bl,8
  3374.         je      simple_instruction_64bit
  3375.         or      bl,bl
  3376.         jz      operand_size_not_specified
  3377.         jmp     invalid_operand_size
  3378. lods_instruction:
  3379.         lods    byte [esi]
  3380.         call    get_size_operator
  3381.         cmp     al,'['
  3382.         jne     invalid_operand
  3383.         call    get_address
  3384.         or      eax,eax
  3385.         jnz     invalid_address
  3386.         or      bl,ch
  3387.         jnz     invalid_address
  3388.         cmp     bh,26h
  3389.         je      lods_address_16bit
  3390.         cmp     bh,46h
  3391.         je      lods_address_32bit
  3392.         cmp     bh,86h
  3393.         jne     invalid_address
  3394.         cmp     [code_type],64
  3395.         jne     invalid_address_size
  3396.         jmp     lods_store
  3397.       lods_address_32bit:
  3398.         call    address_32bit_prefix
  3399.         jmp     lods_store
  3400.       lods_address_16bit:
  3401.         cmp     [code_type],64
  3402.         je      invalid_address_size
  3403.         call    address_16bit_prefix
  3404.       lods_store:
  3405.         cmp     [segment_register],4
  3406.         je      lods_segment_ok
  3407.         call    store_segment_prefix
  3408.       lods_segment_ok:
  3409.         mov     al,0ACh
  3410.         mov     bl,[operand_size]
  3411.         cmp     bl,1
  3412.         je      simple_instruction
  3413.         inc     al
  3414.         cmp     bl,2
  3415.         je      simple_instruction_16bit
  3416.         cmp     bl,4
  3417.         je      simple_instruction_32bit
  3418.         cmp     bl,8
  3419.         je      simple_instruction_64bit
  3420.         or      bl,bl
  3421.         jz      operand_size_not_specified
  3422.         jmp     invalid_operand_size
  3423. stos_instruction:
  3424.         mov     [base_code],al
  3425.         lods    byte [esi]
  3426.         call    get_size_operator
  3427.         cmp     al,'['
  3428.         jne     invalid_operand
  3429.         call    get_address
  3430.         or      eax,eax
  3431.         jnz     invalid_address
  3432.         or      bl,ch
  3433.         jnz     invalid_address
  3434.         cmp     bh,27h
  3435.         je      stos_address_16bit
  3436.         cmp     bh,47h
  3437.         je      stos_address_32bit
  3438.         cmp     bh,87h
  3439.         jne     invalid_address
  3440.         cmp     [code_type],64
  3441.         jne     invalid_address_size
  3442.         jmp     stos_store
  3443.       stos_address_32bit:
  3444.         call    address_32bit_prefix
  3445.         jmp     stos_store
  3446.       stos_address_16bit:
  3447.         cmp     [code_type],64
  3448.         je      invalid_address_size
  3449.         call    address_16bit_prefix
  3450.       stos_store:
  3451.         cmp     [segment_register],1
  3452.         ja      invalid_address
  3453.         mov     al,[base_code]
  3454.         mov     bl,[operand_size]
  3455.         cmp     bl,1
  3456.         je      simple_instruction
  3457.         inc     al
  3458.         cmp     bl,2
  3459.         je      simple_instruction_16bit
  3460.         cmp     bl,4
  3461.         je      simple_instruction_32bit
  3462.         cmp     bl,8
  3463.         je      simple_instruction_64bit
  3464.         or      bl,bl
  3465.         jz      operand_size_not_specified
  3466.         jmp     invalid_operand_size
  3467. cmps_instruction:
  3468.         lods    byte [esi]
  3469.         call    get_size_operator
  3470.         cmp     al,'['
  3471.         jne     invalid_operand
  3472.         call    get_address
  3473.         or      eax,eax
  3474.         jnz     invalid_address
  3475.         or      bl,ch
  3476.         jnz     invalid_address
  3477.         mov     al,[segment_register]
  3478.         push    ax bx
  3479.         lods    byte [esi]
  3480.         cmp     al,','
  3481.         jne     invalid_operand
  3482.         lods    byte [esi]
  3483.         call    get_size_operator
  3484.         cmp     al,'['
  3485.         jne     invalid_operand
  3486.         call    get_address
  3487.         or      eax,eax
  3488.         jnz     invalid_address
  3489.         or      bl,ch
  3490.         jnz     invalid_address
  3491.         pop     dx ax
  3492.         cmp     [segment_register],1
  3493.         ja      invalid_address
  3494.         mov     [segment_register],al
  3495.         mov     al,dh
  3496.         mov     ah,bh
  3497.         shr     al,4
  3498.         shr     ah,4
  3499.         cmp     al,ah
  3500.         jne     address_sizes_do_not_agree
  3501.         and     bh,111b
  3502.         and     dh,111b
  3503.         cmp     bh,7
  3504.         jne     invalid_address
  3505.         cmp     dh,6
  3506.         jne     invalid_address
  3507.         cmp     al,2
  3508.         je      cmps_address_16bit
  3509.         cmp     al,4
  3510.         je      cmps_address_32bit
  3511.         cmp     [code_type],64
  3512.         jne     invalid_address_size
  3513.         jmp     cmps_store
  3514.       cmps_address_32bit:
  3515.         call    address_32bit_prefix
  3516.         jmp     cmps_store
  3517.       cmps_address_16bit:
  3518.         cmp     [code_type],64
  3519.         je      invalid_address_size
  3520.         call    address_16bit_prefix
  3521.       cmps_store:
  3522.         cmp     [segment_register],4
  3523.         je      cmps_segment_ok
  3524.         call    store_segment_prefix
  3525.       cmps_segment_ok:
  3526.         mov     al,0A6h
  3527.         mov     bl,[operand_size]
  3528.         cmp     bl,1
  3529.         je      simple_instruction
  3530.         inc     al
  3531.         cmp     bl,2
  3532.         je      simple_instruction_16bit
  3533.         cmp     bl,4
  3534.         je      simple_instruction_32bit
  3535.         cmp     bl,8
  3536.         je      simple_instruction_64bit
  3537.         or      bl,bl
  3538.         jz      operand_size_not_specified
  3539.         jmp     invalid_operand_size
  3540. ins_instruction:
  3541.         lods    byte [esi]
  3542.         call    get_size_operator
  3543.         cmp     al,'['
  3544.         jne     invalid_operand
  3545.         call    get_address
  3546.         or      eax,eax
  3547.         jnz     invalid_address
  3548.         or      bl,ch
  3549.         jnz     invalid_address
  3550.         cmp     bh,27h
  3551.         je      ins_address_16bit
  3552.         cmp     bh,47h
  3553.         je      ins_address_32bit
  3554.         cmp     bh,87h
  3555.         jne     invalid_address
  3556.         cmp     [code_type],64
  3557.         jne     invalid_address_size
  3558.         jmp     ins_store
  3559.       ins_address_32bit:
  3560.         call    address_32bit_prefix
  3561.         jmp     ins_store
  3562.       ins_address_16bit:
  3563.         cmp     [code_type],64
  3564.         je      invalid_address_size
  3565.         call    address_16bit_prefix
  3566.       ins_store:
  3567.         cmp     [segment_register],1
  3568.         ja      invalid_address
  3569.         lods    byte [esi]
  3570.         cmp     al,','
  3571.         jne     invalid_operand
  3572.         lods    byte [esi]
  3573.         cmp     al,10h
  3574.         jne     invalid_operand
  3575.         lods    byte [esi]
  3576.         cmp     al,22h
  3577.         jne     invalid_operand
  3578.         mov     al,6Ch
  3579.         mov     bl,[operand_size]
  3580.         cmp     bl,1
  3581.         je      simple_instruction
  3582.         inc     al
  3583.         cmp     bl,2
  3584.         je      simple_instruction_16bit
  3585.         cmp     bl,4
  3586.         je      simple_instruction_32bit
  3587.         or      bl,bl
  3588.         jz      operand_size_not_specified
  3589.         jmp     invalid_operand_size
  3590. outs_instruction:
  3591.         lods    byte [esi]
  3592.         cmp     al,10h
  3593.         jne     invalid_operand
  3594.         lods    byte [esi]
  3595.         cmp     al,22h
  3596.         jne     invalid_operand
  3597.         lods    byte [esi]
  3598.         cmp     al,','
  3599.         jne     invalid_operand
  3600.         lods    byte [esi]
  3601.         call    get_size_operator
  3602.         cmp     al,'['
  3603.         jne     invalid_operand
  3604.         call    get_address
  3605.         or      eax,eax
  3606.         jnz     invalid_address
  3607.         or      bl,ch
  3608.         jnz     invalid_address
  3609.         cmp     bh,26h
  3610.         je      outs_address_16bit
  3611.         cmp     bh,46h
  3612.         je      outs_address_32bit
  3613.         cmp     bh,86h
  3614.         jne     invalid_address
  3615.         cmp     [code_type],64
  3616.         jne     invalid_address_size
  3617.         jmp     outs_store
  3618.       outs_address_32bit:
  3619.         call    address_32bit_prefix
  3620.         jmp     outs_store
  3621.       outs_address_16bit:
  3622.         cmp     [code_type],64
  3623.         je      invalid_address_size
  3624.         call    address_16bit_prefix
  3625.       outs_store:
  3626.         cmp     [segment_register],4
  3627.         je      outs_segment_ok
  3628.         call    store_segment_prefix
  3629.       outs_segment_ok:
  3630.         mov     al,6Eh
  3631.         mov     bl,[operand_size]
  3632.         cmp     bl,1
  3633.         je      simple_instruction
  3634.         inc     al
  3635.         cmp     bl,2
  3636.         je      simple_instruction_16bit
  3637.         cmp     bl,4
  3638.         je      simple_instruction_32bit
  3639.         or      bl,bl
  3640.         jz      operand_size_not_specified
  3641.         jmp     invalid_operand_size
  3642. xlat_instruction:
  3643.         lods    byte [esi]
  3644.         call    get_size_operator
  3645.         cmp     al,'['
  3646.         jne     invalid_operand
  3647.         call    get_address
  3648.         or      eax,eax
  3649.         jnz     invalid_address
  3650.         or      bl,ch
  3651.         jnz     invalid_address
  3652.         cmp     bh,23h
  3653.         je      xlat_address_16bit
  3654.         cmp     bh,43h
  3655.         je      xlat_address_32bit
  3656.         cmp     bh,83h
  3657.         jne     invalid_address
  3658.         cmp     [code_type],64
  3659.         jne     invalid_address_size
  3660.         jmp     xlat_store
  3661.       xlat_address_32bit:
  3662.         call    address_32bit_prefix
  3663.         jmp     xlat_store
  3664.       xlat_address_16bit:
  3665.         cmp     [code_type],64
  3666.         je      invalid_address_size
  3667.         call    address_16bit_prefix
  3668.       xlat_store:
  3669.         call    store_segment_prefix_if_necessary
  3670.         mov     al,0D7h
  3671.         cmp     [operand_size],1
  3672.         jbe     simple_instruction
  3673.         jmp     invalid_operand_size
  3674.  
  3675. pm_word_instruction:
  3676.         mov     ah,al
  3677.         shr     ah,4
  3678.         and     al,111b
  3679.         mov     [base_code],0Fh
  3680.         mov     [extended_code],ah
  3681.         mov     [postbyte_register],al
  3682.         lods    byte [esi]
  3683.         call    get_size_operator
  3684.         cmp     al,10h
  3685.         je      pm_reg
  3686.       pm_mem:
  3687.         cmp     al,'['
  3688.         jne     invalid_operand
  3689.         call    get_address
  3690.         mov     al,[operand_size]
  3691.         cmp     al,2
  3692.         je      pm_mem_store
  3693.         or      al,al
  3694.         jnz     invalid_operand_size
  3695.       pm_mem_store:
  3696.         call    store_instruction
  3697.         jmp     instruction_assembled
  3698.       pm_reg:
  3699.         lods    byte [esi]
  3700.         call    convert_register
  3701.         mov     bl,al
  3702.         cmp     ah,2
  3703.         jne     invalid_operand_size
  3704.         call    store_nomem_instruction
  3705.         jmp     instruction_assembled
  3706. pm_store_word_instruction:
  3707.         mov     ah,al
  3708.         shr     ah,4
  3709.         and     al,111b
  3710.         mov     [base_code],0Fh
  3711.         mov     [extended_code],ah
  3712.         mov     [postbyte_register],al
  3713.         lods    byte [esi]
  3714.         call    get_size_operator
  3715.         cmp     al,10h
  3716.         jne     pm_mem
  3717.         lods    byte [esi]
  3718.         call    convert_register
  3719.         mov     bl,al
  3720.         mov     al,ah
  3721.         call    operand_autodetect
  3722.         call    store_nomem_instruction
  3723.         jmp     instruction_assembled
  3724. lgdt_instruction:
  3725.         mov     [base_code],0Fh
  3726.         mov     [extended_code],1
  3727.         mov     [postbyte_register],al
  3728.         lods    byte [esi]
  3729.         call    get_size_operator
  3730.         cmp     al,'['
  3731.         jne     invalid_operand
  3732.         call    get_address
  3733.         mov     al,[operand_size]
  3734.         cmp     al,6
  3735.         je      lgdt_mem_48bit
  3736.         cmp     al,10
  3737.         je      lgdt_mem_80bit
  3738.         or      al,al
  3739.         jnz     invalid_operand_size
  3740.         cmp     [code_type],64
  3741.         je      lgdt_mem_80bit
  3742.       lgdt_mem_48bit:
  3743.         cmp     [code_type],64
  3744.         je      illegal_instruction
  3745.         call    store_instruction
  3746.         jmp     instruction_assembled
  3747.       lgdt_mem_80bit:
  3748.         cmp     [code_type],64
  3749.         jne     illegal_instruction
  3750.         call    store_instruction
  3751.         jmp     instruction_assembled
  3752. lar_instruction:
  3753.         mov     [extended_code],al
  3754.         mov     [base_code],0Fh
  3755.         lods    byte [esi]
  3756.         call    get_size_operator
  3757.         cmp     al,10h
  3758.         jne     invalid_operand
  3759.         lods    byte [esi]
  3760.         call    convert_register
  3761.         mov     [postbyte_register],al
  3762.         lods    byte [esi]
  3763.         cmp     al,','
  3764.         jne     invalid_operand
  3765.         xor     al,al
  3766.         xchg    al,[operand_size]
  3767.         call    operand_autodetect
  3768.         lods    byte [esi]
  3769.         call    get_size_operator
  3770.         cmp     al,10h
  3771.         je      lar_reg_reg
  3772.         cmp     al,'['
  3773.         jne     invalid_operand
  3774.         call    get_address
  3775.         mov     al,[operand_size]
  3776.         or      al,al
  3777.         jz      lar_reg_mem
  3778.         cmp     al,2
  3779.         jne     invalid_operand_size
  3780.       lar_reg_mem:
  3781.         call    store_instruction
  3782.         jmp     instruction_assembled
  3783.       lar_reg_reg:
  3784.         lods    byte [esi]
  3785.         call    convert_register
  3786.         cmp     ah,2
  3787.         jne     invalid_operand_size
  3788.         mov     bl,al
  3789.         call    store_nomem_instruction
  3790.         jmp     instruction_assembled
  3791. invlpg_instruction:
  3792.         mov     [base_code],0Fh
  3793.         mov     [extended_code],1
  3794.         mov     [postbyte_register],7
  3795.         lods    byte [esi]
  3796.         call    get_size_operator
  3797.         cmp     al,'['
  3798.         jne     invalid_operand
  3799.         call    get_address
  3800.         call    store_instruction
  3801.         jmp     instruction_assembled
  3802. swapgs_instruction:
  3803.         mov     [base_code],0Fh
  3804.         mov     [extended_code],1
  3805.         mov     [postbyte_register],7
  3806.         mov     bl,al
  3807.         call    store_nomem_instruction
  3808.         jmp     instruction_assembled
  3809.  
  3810. basic_486_instruction:
  3811.         mov     [base_code],0Fh
  3812.         mov     [extended_code],al
  3813.         lods    byte [esi]
  3814.         call    get_size_operator
  3815.         cmp     al,10h
  3816.         je      basic_486_reg
  3817.         cmp     al,'['
  3818.         jne     invalid_operand
  3819.         call    get_address
  3820.         push    edx bx cx
  3821.         lods    byte [esi]
  3822.         cmp     al,','
  3823.         jne     invalid_operand
  3824.         lods    byte [esi]
  3825.         call    get_size_operator
  3826.         cmp     al,10h
  3827.         jne     invalid_operand
  3828.         lods    byte [esi]
  3829.         call    convert_register
  3830.         mov     [postbyte_register],al
  3831.         pop     cx bx edx
  3832.         mov     al,ah
  3833.         cmp     al,1
  3834.         je      basic_486_mem_reg_8bit
  3835.         call    operand_autodetect
  3836.         inc     [extended_code]
  3837.       basic_486_mem_reg_8bit:
  3838.         call    store_instruction
  3839.         jmp     instruction_assembled
  3840.       basic_486_reg:
  3841.         lods    byte [esi]
  3842.         call    convert_register
  3843.         mov     [postbyte_register],al
  3844.         lods    byte [esi]
  3845.         cmp     al,','
  3846.         jne     invalid_operand
  3847.         lods    byte [esi]
  3848.         call    get_size_operator
  3849.         cmp     al,10h
  3850.         jne     invalid_operand
  3851.         lods    byte [esi]
  3852.         call    convert_register
  3853.         mov     bl,[postbyte_register]
  3854.         mov     [postbyte_register],al
  3855.         mov     al,ah
  3856.         cmp     al,1
  3857.         je      basic_486_reg_reg_8bit
  3858.         call    operand_autodetect
  3859.         inc     [extended_code]
  3860.       basic_486_reg_reg_8bit:
  3861.         call    store_nomem_instruction
  3862.         jmp     instruction_assembled
  3863. bswap_instruction:
  3864.         lods    byte [esi]
  3865.         call    get_size_operator
  3866.         cmp     al,10h
  3867.         jne     invalid_operand
  3868.         lods    byte [esi]
  3869.         call    convert_register
  3870.         add     al,0C8h
  3871.         mov     [extended_code],al
  3872.         mov     [base_code],0Fh
  3873.         cmp     ah,8
  3874.         je      bswap_reg64
  3875.         cmp     ah,4
  3876.         jne     invalid_operand_size
  3877.         call    operand_32bit
  3878.         call    store_instruction_code
  3879.         jmp     instruction_assembled
  3880.       bswap_reg64:
  3881.         call    operand_64bit
  3882.         call    store_instruction_code
  3883.         jmp     instruction_assembled
  3884. cmpxchgx_instruction:
  3885.         mov     [base_code],0Fh
  3886.         mov     [extended_code],0C7h
  3887.         mov     [postbyte_register],al
  3888.         lods    byte [esi]
  3889.         call    get_size_operator
  3890.         cmp     al,'['
  3891.         jne     invalid_operand
  3892.         call    get_address
  3893.         mov     ah,1
  3894.         xchg    [postbyte_register],ah
  3895.         mov     al,[operand_size]
  3896.         or      al,al
  3897.         jz      cmpxchgx_size_ok
  3898.         cmp     al,ah
  3899.         jne     invalid_operand_size
  3900.       cmpxchgx_size_ok:
  3901.         cmp     ah,16
  3902.         jne     cmpxchgx_store
  3903.         call    operand_64bit
  3904.       cmpxchgx_store:
  3905.         call    store_instruction
  3906.         jmp     instruction_assembled
  3907.  
  3908. basic_fpu_instruction:
  3909.         mov     [postbyte_register],al
  3910.         mov     [base_code],0D8h
  3911.         lods    byte [esi]
  3912.         call    get_size_operator
  3913.         cmp     al,10h
  3914.         je      basic_fpu_streg
  3915.         cmp     al,'['
  3916.         je      basic_fpu_mem
  3917.         dec     esi
  3918.         mov     ah,[postbyte_register]
  3919.         cmp     ah,2
  3920.         jb      invalid_operand
  3921.         cmp     ah,3
  3922.         ja      invalid_operand
  3923.         mov     bl,1
  3924.         call    store_nomem_instruction
  3925.         jmp     instruction_assembled
  3926.       basic_fpu_mem:
  3927.         call    get_address
  3928.         mov     al,[operand_size]
  3929.         cmp     al,4
  3930.         je      basic_fpu_mem_32bit
  3931.         cmp     al,8
  3932.         je      basic_fpu_mem_64bit
  3933.         or      al,al
  3934.         jnz     invalid_operand_size
  3935.         cmp     [error_line],0
  3936.         jne     basic_fpu_mem_32bit
  3937.         mov     eax,[current_line]
  3938.         mov     [error_line],eax
  3939.         mov     [error],operand_size_not_specified
  3940.       basic_fpu_mem_32bit:
  3941.         call    store_instruction
  3942.         jmp     instruction_assembled
  3943.       basic_fpu_mem_64bit:
  3944.         mov     [base_code],0DCh
  3945.         call    store_instruction
  3946.         jmp     instruction_assembled
  3947.       basic_fpu_streg:
  3948.         lods    byte [esi]
  3949.         call    convert_fpu_register
  3950.         mov     bl,al
  3951.         mov     ah,[postbyte_register]
  3952.         cmp     ah,2
  3953.         je      basic_fpu_single_streg
  3954.         cmp     ah,3
  3955.         je      basic_fpu_single_streg
  3956.         or      al,al
  3957.         jz      basic_fpu_st0
  3958.         test    ah,110b
  3959.         jz      basic_fpu_streg_st0
  3960.         xor     [postbyte_register],1
  3961.       basic_fpu_streg_st0:
  3962.         lods    byte [esi]
  3963.         cmp     al,','
  3964.         jne     invalid_operand
  3965.         lods    byte [esi]
  3966.         call    get_size_operator
  3967.         cmp     al,10h
  3968.         jne     invalid_operand
  3969.         lods    byte [esi]
  3970.         call    convert_fpu_register
  3971.         or      al,al
  3972.         jnz     invalid_operand
  3973.         mov     [base_code],0DCh
  3974.         call    store_nomem_instruction
  3975.         jmp     instruction_assembled
  3976.       basic_fpu_st0:
  3977.         lods    byte [esi]
  3978.         cmp     al,','
  3979.         jne     invalid_operand
  3980.         lods    byte [esi]
  3981.         call    get_size_operator
  3982.         cmp     al,10h
  3983.         jne     invalid_operand
  3984.         lods    byte [esi]
  3985.         call    convert_fpu_register
  3986.         mov     bl,al
  3987.       basic_fpu_single_streg:
  3988.         mov     [base_code],0D8h
  3989.         call    store_nomem_instruction
  3990.         jmp     instruction_assembled
  3991. simple_fpu_instruction:
  3992.         mov     ah,al
  3993.         or      ah,11000000b
  3994.         mov     al,0D9h
  3995.         stos    word [edi]
  3996.         jmp     instruction_assembled
  3997. fi_instruction:
  3998.         mov     [postbyte_register],al
  3999.         lods    byte [esi]
  4000.         call    get_size_operator
  4001.         cmp     al,'['
  4002.         jne     invalid_operand
  4003.         call    get_address
  4004.         mov     al,[operand_size]
  4005.         cmp     al,2
  4006.         je      fi_mem_16bit
  4007.         cmp     al,4
  4008.         je      fi_mem_32bit
  4009.         or      al,al
  4010.         jnz     invalid_operand_size
  4011.         cmp     [error_line],0
  4012.         jne     fi_mem_32bit
  4013.         mov     eax,[current_line]
  4014.         mov     [error_line],eax
  4015.         mov     [error],operand_size_not_specified
  4016.       fi_mem_32bit:
  4017.         mov     [base_code],0DAh
  4018.         call    store_instruction
  4019.         jmp     instruction_assembled
  4020.       fi_mem_16bit:
  4021.         mov     [base_code],0DEh
  4022.         call    store_instruction
  4023.         jmp     instruction_assembled
  4024. fld_instruction:
  4025.         mov     [postbyte_register],al
  4026.         lods    byte [esi]
  4027.         call    get_size_operator
  4028.         cmp     al,10h
  4029.         je      fld_streg
  4030.         cmp     al,'['
  4031.         jne     invalid_operand
  4032.         call    get_address
  4033.         mov     al,[operand_size]
  4034.         cmp     al,4
  4035.         je      fld_mem_32bit
  4036.         cmp     al,8
  4037.         je      fld_mem_64bit
  4038.         cmp     al,10
  4039.         je      fld_mem_80bit
  4040.         or      al,al
  4041.         jnz     invalid_operand_size
  4042.         cmp     [error_line],0
  4043.         jne     fld_mem_32bit
  4044.         mov     eax,[current_line]
  4045.         mov     [error_line],eax
  4046.         mov     [error],operand_size_not_specified
  4047.       fld_mem_32bit:
  4048.         mov     [base_code],0D9h
  4049.         call    store_instruction
  4050.         jmp     instruction_assembled
  4051.       fld_mem_64bit:
  4052.         mov     [base_code],0DDh
  4053.         call    store_instruction
  4054.         jmp     instruction_assembled
  4055.       fld_mem_80bit:
  4056.         mov     al,[postbyte_register]
  4057.         cmp     al,0
  4058.         je      fld_mem_80bit_store
  4059.         dec     [postbyte_register]
  4060.         cmp     al,3
  4061.         je      fld_mem_80bit_store
  4062.         jmp     invalid_operand_size
  4063.       fld_mem_80bit_store:
  4064.         add     [postbyte_register],5
  4065.         mov     [base_code],0DBh
  4066.         call    store_instruction
  4067.         jmp     instruction_assembled
  4068.       fld_streg:
  4069.         lods    byte [esi]
  4070.         call    convert_fpu_register
  4071.         mov     bl,al
  4072.         cmp     [postbyte_register],2
  4073.         jae     fst_streg
  4074.         mov     [base_code],0D9h
  4075.         call    store_nomem_instruction
  4076.         jmp     instruction_assembled
  4077.       fst_streg:
  4078.         mov     [base_code],0DDh
  4079.         call    store_nomem_instruction
  4080.         jmp     instruction_assembled
  4081. fild_instruction:
  4082.         mov     [postbyte_register],al
  4083.         lods    byte [esi]
  4084.         call    get_size_operator
  4085.         cmp     al,'['
  4086.         jne     invalid_operand
  4087.         call    get_address
  4088.         mov     al,[operand_size]
  4089.         cmp     al,2
  4090.         je      fild_mem_16bit
  4091.         cmp     al,4
  4092.         je      fild_mem_32bit
  4093.         cmp     al,8
  4094.         je      fild_mem_64bit
  4095.         or      al,al
  4096.         jnz     invalid_operand_size
  4097.         cmp     [error_line],0
  4098.         jne     fild_mem_32bit
  4099.         mov     eax,[current_line]
  4100.         mov     [error_line],eax
  4101.         mov     [error],operand_size_not_specified
  4102.       fild_mem_32bit:
  4103.         mov     [base_code],0DBh
  4104.         call    store_instruction
  4105.         jmp     instruction_assembled
  4106.       fild_mem_16bit:
  4107.         mov     [base_code],0DFh
  4108.         call    store_instruction
  4109.         jmp     instruction_assembled
  4110.       fild_mem_64bit:
  4111.         mov     al,[postbyte_register]
  4112.         cmp     al,1
  4113.         je      fisttp_64bit_store
  4114.         jb      fild_mem_64bit_store
  4115.         dec     [postbyte_register]
  4116.         cmp     al,3
  4117.         je      fild_mem_64bit_store
  4118.         jmp     invalid_operand_size
  4119.       fild_mem_64bit_store:
  4120.         add     [postbyte_register],5
  4121.         mov     [base_code],0DFh
  4122.         call    store_instruction
  4123.         jmp     instruction_assembled
  4124.       fisttp_64bit_store:
  4125.         mov     [base_code],0DDh
  4126.         call    store_instruction
  4127.         jmp     instruction_assembled
  4128. fbld_instruction:
  4129.         mov     [postbyte_register],al
  4130.         lods    byte [esi]
  4131.         call    get_size_operator
  4132.         cmp     al,'['
  4133.         jne     invalid_operand
  4134.         call    get_address
  4135.         mov     al,[operand_size]
  4136.         or      al,al
  4137.         jz      fbld_mem_80bit
  4138.         cmp     al,10
  4139.         je      fbld_mem_80bit
  4140.         jmp     invalid_operand_size
  4141.       fbld_mem_80bit:
  4142.         mov     [base_code],0DFh
  4143.         call    store_instruction
  4144.         jmp     instruction_assembled
  4145. faddp_instruction:
  4146.         mov     [postbyte_register],al
  4147.         mov     [base_code],0DEh
  4148.         mov     edx,esi
  4149.         lods    byte [esi]
  4150.         call    get_size_operator
  4151.         cmp     al,10h
  4152.         je      faddp_streg
  4153.         mov     esi,edx
  4154.         mov     bl,1
  4155.         call    store_nomem_instruction
  4156.         jmp     instruction_assembled
  4157.       faddp_streg:
  4158.         lods    byte [esi]
  4159.         call    convert_fpu_register
  4160.         mov     bl,al
  4161.         lods    byte [esi]
  4162.         cmp     al,','
  4163.         jne     invalid_operand
  4164.         lods    byte [esi]
  4165.         call    get_size_operator
  4166.         cmp     al,10h
  4167.         jne     invalid_operand
  4168.         lods    byte [esi]
  4169.         call    convert_fpu_register
  4170.         or      al,al
  4171.         jnz     invalid_operand
  4172.         call    store_nomem_instruction
  4173.         jmp     instruction_assembled
  4174. fcompp_instruction:
  4175.         mov     ax,0D9DEh
  4176.         stos    word [edi]
  4177.         jmp     instruction_assembled
  4178. fucompp_instruction:
  4179.         mov     ax,0E9DAh
  4180.         stos    word [edi]
  4181.         jmp     instruction_assembled
  4182. fxch_instruction:
  4183.         mov     dx,01D9h
  4184.         jmp     fpu_single_operand
  4185. ffreep_instruction:
  4186.         mov     dx,00DFh
  4187.         jmp     fpu_single_operand
  4188. ffree_instruction:
  4189.         mov     dl,0DDh
  4190.         mov     dh,al
  4191.       fpu_single_operand:
  4192.         mov     ebx,esi
  4193.         lods    byte [esi]
  4194.         call    get_size_operator
  4195.         cmp     al,10h
  4196.         je      fpu_streg
  4197.         or      dh,dh
  4198.         jz      invalid_operand
  4199.         mov     esi,ebx
  4200.         shl     dh,3
  4201.         or      dh,11000001b
  4202.         mov     ax,dx
  4203.         stos    word [edi]
  4204.         jmp     instruction_assembled
  4205.       fpu_streg:
  4206.         lods    byte [esi]
  4207.         call    convert_fpu_register
  4208.         shl     dh,3
  4209.         or      dh,al
  4210.         or      dh,11000000b
  4211.         mov     ax,dx
  4212.         stos    word [edi]
  4213.         jmp     instruction_assembled
  4214. fstenv_instruction:
  4215.         mov     byte [edi],9Bh
  4216.         inc     edi
  4217. fldenv_instruction:
  4218.         mov     [base_code],0D9h
  4219.         jmp     fpu_mem
  4220. fsave_instruction:
  4221.         mov     byte [edi],9Bh
  4222.         inc     edi
  4223. fnsave_instruction:
  4224.         mov     [base_code],0DDh
  4225.       fpu_mem:
  4226.         mov     [postbyte_register],al
  4227.         lods    byte [esi]
  4228.         call    get_size_operator
  4229.         cmp     al,'['
  4230.         jne     invalid_operand
  4231.         call    get_address
  4232.         cmp     [operand_size],0
  4233.         jne     invalid_operand_size
  4234.         call    store_instruction
  4235.         jmp     instruction_assembled
  4236. fstcw_instruction:
  4237.         mov     byte [edi],9Bh
  4238.         inc     edi
  4239. fldcw_instruction:
  4240.         mov     [postbyte_register],al
  4241.         mov     [base_code],0D9h
  4242.         lods    byte [esi]
  4243.         call    get_size_operator
  4244.         cmp     al,'['
  4245.         jne     invalid_operand
  4246.         call    get_address
  4247.         mov     al,[operand_size]
  4248.         or      al,al
  4249.         jz      fldcw_mem_16bit
  4250.         cmp     al,2
  4251.         je      fldcw_mem_16bit
  4252.         jmp     invalid_operand_size
  4253.       fldcw_mem_16bit:
  4254.         call    store_instruction
  4255.         jmp     instruction_assembled
  4256. fstsw_instruction:
  4257.         mov     al,9Bh
  4258.         stos    byte [edi]
  4259. fnstsw_instruction:
  4260.         mov     [base_code],0DDh
  4261.         mov     [postbyte_register],7
  4262.         lods    byte [esi]
  4263.         call    get_size_operator
  4264.         cmp     al,10h
  4265.         je      fstsw_reg
  4266.         cmp     al,'['
  4267.         jne     invalid_operand
  4268.         call    get_address
  4269.         mov     al,[operand_size]
  4270.         or      al,al
  4271.         jz      fstsw_mem_16bit
  4272.         cmp     al,2
  4273.         je      fstsw_mem_16bit
  4274.         jmp     invalid_operand_size
  4275.       fstsw_mem_16bit:
  4276.         call    store_instruction
  4277.         jmp     instruction_assembled
  4278.       fstsw_reg:
  4279.         lods    byte [esi]
  4280.         call    convert_register
  4281.         cmp     ax,0200h
  4282.         jne     invalid_operand
  4283.         mov     ax,0E0DFh
  4284.         stos    word [edi]
  4285.         jmp     instruction_assembled
  4286. finit_instruction:
  4287.         mov     byte [edi],9Bh
  4288.         inc     edi
  4289. fninit_instruction:
  4290.         mov     ah,al
  4291.         mov     al,0DBh
  4292.         stos    word [edi]
  4293.         jmp     instruction_assembled
  4294. fcmov_instruction:
  4295.         mov     dh,0DAh
  4296.         jmp     fcomi_streg
  4297. fcomi_instruction:
  4298.         mov     dh,0DBh
  4299.         jmp     fcomi_streg
  4300. fcomip_instruction:
  4301.         mov     dh,0DFh
  4302.       fcomi_streg:
  4303.         mov     dl,al
  4304.         lods    byte [esi]
  4305.         call    get_size_operator
  4306.         cmp     al,10h
  4307.         jne     invalid_operand
  4308.         lods    byte [esi]
  4309.         call    convert_fpu_register
  4310.         mov     ah,al
  4311.         cmp     byte [esi],','
  4312.         je      fcomi_st0_streg
  4313.         add     ah,dl
  4314.         mov     al,dh
  4315.         stos    word [edi]
  4316.         jmp     instruction_assembled
  4317.       fcomi_st0_streg:
  4318.         or      ah,ah
  4319.         jnz     invalid_operand
  4320.         inc     esi
  4321.         lods    byte [esi]
  4322.         call    get_size_operator
  4323.         cmp     al,10h
  4324.         jne     invalid_operand
  4325.         lods    byte [esi]
  4326.         call    convert_fpu_register
  4327.         mov     ah,al
  4328.         add     ah,dl
  4329.         mov     al,dh
  4330.         stos    word [edi]
  4331.         jmp     instruction_assembled
  4332.  
  4333. mmx_instruction:
  4334.         mov     [base_code],0Fh
  4335.         mov     [extended_code],al
  4336.         lods    byte [esi]
  4337.         call    get_size_operator
  4338.         cmp     al,10h
  4339.         jne     invalid_operand
  4340.         lods    byte [esi]
  4341.         call    convert_mmx_register
  4342.         call    make_mmx_prefix
  4343.         mov     [postbyte_register],al
  4344.         lods    byte [esi]
  4345.         cmp     al,','
  4346.         jne     invalid_operand
  4347.         lods    byte [esi]
  4348.         call    get_size_operator
  4349.         cmp     al,10h
  4350.         je      mmx_mmreg_mmreg
  4351.         cmp     al,'['
  4352.         jne     invalid_operand
  4353.       mmx_mmreg_mem:
  4354.         call    get_address
  4355.         call    store_instruction
  4356.         jmp     instruction_assembled
  4357.       mmx_mmreg_mmreg:
  4358.         lods    byte [esi]
  4359.         call    convert_mmx_register
  4360.         mov     bl,al
  4361.         call    store_nomem_instruction
  4362.         jmp     instruction_assembled
  4363. mmx_ps_instruction:
  4364.         mov     [base_code],0Fh
  4365.         mov     [extended_code],al
  4366.         lods    byte [esi]
  4367.         call    get_size_operator
  4368.         cmp     al,10h
  4369.         jne     invalid_operand
  4370.         lods    byte [esi]
  4371.         call    convert_mmx_register
  4372.         call    make_mmx_prefix
  4373.         mov     [postbyte_register],al
  4374.         lods    byte [esi]
  4375.         cmp     al,','
  4376.         jne     invalid_operand
  4377.         mov     [operand_size],0
  4378.         lods    byte [esi]
  4379.         call    get_size_operator
  4380.         cmp     al,10h
  4381.         je      mmx_mmreg_mmreg
  4382.         cmp     al,'('
  4383.         je      mmx_ps_mmreg_imm8
  4384.         cmp     al,'['
  4385.         je      mmx_mmreg_mem
  4386.         jmp     invalid_operand
  4387.       mmx_ps_mmreg_imm8:
  4388.         call    get_byte_value
  4389.         mov     byte [value],al
  4390.         test    [operand_size],not 1
  4391.         jnz     invalid_value
  4392.         mov     bl,[extended_code]
  4393.         mov     al,bl
  4394.         shr     bl,4
  4395.         and     al,1111b
  4396.         add     al,70h
  4397.         mov     [extended_code],al
  4398.         sub     bl,0Ch
  4399.         shl     bl,1
  4400.         xchg    bl,[postbyte_register]
  4401.         call    store_nomem_instruction
  4402.         mov     al,byte [value]
  4403.         stos    byte [edi]
  4404.         jmp     instruction_assembled
  4405. pextrw_instruction:
  4406.         mov     [base_code],0Fh
  4407.         mov     [extended_code],al
  4408.         lods    byte [esi]
  4409.         call    get_size_operator
  4410.         cmp     al,10h
  4411.         jne     invalid_operand
  4412.         lods    byte [esi]
  4413.         call    convert_register
  4414.         cmp     ah,4
  4415.         jnz     invalid_operand_size
  4416.         mov     [postbyte_register],al
  4417.         mov     [operand_size],0
  4418.         lods    byte [esi]
  4419.         cmp     al,','
  4420.         jne     invalid_operand
  4421.         lods    byte [esi]
  4422.         call    get_size_operator
  4423.         cmp     al,10h
  4424.         jne     invalid_operand
  4425.         lods    byte [esi]
  4426.         call    convert_mmx_register
  4427.         mov     bl,al
  4428.         call    make_mmx_prefix
  4429.         cmp     [extended_code],0C5h
  4430.         je      mmx_nomem_imm8
  4431.         call    store_nomem_instruction
  4432.         jmp     instruction_assembled
  4433.       mmx_imm8:
  4434.         push    bx cx edx
  4435.         mov     [operand_size],0
  4436.         lods    byte [esi]
  4437.         cmp     al,','
  4438.         jne     invalid_operand
  4439.         lods    byte [esi]
  4440.         call    get_size_operator
  4441.         test    ah,not 1
  4442.         jnz     invalid_operand_size
  4443.         cmp     al,'('
  4444.         jne     invalid_operand
  4445.         call    get_byte_value
  4446.         mov     byte [value],al
  4447.         pop     edx cx bx
  4448.         call    store_instruction_with_imm8
  4449.         jmp     instruction_assembled
  4450.       mmx_nomem_imm8:
  4451.         call    store_nomem_instruction
  4452.         mov     [operand_size],0
  4453.         lods    byte [esi]
  4454.         cmp     al,','
  4455.         jne     invalid_operand
  4456.         lods    byte [esi]
  4457.         call    get_size_operator
  4458.         test    ah,not 1
  4459.         jnz     invalid_operand_size
  4460.         cmp     al,'('
  4461.         jne     invalid_operand
  4462.         call    get_byte_value
  4463.         stosb
  4464.         jmp     instruction_assembled
  4465. pinsrw_instruction:
  4466.         mov     [extended_code],al
  4467.         mov     [base_code],0Fh
  4468.         lods    byte [esi]
  4469.         call    get_size_operator
  4470.         cmp     al,10h
  4471.         jne     invalid_operand
  4472.         lods    byte [esi]
  4473.         call    convert_mmx_register
  4474.         call    make_mmx_prefix
  4475.         mov     [postbyte_register],al
  4476.         mov     [operand_size],0
  4477.         lods    byte [esi]
  4478.         cmp     al,','
  4479.         jne     invalid_operand
  4480.         lods    byte [esi]
  4481.         call    get_size_operator
  4482.         cmp     al,10h
  4483.         je      pinsrw_mmreg_reg
  4484.         cmp     al,'['
  4485.         jne     invalid_operand
  4486.         call    get_address
  4487.         cmp     [operand_size],0
  4488.         je      mmx_imm8
  4489.         cmp     [operand_size],2
  4490.         jne     invalid_operand_size
  4491.         jmp     mmx_imm8
  4492.       pinsrw_mmreg_reg:
  4493.         lods    byte [esi]
  4494.         call    convert_register
  4495.         cmp     ah,4
  4496.         jne     invalid_operand_size
  4497.         mov     bl,al
  4498.         jmp     mmx_nomem_imm8
  4499. pshufw_instruction:
  4500.         mov     [mmx_size],8
  4501.         mov     [operand_prefix],al
  4502.         jmp     pshuf_instruction
  4503. pshufd_instruction:
  4504.         mov     [mmx_size],16
  4505.         mov     [operand_prefix],al
  4506.       pshuf_instruction:
  4507.         mov     [base_code],0Fh
  4508.         mov     [extended_code],70h
  4509.         lods    byte [esi]
  4510.         call    get_size_operator
  4511.         cmp     al,10h
  4512.         jne     invalid_operand
  4513.         lods    byte [esi]
  4514.         call    convert_mmx_register
  4515.         cmp     ah,[mmx_size]
  4516.         jne     invalid_operand_size
  4517.         mov     [postbyte_register],al
  4518.         lods    byte [esi]
  4519.         cmp     al,','
  4520.         jne     invalid_operand
  4521.         lods    byte [esi]
  4522.         call    get_size_operator
  4523.         cmp     al,10h
  4524.         je      pshuf_mmreg_mmreg
  4525.         cmp     al,'['
  4526.         jne     invalid_operand
  4527.         call    get_address
  4528.         jmp     mmx_imm8
  4529.       pshuf_mmreg_mmreg:
  4530.         lods    byte [esi]
  4531.         call    convert_mmx_register
  4532.         mov     bl,al
  4533.         jmp     mmx_nomem_imm8
  4534. movd_instruction:
  4535.         mov     [base_code],0Fh
  4536.         mov     [extended_code],7Eh
  4537.         lods    byte [esi]
  4538.         call    get_size_operator
  4539.         cmp     al,10h
  4540.         je      movd_reg
  4541.         cmp     al,'['
  4542.         jne     invalid_operand
  4543.         call    get_address
  4544.         test    [operand_size],not 4
  4545.         jnz     invalid_operand_size
  4546.         mov     [operand_size],0
  4547.         lods    byte [esi]
  4548.         cmp     al,','
  4549.         jne     invalid_operand
  4550.         lods    byte [esi]
  4551.         call    get_size_operator
  4552.         cmp     al,10h
  4553.         jne     invalid_operand
  4554.         lods    byte [esi]
  4555.         call    convert_mmx_register
  4556.         call    make_mmx_prefix
  4557.         mov     [postbyte_register],al
  4558.         call    store_instruction
  4559.         jmp     instruction_assembled
  4560.       movd_reg:
  4561.         lods    byte [esi]
  4562.         cmp     al,0B0h
  4563.         jae     movd_mmreg
  4564.         call    convert_register
  4565.         cmp     ah,4
  4566.         jne     invalid_operand_size
  4567.         mov     [operand_size],0
  4568.         mov     bl,al
  4569.         lods    byte [esi]
  4570.         cmp     al,','
  4571.         jne     invalid_operand
  4572.         lods    byte [esi]
  4573.         call    get_size_operator
  4574.         cmp     al,10h
  4575.         jne     invalid_operand
  4576.         lods    byte [esi]
  4577.         call    convert_mmx_register
  4578.         mov     [postbyte_register],al
  4579.         call    make_mmx_prefix
  4580.         call    store_nomem_instruction
  4581.         jmp     instruction_assembled
  4582.       movd_mmreg:
  4583.         mov     [extended_code],6Eh
  4584.         call    convert_mmx_register
  4585.         call    make_mmx_prefix
  4586.         mov     [postbyte_register],al
  4587.         mov     [operand_size],0
  4588.         lods    byte [esi]
  4589.         cmp     al,','
  4590.         jne     invalid_operand
  4591.         lods    byte [esi]
  4592.         call    get_size_operator
  4593.         cmp     al,10h
  4594.         je      movd_mmreg_reg
  4595.         cmp     al,'['
  4596.         jne     invalid_operand
  4597.         call    get_address
  4598.         test    [operand_size],not 4
  4599.         jnz     invalid_operand_size
  4600.         call    store_instruction
  4601.         jmp     instruction_assembled
  4602.       movd_mmreg_reg:
  4603.         lods    byte [esi]
  4604.         call    convert_register
  4605.         cmp     ah,4
  4606.         jne     invalid_operand_size
  4607.         mov     bl,al
  4608.         call    store_nomem_instruction
  4609.         jmp     instruction_assembled
  4610.       make_mmx_prefix:
  4611.         cmp     [operand_size],16
  4612.         jne     no_mmx_prefix
  4613.         mov     [operand_prefix],66h
  4614.       no_mmx_prefix:
  4615.         ret
  4616. movq_instruction:
  4617.         mov     [base_code],0Fh
  4618.         lods    byte [esi]
  4619.         call    get_size_operator
  4620.         cmp     al,10h
  4621.         je      movq_reg
  4622.         cmp     al,'['
  4623.         jne     invalid_operand
  4624.         call    get_address
  4625.         test    [operand_size],not 8
  4626.         jnz     invalid_operand_size
  4627.         mov     [operand_size],0
  4628.         lods    byte [esi]
  4629.         cmp     al,','
  4630.         jne     invalid_operand
  4631.         lods    byte [esi]
  4632.         cmp     al,10h
  4633.         jne     invalid_operand
  4634.         lods    byte [esi]
  4635.         call    convert_mmx_register
  4636.         mov     [postbyte_register],al
  4637.         cmp     ah,16
  4638.         je      movq_mem_xmmreg
  4639.         mov     [extended_code],7Fh
  4640.         call    store_instruction
  4641.         jmp     instruction_assembled
  4642.      movq_mem_xmmreg:
  4643.         mov     [extended_code],0D6h
  4644.         mov     [operand_prefix],66h
  4645.         call    store_instruction
  4646.         jmp     instruction_assembled
  4647.      movq_reg:
  4648.         lods    byte [esi]
  4649.         cmp     al,0B0h
  4650.         jae     movq_mmreg
  4651.         call    convert_register
  4652.         cmp     ah,8
  4653.         jne     invalid_operand_size
  4654.         mov     [operand_size],0
  4655.         mov     bl,al
  4656.         lods    byte [esi]
  4657.         cmp     al,','
  4658.         jne     invalid_operand
  4659.         lods    byte [esi]
  4660.         call    get_size_operator
  4661.         cmp     al,10h
  4662.         jne     invalid_operand
  4663.         lods    byte [esi]
  4664.         call    convert_mmx_register
  4665.         mov     [postbyte_register],al
  4666.         call    make_mmx_prefix
  4667.         mov     [extended_code],7Eh
  4668.         call    operand_64bit
  4669.         call    store_nomem_instruction
  4670.         jmp     instruction_assembled
  4671.      movq_mmreg:
  4672.         call    convert_mmx_register
  4673.         mov     [postbyte_register],al
  4674.         mov     [extended_code],6Fh
  4675.         cmp     ah,16
  4676.         jne     movq_mmreg_
  4677.         mov     [extended_code],7Eh
  4678.         mov     [operand_prefix],0F3h
  4679.       movq_mmreg_:
  4680.         lods    byte [esi]
  4681.         cmp     al,','
  4682.         jne     invalid_operand
  4683.         mov     [operand_size],0
  4684.         lods    byte [esi]
  4685.         call    get_size_operator
  4686.         cmp     al,10h
  4687.         je      movq_mmreg_reg
  4688.         call    get_address
  4689.         test    [operand_size],not 8
  4690.         jnz     invalid_operand_size
  4691.         call    store_instruction
  4692.         jmp     instruction_assembled
  4693.       movq_mmreg_reg:
  4694.         lods    byte [esi]
  4695.         cmp     al,0B0h
  4696.         jae     movq_mmreg_mmreg
  4697.         mov     [operand_size],0
  4698.         call    convert_register
  4699.         cmp     ah,8
  4700.         jne     invalid_operand_size
  4701.         mov     [extended_code],6Eh
  4702.         mov     [operand_prefix],0
  4703.         mov     bl,al
  4704.         call    make_mmx_prefix
  4705.         call    operand_64bit
  4706.         call    store_nomem_instruction
  4707.         jmp     instruction_assembled
  4708.       movq_mmreg_mmreg:
  4709.         call    convert_mmx_register
  4710.         mov     bl,al
  4711.         call    store_nomem_instruction
  4712.         jmp     instruction_assembled
  4713. movdq_instruction:
  4714.         mov     [operand_prefix],al
  4715.         mov     [base_code],0Fh
  4716.         mov     [extended_code],6Fh
  4717.         lods    byte [esi]
  4718.         call    get_size_operator
  4719.         cmp     al,10h
  4720.         je      movdq_mmreg
  4721.         cmp     al,'['
  4722.         jne     invalid_operand
  4723.         call    get_address
  4724.         lods    byte [esi]
  4725.         cmp     al,','
  4726.         jne     invalid_operand
  4727.         lods    byte [esi]
  4728.         call    get_size_operator
  4729.         cmp     al,10h
  4730.         jne     invalid_operand
  4731.         lods    byte [esi]
  4732.         call    convert_mmx_register
  4733.         cmp     ah,16
  4734.         jne     invalid_operand_size
  4735.         mov     [postbyte_register],al
  4736.         mov     [extended_code],7Fh
  4737.         call    store_instruction
  4738.         jmp     instruction_assembled
  4739.       movdq_mmreg:
  4740.         lods    byte [esi]
  4741.         call    convert_mmx_register
  4742.         cmp     ah,16
  4743.         jne     invalid_operand_size
  4744.         mov     [postbyte_register],al
  4745.         lods    byte [esi]
  4746.         cmp     al,','
  4747.         jne     invalid_operand
  4748.         lods    byte [esi]
  4749.         call    get_size_operator
  4750.         cmp     al,10h
  4751.         je      movdq_mmreg_mmreg
  4752.         cmp     al,'['
  4753.         jne     invalid_operand
  4754.         call    get_address
  4755.         call    store_instruction
  4756.         jmp     instruction_assembled
  4757.       movdq_mmreg_mmreg:
  4758.         lods    byte [esi]
  4759.         call    convert_mmx_register
  4760.         cmp     ah,16
  4761.         jne     invalid_operand_size
  4762.         mov     bl,al
  4763.         call    store_nomem_instruction
  4764.         jmp     instruction_assembled
  4765. lddqu_instruction:
  4766.         lods    byte [esi]
  4767.         call    get_size_operator
  4768.         cmp     al,10h
  4769.         jne     invalid_operand
  4770.         lods    byte [esi]
  4771.         call    convert_mmx_register
  4772.         cmp     ah,16
  4773.         jne     invalid_operand_size
  4774.         push    eax
  4775.         lods    byte [esi]
  4776.         cmp     al,','
  4777.         jne     invalid_operand
  4778.         lods    byte [esi]
  4779.         call    get_size_operator
  4780.         cmp     al,'['
  4781.         jne     invalid_operand
  4782.         call    get_address
  4783.         pop     eax
  4784.         mov     [postbyte_register],al
  4785.         mov     [operand_prefix],0F2h
  4786.         mov     [base_code],0Fh
  4787.         mov     [extended_code],0F0h
  4788.         call    store_instruction
  4789.         jmp     instruction_assembled
  4790. movq2dq_instruction:
  4791.         lods    byte [esi]
  4792.         call    get_size_operator
  4793.         cmp     al,10h
  4794.         jne     invalid_operand
  4795.         lods    byte [esi]
  4796.         call    convert_mmx_register
  4797.         cmp     ah,16
  4798.         jne     invalid_operand_size
  4799.         mov     [postbyte_register],al
  4800.         mov     [operand_size],0
  4801.         lods    byte [esi]
  4802.         cmp     al,','
  4803.         jne     invalid_operand
  4804.         lods    byte [esi]
  4805.         call    get_size_operator
  4806.         cmp     al,10h
  4807.         jne     invalid_operand
  4808.         lods    byte [esi]
  4809.         call    convert_mmx_register
  4810.         cmp     ah,8
  4811.         jne     invalid_operand_size
  4812.         mov     bl,al
  4813.         mov     [operand_prefix],0F3h
  4814.         mov     [base_code],0Fh
  4815.         mov     [extended_code],0D6h
  4816.         call    store_nomem_instruction
  4817.         jmp     instruction_assembled
  4818. movdq2q_instruction:
  4819.         lods    byte [esi]
  4820.         call    get_size_operator
  4821.         cmp     al,10h
  4822.         jne     invalid_operand
  4823.         lods    byte [esi]
  4824.         call    convert_mmx_register
  4825.         cmp     ah,8
  4826.         jne     invalid_operand_size
  4827.         mov     [postbyte_register],al
  4828.         mov     [operand_size],0
  4829.         lods    byte [esi]
  4830.         cmp     al,','
  4831.         jne     invalid_operand
  4832.         lods    byte [esi]
  4833.         call    get_size_operator
  4834.         cmp     al,10h
  4835.         jne     invalid_operand
  4836.         lods    byte [esi]
  4837.         call    convert_mmx_register
  4838.         cmp     ah,16
  4839.         jne     invalid_operand_size
  4840.         mov     bl,al
  4841.         mov     [operand_prefix],0F2h
  4842.         mov     [base_code],0Fh
  4843.         mov     [extended_code],0D6h
  4844.         call    store_nomem_instruction
  4845.         jmp     instruction_assembled
  4846.  
  4847. sse_ps_instruction:
  4848.         mov     [mmx_size],16
  4849.         jmp     sse_instruction
  4850. sse_pd_instruction:
  4851.         mov     [mmx_size],16
  4852.         mov     [operand_prefix],66h
  4853.         jmp     sse_instruction
  4854. sse_ss_instruction:
  4855.         mov     [mmx_size],4
  4856.         mov     [operand_prefix],0F3h
  4857.         jmp     sse_instruction
  4858. sse_sd_instruction:
  4859.         mov     [mmx_size],8
  4860.         mov     [operand_prefix],0F2h
  4861.         jmp     sse_instruction
  4862. comiss_instruction:
  4863.         mov     [mmx_size],4
  4864.         jmp     sse_instruction
  4865. comisd_instruction:
  4866.         mov     [mmx_size],8
  4867.         mov     [operand_prefix],66h
  4868.         jmp     sse_instruction
  4869. cvtps2pd_instruction:
  4870.         mov     [mmx_size],8
  4871.         jmp     sse_instruction
  4872. cvtpd2dq_instruction:
  4873.         mov     [mmx_size],16
  4874.         mov     [operand_prefix],0F2h
  4875.         jmp     sse_instruction
  4876. cvtdq2pd_instruction:
  4877.         mov     [mmx_size],16
  4878.         mov     [operand_prefix],0F3h
  4879. sse_instruction:
  4880.         mov     [base_code],0Fh
  4881.         mov     [extended_code],al
  4882.         lods    byte [esi]
  4883.         call    get_size_operator
  4884.         cmp     al,10h
  4885.         jne     invalid_operand
  4886.       sse_xmmreg:
  4887.         lods    byte [esi]
  4888.         call    convert_mmx_register
  4889.         cmp     ah,16
  4890.         jne     invalid_operand_size
  4891.       sse_reg:
  4892.         mov     [postbyte_register],al
  4893.         mov     [operand_size],0
  4894.         lods    byte [esi]
  4895.         cmp     al,','
  4896.         jne     invalid_operand
  4897.         lods    byte [esi]
  4898.         call    get_size_operator
  4899.         cmp     al,10h
  4900.         je      sse_xmmreg_xmmreg
  4901.       sse_reg_mem:
  4902.         cmp     al,'['
  4903.         jne     invalid_operand
  4904.         call    get_address
  4905.         cmp     [operand_size],0
  4906.         je      sse_mem_size_ok
  4907.         mov     al,[mmx_size]
  4908.         cmp     [operand_size],al
  4909.         jne     invalid_operand_size
  4910.       sse_mem_size_ok:
  4911.         cmp     [extended_code],0C6h
  4912.         je      mmx_imm8
  4913.         call    store_instruction
  4914.         jmp     instruction_assembled
  4915.       sse_xmmreg_xmmreg:
  4916.         cmp     [operand_prefix],66h
  4917.         jne     sse_xmmreg_xmmreg_ok
  4918.         cmp     [extended_code],12h
  4919.         je      invalid_operand
  4920.         cmp     [extended_code],16h
  4921.         je      invalid_operand
  4922.       sse_xmmreg_xmmreg_ok:
  4923.         lods    byte [esi]
  4924.         call    convert_mmx_register
  4925.         cmp     ah,16
  4926.         jne     invalid_operand_size
  4927.         mov     bl,al
  4928.         cmp     [extended_code],0C6h
  4929.         je      mmx_nomem_imm8
  4930.         call    store_nomem_instruction
  4931.         jmp     instruction_assembled
  4932. ps_dq_instruction:
  4933.         mov     [postbyte_register],al
  4934.         mov     [operand_prefix],66h
  4935.         mov     [base_code],0Fh
  4936.         mov     [extended_code],73h
  4937.         lods    byte [esi]
  4938.         call    get_size_operator
  4939.         cmp     al,10h
  4940.         jne     invalid_operand
  4941.         lods    byte [esi]
  4942.         call    convert_mmx_register
  4943.         cmp     ah,16
  4944.         jne     invalid_operand_size
  4945.         mov     bl,al
  4946.         jmp     mmx_nomem_imm8
  4947. movpd_instruction:
  4948.         mov     [operand_prefix],66h
  4949. movps_instruction:
  4950.         mov     [base_code],0Fh
  4951.         mov     [extended_code],al
  4952.         mov     [mmx_size],16
  4953.         jmp     sse_mov_instruction
  4954. movss_instruction:
  4955.         mov     [mmx_size],4
  4956.         mov     [operand_prefix],0F3h
  4957.         jmp     sse_movs
  4958. movsd_instruction:
  4959.         mov     al,0A5h
  4960.         mov     ah,[esi]
  4961.         or      ah,ah
  4962.         jz      simple_instruction_32bit
  4963.         cmp     ah,0Fh
  4964.         je      simple_instruction_32bit
  4965.         mov     [mmx_size],8
  4966.         mov     [operand_prefix],0F2h
  4967.       sse_movs:
  4968.         mov     [base_code],0Fh
  4969.         mov     [extended_code],10h
  4970.         jmp     sse_mov_instruction
  4971. sse_mov_instruction:
  4972.         lods    byte [esi]
  4973.         call    get_size_operator
  4974.         cmp     al,10h
  4975.         je      sse_xmmreg
  4976.       sse_mem:
  4977.         cmp     al,'['
  4978.         jne     invalid_operand
  4979.         inc     [extended_code]
  4980.         call    get_address
  4981.         cmp     [operand_size],0
  4982.         je      sse_mem_xmmreg
  4983.         mov     al,[mmx_size]
  4984.         cmp     [operand_size],al
  4985.         jne     invalid_operand_size
  4986.         mov     [operand_size],0
  4987.       sse_mem_xmmreg:
  4988.         lods    byte [esi]
  4989.         cmp     al,','
  4990.         jne     invalid_operand
  4991.         lods    byte [esi]
  4992.         call    get_size_operator
  4993.         cmp     al,10h
  4994.         jne     invalid_operand
  4995.         lods    byte [esi]
  4996.         call    convert_mmx_register
  4997.         cmp     ah,16
  4998.         jne     invalid_operand_size
  4999.         mov     [postbyte_register],al
  5000.         call    store_instruction
  5001.         jmp     instruction_assembled
  5002. movlpd_instruction:
  5003.         mov     [operand_prefix],66h
  5004. movlps_instruction:
  5005.         mov     [base_code],0Fh
  5006.         mov     [extended_code],al
  5007.         mov     [mmx_size],8
  5008.         lods    byte [esi]
  5009.         call    get_size_operator
  5010.         cmp     al,10h
  5011.         jne     sse_mem
  5012.         lods    byte [esi]
  5013.         call    convert_mmx_register
  5014.         cmp     ah,16
  5015.         jne     invalid_operand_size
  5016.         mov     [postbyte_register],al
  5017.         mov     [operand_size],0
  5018.         lods    byte [esi]
  5019.         cmp     al,','
  5020.         jne     invalid_operand
  5021.         lods    byte [esi]
  5022.         call    get_size_operator
  5023.         jmp     sse_reg_mem
  5024. movhlps_instruction:
  5025.         mov     [base_code],0Fh
  5026.         mov     [extended_code],al
  5027.         mov     [mmx_size],0
  5028.         lods    byte [esi]
  5029.         call    get_size_operator
  5030.         cmp     al,10h
  5031.         jne     invalid_operand
  5032.         lods    byte [esi]
  5033.         call    convert_mmx_register
  5034.         cmp     ah,16
  5035.         jne     invalid_operand_size
  5036.         mov     [postbyte_register],al
  5037.         lods    byte [esi]
  5038.         cmp     al,','
  5039.         jne     invalid_operand
  5040.         lods    byte [esi]
  5041.         call    get_size_operator
  5042.         cmp     al,10h
  5043.         je      sse_xmmreg_xmmreg_ok
  5044.         jmp     invalid_operand
  5045. maskmovq_instruction:
  5046.         mov     cl,8
  5047.         jmp     maskmov_instruction
  5048. maskmovdqu_instruction:
  5049.         mov     cl,16
  5050.         mov     [operand_prefix],66h
  5051.       maskmov_instruction:
  5052.         mov     [base_code],0Fh
  5053.         mov     [extended_code],0F7h
  5054.         lods    byte [esi]
  5055.         call    get_size_operator
  5056.         cmp     al,10h
  5057.         jne     invalid_operand
  5058.         lods    byte [esi]
  5059.         call    convert_mmx_register
  5060.         cmp     ah,cl
  5061.         jne     invalid_operand_size
  5062.         mov     [postbyte_register],al
  5063.         lods    byte [esi]
  5064.         cmp     al,','
  5065.         jne     invalid_operand
  5066.         lods    byte [esi]
  5067.         call    get_size_operator
  5068.         cmp     al,10h
  5069.         jne     invalid_operand
  5070.         lods    byte [esi]
  5071.         call    convert_mmx_register
  5072.         mov     bl,al
  5073.         call    store_nomem_instruction
  5074.         jmp     instruction_assembled
  5075. movmskpd_instruction:
  5076.         mov     [operand_prefix],66h
  5077. movmskps_instruction:
  5078.         mov     [base_code],0Fh
  5079.         mov     [extended_code],50h
  5080.         lods    byte [esi]
  5081.         call    get_size_operator
  5082.         cmp     al,10h
  5083.         jne     invalid_operand
  5084.         lods    byte [esi]
  5085.         call    convert_register
  5086.         cmp     ah,4
  5087.         jne     invalid_operand_size
  5088.         mov     [operand_size],0
  5089.         mov     [postbyte_register],al
  5090.         lods    byte [esi]
  5091.         cmp     al,','
  5092.         jne     invalid_operand
  5093.         lods    byte [esi]
  5094.         call    get_size_operator
  5095.         cmp     al,10h
  5096.         jne     invalid_operand
  5097.         lods    byte [esi]
  5098.         call    convert_mmx_register
  5099.         cmp     ah,16
  5100.         jne     invalid_operand_size
  5101.         mov     bl,al
  5102.         call    store_nomem_instruction
  5103.         jmp     instruction_assembled
  5104. cmppd_instruction:
  5105.         mov     [operand_prefix],66h
  5106. cmpps_instruction:
  5107.         mov     [base_code],0Fh
  5108.         mov     [extended_code],0C2h
  5109.         mov     [mmx_size],16
  5110.         mov     byte [value],-1
  5111.         jmp     sse_cmp_instruction
  5112. cmp_pd_instruction:
  5113.         mov     [operand_prefix],66h
  5114. cmp_ps_instruction:
  5115.         mov     [base_code],0Fh
  5116.         mov     [extended_code],0C2h
  5117.         mov     [mmx_size],16
  5118.         mov     byte [value],al
  5119.         jmp     sse_cmp_instruction
  5120. cmpss_instruction:
  5121.         mov     [mmx_size],4
  5122.         mov     [operand_prefix],0F3h
  5123.         jmp     cmpsx_instruction
  5124. cmpsd_instruction:
  5125.         mov     al,0A7h
  5126.         mov     ah,[esi]
  5127.         or      ah,ah
  5128.         jz      simple_instruction_32bit
  5129.         cmp     ah,0Fh
  5130.         je      simple_instruction_32bit
  5131.         mov     [mmx_size],8
  5132.         mov     [operand_prefix],0F2h
  5133.       cmpsx_instruction:
  5134.         mov     [base_code],0Fh
  5135.         mov     [extended_code],0C2h
  5136.         mov     byte [value],-1
  5137.         jmp     sse_cmp_instruction
  5138. cmp_ss_instruction:
  5139.         mov     [mmx_size],4
  5140.         mov     [operand_prefix],0F3h
  5141.         jmp     cmp_sx_instruction
  5142. cmp_sd_instruction:
  5143.         mov     [mmx_size],8
  5144.         mov     [operand_prefix],0F2h
  5145.       cmp_sx_instruction:
  5146.         mov     [base_code],0Fh
  5147.         mov     [extended_code],0C2h
  5148.         mov     byte [value],al
  5149. sse_cmp_instruction:
  5150.         lods    byte [esi]
  5151.         call    get_size_operator
  5152.         cmp     al,10h
  5153.         jne     invalid_operand
  5154.         lods    byte [esi]
  5155.         call    convert_mmx_register
  5156.         cmp     ah,16
  5157.         jne     invalid_operand_size
  5158.         mov     [postbyte_register],al
  5159.         lods    byte [esi]
  5160.         cmp     al,','
  5161.         jne     invalid_operand
  5162.         mov     [operand_size],0
  5163.         lods    byte [esi]
  5164.         call    get_size_operator
  5165.         cmp     al,10h
  5166.         je      sse_cmp_xmmreg_xmmreg
  5167.         cmp     al,'['
  5168.         jne     invalid_operand
  5169.         call    get_address
  5170.         mov     al,[operand_size]
  5171.         or      al,al
  5172.         jz      sse_cmp_size_ok
  5173.         cmp     al,[mmx_size]
  5174.         jne     invalid_operand_size
  5175.       sse_cmp_size_ok:
  5176.         push    bx cx edx
  5177.         call    get_nextbyte
  5178.         pop     edx cx bx
  5179.         call    store_instruction_with_imm8
  5180.         jmp     instruction_assembled
  5181.       sse_cmp_xmmreg_xmmreg:
  5182.         lods    byte [esi]
  5183.         call    convert_mmx_register
  5184.         cmp     ah,16
  5185.         jne     invalid_operand_size
  5186.         mov     bl,al
  5187.         call    store_nomem_instruction
  5188.         call    get_nextbyte
  5189.         mov     al,byte [value]
  5190.         stos    byte [edi]
  5191.         jmp     instruction_assembled
  5192.       get_nextbyte:
  5193.         cmp     byte [value],-1
  5194.         jne     nextbyte_ok
  5195.         mov     [operand_size],0
  5196.         lods    byte [esi]
  5197.         cmp     al,','
  5198.         jne     invalid_operand
  5199.         lods    byte [esi]
  5200.         call    get_size_operator
  5201.         test    [operand_size],not 1
  5202.         jnz     invalid_value
  5203.         cmp     al,'('
  5204.         jne     invalid_operand
  5205.         call    get_byte_value
  5206.         cmp     al,7
  5207.         ja      invalid_value
  5208.         mov     byte [value],al
  5209.       nextbyte_ok:
  5210.         ret
  5211. cvtpi2pd_instruction:
  5212.         mov     [operand_prefix],66h
  5213. cvtpi2ps_instruction:
  5214.         mov     [base_code],0Fh
  5215.         mov     [extended_code],al
  5216.         lods    byte [esi]
  5217.         call    get_size_operator
  5218.         cmp     al,10h
  5219.         jne     invalid_operand
  5220.         lods    byte [esi]
  5221.         call    convert_mmx_register
  5222.         cmp     ah,16
  5223.         jne     invalid_operand_size
  5224.         mov     [postbyte_register],al
  5225.         mov     [operand_size],0
  5226.         lods    byte [esi]
  5227.         cmp     al,','
  5228.         jne     invalid_operand
  5229.         lods    byte [esi]
  5230.         call    get_size_operator
  5231.         cmp     al,10h
  5232.         je      cvtpi_xmmreg_xmmreg
  5233.         cmp     al,'['
  5234.         jne     invalid_operand
  5235.         call    get_address
  5236.         cmp     [operand_size],0
  5237.         je      cvtpi_size_ok
  5238.         cmp     [operand_size],8
  5239.         jne     invalid_operand_size
  5240.       cvtpi_size_ok:
  5241.         call    store_instruction
  5242.         jmp     instruction_assembled
  5243.       cvtpi_xmmreg_xmmreg:
  5244.         lods    byte [esi]
  5245.         call    convert_mmx_register
  5246.         cmp     ah,8
  5247.         jne     invalid_operand_size
  5248.         mov     bl,al
  5249.         call    store_nomem_instruction
  5250.         jmp     instruction_assembled
  5251. cvtsi2ss_instruction:
  5252.         mov     [operand_prefix],0F3h
  5253.         jmp     cvtsi_instruction
  5254. cvtsi2sd_instruction:
  5255.         mov     [operand_prefix],0F2h
  5256.       cvtsi_instruction:
  5257.         mov     [base_code],0Fh
  5258.         mov     [extended_code],al
  5259.         lods    byte [esi]
  5260.         call    get_size_operator
  5261.         cmp     al,10h
  5262.         jne     invalid_operand
  5263.         lods    byte [esi]
  5264.         call    convert_mmx_register
  5265.         cmp     ah,16
  5266.         jne     invalid_operand_size
  5267.         mov     [postbyte_register],al
  5268.         mov     [operand_size],0
  5269.         lods    byte [esi]
  5270.         cmp     al,','
  5271.         jne     invalid_operand
  5272.         lods    byte [esi]
  5273.         call    get_size_operator
  5274.         cmp     al,10h
  5275.         je      cvtsi_xmmreg_reg
  5276.         cmp     al,'['
  5277.         jne     invalid_operand
  5278.         call    get_address
  5279.         cmp     [operand_size],0
  5280.         je      cvtsi_size_ok
  5281.         cmp     [operand_size],4
  5282.         jne     invalid_operand_size
  5283.       cvtsi_size_ok:
  5284.         call    store_instruction
  5285.         jmp     instruction_assembled
  5286.       cvtsi_xmmreg_reg:
  5287.         lods    byte [esi]
  5288.         call    convert_register
  5289.         cmp     ah,4
  5290.         je      cvtsi_xmmreg_reg_store
  5291.         cmp     ah,8
  5292.         jne     invalid_operand_size
  5293.         call    operand_64bit
  5294.       cvtsi_xmmreg_reg_store:
  5295.         mov     bl,al
  5296.         call    store_nomem_instruction
  5297.         jmp     instruction_assembled
  5298. cvtps2pi_instruction:
  5299.         mov     [mmx_size],8
  5300.         jmp     cvtpd_instruction
  5301. cvtpd2pi_instruction:
  5302.         mov     [operand_prefix],66h
  5303.         mov     [mmx_size],16
  5304.       cvtpd_instruction:
  5305.         mov     [base_code],0Fh
  5306.         mov     [extended_code],al
  5307.         lods    byte [esi]
  5308.         call    get_size_operator
  5309.         cmp     al,10h
  5310.         jne     invalid_operand
  5311.         lods    byte [esi]
  5312.         call    convert_mmx_register
  5313.         cmp     ah,8
  5314.         jne     invalid_operand_size
  5315.         mov     [operand_size],0
  5316.         jmp     sse_reg
  5317. cvtss2si_instruction:
  5318.         mov     [operand_prefix],0F3h
  5319.         mov     [mmx_size],4
  5320.         jmp     cvt2si_instruction
  5321. cvtsd2si_instruction:
  5322.         mov     [operand_prefix],0F2h
  5323.         mov     [mmx_size],8
  5324.       cvt2si_instruction:
  5325.         mov     [extended_code],al
  5326.         mov     [base_code],0Fh
  5327.         lods    byte [esi]
  5328.         call    get_size_operator
  5329.         cmp     al,10h
  5330.         jne     invalid_operand
  5331.         lods    byte [esi]
  5332.         call    convert_register
  5333.         mov     [operand_size],0
  5334.         cmp     ah,4
  5335.         je      sse_reg
  5336.         cmp     ah,8
  5337.         jne     invalid_operand_size
  5338.         call    operand_64bit
  5339.         jmp     sse_reg
  5340. amd3dnow_instruction:
  5341.         mov     [base_code],0Fh
  5342.         mov     [extended_code],0Fh
  5343.         mov     byte [value],al
  5344.         lods    byte [esi]
  5345.         call    get_size_operator
  5346.         cmp     al,10h
  5347.         jne     invalid_operand
  5348.         lods    byte [esi]
  5349.         call    convert_mmx_register
  5350.         cmp     ah,8
  5351.         jne     invalid_operand_size
  5352.         mov     [postbyte_register],al
  5353.         lods    byte [esi]
  5354.         cmp     al,','
  5355.         jne     invalid_operand
  5356.         lods    byte [esi]
  5357.         call    get_size_operator
  5358.         cmp     al,10h
  5359.         je      amd3dnow_mmreg_mmreg
  5360.         cmp     al,'['
  5361.         jne     invalid_operand
  5362.         call    get_address
  5363.         call    store_instruction_with_imm8
  5364.         jmp     instruction_assembled
  5365.       amd3dnow_mmreg_mmreg:
  5366.         lods    byte [esi]
  5367.         call    convert_mmx_register
  5368.         cmp     ah,8
  5369.         jne     invalid_operand_size
  5370.         mov     bl,al
  5371.         call    store_nomem_instruction
  5372.         mov     al,byte [value]
  5373.         stos    byte [edi]
  5374.         jmp     instruction_assembled
  5375.  
  5376. fxsave_instruction:
  5377.         mov     [extended_code],0AEh
  5378.         mov     [base_code],0Fh
  5379.         mov     [postbyte_register],al
  5380.         lods    byte [esi]
  5381.         call    get_size_operator
  5382.         cmp     al,'['
  5383.         jne     invalid_operand
  5384.         call    get_address
  5385.         mov     ah,[operand_size]
  5386.         or      ah,ah
  5387.         jz      fxsave_size_ok
  5388.         mov     al,[postbyte_register]
  5389.         cmp     al,111b
  5390.         je      clflush_size_check
  5391.         cmp     al,10b
  5392.         jb      invalid_operand_size
  5393.         cmp     al,11b
  5394.         ja      invalid_operand_size
  5395.         cmp     ah,4
  5396.         jne     invalid_operand_size
  5397.         jmp     fxsave_size_ok
  5398.       clflush_size_check:
  5399.         cmp     ah,1
  5400.         jne     invalid_operand_size
  5401.       fxsave_size_ok:
  5402.         call    store_instruction
  5403.         jmp     instruction_assembled
  5404. prefetch_instruction:
  5405.         mov     [extended_code],18h
  5406.       prefetch_mem_8bit:
  5407.         mov     [base_code],0Fh
  5408.         mov     [postbyte_register],al
  5409.         lods    byte [esi]
  5410.         call    get_size_operator
  5411.         cmp     al,'['
  5412.         jne     invalid_operand
  5413.         or      ah,ah
  5414.         jz      prefetch_size_ok
  5415.         cmp     ah,1
  5416.         jne     invalid_operand_size
  5417.       prefetch_size_ok:
  5418.         call    get_address
  5419.         call    store_instruction
  5420.         jmp     instruction_assembled
  5421. amd_prefetch_instruction:
  5422.         mov     [extended_code],0Dh
  5423.         jmp     prefetch_mem_8bit
  5424. fence_instruction:
  5425.         mov     bl,al
  5426.         mov     ax,0AE0Fh
  5427.         stos    word [edi]
  5428.         mov     al,bl
  5429.         stos    byte [edi]
  5430.         jmp     instruction_assembled
  5431. pause_instruction:
  5432.         mov     ax,90F3h
  5433.         stos    word [edi]
  5434.         jmp     instruction_assembled
  5435. movntq_instruction:
  5436.         mov     [mmx_size],8
  5437.         jmp     movnt_instruction
  5438. movntps_instruction:
  5439.         mov     [mmx_size],16
  5440.         jmp     movnt_instruction
  5441. movntdq_instruction:
  5442.         mov     [operand_prefix],66h
  5443.         mov     [mmx_size],16
  5444.       movnt_instruction:
  5445.         mov     [extended_code],al
  5446.         mov     [base_code],0Fh
  5447.         lods    byte [esi]
  5448.         call    get_size_operator
  5449.         cmp     al,'['
  5450.         jne     invalid_operand
  5451.         call    get_address
  5452.         lods    byte [esi]
  5453.         cmp     al,','
  5454.         jne     invalid_operand
  5455.         lods    byte [esi]
  5456.         call    get_size_operator
  5457.         cmp     al,10h
  5458.         jne     invalid_operand
  5459.         lods    byte [esi]
  5460.         call    convert_mmx_register
  5461.         cmp     ah,[mmx_size]
  5462.         jne     invalid_operand_size
  5463.         mov     [postbyte_register],al
  5464.         call    store_instruction
  5465.         jmp     instruction_assembled
  5466. movnti_instruction:
  5467.         mov     [base_code],0Fh
  5468.         mov     [extended_code],al
  5469.         lods    byte [esi]
  5470.         call    get_size_operator
  5471.         cmp     al,'['
  5472.         jne     invalid_operand
  5473.         call    get_address
  5474.         lods    byte [esi]
  5475.         cmp     al,','
  5476.         jne     invalid_operand
  5477.         lods    byte [esi]
  5478.         call    get_size_operator
  5479.         cmp     al,10h
  5480.         jne     invalid_operand
  5481.         lods    byte [esi]
  5482.         call    convert_register
  5483.         cmp     ah,4
  5484.         je      movnti_store
  5485.         cmp     ah,8
  5486.         jne     invalid_operand_size
  5487.         call    operand_64bit
  5488.       movnti_store:
  5489.         mov     [postbyte_register],al
  5490.         call    store_instruction
  5491.         jmp     instruction_assembled
  5492. monitor_instruction:
  5493.         mov     [postbyte_register],al
  5494.         lods    byte [esi]
  5495.         call    get_size_operator
  5496.         cmp     al,10h
  5497.         jne     invalid_operand
  5498.         lods    byte [esi]
  5499.         call    convert_register
  5500.         cmp     ax,0400h
  5501.         jne     invalid_operand
  5502.         lods    byte [esi]
  5503.         cmp     al,','
  5504.         jne     invalid_operand
  5505.         lods    byte [esi]
  5506.         call    get_size_operator
  5507.         cmp     al,10h
  5508.         jne     invalid_operand
  5509.         lods    byte [esi]
  5510.         call    convert_register
  5511.         cmp     ax,0401h
  5512.         jne     invalid_operand
  5513.         cmp     [postbyte_register],0C8h
  5514.         jne     monitor_instruction_store
  5515.         lods    byte [esi]
  5516.         cmp     al,','
  5517.         jne     invalid_operand
  5518.         lods    byte [esi]
  5519.         call    get_size_operator
  5520.         cmp     al,10h
  5521.         jne     invalid_operand
  5522.         lods    byte [esi]
  5523.         call    convert_register
  5524.         cmp     ax,0402h
  5525.         jne     invalid_operand
  5526.       monitor_instruction_store:
  5527.         mov     ax,010Fh
  5528.         stos    word [edi]
  5529.         mov     al,[postbyte_register]
  5530.         stos    byte [edi]
  5531.         jmp     instruction_assembled
  5532.  
  5533. simple_vmx_instruction:
  5534.         mov     ah,al
  5535.         mov     al,0Fh
  5536.         stos    byte [edi]
  5537.         mov     al,1
  5538.         stos    word [edi]
  5539.         jmp     instruction_assembled
  5540. vmclear_instruction:
  5541.         mov     [operand_prefix],66h
  5542.         jmp     vmx_instruction
  5543. vmxon_instruction:
  5544.         mov     [operand_prefix],0F3h
  5545. vmx_instruction:
  5546.         mov     [postbyte_register],al
  5547.         mov     [extended_code],0C7h
  5548.         lods    byte [esi]
  5549.         call    get_size_operator
  5550.         cmp     al,'['
  5551.         jne     invalid_operand
  5552.         call    get_address
  5553.         mov     al,[operand_size]
  5554.         or      al,al
  5555.         jz      vmx_size_ok
  5556.         cmp     al,8
  5557.         jne     invalid_operand_size
  5558.       vmx_size_ok:
  5559.         mov     [base_code],0Fh
  5560.         call    store_instruction
  5561.         jmp     instruction_assembled
  5562. vmread_instruction:
  5563.         mov     [extended_code],78h
  5564.         lods    byte [esi]
  5565.         call    get_size_operator
  5566.         cmp     al,'['
  5567.         jne     invalid_operand
  5568.         call    get_address
  5569.         lods    byte [esi]
  5570.         cmp     al,','
  5571.         jne     invalid_operand
  5572.         lods    byte [esi]
  5573.         call    get_size_operator
  5574.         cmp     al,10h
  5575.         jne     invalid_operand
  5576.         lods    byte [esi]
  5577.         call    convert_register
  5578.         mov     [postbyte_register],al
  5579.       vmread_check_size:
  5580.         cmp     [code_type],64
  5581.         je      vmread_long
  5582.         cmp     [operand_size],4
  5583.         je      vmx_size_ok
  5584.         jmp     invalid_operand_size
  5585.       vmread_long:
  5586.         cmp     [operand_size],8
  5587.         je      vmx_size_ok
  5588.         jmp     invalid_operand_size
  5589. vmwrite_instruction:
  5590.         mov     [extended_code],79h
  5591.         lods    byte [esi]
  5592.         call    get_size_operator
  5593.         cmp     al,10h
  5594.         jne     invalid_operand
  5595.         lods    byte [esi]
  5596.         call    convert_register
  5597.         mov     [postbyte_register],al
  5598.         lods    byte [esi]
  5599.         cmp     al,','
  5600.         jne     invalid_operand
  5601.         lods    byte [esi]
  5602.         call    get_size_operator
  5603.         cmp     al,'['
  5604.         jne     invalid_operand
  5605.         call    get_address
  5606.         jmp     vmread_check_size
  5607.  
  5608. convert_register:
  5609.         mov     ah,al
  5610.         shr     ah,4
  5611.         and     al,0Fh
  5612.         cmp     ah,8
  5613.         je      match_register_size
  5614.         cmp     ah,4
  5615.         ja      invalid_operand
  5616.         cmp     ah,1
  5617.         ja      match_register_size
  5618.         cmp     al,4
  5619.         jb      match_register_size
  5620.         or      ah,ah
  5621.         jz      high_byte_register
  5622.         or      [rex_prefix],40h
  5623.       match_register_size:
  5624.         cmp     ah,[operand_size]
  5625.         je      register_size_ok
  5626.         cmp     [operand_size],0
  5627.         jne     operand_sizes_do_not_match
  5628.         mov     [operand_size],ah
  5629.       register_size_ok:
  5630.         ret
  5631.       high_byte_register:
  5632.         mov     ah,1
  5633.         or      [rex_prefix],80h
  5634.         jmp     match_register_size
  5635. convert_fpu_register:
  5636.         mov     ah,al
  5637.         shr     ah,4
  5638.         and     al,111b
  5639.         cmp     ah,10
  5640.         jne     invalid_operand
  5641.         jmp     match_register_size
  5642. convert_mmx_register:
  5643.         mov     ah,al
  5644.         shr     ah,4
  5645.         cmp     ah,0Ch
  5646.         je      xmm_register
  5647.         ja      invalid_operand
  5648.         and     al,111b
  5649.         cmp     ah,0Bh
  5650.         jne     invalid_operand
  5651.         mov     ah,8
  5652.         jmp     match_register_size
  5653.       xmm_register:
  5654.         and     al,0Fh
  5655.         mov     ah,16
  5656.         cmp     al,8
  5657.         jb      match_register_size
  5658.         cmp     [code_type],64
  5659.         jne     invalid_operand
  5660.         jmp     match_register_size
  5661. get_size_operator:
  5662.         xor     ah,ah
  5663.         cmp     al,11h
  5664.         jne     no_size_operator
  5665.         mov     [size_declared],1
  5666.         lods    word [esi]
  5667.         xchg    al,ah
  5668.         mov     [size_override],1
  5669.         cmp     ah,[operand_size]
  5670.         je      size_operator_ok
  5671.         cmp     [operand_size],0
  5672.         jne     operand_sizes_do_not_match
  5673.         mov     [operand_size],ah
  5674.       size_operator_ok:
  5675.         ret
  5676.       no_size_operator:
  5677.         mov     [size_declared],0
  5678.         cmp     al,'['
  5679.         jne     size_operator_ok
  5680.         mov     [size_override],0
  5681.         ret
  5682. get_jump_operator:
  5683.         mov     [jump_type],0
  5684.         cmp     al,12h
  5685.         jne     jump_operator_ok
  5686.         lods    word [esi]
  5687.         mov     [jump_type],al
  5688.         mov     al,ah
  5689.       jump_operator_ok:
  5690.         ret
  5691. get_address:
  5692.         mov     [segment_register],0
  5693.         mov     [address_size],0
  5694.         mov     al,[code_type]
  5695.         shr     al,3
  5696.         mov     [value_size],al
  5697.         mov     al,[esi]
  5698.         and     al,11110000b
  5699.         cmp     al,60h
  5700.         jne     get_size_prefix
  5701.         lods    byte [esi]
  5702.         sub     al,60h
  5703.         mov     [segment_register],al
  5704.         mov     al,[esi]
  5705.         and     al,11110000b
  5706.       get_size_prefix:
  5707.         cmp     al,70h
  5708.         jne     address_size_prefix_ok
  5709.         lods    byte [esi]
  5710.         sub     al,70h
  5711.         cmp     al,2
  5712.         jb      invalid_address_size
  5713.         cmp     al,8
  5714.         ja      invalid_address_size
  5715.         mov     [address_size],al
  5716.         mov     [value_size],al
  5717.       address_size_prefix_ok:
  5718.         call    calculate_address
  5719.         mov     [address_high],edx
  5720.         mov     edx,eax
  5721.         cmp     [code_type],64
  5722.         jne     address_ok
  5723.         or      bx,bx
  5724.         jnz     address_ok
  5725.         test    ch,0Fh
  5726.         jnz     address_ok
  5727.       calculate_relative_address:
  5728.         call    calculate_relative_offset
  5729.         mov     [address_high],edx
  5730.         mov     edx,[symbol_identifier]
  5731.         mov     [address_symbol],edx
  5732.         mov     edx,eax
  5733.         mov     ch,[value_type]
  5734.         mov     bx,0FF00h
  5735.         xor     cl,cl
  5736.       address_ok:
  5737.         ret
  5738.  
  5739. operand_16bit:
  5740.         cmp     [code_type],16
  5741.         je      size_prefix_ok
  5742.         mov     [operand_prefix],66h
  5743.         ret
  5744. operand_32bit:
  5745.         cmp     [code_type],16
  5746.         jne     size_prefix_ok
  5747.         mov     [operand_prefix],66h
  5748.       size_prefix_ok:
  5749.         ret
  5750. operand_64bit:
  5751.         cmp     [code_type],64
  5752.         jne     invalid_operand_size
  5753.         or      [rex_prefix],48h
  5754.         ret
  5755. operand_autodetect:
  5756.         cmp     al,2
  5757.         je      operand_16bit
  5758.         cmp     al,4
  5759.         je      operand_32bit
  5760.         cmp     al,8
  5761.         je      operand_64bit
  5762.         jmp     invalid_operand_size
  5763. store_segment_prefix_if_necessary:
  5764.         mov     al,[segment_register]
  5765.         or      al,al
  5766.         jz      segment_prefix_ok
  5767.         cmp     al,3
  5768.         je      ss_prefix
  5769.         cmp     al,4
  5770.         ja      segment_prefix_386
  5771.         jb      segment_prefix_86
  5772.         cmp     bl,25h
  5773.         je      segment_prefix_86
  5774.         cmp     bh,25h
  5775.         je      segment_prefix_86
  5776.         cmp     bh,45h
  5777.         je      segment_prefix_86
  5778.         cmp     bh,44h
  5779.         je      segment_prefix_86
  5780.         ret
  5781.       ss_prefix:
  5782.         cmp     bl,25h
  5783.         je      segment_prefix_ok
  5784.         cmp     bh,25h
  5785.         je      segment_prefix_ok
  5786.         cmp     bh,45h
  5787.         je      segment_prefix_ok
  5788.         cmp     bh,44h
  5789.         je      segment_prefix_ok
  5790.         jmp     segment_prefix_86
  5791. store_segment_prefix:
  5792.         mov     al,[segment_register]
  5793.         or      al,al
  5794.         jz      segment_prefix_ok
  5795.         cmp     al,5
  5796.         jae     segment_prefix_386
  5797.       segment_prefix_86:
  5798.         dec     al
  5799.         shl     al,3
  5800.         add     al,26h
  5801.         stos    byte [edi]
  5802.         jmp     segment_prefix_ok
  5803.       segment_prefix_386:
  5804.         add     al,64h-5
  5805.         stos    byte [edi]
  5806.       segment_prefix_ok:
  5807.         ret
  5808. store_instruction_code:
  5809.         mov     al,[operand_prefix]
  5810.         or      al,al
  5811.         jz      operand_prefix_ok
  5812.         stos    byte [edi]
  5813.       operand_prefix_ok:
  5814.         mov     al,[rex_prefix]
  5815.         test    al,40h
  5816.         jz      rex_prefix_ok
  5817.         cmp     [code_type],64
  5818.         jne     invalid_operand
  5819.         test    al,0B0h
  5820.         jnz     prefix_conflict
  5821.         stos    byte [edi]
  5822.       rex_prefix_ok:
  5823.         mov     al,[base_code]
  5824.         stos    byte [edi]
  5825.         cmp     al,0Fh
  5826.         jne     instruction_code_ok
  5827.       store_extended_code:
  5828.         mov     al,[extended_code]
  5829.         stos    byte [edi]
  5830.       instruction_code_ok:
  5831.         ret
  5832. store_nomem_instruction:
  5833.         test    [postbyte_register],1000b
  5834.         jz      nomem_reg_code_ok
  5835.         or      [rex_prefix],44h
  5836.         and     [postbyte_register],111b
  5837.       nomem_reg_code_ok:
  5838.         test    bl,1000b
  5839.         jz      nomem_rm_code_ok
  5840.         or      [rex_prefix],41h
  5841.         and     bl,111b
  5842.       nomem_rm_code_ok:
  5843.         call    store_instruction_code
  5844.         mov     al,[postbyte_register]
  5845.         shl     al,3
  5846.         or      al,bl
  5847.         or      al,11000000b
  5848.         stos    byte [edi]
  5849.         ret
  5850. store_instruction:
  5851.         mov     [current_offset],edi
  5852.         test    [postbyte_register],1000b
  5853.         jz      reg_code_ok
  5854.         or      [rex_prefix],44h
  5855.         and     [postbyte_register],111b
  5856.       reg_code_ok:
  5857.         call    store_segment_prefix_if_necessary
  5858.         or      bx,bx
  5859.         jz      address_immediate
  5860.         cmp     bx,0F000h
  5861.         je      address_rip_based
  5862.         cmp     bx,0FF00h
  5863.         je      address_relative
  5864.         mov     al,bl
  5865.         or      al,bh
  5866.         and     al,11110000b
  5867.         cmp     al,80h
  5868.         je      postbyte_64bit
  5869.         cmp     al,40h
  5870.         je      postbyte_32bit
  5871.         cmp     al,20h
  5872.         jne     invalid_address
  5873.         cmp     [code_type],64
  5874.         je      invalid_address_size
  5875.         call    address_16bit_prefix
  5876.         call    store_instruction_code
  5877.         cmp     bx,2326h
  5878.         je      address_bx_si
  5879.         cmp     bx,2623h
  5880.         je      address_bx_si
  5881.         cmp     bx,2327h
  5882.         je      address_bx_di
  5883.         cmp     bx,2723h
  5884.         je      address_bx_di
  5885.         cmp     bx,2526h
  5886.         je      address_bp_si
  5887.         cmp     bx,2625h
  5888.         je      address_bp_si
  5889.         cmp     bx,2527h
  5890.         je      address_bp_di
  5891.         cmp     bx,2725h
  5892.         je      address_bp_di
  5893.         cmp     bx,2600h
  5894.         je      address_si
  5895.         cmp     bx,2700h
  5896.         je      address_di
  5897.         cmp     bx,2300h
  5898.         je      address_bx
  5899.         cmp     bx,2500h
  5900.         je      address_bp
  5901.         jmp     invalid_address
  5902.       address_bx_si:
  5903.         xor     al,al
  5904.         jmp     postbyte_16bit
  5905.       address_bx_di:
  5906.         mov     al,1
  5907.         jmp     postbyte_16bit
  5908.       address_bp_si:
  5909.         mov     al,10b
  5910.         jmp     postbyte_16bit
  5911.       address_bp_di:
  5912.         mov     al,11b
  5913.         jmp     postbyte_16bit
  5914.       address_si:
  5915.         mov     al,100b
  5916.         jmp     postbyte_16bit
  5917.       address_di:
  5918.         mov     al,101b
  5919.         jmp     postbyte_16bit
  5920.       address_bx:
  5921.         mov     al,111b
  5922.         jmp     postbyte_16bit
  5923.       address_bp:
  5924.         mov     al,110b
  5925.       postbyte_16bit:
  5926.         test    ch,22h
  5927.         jnz     address_16bit_value
  5928.         or      ch,ch
  5929.         jnz     address_sizes_do_not_agree
  5930.         cmp     edx,10000h
  5931.         jge     value_out_of_range
  5932.         cmp     edx,-8000h
  5933.         jl      value_out_of_range
  5934.         or      dx,dx
  5935.         jz      address
  5936.         cmp     dx,80h
  5937.         jb      address_8bit_value
  5938.         cmp     dx,-80h
  5939.         jae     address_8bit_value
  5940.       address_16bit_value:
  5941.         or      al,10000000b
  5942.         mov     cl,[postbyte_register]
  5943.         shl     cl,3
  5944.         or      al,cl
  5945.         stos    byte [edi]
  5946.         mov     eax,edx
  5947.         stos    word [edi]
  5948.         ret
  5949.       address_8bit_value:
  5950.         or      al,01000000b
  5951.         mov     cl,[postbyte_register]
  5952.         shl     cl,3
  5953.         or      al,cl
  5954.         stos    byte [edi]
  5955.         mov     al,dl
  5956.         stos    byte [edi]
  5957.         cmp     dx,80h
  5958.         jge     value_out_of_range
  5959.         cmp     dx,-80h
  5960.         jl      value_out_of_range
  5961.         ret
  5962.       address:
  5963.         cmp     al,110b
  5964.         je      address_8bit_value
  5965.         mov     cl,[postbyte_register]
  5966.         shl     cl,3
  5967.         or      al,cl
  5968.         stos    byte [edi]
  5969.         ret
  5970.       postbyte_32bit:
  5971.         call    address_32bit_prefix
  5972.         call    store_instruction_code
  5973.         cmp     bl,44h
  5974.         je      invalid_address
  5975.         or      cl,cl
  5976.         jz      only_base_register
  5977.         jmp     base_and_index
  5978.       postbyte_64bit:
  5979.         cmp     [code_type],64
  5980.         jne     invalid_address_size
  5981.         test    bh,1000b
  5982.         jz      base_code_ok
  5983.         or      [rex_prefix],41h
  5984.       base_code_ok:
  5985.         test    bl,1000b
  5986.         jz      index_code_ok
  5987.         or      [rex_prefix],42h
  5988.       index_code_ok:
  5989.         call    store_instruction_code
  5990.         or      cl,cl
  5991.         jz      only_base_register
  5992.       base_and_index:
  5993.         mov     al,100b
  5994.         xor     ah,ah
  5995.         cmp     cl,1
  5996.         je      scale_ok
  5997.         cmp     cl,2
  5998.         je      scale_1
  5999.         cmp     cl,4
  6000.         je      scale_2
  6001.         or      ah,11000000b
  6002.         jmp     scale_ok
  6003.       scale_2:
  6004.         or      ah,10000000b
  6005.         jmp     scale_ok
  6006.       scale_1:
  6007.         or      ah,01000000b
  6008.       scale_ok:
  6009.         or      bh,bh
  6010.         jz      only_index_register
  6011.         and     bl,111b
  6012.         shl     bl,3
  6013.         or      ah,bl
  6014.         and     bh,111b
  6015.         or      ah,bh
  6016.         test    ch,44h
  6017.         jnz     sib_address_32bit_value
  6018.         or      ch,ch
  6019.         jnz     address_sizes_do_not_agree
  6020.         cmp     bh,5
  6021.         je      address_value
  6022.         or      edx,edx
  6023.         jz      sib_address
  6024.       address_value:
  6025.         cmp     edx,80h
  6026.         jb      sib_address_8bit_value
  6027.         cmp     edx,-80h
  6028.         jae     sib_address_8bit_value
  6029.       sib_address_32bit_value:
  6030.         or      al,10000000b
  6031.         mov     cl,[postbyte_register]
  6032.         shl     cl,3
  6033.         or      al,cl
  6034.         stos    word [edi]
  6035.         jmp     store_address_32bit_value
  6036.       sib_address_8bit_value:
  6037.         or      al,01000000b
  6038.         mov     cl,[postbyte_register]
  6039.         shl     cl,3
  6040.         or      al,cl
  6041.         stos    word [edi]
  6042.         mov     al,dl
  6043.         stos    byte [edi]
  6044.         cmp     edx,80h
  6045.         jge     value_out_of_range
  6046.         cmp     edx,-80h
  6047.         jl      value_out_of_range
  6048.         ret
  6049.       sib_address:
  6050.         mov     cl,[postbyte_register]
  6051.         shl     cl,3
  6052.         or      al,cl
  6053.         stos    word [edi]
  6054.         ret
  6055.       only_index_register:
  6056.         or      ah,101b
  6057.         and     bl,111b
  6058.         shl     bl,3
  6059.         or      ah,bl
  6060.         mov     cl,[postbyte_register]
  6061.         shl     cl,3
  6062.         or      al,cl
  6063.         stos    word [edi]
  6064.         test    ch,44h
  6065.         jnz     store_address_32bit_value
  6066.         or      ch,ch
  6067.         jnz     invalid_address_size
  6068.         jmp     store_address_32bit_value
  6069.       zero_index_register:
  6070.         mov     bl,4
  6071.         mov     cl,1
  6072.         jmp     base_and_index
  6073.       only_base_register:
  6074.         mov     al,bh
  6075.         and     al,111b
  6076.         cmp     al,4
  6077.         je      zero_index_register
  6078.         test    ch,44h
  6079.         jnz     simple_address_32bit_value
  6080.         or      ch,ch
  6081.         jnz     address_sizes_do_not_agree
  6082.         or      edx,edx
  6083.         jz      simple_address
  6084.         cmp     edx,80h
  6085.         jb      simple_address_8bit_value
  6086.         cmp     edx,-80h
  6087.         jae     simple_address_8bit_value
  6088.       simple_address_32bit_value:
  6089.         or      al,10000000b
  6090.         mov     cl,[postbyte_register]
  6091.         shl     cl,3
  6092.         or      al,cl
  6093.         stos    byte [edi]
  6094.         jmp     store_address_32bit_value
  6095.       simple_address_8bit_value:
  6096.         or      al,01000000b
  6097.         mov     cl,[postbyte_register]
  6098.         shl     cl,3
  6099.         or      al,cl
  6100.         stos    byte [edi]
  6101.         mov     al,dl
  6102.         stos    byte [edi]
  6103.         cmp     edx,80h
  6104.         jge     value_out_of_range
  6105.         cmp     edx,-80h
  6106.         jl      value_out_of_range
  6107.         ret
  6108.       simple_address:
  6109.         cmp     al,5
  6110.         je      simple_address_8bit_value
  6111.         mov     cl,[postbyte_register]
  6112.         shl     cl,3
  6113.         or      al,cl
  6114.         stos    byte [edi]
  6115.         ret
  6116.       address_immediate:
  6117.         cmp     [code_type],64
  6118.         je      address_immediate_sib
  6119.         test    ch,44h
  6120.         jnz     address_immediate_32bit
  6121.         test    ch,22h
  6122.         jnz     address_immediate_16bit
  6123.         or      ch,ch
  6124.         jnz     invalid_address_size
  6125.         cmp     [code_type],16
  6126.         je      addressing_16bit
  6127.       address_immediate_32bit:
  6128.         call    address_32bit_prefix
  6129.         call    store_instruction_code
  6130.       store_immediate_address:
  6131.         mov     al,101b
  6132.         mov     cl,[postbyte_register]
  6133.         shl     cl,3
  6134.         or      al,cl
  6135.         stos    byte [edi]
  6136.       store_address_32bit_value:
  6137.         test    ch,0F0h
  6138.         jz      address_32bit_relocation_ok
  6139.         mov     al,2
  6140.         xchg    [value_type],al
  6141.         mov     ebx,[address_symbol]
  6142.         xchg    ebx,[symbol_identifier]
  6143.         call    mark_relocation
  6144.         mov     [value_type],al
  6145.         mov     [symbol_identifier],ebx
  6146.       address_32bit_relocation_ok:
  6147.         mov     eax,edx
  6148.         stos    dword [edi]
  6149.         ret
  6150.       store_address_64bit_value:
  6151.         test    ch,0F0h
  6152.         jz      address_64bit_relocation_ok
  6153.         mov     al,4
  6154.         xchg    [value_type],al
  6155.         mov     ebx,[address_symbol]
  6156.         xchg    ebx,[symbol_identifier]
  6157.         call    mark_relocation
  6158.         mov     [value_type],al
  6159.         mov     [symbol_identifier],ebx
  6160.       address_64bit_relocation_ok:
  6161.         mov     eax,edx
  6162.         stos    dword [edi]
  6163.         mov     eax,[address_high]
  6164.         stos    dword [edi]
  6165.         ret
  6166.       address_immediate_sib:
  6167.         test    ch,not 44h
  6168.         jnz     invalid_address_size
  6169.         call    address_32bit_prefix
  6170.         call    store_instruction_code
  6171.         mov     al,100b
  6172.         mov     ah,100101b
  6173.         mov     cl,[postbyte_register]
  6174.         shl     cl,3
  6175.         or      al,cl
  6176.         stos    word [edi]
  6177.         jmp     store_address_32bit_value
  6178.       address_rip_based:
  6179.         cmp     [code_type],64
  6180.         jne     invalid_address
  6181.         call    store_instruction_code
  6182.         jmp     store_immediate_address
  6183.       address_relative:
  6184.         call    store_instruction_code
  6185.         movzx   eax,[immediate_size]
  6186.         add     eax,edi
  6187.         sub     eax,[current_offset]
  6188.         add     eax,5
  6189.         sub     edx,eax
  6190.         jo      value_out_of_range
  6191.         mov     al,101b
  6192.         mov     cl,[postbyte_register]
  6193.         shl     cl,3
  6194.         or      al,cl
  6195.         stos    byte [edi]
  6196.         xchg    [value_type],ch
  6197.         mov     ebx,[address_symbol]
  6198.         xchg    ebx,[symbol_identifier]
  6199.         mov     eax,edx
  6200.         call    mark_relocation
  6201.         mov     [value_type],ch
  6202.         mov     [symbol_identifier],ebx
  6203.         stos    dword [edi]
  6204.         ret
  6205.       addressing_16bit:
  6206.         cmp     edx,10000h
  6207.         jge     address_immediate_32bit
  6208.         cmp     edx,-8000h
  6209.         jl      address_immediate_32bit
  6210.         movzx   edx,dx
  6211.       address_immediate_16bit:
  6212.         call    address_16bit_prefix
  6213.         call    store_instruction_code
  6214.         mov     al,110b
  6215.         mov     cl,[postbyte_register]
  6216.         shl     cl,3
  6217.         or      al,cl
  6218.         stos    byte [edi]
  6219.         mov     eax,edx
  6220.         stos    word [edi]
  6221.         cmp     edx,10000h
  6222.         jge     value_out_of_range
  6223.         cmp     edx,-8000h
  6224.         jl      value_out_of_range
  6225.         ret
  6226.       address_16bit_prefix:
  6227.         cmp     [code_type],16
  6228.         je      instruction_prefix_ok
  6229.         mov     al,67h
  6230.         stos    byte [edi]
  6231.         ret
  6232.       address_32bit_prefix:
  6233.         cmp     [code_type],32
  6234.         je      instruction_prefix_ok
  6235.         mov     al,67h
  6236.         stos    byte [edi]
  6237.       instruction_prefix_ok:
  6238.         ret
  6239. store_instruction_with_imm8:
  6240.         mov     [immediate_size],1
  6241.         call    store_instruction
  6242.         mov     al,byte [value]
  6243.         stos    byte [edi]
  6244.         ret
  6245. store_instruction_with_imm16:
  6246.         mov     [immediate_size],2
  6247.         call    store_instruction
  6248.         mov     ax,word [value]
  6249.         call    mark_relocation
  6250.         stos    word [edi]
  6251.         ret
  6252. store_instruction_with_imm32:
  6253.         mov     [immediate_size],4
  6254.         call    store_instruction
  6255.         mov     eax,dword [value]
  6256.         call    mark_relocation
  6257.         stos    dword [edi]
  6258.         ret
  6259.  
  6260. address_registers:
  6261.  db 2,'bp',0,25h
  6262.  db 2,'bx',0,23h
  6263.  db 2,'di',0,27h
  6264.  db 3,'eax',0,40h
  6265.  db 3,'ebp',0,45h
  6266.  db 3,'ebx',0,43h
  6267.  db 3,'ecx',0,41h
  6268.  db 3,'edi',0,47h
  6269.  db 3,'edx',0,42h
  6270.  db 3,'esi',0,46h
  6271.  db 3,'esp',0,44h
  6272.  db 3,'r10',10h,8Ah
  6273.  db 3,'r11',10h,8Bh
  6274.  db 3,'r12',10h,8Ch
  6275.  db 3,'r13',10h,8Dh
  6276.  db 3,'r14',10h,8Eh
  6277.  db 3,'r15',10h,8Fh
  6278.  db 2,'r8',10h,88h
  6279.  db 2,'r9',10h,89h
  6280.  db 3,'rax',0,80h
  6281.  db 3,'rbp',0,85h
  6282.  db 3,'rbx',0,83h
  6283.  db 3,'rcx',0,81h
  6284.  db 3,'rdi',0,87h
  6285.  db 3,'rdx',0,82h
  6286.  db 3,'rip',0,0F0h
  6287.  db 3,'rsi',0,86h
  6288.  db 3,'rsp',0,84h
  6289.  db 2,'si',0,26h
  6290.  db 0
  6291.  
  6292. address_sizes:
  6293.  db 4,'byte',0,1
  6294.  db 5,'dword',0,4
  6295.  db 5,'qword',0,8
  6296.  db 4,'word',0,2
  6297.  db 0
  6298.  
  6299. symbols:
  6300.  db 2,'ah',10h,04h
  6301.  db 2,'al',10h,10h
  6302.  db 2,'ax',10h,20h
  6303.  db 2,'bh',10h,07h
  6304.  db 2,'bl',10h,13h
  6305.  db 2,'bp',10h,25h
  6306.  db 3,'bpl',10h,15h
  6307.  db 2,'bx',10h,23h
  6308.  db 4,'byte',11h,1
  6309.  db 2,'ch',10h,05h
  6310.  db 2,'cl',10h,11h
  6311.  db 3,'cr0',10h,50h
  6312.  db 3,'cr1',10h,51h
  6313.  db 3,'cr2',10h,52h
  6314.  db 3,'cr3',10h,53h
  6315.  db 3,'cr4',10h,54h
  6316.  db 3,'cr5',10h,55h
  6317.  db 3,'cr6',10h,56h
  6318.  db 3,'cr7',10h,57h
  6319.  db 3,'cr8',10h,58h
  6320.  db 3,'cr9',10h,59h
  6321.  db 4,'cr10',10h,5Ah
  6322.  db 4,'cr11',10h,5Bh
  6323.  db 4,'cr12',10h,5Ch
  6324.  db 4,'cr13',10h,5Dh
  6325.  db 4,'cr14',10h,5Eh
  6326.  db 4,'cr15',10h,5Fh
  6327.  db 2,'cs',10h,62h
  6328.  db 2,'cx',10h,21h
  6329.  db 2,'dh',10h,06h
  6330.  db 2,'di',10h,27h
  6331.  db 3,'dil',10h,17h
  6332.  db 2,'dl',10h,12h
  6333.  db 6,'dqword',11h,16
  6334.  db 3,'dr0',10h,70h
  6335.  db 3,'dr1',10h,71h
  6336.  db 3,'dr2',10h,72h
  6337.  db 3,'dr3',10h,73h
  6338.  db 3,'dr4',10h,74h
  6339.  db 3,'dr5',10h,75h
  6340.  db 3,'dr6',10h,76h
  6341.  db 3,'dr7',10h,77h
  6342.  db 3,'dr8',10h,78h
  6343.  db 3,'dr9',10h,79h
  6344.  db 4,'dr10',10h,7Ah
  6345.  db 4,'dr11',10h,7Bh
  6346.  db 4,'dr12',10h,7Ch
  6347.  db 4,'dr13',10h,7Dh
  6348.  db 4,'dr14',10h,7Eh
  6349.  db 4,'dr15',10h,7Fh
  6350.  db 2,'ds',10h,64h
  6351.  db 5,'dword',11h,4
  6352.  db 2,'dx',10h,22h
  6353.  db 3,'eax',10h,40h
  6354.  db 3,'ebp',10h,45h
  6355.  db 3,'ebx',10h,43h
  6356.  db 3,'ecx',10h,41h
  6357.  db 3,'edi',10h,47h
  6358.  db 3,'edx',10h,42h
  6359.  db 2,'es',10h,61h
  6360.  db 3,'esi',10h,46h
  6361.  db 3,'esp',10h,44h
  6362.  db 3,'far',12h,2
  6363.  db 2,'fs',10h,65h
  6364.  db 5,'fword',11h,6
  6365.  db 2,'gs',10h,66h
  6366.  db 3,'mm0',10h,0B0h
  6367.  db 3,'mm1',10h,0B1h
  6368.  db 3,'mm2',10h,0B2h
  6369.  db 3,'mm3',10h,0B3h
  6370.  db 3,'mm4',10h,0B4h
  6371.  db 3,'mm5',10h,0B5h
  6372.  db 3,'mm6',10h,0B6h
  6373.  db 3,'mm7',10h,0B7h
  6374.  db 4,'near',12h,1
  6375.  db 5,'pword',11h,6
  6376.  db 5,'qword',11h,8
  6377.  db 3,'r10',10h,8Ah
  6378.  db 4,'r10b',10h,1Ah
  6379.  db 4,'r10d',10h,4Ah
  6380.  db 4,'r10w',10h,2Ah
  6381.  db 3,'r11',10h,8Bh
  6382.  db 4,'r11b',10h,1Bh
  6383.  db 4,'r11d',10h,4Bh
  6384.  db 4,'r11w',10h,2Bh
  6385.  db 3,'r12',10h,8Ch
  6386.  db 4,'r12b',10h,1Ch
  6387.  db 4,'r12d',10h,4Ch
  6388.  db 4,'r12w',10h,2Ch
  6389.  db 3,'r13',10h,8Dh
  6390.  db 4,'r13b',10h,1Dh
  6391.  db 4,'r13d',10h,4Dh
  6392.  db 4,'r13w',10h,2Dh
  6393.  db 3,'r14',10h,8Eh
  6394.  db 4,'r14b',10h,1Eh
  6395.  db 4,'r14d',10h,4Eh
  6396.  db 4,'r14w',10h,2Eh
  6397.  db 3,'r15',10h,8Fh
  6398.  db 4,'r15b',10h,1Fh
  6399.  db 4,'r15d',10h,4Fh
  6400.  db 4,'r15w',10h,2Fh
  6401.  db 2,'r8',10h,88h
  6402.  db 3,'r8b',10h,18h
  6403.  db 3,'r8d',10h,48h
  6404.  db 3,'r8w',10h,28h
  6405.  db 2,'r9',10h,89h
  6406.  db 3,'r9b',10h,19h
  6407.  db 3,'r9d',10h,49h
  6408.  db 3,'r9w',10h,29h
  6409.  db 3,'rax',10h,80h
  6410.  db 3,'rbp',10h,85h
  6411.  db 3,'rbx',10h,83h
  6412.  db 3,'rcx',10h,81h
  6413.  db 3,'rdi',10h,87h
  6414.  db 3,'rdx',10h,82h
  6415.  db 3,'rsi',10h,86h
  6416.  db 3,'rsp',10h,84h
  6417.  db 2,'si',10h,26h
  6418.  db 3,'sil',10h,16h
  6419.  db 2,'sp',10h,24h
  6420.  db 3,'spl',10h,14h
  6421.  db 2,'ss',10h,63h
  6422.  db 2,'st',10h,0A0h
  6423.  db 3,'st0',10h,0A0h
  6424.  db 3,'st1',10h,0A1h
  6425.  db 3,'st2',10h,0A2h
  6426.  db 3,'st3',10h,0A3h
  6427.  db 3,'st4',10h,0A4h
  6428.  db 3,'st5',10h,0A5h
  6429.  db 3,'st6',10h,0A6h
  6430.  db 3,'st7',10h,0A7h
  6431.  db 5,'tbyte',11h,0Ah
  6432.  db 3,'tr0',10h,90h
  6433.  db 3,'tr1',10h,91h
  6434.  db 3,'tr2',10h,92h
  6435.  db 3,'tr3',10h,93h
  6436.  db 3,'tr4',10h,94h
  6437.  db 3,'tr5',10h,95h
  6438.  db 3,'tr6',10h,96h
  6439.  db 3,'tr7',10h,97h
  6440.  db 5,'tword',11h,0Ah
  6441.  db 5,'use16',13h,16
  6442.  db 5,'use32',13h,32
  6443.  db 5,'use64',13h,64
  6444.  db 4,'word',11h,2
  6445.  db 4,'xmm0',10h,0C0h
  6446.  db 4,'xmm1',10h,0C1h
  6447.  db 5,'xmm10',10h,0CAh
  6448.  db 5,'xmm11',10h,0CBh
  6449.  db 5,'xmm12',10h,0CCh
  6450.  db 5,'xmm13',10h,0CDh
  6451.  db 5,'xmm14',10h,0CEh
  6452.  db 5,'xmm15',10h,0CFh
  6453.  db 4,'xmm2',10h,0C2h
  6454.  db 4,'xmm3',10h,0C3h
  6455.  db 4,'xmm4',10h,0C4h
  6456.  db 4,'xmm5',10h,0C5h
  6457.  db 4,'xmm6',10h,0C6h
  6458.  db 4,'xmm7',10h,0C7h
  6459.  db 4,'xmm8',10h,0C8h
  6460.  db 4,'xmm9',10h,0C9h
  6461.  db 0
  6462.  
  6463. data_handlers:
  6464.  dw data_bytes-assembler
  6465.  dw data_file-assembler
  6466.  dw reserve_bytes-assembler
  6467.  dw data_words-assembler
  6468.  dw data_unicode-assembler
  6469.  dw reserve_words-assembler
  6470.  dw data_dwords-assembler
  6471.  dw reserve_dwords-assembler
  6472.  dw data_pwords-assembler
  6473.  dw reserve_pwords-assembler
  6474.  dw data_qwords-assembler
  6475.  dw reserve_qwords-assembler
  6476.  dw data_twords-assembler
  6477.  dw reserve_twords-assembler
  6478.  
  6479. data_directives:
  6480.  db 2,'db',1,0
  6481.  db 2,'dd',4,6
  6482.  db 2,'df',6,8
  6483.  db 2,'dp',6,8
  6484.  db 2,'dq',8,10
  6485.  db 2,'dt',10,12
  6486.  db 2,'du',2,4
  6487.  db 2,'dw',2,3
  6488.  db 4,'file',1,1
  6489.  db 2,'rb',1,2
  6490.  db 2,'rd',4,7
  6491.  db 2,'rf',6,9
  6492.  db 2,'rp',6,9
  6493.  db 2,'rq',8,11
  6494.  db 2,'rt',10,13
  6495.  db 2,'rw',2,5
  6496.  db 0
  6497.  
  6498. instructions:
  6499.  dw instructions_2-instructions
  6500.  dw instructions_3-instructions
  6501.  dw instructions_4-instructions
  6502.  dw instructions_5-instructions
  6503.  dw instructions_6-instructions
  6504.  dw instructions_7-instructions
  6505.  dw instructions_8-instructions
  6506.  dw instructions_9-instructions
  6507.  dw instructions_10-instructions
  6508.  dw instructions_11-instructions
  6509.  
  6510. instructions_2:
  6511.  db 'bt',4
  6512.  dw bt_instruction-assembler
  6513.  db 'if',0
  6514.  dw if_directive-assembler
  6515.  db 'in',0
  6516.  dw in_instruction-assembler
  6517.  db 'ja',77h
  6518.  dw conditional_jump-assembler
  6519.  db 'jb',72h
  6520.  dw conditional_jump-assembler
  6521.  db 'jc',72h
  6522.  dw conditional_jump-assembler
  6523.  db 'je',74h
  6524.  dw conditional_jump-assembler
  6525.  db 'jg',7Fh
  6526.  dw conditional_jump-assembler
  6527.  db 'jl',7Ch
  6528.  dw conditional_jump-assembler
  6529.  db 'jo',70h
  6530.  dw conditional_jump-assembler
  6531.  db 'jp',7Ah
  6532.  dw conditional_jump-assembler
  6533.  db 'js',78h
  6534.  dw conditional_jump-assembler
  6535.  db 'jz',74h
  6536.  dw conditional_jump-assembler
  6537.  db 'or',08h
  6538.  dw basic_instruction-assembler
  6539.  db 0
  6540. instructions_3:
  6541.  db 'aaa',37h
  6542.  dw simple_instruction_except64-assembler
  6543.  db 'aad',0D5h
  6544.  dw aa_instruction-assembler
  6545.  db 'aam',0D4h
  6546.  dw aa_instruction-assembler
  6547.  db 'aas',3Fh
  6548.  dw simple_instruction_except64-assembler
  6549.  db 'adc',10h
  6550.  dw basic_instruction-assembler
  6551.  db 'add',00h
  6552.  dw basic_instruction-assembler
  6553.  db 'and',20h
  6554.  dw basic_instruction-assembler
  6555.  db 'bsf',0BCh
  6556.  dw bs_instruction-assembler
  6557.  db 'bsr',0BDh
  6558.  dw bs_instruction-assembler
  6559.  db 'btc',7
  6560.  dw bt_instruction-assembler
  6561.  db 'btr',6
  6562.  dw bt_instruction-assembler
  6563.  db 'bts',5
  6564.  dw bt_instruction-assembler
  6565.  db 'cbw',98h
  6566.  dw simple_instruction_16bit-assembler
  6567.  db 'cdq',99h
  6568.  dw simple_instruction_32bit-assembler
  6569.  db 'clc',0F8h
  6570.  dw simple_instruction-assembler
  6571.  db 'cld',0FCh
  6572.  dw simple_instruction-assembler
  6573.  db 'cli',0FAh
  6574.  dw simple_instruction-assembler
  6575.  db 'cmc',0F5h
  6576.  dw simple_instruction-assembler
  6577.  db 'cmp',38h
  6578.  dw basic_instruction-assembler
  6579.  db 'cqo',99h
  6580.  dw simple_instruction_64bit-assembler
  6581.  db 'cwd',99h
  6582.  dw simple_instruction_16bit-assembler
  6583.  db 'daa',27h
  6584.  dw simple_instruction_except64-assembler
  6585.  db 'das',2Fh
  6586.  dw simple_instruction_except64-assembler
  6587.  db 'dec',1
  6588.  dw inc_instruction-assembler
  6589.  db 'div',6
  6590.  dw single_operand_instruction-assembler
  6591.  db 'end',0
  6592.  dw end_directive-assembler
  6593.  db 'fld',0
  6594.  dw fld_instruction-assembler
  6595.  db 'fst',2
  6596.  dw fld_instruction-assembler
  6597.  db 'hlt',0F4h
  6598.  dw simple_instruction-assembler
  6599.  db 'inc',0
  6600.  dw inc_instruction-assembler
  6601.  db 'ins',6Ch
  6602.  dw ins_instruction-assembler
  6603.  db 'int',0CDh
  6604.  dw int_instruction-assembler
  6605.  db 'jae',73h
  6606.  dw conditional_jump-assembler
  6607.  db 'jbe',76h
  6608.  dw conditional_jump-assembler
  6609.  db 'jge',7Dh
  6610.  dw conditional_jump-assembler
  6611.  db 'jle',7Eh
  6612.  dw conditional_jump-assembler
  6613.  db 'jmp',0
  6614.  dw jmp_instruction-assembler
  6615.  db 'jna',76h
  6616.  dw conditional_jump-assembler
  6617.  db 'jnb',73h
  6618.  dw conditional_jump-assembler
  6619.  db 'jnc',73h
  6620.  dw conditional_jump-assembler
  6621.  db 'jne',75h
  6622.  dw conditional_jump-assembler
  6623.  db 'jng',7Eh
  6624.  dw conditional_jump-assembler
  6625.  db 'jnl',7Dh
  6626.  dw conditional_jump-assembler
  6627.  db 'jno',71h
  6628.  dw conditional_jump-assembler
  6629.  db 'jnp',7Bh
  6630.  dw conditional_jump-assembler
  6631.  db 'jns',79h
  6632.  dw conditional_jump-assembler
  6633.  db 'jnz',75h
  6634.  dw conditional_jump-assembler
  6635.  db 'jpe',7Ah
  6636.  dw conditional_jump-assembler
  6637.  db 'jpo',7Bh
  6638.  dw conditional_jump-assembler
  6639.  db 'lar',2
  6640.  dw lar_instruction-assembler
  6641.  db 'lds',3
  6642.  dw ls_instruction-assembler
  6643.  db 'lea',0
  6644.  dw lea_instruction-assembler
  6645.  db 'les',0
  6646.  dw ls_instruction-assembler
  6647.  db 'lfs',4
  6648.  dw ls_instruction-assembler
  6649.  db 'lgs',5
  6650.  dw ls_instruction-assembler
  6651.  db 'lsl',3
  6652.  dw lar_instruction-assembler
  6653.  db 'lss',2
  6654.  dw ls_instruction-assembler
  6655.  db 'ltr',3
  6656.  dw pm_word_instruction-assembler
  6657.  db 'mov',0
  6658.  dw mov_instruction-assembler
  6659.  db 'mul',4
  6660.  dw single_operand_instruction-assembler
  6661.  db 'neg',3
  6662.  dw single_operand_instruction-assembler
  6663.  db 'nop',90h
  6664.  dw simple_instruction-assembler
  6665.  db 'not',2
  6666.  dw single_operand_instruction-assembler
  6667.  db 'org',0
  6668.  dw org_directive-assembler
  6669.  db 'out',0
  6670.  dw out_instruction-assembler
  6671.  db 'pop',0
  6672.  dw pop_instruction-assembler
  6673.  db 'por',0EBh
  6674.  dw mmx_instruction-assembler
  6675.  db 'rcl',2
  6676.  dw sh_instruction-assembler
  6677.  db 'rcr',3
  6678.  dw sh_instruction-assembler
  6679.  db 'rep',0F3h
  6680.  dw prefix_instruction-assembler
  6681.  db 'ret',0C2h
  6682.  dw ret_instruction-assembler
  6683.  db 'rol',0
  6684.  dw sh_instruction-assembler
  6685.  db 'ror',1
  6686.  dw sh_instruction-assembler
  6687.  db 'rsm',0AAh
  6688.  dw simple_extended_instruction-assembler
  6689.  db 'sal',4
  6690.  dw sh_instruction-assembler
  6691.  db 'sar',7
  6692.  dw sh_instruction-assembler
  6693.  db 'sbb',18h
  6694.  dw basic_instruction-assembler
  6695.  db 'shl',4
  6696.  dw sh_instruction-assembler
  6697.  db 'shr',5
  6698.  dw sh_instruction-assembler
  6699.  db 'stc',0F9h
  6700.  dw simple_instruction-assembler
  6701.  db 'std',0FDh
  6702.  dw simple_instruction-assembler
  6703.  db 'sti',0FBh
  6704.  dw simple_instruction-assembler
  6705.  db 'str',1
  6706.  dw pm_store_word_instruction-assembler
  6707.  db 'sub',28h
  6708.  dw basic_instruction-assembler
  6709.  db 'ud2',0Bh
  6710.  dw simple_extended_instruction-assembler
  6711.  db 'xor',30h
  6712.  dw basic_instruction-assembler
  6713.  db 0
  6714. instructions_4:
  6715.  db 'arpl',0
  6716.  dw arpl_instruction-assembler
  6717.  db 'call',0
  6718.  dw call_instruction-assembler
  6719.  db 'cdqe',98h
  6720.  dw simple_instruction_64bit-assembler
  6721.  db 'clts',6
  6722.  dw simple_extended_instruction-assembler
  6723.  db 'cmps',0A6h
  6724.  dw cmps_instruction-assembler
  6725.  db 'cwde',98h
  6726.  dw simple_instruction_32bit-assembler
  6727.  db 'data',0
  6728.  dw data_directive-assembler
  6729.  db 'else',0
  6730.  dw else_directive-assembler
  6731.  db 'emms',77h
  6732.  dw simple_extended_instruction-assembler
  6733.  db 'fabs',100001b
  6734.  dw simple_fpu_instruction-assembler
  6735.  db 'fadd',0
  6736.  dw basic_fpu_instruction-assembler
  6737.  db 'fbld',4
  6738.  dw fbld_instruction-assembler
  6739.  db 'fchs',100000b
  6740.  dw simple_fpu_instruction-assembler
  6741.  db 'fcom',2
  6742.  dw basic_fpu_instruction-assembler
  6743.  db 'fcos',111111b
  6744.  dw simple_fpu_instruction-assembler
  6745.  db 'fdiv',6
  6746.  dw basic_fpu_instruction-assembler
  6747.  db 'feni',0E0h
  6748.  dw finit_instruction-assembler
  6749.  db 'fild',0
  6750.  dw fild_instruction-assembler
  6751.  db 'fist',2
  6752.  dw fild_instruction-assembler
  6753.  db 'fld1',101000b
  6754.  dw simple_fpu_instruction-assembler
  6755.  db 'fldz',101110b
  6756.  dw simple_fpu_instruction-assembler
  6757.  db 'fmul',1
  6758.  dw basic_fpu_instruction-assembler
  6759.  db 'fnop',010000b
  6760.  dw simple_fpu_instruction-assembler
  6761.  db 'fsin',111110b
  6762.  dw simple_fpu_instruction-assembler
  6763.  db 'fstp',3
  6764.  dw fld_instruction-assembler
  6765.  db 'fsub',4
  6766.  dw basic_fpu_instruction-assembler
  6767.  db 'ftst',100100b
  6768.  dw simple_fpu_instruction-assembler
  6769.  db 'fxam',100101b
  6770.  dw simple_fpu_instruction-assembler
  6771.  db 'fxch',0
  6772.  dw fxch_instruction-assembler
  6773.  db 'heap',0
  6774.  dw heap_directive-assembler
  6775.  db 'idiv',7
  6776.  dw single_operand_instruction-assembler
  6777.  db 'imul',0
  6778.  dw imul_instruction-assembler
  6779.  db 'insb',6Ch
  6780.  dw simple_instruction-assembler
  6781.  db 'insd',6Dh
  6782.  dw simple_instruction_32bit-assembler
  6783.  db 'insw',6Dh
  6784.  dw simple_instruction_16bit-assembler
  6785.  db 'int1',0F1h
  6786.  dw simple_instruction-assembler
  6787.  db 'int3',0CCh
  6788.  dw simple_instruction-assembler
  6789.  db 'into',0CEh
  6790.  dw simple_instruction_except64-assembler
  6791.  db 'invd',8
  6792.  dw simple_extended_instruction-assembler
  6793.  db 'iret',0CFh
  6794.  dw iret_instruction-assembler
  6795.  db 'jcxz',0E3h
  6796.  dw loop_instruction_16bit-assembler
  6797.  db 'jnae',72h
  6798.  dw conditional_jump-assembler
  6799.  db 'jnbe',77h
  6800.  dw conditional_jump-assembler
  6801.  db 'jnge',7Ch
  6802.  dw conditional_jump-assembler
  6803.  db 'jnle',7Fh
  6804.  dw conditional_jump-assembler
  6805.  db 'lahf',9Fh
  6806.  dw simple_instruction_except64-assembler
  6807.  db 'lgdt',2
  6808.  dw lgdt_instruction-assembler
  6809.  db 'lidt',3
  6810.  dw lgdt_instruction-assembler
  6811.  db 'lldt',2
  6812.  dw pm_word_instruction-assembler
  6813.  db 'lmsw',16h
  6814.  dw pm_word_instruction-assembler
  6815.  db 'load',0
  6816.  dw load_directive-assembler
  6817.  db 'lock',0F0h
  6818.  dw prefix_instruction-assembler
  6819.  db 'lods',0ACh
  6820.  dw lods_instruction-assembler
  6821.  db 'loop',0E2h
  6822.  dw loop_instruction-assembler
  6823.  db 'movd',0
  6824.  dw movd_instruction-assembler
  6825.  db 'movq',0
  6826.  dw movq_instruction-assembler
  6827.  db 'movs',0A4h
  6828.  dw movs_instruction-assembler
  6829.  db 'orpd',56h
  6830.  dw sse_pd_instruction-assembler
  6831.  db 'orps',56h
  6832.  dw sse_ps_instruction-assembler
  6833.  db 'outs',6Eh
  6834.  dw outs_instruction-assembler
  6835.  db 'pand',0DBh
  6836.  dw mmx_instruction-assembler
  6837.  db 'popa',61h
  6838.  dw simple_instruction_except64-assembler
  6839.  db 'popd',4
  6840.  dw pop_instruction-assembler
  6841.  db 'popf',9Dh
  6842.  dw simple_instruction-assembler
  6843.  db 'popq',8
  6844.  dw pop_instruction-assembler
  6845.  db 'popw',2
  6846.  dw pop_instruction-assembler
  6847.  db 'push',0
  6848.  dw push_instruction-assembler
  6849.  db 'pxor',0EFh
  6850.  dw mmx_instruction-assembler
  6851.  db 'repe',0F3h
  6852.  dw prefix_instruction-assembler
  6853.  db 'repz',0F3h
  6854.  dw prefix_instruction-assembler
  6855.  db 'retd',0C2h
  6856.  dw ret_instruction_32bit_except64-assembler
  6857.  db 'retf',0CAh
  6858.  dw retf_instruction-assembler
  6859.  db 'retn',0C2h
  6860.  dw ret_instruction-assembler
  6861.  db 'retq',0C2h
  6862.  dw ret_instruction_only64-assembler
  6863.  db 'retw',0C2h
  6864.  dw ret_instruction_16bit-assembler
  6865.  db 'sahf',9Eh
  6866.  dw simple_instruction_except64-assembler
  6867.  db 'salc',0D6h
  6868.  dw simple_instruction_except64-assembler
  6869.  db 'scas',0AEh
  6870.  dw stos_instruction-assembler
  6871.  db 'seta',97h
  6872.  dw set_instruction-assembler
  6873.  db 'setb',92h
  6874.  dw set_instruction-assembler
  6875.  db 'setc',92h
  6876.  dw set_instruction-assembler
  6877.  db 'sete',94h
  6878.  dw set_instruction-assembler
  6879.  db 'setg',9Fh
  6880.  dw set_instruction-assembler
  6881.  db 'setl',9Ch
  6882.  dw set_instruction-assembler
  6883.  db 'seto',90h
  6884.  dw set_instruction-assembler
  6885.  db 'setp',9Ah
  6886.  dw set_instruction-assembler
  6887.  db 'sets',98h
  6888.  dw set_instruction-assembler
  6889.  db 'setz',94h
  6890.  dw set_instruction-assembler
  6891.  db 'sgdt',0
  6892.  dw lgdt_instruction-assembler
  6893.  db 'shld',0A4h
  6894.  dw shd_instruction-assembler
  6895.  db 'shrd',0ACh
  6896.  dw shd_instruction-assembler
  6897.  db 'sidt',1
  6898.  dw lgdt_instruction-assembler
  6899.  db 'sldt',0
  6900.  dw pm_store_word_instruction-assembler
  6901.  db 'smsw',14h
  6902.  dw pm_store_word_instruction-assembler
  6903.  db 'stos',0AAh
  6904.  dw stos_instruction-assembler
  6905.  db 'test',0
  6906.  dw test_instruction-assembler
  6907.  db 'verr',4
  6908.  dw pm_word_instruction-assembler
  6909.  db 'verw',5
  6910.  dw pm_word_instruction-assembler
  6911.  db 'wait',9Bh
  6912.  dw simple_instruction-assembler
  6913.  db 'xadd',0C0h
  6914.  dw basic_486_instruction-assembler
  6915.  db 'xchg',0
  6916.  dw xchg_instruction-assembler
  6917.  db 'xlat',0D7h
  6918.  dw xlat_instruction-assembler
  6919.  db 0
  6920. instructions_5:
  6921.  db 'addpd',58h
  6922.  dw sse_pd_instruction-assembler
  6923.  db 'addps',58h
  6924.  dw sse_ps_instruction-assembler
  6925.  db 'addsd',58h
  6926.  dw sse_sd_instruction-assembler
  6927.  db 'addss',58h
  6928.  dw sse_ss_instruction-assembler
  6929.  db 'align',0
  6930.  dw align_directive-assembler
  6931.  db 'andpd',54h
  6932.  dw sse_pd_instruction-assembler
  6933.  db 'andps',54h
  6934.  dw sse_ps_instruction-assembler
  6935.  db 'bound',0
  6936.  dw bound_instruction-assembler
  6937.  db 'break',0
  6938.  dw break_directive-assembler
  6939.  db 'bswap',0
  6940.  dw bswap_instruction-assembler
  6941.  db 'cmova',47h
  6942.  dw cmov_instruction-assembler
  6943.  db 'cmovb',42h
  6944.  dw cmov_instruction-assembler
  6945.  db 'cmovc',42h
  6946.  dw cmov_instruction-assembler
  6947.  db 'cmove',44h
  6948.  dw cmov_instruction-assembler
  6949.  db 'cmovg',4Fh
  6950.  dw cmov_instruction-assembler
  6951.  db 'cmovl',4Ch
  6952.  dw cmov_instruction-assembler
  6953.  db 'cmovo',40h
  6954.  dw cmov_instruction-assembler
  6955.  db 'cmovp',4Ah
  6956.  dw cmov_instruction-assembler
  6957.  db 'cmovs',48h
  6958.  dw cmov_instruction-assembler
  6959.  db 'cmovz',44h
  6960.  dw cmov_instruction-assembler
  6961.  db 'cmppd',0
  6962.  dw cmppd_instruction-assembler
  6963.  db 'cmpps',0
  6964.  dw cmpps_instruction-assembler
  6965.  db 'cmpsb',0A6h
  6966.  dw simple_instruction-assembler
  6967.  db 'cmpsd',0
  6968.  dw cmpsd_instruction-assembler
  6969.  db 'cmpsq',0
  6970.  dw simple_instruction_64bit-assembler
  6971.  db 'cmpss',0
  6972.  dw cmpss_instruction-assembler
  6973.  db 'cmpsw',0A7h
  6974.  dw simple_instruction_16bit-assembler
  6975.  db 'cpuid',0A2h
  6976.  dw simple_extended_instruction-assembler
  6977.  db 'divpd',5Eh
  6978.  dw sse_pd_instruction-assembler
  6979.  db 'divps',5Eh
  6980.  dw sse_ps_instruction-assembler
  6981.  db 'divsd',5Eh
  6982.  dw sse_sd_instruction-assembler
  6983.  db 'divss',5Eh
  6984.  dw sse_ss_instruction-assembler
  6985.  db 'enter',0
  6986.  dw enter_instruction-assembler
  6987.  db 'entry',0
  6988.  dw entry_directive-assembler
  6989.  db 'extrn',0
  6990.  dw extrn_directive-assembler
  6991.  db 'f2xm1',110000b
  6992.  dw simple_fpu_instruction-assembler
  6993.  db 'faddp',0
  6994.  dw faddp_instruction-assembler
  6995.  db 'fbstp',6
  6996.  dw fbld_instruction-assembler
  6997.  db 'fclex',0E2h
  6998.  dw finit_instruction-assembler
  6999.  db 'fcomi',0F0h
  7000.  dw fcomi_instruction-assembler
  7001.  db 'fcomp',3
  7002.  dw basic_fpu_instruction-assembler
  7003.  db 'fdisi',0E1h
  7004.  dw finit_instruction-assembler
  7005.  db 'fdivp',7
  7006.  dw faddp_instruction-assembler
  7007.  db 'fdivr',7
  7008.  dw basic_fpu_instruction-assembler
  7009.  db 'femms',0Eh
  7010.  dw simple_extended_instruction-assembler
  7011.  db 'ffree',0
  7012.  dw ffree_instruction-assembler
  7013.  db 'fiadd',0
  7014.  dw fi_instruction-assembler
  7015.  db 'ficom',2
  7016.  dw fi_instruction-assembler
  7017.  db 'fidiv',6
  7018.  dw fi_instruction-assembler
  7019.  db 'fimul',1
  7020.  dw fi_instruction-assembler
  7021.  db 'finit',0E3h
  7022.  dw finit_instruction-assembler
  7023.  db 'fistp',3
  7024.  dw fild_instruction-assembler
  7025.  db 'fisub',4
  7026.  dw fi_instruction-assembler
  7027.  db 'fldcw',5
  7028.  dw fldcw_instruction-assembler
  7029.  db 'fldpi',101011b
  7030.  dw simple_fpu_instruction-assembler
  7031.  db 'fmulp',1
  7032.  dw faddp_instruction-assembler
  7033.  db 'fneni',0E0h
  7034.  dw fninit_instruction-assembler
  7035.  db 'fprem',111000b
  7036.  dw simple_fpu_instruction-assembler
  7037.  db 'fptan',110010b
  7038.  dw simple_fpu_instruction-assembler
  7039.  db 'fsave',6
  7040.  dw fsave_instruction-assembler
  7041.  db 'fsqrt',111010b
  7042.  dw simple_fpu_instruction-assembler
  7043.  db 'fstcw',7
  7044.  dw fstcw_instruction-assembler
  7045.  db 'fstsw',0
  7046.  dw fstsw_instruction-assembler
  7047.  db 'fsubp',5
  7048.  dw faddp_instruction-assembler
  7049.  db 'fsubr',5
  7050.  dw basic_fpu_instruction-assembler
  7051.  db 'fucom',4
  7052.  dw ffree_instruction-assembler
  7053.  db 'fwait',9Bh
  7054.  dw simple_instruction-assembler
  7055.  db 'fyl2x',110001b
  7056.  dw simple_fpu_instruction-assembler
  7057.  db 'iretd',0CFh
  7058.  dw simple_instruction_32bit-assembler
  7059.  db 'iretq',0CFh
  7060.  dw simple_instruction_64bit-assembler
  7061.  db 'iretw',0CFh
  7062.  dw simple_instruction_16bit-assembler
  7063.  db 'jecxz',0E3h
  7064.  dw loop_instruction_32bit-assembler
  7065.  db 'jrcxz',0E3h
  7066.  dw loop_instruction_64bit-assembler
  7067.  db 'label',0
  7068.  dw label_directive-assembler
  7069.  db 'lddqu',0
  7070.  dw lddqu_instruction-assembler
  7071.  db 'leave',0C9h
  7072.  dw simple_instruction-assembler
  7073.  db 'lodsb',0ACh
  7074.  dw simple_instruction-assembler
  7075.  db 'lodsd',0ADh
  7076.  dw simple_instruction_32bit-assembler
  7077.  db 'lodsq',0ADh
  7078.  dw simple_instruction_64bit-assembler
  7079.  db 'lodsw',0ADh
  7080.  dw simple_instruction_16bit-assembler
  7081.  db 'loopd',0E2h
  7082.  dw loop_instruction_32bit-assembler
  7083.  db 'loope',0E1h
  7084.  dw loop_instruction-assembler
  7085.  db 'loopq',0E2h
  7086.  dw loop_instruction_64bit-assembler
  7087.  db 'loopw',0E2h
  7088.  dw loop_instruction_16bit-assembler
  7089.  db 'loopz',0E1h
  7090.  dw loop_instruction-assembler
  7091.  db 'maxpd',5Fh
  7092.  dw sse_pd_instruction-assembler
  7093.  db 'maxps',5Fh
  7094.  dw sse_ps_instruction-assembler
  7095.  db 'maxsd',5Fh
  7096.  dw sse_sd_instruction-assembler
  7097.  db 'maxss',5Fh
  7098.  dw sse_ss_instruction-assembler
  7099.  db 'minpd',5Dh
  7100.  dw sse_pd_instruction-assembler
  7101.  db 'minps',5Dh
  7102.  dw sse_ps_instruction-assembler
  7103.  db 'minsd',5Dh
  7104.  dw sse_sd_instruction-assembler
  7105.  db 'minss',5Dh
  7106.  dw sse_ss_instruction-assembler
  7107.  db 'movsb',0A4h
  7108.  dw simple_instruction-assembler
  7109.  db 'movsd',0
  7110.  dw movsd_instruction-assembler
  7111.  db 'movsq',0A5h
  7112.  dw simple_instruction_64bit-assembler
  7113.  db 'movss',0
  7114.  dw movss_instruction-assembler
  7115.  db 'movsw',0A5h
  7116.  dw simple_instruction_16bit-assembler
  7117.  db 'movsx',0BEh
  7118.  dw movx_instruction-assembler
  7119.  db 'movzx',0B6h
  7120.  dw movx_instruction-assembler
  7121.  db 'mulpd',59h
  7122.  dw sse_pd_instruction-assembler
  7123.  db 'mulps',59h
  7124.  dw sse_ps_instruction-assembler
  7125.  db 'mulsd',59h
  7126.  dw sse_sd_instruction-assembler
  7127.  db 'mulss',59h
  7128.  dw sse_ss_instruction-assembler
  7129.  db 'mwait',0C9h
  7130.  dw monitor_instruction-assembler
  7131.  db 'outsb',6Eh
  7132.  dw simple_instruction-assembler
  7133.  db 'outsd',6Fh
  7134.  dw simple_instruction_32bit-assembler
  7135.  db 'outsw',6Fh
  7136.  dw simple_instruction_16bit-assembler
  7137.  db 'paddb',0FCh
  7138.  dw mmx_instruction-assembler
  7139.  db 'paddd',0FEh
  7140.  dw mmx_instruction-assembler
  7141.  db 'paddq',0D4h
  7142.  dw mmx_instruction-assembler
  7143.  db 'paddw',0FDh
  7144.  dw mmx_instruction-assembler
  7145.  db 'pandn',0DFh
  7146.  dw mmx_instruction-assembler
  7147.  db 'pause',0
  7148.  dw pause_instruction-assembler
  7149.  db 'pavgb',0E0h
  7150.  dw mmx_instruction-assembler
  7151.  db 'pavgw',0E3h
  7152.  dw mmx_instruction-assembler
  7153.  db 'pf2id',1Dh
  7154.  dw amd3dnow_instruction-assembler
  7155.  db 'pf2iw',1Ch
  7156.  dw amd3dnow_instruction-assembler
  7157.  db 'pfacc',0AEh
  7158.  dw amd3dnow_instruction-assembler
  7159.  db 'pfadd',9Eh
  7160.  dw amd3dnow_instruction-assembler
  7161.  db 'pfmax',0A4h
  7162.  dw amd3dnow_instruction-assembler
  7163.  db 'pfmin',94h
  7164.  dw amd3dnow_instruction-assembler
  7165.  db 'pfmul',0B4h
  7166.  dw amd3dnow_instruction-assembler
  7167.  db 'pfrcp',96h
  7168.  dw amd3dnow_instruction-assembler
  7169.  db 'pfsub',9Ah
  7170.  dw amd3dnow_instruction-assembler
  7171.  db 'pi2fd',0Dh
  7172.  dw amd3dnow_instruction-assembler
  7173.  db 'pi2fw',0Ch
  7174.  dw amd3dnow_instruction-assembler
  7175.  db 'popad',61h
  7176.  dw simple_instruction_32bit_except64-assembler
  7177.  db 'popaw',61h
  7178.  dw simple_instruction_16bit_except64-assembler
  7179.  db 'popfd',9Dh
  7180.  dw simple_instruction_32bit_except64-assembler
  7181.  db 'popfw',9Dh
  7182.  dw simple_instruction_16bit-assembler
  7183.  db 'popfq',9Dh
  7184.  dw simple_instruction_only64-assembler
  7185.  db 'pslld',0F2h
  7186.  dw mmx_ps_instruction-assembler
  7187.  db 'psllq',0F3h
  7188.  dw mmx_ps_instruction-assembler
  7189.  db 'psllw',0F1h
  7190.  dw mmx_ps_instruction-assembler
  7191.  db 'psrad',0E2h
  7192.  dw mmx_ps_instruction-assembler
  7193.  db 'psraw',0E1h
  7194.  dw mmx_ps_instruction-assembler
  7195.  db 'psrld',0D2h
  7196.  dw mmx_ps_instruction-assembler
  7197.  db 'psrlq',0D3h
  7198.  dw mmx_ps_instruction-assembler
  7199.  db 'psrlw',0D1h
  7200.  dw mmx_ps_instruction-assembler
  7201.  db 'psubb',0F8h
  7202.  dw mmx_instruction-assembler
  7203.  db 'psubd',0FAh
  7204.  dw mmx_instruction-assembler
  7205.  db 'psubq',0FBh
  7206.  dw mmx_instruction-assembler
  7207.  db 'psubw',0F9h
  7208.  dw mmx_instruction-assembler
  7209.  db 'pusha',60h
  7210.  dw simple_instruction_except64-assembler
  7211.  db 'pushd',4
  7212.  dw push_instruction-assembler
  7213.  db 'pushf',9Ch
  7214.  dw simple_instruction-assembler
  7215.  db 'pushq',8
  7216.  dw push_instruction-assembler
  7217.  db 'pushw',2
  7218.  dw push_instruction-assembler
  7219.  db 'rcpps',53h
  7220.  dw sse_ps_instruction-assembler
  7221.  db 'rcpss',53h
  7222.  dw sse_ss_instruction-assembler
  7223.  db 'rdmsr',32h
  7224.  dw simple_extended_instruction-assembler
  7225.  db 'rdpmc',33h
  7226.  dw simple_extended_instruction-assembler
  7227.  db 'rdtsc',31h
  7228.  dw simple_extended_instruction-assembler
  7229.  db 'repne',0F2h
  7230.  dw prefix_instruction-assembler
  7231.  db 'repnz',0F2h
  7232.  dw prefix_instruction-assembler
  7233.  db 'retfd',0CAh
  7234.  dw ret_instruction_32bit-assembler
  7235.  db 'retfq',0CAh
  7236.  dw ret_instruction_64bit-assembler
  7237.  db 'retfw',0CAh
  7238.  dw ret_instruction_16bit-assembler
  7239.  db 'retnd',0C2h
  7240.  dw ret_instruction_32bit_except64-assembler
  7241.  db 'retnq',0C2h
  7242.  dw ret_instruction_only64-assembler
  7243.  db 'retnw',0C2h
  7244.  dw ret_instruction_16bit-assembler
  7245.  db 'scasb',0AEh
  7246.  dw simple_instruction-assembler
  7247.  db 'scasd',0AFh
  7248.  dw simple_instruction_32bit-assembler
  7249.  db 'scasq',0AFh
  7250.  dw simple_instruction_64bit-assembler
  7251.  db 'scasw',0AFh
  7252.  dw simple_instruction_16bit-assembler
  7253.  db 'setae',93h
  7254.  dw set_instruction-assembler
  7255.  db 'setbe',96h
  7256.  dw set_instruction-assembler
  7257.  db 'setge',9Dh
  7258.  dw set_instruction-assembler
  7259.  db 'setle',9Eh
  7260.  dw set_instruction-assembler
  7261.  db 'setna',96h
  7262.  dw set_instruction-assembler
  7263.  db 'setnb',93h
  7264.  dw set_instruction-assembler
  7265.  db 'setnc',93h
  7266.  dw set_instruction-assembler
  7267.  db 'setne',95h
  7268.  dw set_instruction-assembler
  7269.  db 'setng',9Eh
  7270.  dw set_instruction-assembler
  7271.  db 'setnl',9Dh
  7272.  dw set_instruction-assembler
  7273.  db 'setno',91h
  7274.  dw set_instruction-assembler
  7275.  db 'setnp',9Bh
  7276.  dw set_instruction-assembler
  7277.  db 'setns',99h
  7278.  dw set_instruction-assembler
  7279.  db 'setnz',95h
  7280.  dw set_instruction-assembler
  7281.  db 'setpe',9Ah
  7282.  dw set_instruction-assembler
  7283.  db 'setpo',9Bh
  7284.  dw set_instruction-assembler
  7285.  db 'stack',0
  7286.  dw stack_directive-assembler
  7287.  db 'store',0
  7288.  dw store_directive-assembler
  7289.  db 'stosb',0AAh
  7290.  dw simple_instruction-assembler
  7291.  db 'stosd',0ABh
  7292.  dw simple_instruction_32bit-assembler
  7293.  db 'stosq',0ABh
  7294.  dw simple_instruction_64bit-assembler
  7295.  db 'stosw',0ABh
  7296.  dw simple_instruction_16bit-assembler
  7297.  db 'subpd',5Ch
  7298.  dw sse_pd_instruction-assembler
  7299.  db 'subps',5Ch
  7300.  dw sse_ps_instruction-assembler
  7301.  db 'subsd',5Ch
  7302.  dw sse_sd_instruction-assembler
  7303.  db 'subss',5Ch
  7304.  dw sse_ss_instruction-assembler
  7305.  db 'times',0
  7306.  dw times_directive-assembler
  7307.  db 'vmxon',6
  7308.  dw vmxon_instruction-assembler
  7309.  db 'while',0
  7310.  dw while_directive-assembler
  7311.  db 'wrmsr',30h
  7312.  dw simple_extended_instruction-assembler
  7313.  db 'xlatb',0D7h
  7314.  dw simple_instruction-assembler
  7315.  db 'xorpd',57h
  7316.  dw sse_pd_instruction-assembler
  7317.  db 'xorps',57h
  7318.  dw sse_ps_instruction-assembler
  7319.  db 0
  7320. instructions_6:
  7321.  db 'andnpd',55h
  7322.  dw sse_pd_instruction-assembler
  7323.  db 'andnps',55h
  7324.  dw sse_ps_instruction-assembler
  7325.  db 'cmovae',43h
  7326.  dw cmov_instruction-assembler
  7327.  db 'cmovbe',46h
  7328.  dw cmov_instruction-assembler
  7329.  db 'cmovge',4Dh
  7330.  dw cmov_instruction-assembler
  7331.  db 'cmovle',4Eh
  7332.  dw cmov_instruction-assembler
  7333.  db 'cmovna',46h
  7334.  dw cmov_instruction-assembler
  7335.  db 'cmovnb',43h
  7336.  dw cmov_instruction-assembler
  7337.  db 'cmovnc',43h
  7338.  dw cmov_instruction-assembler
  7339.  db 'cmovne',45h
  7340.  dw cmov_instruction-assembler
  7341.  db 'cmovng',4Eh
  7342.  dw cmov_instruction-assembler
  7343.  db 'cmovnl',4Dh
  7344.  dw cmov_instruction-assembler
  7345.  db 'cmovno',41h
  7346.  dw cmov_instruction-assembler
  7347.  db 'cmovnp',4Bh
  7348.  dw cmov_instruction-assembler
  7349.  db 'cmovns',49h
  7350.  dw cmov_instruction-assembler
  7351.  db 'cmovnz',45h
  7352.  dw cmov_instruction-assembler
  7353.  db 'cmovpe',4Ah
  7354.  dw cmov_instruction-assembler
  7355.  db 'cmovpo',4Bh
  7356.  dw cmov_instruction-assembler
  7357.  db 'comisd',2Fh
  7358.  dw comisd_instruction-assembler
  7359.  db 'comiss',2Fh
  7360.  dw comiss_instruction-assembler
  7361.  db 'fcmovb',0C0h
  7362.  dw fcmov_instruction-assembler
  7363.  db 'fcmove',0C8h
  7364.  dw fcmov_instruction-assembler
  7365.  db 'fcmovu',0D8h
  7366.  dw fcmov_instruction-assembler
  7367.  db 'fcomip',0F0h
  7368.  dw fcomip_instruction-assembler
  7369.  db 'fcompp',0
  7370.  dw fcompp_instruction-assembler
  7371.  db 'fdivrp',6
  7372.  dw faddp_instruction-assembler
  7373.  db 'ffreep',0
  7374.  dw ffreep_instruction-assembler
  7375.  db 'ficomp',3
  7376.  dw fi_instruction-assembler
  7377.  db 'fidivr',7
  7378.  dw fi_instruction-assembler
  7379.  db 'fisttp',1
  7380.  dw fild_instruction-assembler
  7381.  db 'fisubr',5
  7382.  dw fi_instruction-assembler
  7383.  db 'fldenv',4
  7384.  dw fldenv_instruction-assembler
  7385.  db 'fldl2e',101010b
  7386.  dw simple_fpu_instruction-assembler
  7387.  db 'fldl2t',101001b
  7388.  dw simple_fpu_instruction-assembler
  7389.  db 'fldlg2',101100b
  7390.  dw simple_fpu_instruction-assembler
  7391.  db 'fldln2',101101b
  7392.  dw simple_fpu_instruction-assembler
  7393.  db 'fnclex',0E2h
  7394.  dw fninit_instruction-assembler
  7395.  db 'fndisi',0E1h
  7396.  dw fninit_instruction-assembler
  7397.  db 'fninit',0E3h
  7398.  dw fninit_instruction-assembler
  7399.  db 'fnsave',6
  7400.  dw fnsave_instruction-assembler
  7401.  db 'fnstcw',7
  7402.  dw fldcw_instruction-assembler
  7403.  db 'fnstsw',0
  7404.  dw fnstsw_instruction-assembler
  7405.  db 'format',0
  7406.  dw format_directive-assembler
  7407.  db 'fpatan',110011b
  7408.  dw simple_fpu_instruction-assembler
  7409.  db 'fprem1',110101b
  7410.  dw simple_fpu_instruction-assembler
  7411.  db 'frstor',4
  7412.  dw fnsave_instruction-assembler
  7413.  db 'frstpm',0E5h
  7414.  dw fninit_instruction-assembler
  7415.  db 'fscale',111101b
  7416.  dw simple_fpu_instruction-assembler
  7417.  db 'fsetpm',0E4h
  7418.  dw fninit_instruction-assembler
  7419.  db 'fstenv',6
  7420.  dw fstenv_instruction-assembler
  7421.  db 'fsubrp',4
  7422.  dw faddp_instruction-assembler
  7423.  db 'fucomi',0E8h
  7424.  dw fcomi_instruction-assembler
  7425.  db 'fucomp',5
  7426.  dw ffree_instruction-assembler
  7427.  db 'fxsave',0
  7428.  dw fxsave_instruction-assembler
  7429.  db 'haddpd',07Ch
  7430.  dw sse_pd_instruction-assembler
  7431.  db 'haddps',07Ch
  7432.  dw cvtpd2dq_instruction-assembler
  7433.  db 'hsubpd',07Dh
  7434.  dw sse_pd_instruction-assembler
  7435.  db 'hsubps',07Dh
  7436.  dw cvtpd2dq_instruction-assembler
  7437.  db 'invlpg',0
  7438.  dw invlpg_instruction-assembler
  7439.  db 'lfence',0E8h
  7440.  dw fence_instruction-assembler
  7441.  db 'looped',0E1h
  7442.  dw loop_instruction_32bit-assembler
  7443.  db 'loopeq',0E1h
  7444.  dw loop_instruction_64bit-assembler
  7445.  db 'loopew',0E1h
  7446.  dw loop_instruction_16bit-assembler
  7447.  db 'loopne',0E0h
  7448.  dw loop_instruction-assembler
  7449.  db 'loopnz',0E0h
  7450.  dw loop_instruction-assembler
  7451.  db 'loopzd',0E1h
  7452.  dw loop_instruction_32bit-assembler
  7453.  db 'loopzq',0E1h
  7454.  dw loop_instruction_64bit-assembler
  7455.  db 'loopzw',0E1h
  7456.  dw loop_instruction_16bit-assembler
  7457.  db 'mfence',0F0h
  7458.  dw fence_instruction-assembler
  7459.  db 'movapd',28h
  7460.  dw movpd_instruction-assembler
  7461.  db 'movaps',28h
  7462.  dw movps_instruction-assembler
  7463.  db 'movdqa',66h
  7464.  dw movdq_instruction-assembler
  7465.  db 'movdqu',0F3h
  7466.  dw movdq_instruction-assembler
  7467.  db 'movhpd',16h
  7468.  dw movlpd_instruction-assembler
  7469.  db 'movhps',16h
  7470.  dw movlps_instruction-assembler
  7471.  db 'movlpd',12h
  7472.  dw movlpd_instruction-assembler
  7473.  db 'movlps',12h
  7474.  dw movlps_instruction-assembler
  7475.  db 'movnti',0C3h
  7476.  dw movnti_instruction-assembler
  7477.  db 'movntq',0E7h
  7478.  dw movntq_instruction-assembler
  7479.  db 'movsxd',63h
  7480.  dw movsxd_instruction-assembler
  7481.  db 'movupd',10h
  7482.  dw movpd_instruction-assembler
  7483.  db 'movups',10h
  7484.  dw movps_instruction-assembler
  7485.  db 'paddsb',0ECh
  7486.  dw mmx_instruction-assembler
  7487.  db 'paddsw',0EDh
  7488.  dw mmx_instruction-assembler
  7489.  db 'pextrw',0C5h
  7490.  dw pextrw_instruction-assembler
  7491.  db 'pfnacc',8Ah
  7492.  dw amd3dnow_instruction-assembler
  7493.  db 'pfsubr',0AAh
  7494.  dw amd3dnow_instruction-assembler
  7495.  db 'pinsrw',0C4h
  7496.  dw pinsrw_instruction-assembler
  7497.  db 'pmaxsw',0EEh
  7498.  dw mmx_instruction-assembler
  7499.  db 'pmaxub',0DEh
  7500.  dw mmx_instruction-assembler
  7501.  db 'pminsw',0EAh
  7502.  dw mmx_instruction-assembler
  7503.  db 'pminub',0DAh
  7504.  dw mmx_instruction-assembler
  7505.  db 'pmulhw',0E5h
  7506.  dw mmx_instruction-assembler
  7507.  db 'pmullw',0D5h
  7508.  dw mmx_instruction-assembler
  7509.  db 'psadbw',0F6h
  7510.  dw mmx_instruction-assembler
  7511.  db 'pshufd',66h
  7512.  dw pshufd_instruction-assembler
  7513.  db 'pshufw',0
  7514.  dw pshufw_instruction-assembler
  7515.  db 'pslldq',111b
  7516.  dw ps_dq_instruction-assembler
  7517.  db 'psrldq',011b
  7518.  dw ps_dq_instruction-assembler
  7519.  db 'psubsb',0E8h
  7520.  dw mmx_instruction-assembler
  7521.  db 'psubsw',0E9h
  7522.  dw mmx_instruction-assembler
  7523.  db 'pswapd',0BBh
  7524.  dw amd3dnow_instruction-assembler
  7525.  db 'public',0
  7526.  dw public_directive-assembler
  7527.  db 'pushad',60h
  7528.  dw simple_instruction_32bit_except64-assembler
  7529.  db 'pushaw',60h
  7530.  dw simple_instruction_16bit_except64-assembler
  7531.  db 'pushfd',9Ch
  7532.  dw simple_instruction_32bit_except64-assembler
  7533.  db 'pushfq',9Ch
  7534.  dw simple_instruction_only64-assembler
  7535.  db 'pushfw',9Ch
  7536.  dw simple_instruction_16bit-assembler
  7537.  db 'rdtscp',1
  7538.  dw swapgs_instruction-assembler
  7539.  db 'repeat',0
  7540.  dw repeat_directive-assembler
  7541.  db 'setalc',0D6h
  7542.  dw simple_instruction_except64-assembler
  7543.  db 'setnae',92h
  7544.  dw set_instruction-assembler
  7545.  db 'setnbe',97h
  7546.  dw set_instruction-assembler
  7547.  db 'setnge',9Ch
  7548.  dw set_instruction-assembler
  7549.  db 'setnle',9Fh
  7550.  dw set_instruction-assembler
  7551.  db 'sfence',0F8h
  7552.  dw fence_instruction-assembler
  7553.  db 'shufpd',0C6h
  7554.  dw sse_pd_instruction-assembler
  7555.  db 'shufps',0C6h
  7556.  dw sse_ps_instruction-assembler
  7557.  db 'sqrtpd',51h
  7558.  dw sse_pd_instruction-assembler
  7559.  db 'sqrtps',51h
  7560.  dw sse_ps_instruction-assembler
  7561.  db 'sqrtsd',51h
  7562.  dw sse_sd_instruction-assembler
  7563.  db 'sqrtss',51h
  7564.  dw sse_ss_instruction-assembler
  7565.  db 'sysret',07h
  7566.  dw simple_extended_instruction-assembler
  7567.  db 'swapgs',0
  7568.  dw swapgs_instruction-assembler
  7569.  db 'vmcall',0C1h
  7570.  dw simple_vmx_instruction-assembler
  7571.  db 'vmread',0
  7572.  dw vmread_instruction-assembler
  7573.  db 'vmxoff',0C4h
  7574.  dw simple_vmx_instruction-assembler
  7575.  db 'wbinvd',9
  7576.  dw simple_extended_instruction-assembler
  7577.  db 0
  7578. instructions_7:
  7579.  db 'clflush',111b
  7580.  dw fxsave_instruction-assembler
  7581.  db 'cmovnae',42h
  7582.  dw cmov_instruction-assembler
  7583.  db 'cmovnbe',47h
  7584.  dw cmov_instruction-assembler
  7585.  db 'cmovnge',4Ch
  7586.  dw cmov_instruction-assembler
  7587.  db 'cmovnle',4Fh
  7588.  dw cmov_instruction-assembler
  7589.  db 'cmpeqpd',0
  7590.  dw cmp_pd_instruction-assembler
  7591.  db 'cmpeqps',0
  7592.  dw cmp_ps_instruction-assembler
  7593.  db 'cmpeqsd',0
  7594.  dw cmp_sd_instruction-assembler
  7595.  db 'cmpeqss',0
  7596.  dw cmp_ss_instruction-assembler
  7597.  db 'cmplepd',2
  7598.  dw cmp_pd_instruction-assembler
  7599.  db 'cmpleps',2
  7600.  dw cmp_ps_instruction-assembler
  7601.  db 'cmplesd',2
  7602.  dw cmp_sd_instruction-assembler
  7603.  db 'cmpless',2
  7604.  dw cmp_ss_instruction-assembler
  7605.  db 'cmpltpd',1
  7606.  dw cmp_pd_instruction-assembler
  7607.  db 'cmpltps',1
  7608.  dw cmp_ps_instruction-assembler
  7609.  db 'cmpltsd',1
  7610.  dw cmp_sd_instruction-assembler
  7611.  db 'cmpltss',1
  7612.  dw cmp_ss_instruction-assembler
  7613.  db 'cmpxchg',0B0h
  7614.  dw basic_486_instruction-assembler
  7615.  db 'display',0
  7616.  dw display_directive-assembler
  7617.  db 'fcmovbe',0D0h
  7618.  dw fcmov_instruction-assembler
  7619.  db 'fcmovnb',0C0h
  7620.  dw fcomi_instruction-assembler
  7621.  db 'fcmovne',0C8h
  7622.  dw fcomi_instruction-assembler
  7623.  db 'fcmovnu',0D8h
  7624.  dw fcomi_instruction-assembler
  7625.  db 'fdecstp',110110b
  7626.  dw simple_fpu_instruction-assembler
  7627.  db 'fincstp',110111b
  7628.  dw simple_fpu_instruction-assembler
  7629.  db 'fnstenv',6
  7630.  dw fldenv_instruction-assembler
  7631.  db 'frndint',111100b
  7632.  dw simple_fpu_instruction-assembler
  7633.  db 'fsincos',111011b
  7634.  dw simple_fpu_instruction-assembler
  7635.  db 'fucomip',0E8h
  7636.  dw fcomip_instruction-assembler
  7637.  db 'fucompp',0
  7638.  dw fucompp_instruction-assembler
  7639.  db 'fxrstor',1
  7640.  dw fxsave_instruction-assembler
  7641.  db 'fxtract',110100b
  7642.  dw simple_fpu_instruction-assembler
  7643.  db 'fyl2xp1',111001b
  7644.  dw simple_fpu_instruction-assembler
  7645.  db 'ldmxcsr',10b
  7646.  dw fxsave_instruction-assembler
  7647.  db 'loopned',0E0h
  7648.  dw loop_instruction_32bit-assembler
  7649.  db 'loopneq',0E0h
  7650.  dw loop_instruction_64bit-assembler
  7651.  db 'loopnew',0E0h
  7652.  dw loop_instruction_16bit-assembler
  7653.  db 'loopnzd',0E0h
  7654.  dw loop_instruction_32bit-assembler
  7655.  db 'loopnzq',0E0h
  7656.  dw loop_instruction_64bit-assembler
  7657.  db 'loopnzw',0E0h
  7658.  dw loop_instruction_16bit-assembler
  7659.  db 'monitor',0C8h
  7660.  dw monitor_instruction-assembler
  7661.  db 'movddup',12h
  7662.  dw sse_sd_instruction-assembler
  7663.  db 'movdq2q',0
  7664.  dw movdq2q_instruction-assembler
  7665.  db 'movhlps',12h
  7666.  dw movhlps_instruction-assembler
  7667.  db 'movlhps',16h
  7668.  dw movhlps_instruction-assembler
  7669.  db 'movntdq',0E7h
  7670.  dw movntdq_instruction-assembler
  7671.  db 'movntpd',2Bh
  7672.  dw movntdq_instruction-assembler
  7673.  db 'movntps',2Bh
  7674.  dw movntps_instruction-assembler
  7675.  db 'movq2dq',0
  7676.  dw movq2dq_instruction-assembler
  7677.  db 'paddusb',0DCh
  7678.  dw mmx_instruction-assembler
  7679.  db 'paddusw',0DDh
  7680.  dw mmx_instruction-assembler
  7681.  db 'pavgusb',0BFh
  7682.  dw amd3dnow_instruction-assembler
  7683.  db 'pcmpeqb',74h
  7684.  dw mmx_instruction-assembler
  7685.  db 'pcmpeqd',76h
  7686.  dw mmx_instruction-assembler
  7687.  db 'pcmpeqw',75h
  7688.  dw mmx_instruction-assembler
  7689.  db 'pcmpgtb',64h
  7690.  dw mmx_instruction-assembler
  7691.  db 'pcmpgtd',66h
  7692.  dw mmx_instruction-assembler
  7693.  db 'pcmpgtw',65h
  7694.  dw mmx_instruction-assembler
  7695.  db 'pfcmpeq',0B0h
  7696.  dw amd3dnow_instruction-assembler
  7697.  db 'pfcmpge',90h
  7698.  dw amd3dnow_instruction-assembler
  7699.  db 'pfcmpgt',0A0h
  7700.  dw amd3dnow_instruction-assembler
  7701.  db 'pfpnacc',8Eh
  7702.  dw amd3dnow_instruction-assembler
  7703.  db 'pfrsqrt',97h
  7704.  dw amd3dnow_instruction-assembler
  7705.  db 'pmaddwd',0F5h
  7706.  dw mmx_instruction-assembler
  7707.  db 'pmulhrw',0B7h
  7708.  dw amd3dnow_instruction-assembler
  7709.  db 'pmulhuw',0E4h
  7710.  dw mmx_instruction-assembler
  7711.  db 'pmuludq',0F4h
  7712.  dw mmx_instruction-assembler
  7713.  db 'pshufhw',0F3h
  7714.  dw pshufd_instruction-assembler
  7715.  db 'pshuflw',0F2h
  7716.  dw pshufd_instruction-assembler
  7717.  db 'psubusb',0D8h
  7718.  dw mmx_instruction-assembler
  7719.  db 'psubusw',0D9h
  7720.  dw mmx_instruction-assembler
  7721.  db 'rsqrtps',52h
  7722.  dw sse_ps_instruction-assembler
  7723.  db 'rsqrtss',52h
  7724.  dw sse_ss_instruction-assembler
  7725.  db 'section',0
  7726.  dw section_directive-assembler
  7727.  db 'segment',0
  7728.  dw segment_directive-assembler
  7729.  db 'stmxcsr',11b
  7730.  dw fxsave_instruction-assembler
  7731.  db 'syscall',05h
  7732.  dw simple_extended_instruction-assembler
  7733.  db 'sysexit',35h
  7734.  dw simple_extended_instruction-assembler
  7735.  db 'ucomisd',2Eh
  7736.  dw comisd_instruction-assembler
  7737.  db 'ucomiss',2Eh
  7738.  dw comiss_instruction-assembler
  7739.  db 'virtual',0
  7740.  dw virtual_directive-assembler
  7741.  db 'vmclear',6
  7742.  dw vmclear_instruction-assembler
  7743.  db 'vmptrld',6
  7744.  dw vmx_instruction-assembler
  7745.  db 'vmptrst',7
  7746.  dw vmx_instruction-assembler
  7747.  db 'vmwrite',0
  7748.  dw vmwrite_instruction-assembler
  7749.  db 0
  7750. instructions_8:
  7751.  db 'addsubpd',0D0h
  7752.  dw sse_pd_instruction-assembler
  7753.  db 'addsubps',0D0h
  7754.  dw cvtpd2dq_instruction-assembler
  7755.  db 'cmpneqpd',4
  7756.  dw cmp_pd_instruction-assembler
  7757.  db 'cmpneqps',4
  7758.  dw cmp_ps_instruction-assembler
  7759.  db 'cmpneqsd',4
  7760.  dw cmp_sd_instruction-assembler
  7761.  db 'cmpneqss',4
  7762.  dw cmp_ss_instruction-assembler
  7763.  db 'cmpnlepd',6
  7764.  dw cmp_pd_instruction-assembler
  7765.  db 'cmpnleps',6
  7766.  dw cmp_ps_instruction-assembler
  7767.  db 'cmpnlesd',6
  7768.  dw cmp_sd_instruction-assembler
  7769.  db 'cmpnless',6
  7770.  dw cmp_ss_instruction-assembler
  7771.  db 'cmpnltpd',5
  7772.  dw cmp_pd_instruction-assembler
  7773.  db 'cmpnltps',5
  7774.  dw cmp_ps_instruction-assembler
  7775.  db 'cmpnltsd',5
  7776.  dw cmp_sd_instruction-assembler
  7777.  db 'cmpnltss',5
  7778.  dw cmp_ss_instruction-assembler
  7779.  db 'cmpordpd',7
  7780.  dw cmp_pd_instruction-assembler
  7781.  db 'cmpordps',7
  7782.  dw cmp_ps_instruction-assembler
  7783.  db 'cmpordsd',7
  7784.  dw cmp_sd_instruction-assembler
  7785.  db 'cmpordss',7
  7786.  dw cmp_ss_instruction-assembler
  7787.  db 'cvtdq2pd',0E6h
  7788.  dw cvtdq2pd_instruction-assembler
  7789.  db 'cvtdq2ps',5Bh
  7790.  dw sse_ps_instruction-assembler
  7791.  db 'cvtpd2dq',0E6h
  7792.  dw cvtpd2dq_instruction-assembler
  7793.  db 'cvtpd2pi',2Dh
  7794.  dw cvtpd2pi_instruction-assembler
  7795.  db 'cvtpd2ps',5Ah
  7796.  dw sse_pd_instruction-assembler
  7797.  db 'cvtpi2pd',2Ah
  7798.  dw cvtpi2pd_instruction-assembler
  7799.  db 'cvtpi2ps',2Ah
  7800.  dw cvtpi2ps_instruction-assembler
  7801.  db 'cvtps2dq',5Bh
  7802.  dw sse_pd_instruction-assembler
  7803.  db 'cvtps2pd',5Ah
  7804.  dw cvtps2pd_instruction-assembler
  7805.  db 'cvtps2pi',2Dh
  7806.  dw cvtps2pi_instruction-assembler
  7807.  db 'cvtsd2si',2Dh
  7808.  dw cvtsd2si_instruction-assembler
  7809.  db 'cvtsd2ss',5Ah
  7810.  dw sse_sd_instruction-assembler
  7811.  db 'cvtsi2sd',2Ah
  7812.  dw cvtsi2sd_instruction-assembler
  7813.  db 'cvtsi2ss',2Ah
  7814.  dw cvtsi2ss_instruction-assembler
  7815.  db 'cvtss2sd',5Ah
  7816.  dw sse_ss_instruction-assembler
  7817.  db 'cvtss2si',2Dh
  7818.  dw cvtss2si_instruction-assembler
  7819.  db 'fcmovnbe',0D0h
  7820.  dw fcomi_instruction-assembler
  7821.  db 'maskmovq',0
  7822.  dw maskmovq_instruction-assembler
  7823.  db 'movmskpd',0
  7824.  dw movmskpd_instruction-assembler
  7825.  db 'movmskps',0
  7826.  dw movmskps_instruction-assembler
  7827.  db 'movshdup',16h
  7828.  dw cvtdq2pd_instruction-assembler
  7829.  db 'movsldup',12h
  7830.  dw cvtdq2pd_instruction-assembler
  7831.  db 'packssdw',6Bh
  7832.  dw mmx_instruction-assembler
  7833.  db 'packsswb',63h
  7834.  dw mmx_instruction-assembler
  7835.  db 'packuswb',67h
  7836.  dw mmx_instruction-assembler
  7837.  db 'pfrcpit1',0A6h
  7838.  dw amd3dnow_instruction-assembler
  7839.  db 'pfrcpit2',0B6h
  7840.  dw amd3dnow_instruction-assembler
  7841.  db 'pfrsqit1',0A7h
  7842.  dw amd3dnow_instruction-assembler
  7843.  db 'pmovmskb',0D7h
  7844.  dw pextrw_instruction-assembler
  7845.  db 'prefetch',0
  7846.  dw amd_prefetch_instruction-assembler
  7847.  db 'sysenter',34h
  7848.  dw simple_extended_instruction-assembler
  7849.  db 'unpckhpd',15h
  7850.  dw sse_pd_instruction-assembler
  7851.  db 'unpckhps',15h
  7852.  dw sse_ps_instruction-assembler
  7853.  db 'unpcklpd',14h
  7854.  dw sse_pd_instruction-assembler
  7855.  db 'unpcklps',14h
  7856.  dw sse_ps_instruction-assembler
  7857.  db 'vmlaunch',0C2h
  7858.  dw simple_vmx_instruction-assembler
  7859.  db 'vmresume',0C3h
  7860.  dw simple_vmx_instruction-assembler
  7861.  db 0
  7862. instructions_9:
  7863.  db 'cmpxchg8b',8
  7864.  dw cmpxchgx_instruction-assembler
  7865.  db 'cvttpd2dq',0E6h
  7866.  dw sse_pd_instruction-assembler
  7867.  db 'cvttpd2pi',2Ch
  7868.  dw cvtpd2pi_instruction-assembler
  7869.  db 'cvttps2dq',5Bh
  7870.  dw cvtdq2pd_instruction-assembler
  7871.  db 'cvttps2pi',2Ch
  7872.  dw cvtps2pi_instruction-assembler
  7873.  db 'cvttsd2si',2Ch
  7874.  dw cvtsd2si_instruction-assembler
  7875.  db 'cvttss2si',2Ch
  7876.  dw cvtss2si_instruction-assembler
  7877.  db 'prefetchw',1
  7878.  dw amd_prefetch_instruction-assembler
  7879.  db 'punpckhbw',68h
  7880.  dw mmx_instruction-assembler
  7881.  db 'punpckhdq',6Ah
  7882.  dw mmx_instruction-assembler
  7883.  db 'punpckhwd',69h
  7884.  dw mmx_instruction-assembler
  7885.  db 'punpcklbw',60h
  7886.  dw mmx_instruction-assembler
  7887.  db 'punpckldq',62h
  7888.  dw mmx_instruction-assembler
  7889.  db 'punpcklwd',61h
  7890.  dw mmx_instruction-assembler
  7891.  db 0
  7892. instructions_10:
  7893.  db 'cmpunordpd',3
  7894.  dw cmp_pd_instruction-assembler
  7895.  db 'cmpunordps',3
  7896.  dw cmp_ps_instruction-assembler
  7897.  db 'cmpunordsd',3
  7898.  dw cmp_sd_instruction-assembler
  7899.  db 'cmpunordss',3
  7900.  dw cmp_ss_instruction-assembler
  7901.  db 'cmpxchg16b',16
  7902.  dw cmpxchgx_instruction-assembler
  7903.  db 'loadall286',5
  7904.  dw simple_extended_instruction-assembler
  7905.  db 'loadall386',7
  7906.  dw simple_extended_instruction-assembler
  7907.  db 'maskmovdqu',0
  7908.  dw maskmovdqu_instruction-assembler
  7909.  db 'prefetcht0',1
  7910.  dw prefetch_instruction-assembler
  7911.  db 'prefetcht1',2
  7912.  dw prefetch_instruction-assembler
  7913.  db 'prefetcht2',3
  7914.  dw prefetch_instruction-assembler
  7915.  db 'punpckhqdq',6Dh
  7916.  dw sse_pd_instruction-assembler
  7917.  db 'punpcklqdq',6Ch
  7918.  dw sse_pd_instruction-assembler
  7919.  db 0
  7920. instructions_11:
  7921.  db 'prefetchnta',0
  7922.  dw prefetch_instruction-assembler
  7923.  db 0
  7924.