Rev 1342 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1342 | Rev 2287 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | ; flat assembler core |
1 | ; flat assembler core |
2 | ; Copyright (c) 1999-2009, Tomasz Grysztar. |
2 | ; Copyright (c) 1999-2011, Tomasz Grysztar. |
3 | ; All rights reserved. |
3 | ; All rights reserved. |
Line 4... | Line 4... | ||
4 | 4 | ||
5 | simple_instruction_except64: |
5 | simple_instruction_except64: |
6 | cmp [code_type],64 |
6 | cmp [code_type],64 |
Line 32... | Line 32... | ||
32 | cmp [code_type],16 |
32 | cmp [code_type],16 |
33 | je size_prefix |
33 | je size_prefix |
34 | stos byte [edi] |
34 | stos byte [edi] |
35 | jmp instruction_assembled |
35 | jmp instruction_assembled |
36 | simple_instruction_64bit: |
36 | iret_instruction: |
- | 37 | cmp [code_type],64 |
|
- | 38 | jne simple_instruction |
|
- | 39 | simple_instruction_64bit: |
|
37 | cmp [code_type],64 |
40 | cmp [code_type],64 |
38 | jne illegal_instruction |
41 | jne illegal_instruction |
39 | mov ah,al |
42 | mov ah,al |
40 | mov al,48h |
43 | mov al,48h |
41 | stos word [edi] |
44 | stos word [edi] |
Line 71... | Line 74... | ||
71 | ja invalid_operand_size |
74 | ja invalid_operand_size |
72 | cmp al,'(' |
75 | cmp al,'(' |
73 | jne invalid_operand |
76 | jne invalid_operand |
74 | call get_byte_value |
77 | call get_byte_value |
75 | mov ah,al |
78 | cmp [next_pass_needed],0 |
- | 79 | jne int_imm_ok |
|
- | 80 | test eax,eax |
|
- | 81 | js value_out_of_range |
|
- | 82 | int_imm_ok: |
|
- | 83 | mov ah,al |
|
76 | mov al,0CDh |
84 | mov al,0CDh |
77 | stos word [edi] |
85 | stos word [edi] |
78 | jmp instruction_assembled |
86 | jmp instruction_assembled |
79 | iret_instruction: |
87 | aa_instruction: |
80 | cmp [code_type],64 |
- | |
81 | jne simple_instruction |
- | |
82 | call operand_64bit |
- | |
83 | jmp simple_instruction |
- | |
84 | aa_instruction: |
- | |
85 | cmp [code_type],64 |
88 | cmp [code_type],64 |
86 | je illegal_instruction |
89 | je illegal_instruction |
87 | push eax |
90 | push eax |
88 | mov bl,10 |
91 | mov bl,10 |
89 | cmp byte [esi],'(' |
92 | cmp byte [esi],'(' |
Line 1822... | Line 1825... | ||
1822 | cmp [next_pass_needed],0 |
1825 | cmp [next_pass_needed],0 |
1823 | jne enter_imm16_ok |
1826 | jne enter_imm16_ok |
1824 | cmp [value_type],0 |
1827 | cmp [value_type],0 |
1825 | jne invalid_use_of_symbol |
1828 | jne invalid_use_of_symbol |
1826 | enter_imm16_ok: |
1829 | test eax,eax |
- | 1830 | js value_out_of_range |
|
- | 1831 | enter_imm16_ok: |
|
1827 | push eax |
1832 | push eax |
1828 | mov [operand_size],0 |
1833 | mov [operand_size],0 |
1829 | lods byte [esi] |
1834 | lods byte [esi] |
1830 | cmp al,',' |
1835 | cmp al,',' |
1831 | jne invalid_operand |
1836 | jne invalid_operand |
Line 1838... | Line 1843... | ||
1838 | enter_imm8_size_ok: |
1843 | enter_imm8_size_ok: |
1839 | cmp al,'(' |
1844 | cmp al,'(' |
1840 | jne invalid_operand |
1845 | jne invalid_operand |
1841 | call get_byte_value |
1846 | call get_byte_value |
1842 | mov dl,al |
1847 | cmp [next_pass_needed],0 |
- | 1848 | jne enter_imm8_ok |
|
- | 1849 | test eax,eax |
|
- | 1850 | js value_out_of_range |
|
- | 1851 | enter_imm8_ok: |
|
- | 1852 | mov dl,al |
|
1843 | pop ebx |
1853 | pop ebx |
1844 | mov al,0C8h |
1854 | mov al,0C8h |
1845 | stos byte [edi] |
1855 | stos byte [edi] |
1846 | mov ax,bx |
1856 | mov ax,bx |
1847 | stos word [edi] |
1857 | stos word [edi] |
Line 1888... | Line 1898... | ||
1888 | cmp [next_pass_needed],0 |
1898 | cmp [next_pass_needed],0 |
1889 | jne ret_imm_ok |
1899 | jne ret_imm_ok |
1890 | cmp [value_type],0 |
1900 | cmp [value_type],0 |
1891 | jne invalid_use_of_symbol |
1901 | jne invalid_use_of_symbol |
1892 | ret_imm_ok: |
1902 | test eax,eax |
- | 1903 | js value_out_of_range |
|
- | 1904 | ret_imm_ok: |
|
1893 | cmp [size_declared],0 |
1905 | cmp [size_declared],0 |
1894 | jne ret_imm_store |
1906 | jne ret_imm_store |
1895 | or ax,ax |
1907 | or ax,ax |
1896 | jz simple_ret |
1908 | jz simple_ret |
1897 | ret_imm_store: |
1909 | ret_imm_store: |
Line 3168... | Line 3180... | ||
3168 | jc conditional_jump_short |
3180 | jc conditional_jump_short |
3169 | conditional_jump_32bit_store: |
3181 | conditional_jump_32bit_store: |
3170 | mov edx,eax |
3182 | mov edx,eax |
3171 | sub edx,4 |
3183 | sub edx,4 |
3172 | mov ah,[base_code] |
3184 | jno conditional_jump_32bit_range_ok |
- | 3185 | cmp [code_type],64 |
|
- | 3186 | je relative_jump_out_of_range |
|
- | 3187 | conditional_jump_32bit_range_ok: |
|
- | 3188 | mov ah,[base_code] |
|
3173 | add ah,10h |
3189 | add ah,10h |
3174 | mov al,0Fh |
3190 | mov al,0Fh |
3175 | stos word [edi] |
3191 | stos word [edi] |
3176 | mov eax,edx |
3192 | mov eax,edx |
3177 | call mark_relocation |
3193 | call mark_relocation |
Line 3207... | Line 3223... | ||
3207 | jc conditional_jump_short |
3223 | jc conditional_jump_short |
3208 | cmp [value_type],0 |
3224 | cmp [value_type],0 |
3209 | jne invalid_use_of_symbol |
3225 | jne invalid_use_of_symbol |
3210 | mov edx,eax |
3226 | mov edx,eax |
3211 | sub edx,2 |
3227 | sub dx,2 |
3212 | mov ah,[base_code] |
3228 | mov ah,[base_code] |
3213 | add ah,10h |
3229 | add ah,10h |
3214 | mov al,0Fh |
3230 | mov al,0Fh |
3215 | stos word [edi] |
3231 | stos word [edi] |
3216 | mov eax,edx |
3232 | mov eax,edx |
3217 | stos word [edi] |
3233 | stos word [edi] |
Line 3269... | Line 3285... | ||
3269 | cdq |
3285 | cdq |
3270 | make_loop_jump: |
3286 | make_loop_jump: |
3271 | call check_for_short_jump |
3287 | call check_for_short_jump |
3272 | jc conditional_jump_short |
3288 | jc conditional_jump_short |
3273 | jmp jump_out_of_range |
3289 | scas word [edi] |
- | 3290 | jmp jump_out_of_range |
|
3274 | loop_counter_size: |
3291 | loop_counter_size: |
3275 | cmp [operand_prefix],0 |
3292 | cmp [operand_prefix],0 |
3276 | je loop_counter_size_ok |
3293 | je loop_counter_size_ok |
3277 | push eax |
3294 | push eax |
3278 | mov al,[operand_prefix] |
3295 | mov al,[operand_prefix] |
Line 3747... | Line 3764... | ||
3747 | jne invalid_operand |
3764 | jne invalid_operand |
3748 | call get_address |
3765 | call get_address |
3749 | jmp instruction_ready |
3766 | jmp instruction_ready |
3750 | swapgs_instruction: |
3767 | swapgs_instruction: |
3751 | mov [base_code],0Fh |
3768 | cmp [code_type],64 |
- | 3769 | jne illegal_instruction |
|
- | 3770 | rdtscp_instruction: |
|
- | 3771 | mov [base_code],0Fh |
|
3752 | mov [extended_code],1 |
3772 | mov [extended_code],1 |
3753 | mov [postbyte_register],7 |
3773 | mov [postbyte_register],7 |
3754 | mov bl,al |
3774 | mov bl,al |
3755 | jmp nomem_instruction_ready |
3775 | jmp nomem_instruction_ready |
3756 | 3776 | ||
Line 4344... | Line 4364... | ||
4344 | lods byte [esi] |
4364 | lods byte [esi] |
4345 | call convert_mmx_register |
4365 | call convert_mmx_register |
4346 | mov bl,al |
4366 | mov bl,al |
4347 | jmp nomem_instruction_ready |
4367 | jmp nomem_instruction_ready |
4348 | mmx_ps_instruction: |
4368 | mmx_bit_shift_instruction: |
4349 | mov [base_code],0Fh |
4369 | mov [base_code],0Fh |
4350 | mov [extended_code],al |
4370 | mov [extended_code],al |
4351 | lods byte [esi] |
4371 | lods byte [esi] |
4352 | call get_size_operator |
4372 | call get_size_operator |
4353 | cmp al,10h |
4373 | cmp al,10h |
4354 | jne invalid_operand |
4374 | jne invalid_operand |
Line 4420... | Line 4440... | ||
4420 | je mmx_nomem_imm8 |
4440 | je mmx_nomem_imm8 |
4421 | jmp nomem_instruction_ready |
4441 | jmp nomem_instruction_ready |
4422 | mmx_imm8: |
4442 | mmx_imm8: |
4423 | push ebx ecx edx |
4443 | push ebx ecx edx |
4424 | mov [operand_size],0 |
4444 | xor cl,cl |
- | 4445 | xchg cl,[operand_size] |
|
4425 | lods byte [esi] |
4446 | lods byte [esi] |
4426 | cmp al,',' |
4447 | cmp al,',' |
4427 | jne invalid_operand |
4448 | jne invalid_operand |
4428 | lods byte [esi] |
4449 | lods byte [esi] |
4429 | call get_size_operator |
4450 | call get_size_operator |
4430 | test ah,not 1 |
4451 | test ah,not 1 |
4431 | jnz invalid_operand_size |
4452 | jnz invalid_operand_size |
4432 | cmp al,'(' |
4453 | mov [operand_size],cl |
- | 4454 | cmp al,'(' |
|
4433 | jne invalid_operand |
4455 | jne invalid_operand |
4434 | call get_byte_value |
4456 | call get_byte_value |
4435 | mov byte [value],al |
4457 | mov byte [value],al |
4436 | pop edx ecx ebx |
4458 | pop edx ecx ebx |
4437 | call store_instruction_with_imm8 |
4459 | call store_instruction_with_imm8 |
Line 4595... | Line 4617... | ||
4595 | jne invalid_operand_size |
4617 | jne invalid_operand_size |
4596 | mov bl,al |
4618 | mov bl,al |
4597 | jmp nomem_instruction_ready |
4619 | jmp nomem_instruction_ready |
4598 | make_mmx_prefix: |
4620 | make_mmx_prefix: |
4599 | cmp [operand_size],16 |
4621 | cmp [vex_required],0 |
- | 4622 | jne mmx_prefix_for_vex |
|
- | 4623 | cmp [operand_size],16 |
|
4600 | jne no_mmx_prefix |
4624 | jne no_mmx_prefix |
4601 | mov [operand_prefix],66h |
4625 | mov [operand_prefix],66h |
4602 | no_mmx_prefix: |
4626 | no_mmx_prefix: |
4603 | ret |
4627 | ret |
4604 | movq_instruction: |
4628 | mmx_prefix_for_vex: |
- | 4629 | cmp [operand_size],16 |
|
- | 4630 | jne invalid_operand |
|
- | 4631 | mov [opcode_prefix],66h |
|
- | 4632 | ret |
|
- | 4633 | movq_instruction: |
|
4605 | mov [base_code],0Fh |
4634 | mov [base_code],0Fh |
4606 | lods byte [esi] |
4635 | lods byte [esi] |
4607 | call get_size_operator |
4636 | call get_size_operator |
4608 | cmp al,10h |
4637 | cmp al,10h |
4609 | je movq_reg |
4638 | je movq_reg |
Line 4716... | Line 4745... | ||
4716 | call get_size_operator |
4745 | call get_size_operator |
4717 | cmp al,10h |
4746 | cmp al,10h |
4718 | jne invalid_operand |
4747 | jne invalid_operand |
4719 | lods byte [esi] |
4748 | lods byte [esi] |
4720 | call convert_mmx_register |
4749 | call convert_xmm_register |
4721 | cmp ah,16 |
4750 | mov [postbyte_register],al |
4722 | jne invalid_operand_size |
- | |
4723 | mov [postbyte_register],al |
- | |
4724 | mov [extended_code],7Fh |
4751 | mov [extended_code],7Fh |
4725 | jmp instruction_ready |
4752 | jmp instruction_ready |
4726 | movdq_mmreg: |
4753 | movdq_mmreg: |
4727 | lods byte [esi] |
4754 | lods byte [esi] |
4728 | call convert_mmx_register |
4755 | call convert_xmm_register |
4729 | cmp ah,16 |
4756 | mov [postbyte_register],al |
4730 | jne invalid_operand_size |
- | |
4731 | mov [postbyte_register],al |
- | |
4732 | lods byte [esi] |
4757 | lods byte [esi] |
4733 | cmp al,',' |
4758 | cmp al,',' |
4734 | jne invalid_operand |
4759 | jne invalid_operand |
4735 | lods byte [esi] |
4760 | lods byte [esi] |
4736 | call get_size_operator |
4761 | call get_size_operator |
Line 4741... | Line 4766... | ||
4741 | call get_address |
4766 | call get_address |
4742 | jmp instruction_ready |
4767 | jmp instruction_ready |
4743 | movdq_mmreg_mmreg: |
4768 | movdq_mmreg_mmreg: |
4744 | lods byte [esi] |
4769 | lods byte [esi] |
4745 | call convert_mmx_register |
4770 | call convert_xmm_register |
4746 | cmp ah,16 |
4771 | mov bl,al |
4747 | jne invalid_operand_size |
- | |
4748 | mov bl,al |
- | |
4749 | jmp nomem_instruction_ready |
4772 | jmp nomem_instruction_ready |
4750 | lddqu_instruction: |
4773 | lddqu_instruction: |
4751 | lods byte [esi] |
4774 | lods byte [esi] |
4752 | call get_size_operator |
4775 | call get_size_operator |
4753 | cmp al,10h |
4776 | cmp al,10h |
4754 | jne invalid_operand |
4777 | jne invalid_operand |
4755 | lods byte [esi] |
4778 | lods byte [esi] |
4756 | call convert_mmx_register |
4779 | call convert_xmm_register |
4757 | cmp ah,16 |
4780 | push eax |
4758 | jne invalid_operand_size |
- | |
4759 | push eax |
- | |
4760 | lods byte [esi] |
4781 | lods byte [esi] |
4761 | cmp al,',' |
4782 | cmp al,',' |
4762 | jne invalid_operand |
4783 | jne invalid_operand |
4763 | lods byte [esi] |
4784 | lods byte [esi] |
4764 | call get_size_operator |
4785 | call get_size_operator |
Line 4770... | Line 4791... | ||
4770 | mov [opcode_prefix],0F2h |
4791 | mov [opcode_prefix],0F2h |
4771 | mov [base_code],0Fh |
4792 | mov [base_code],0Fh |
4772 | mov [extended_code],0F0h |
4793 | mov [extended_code],0F0h |
4773 | jmp instruction_ready |
4794 | jmp instruction_ready |
4774 | movq2dq_instruction: |
4795 | |
- | 4796 | movdq2q_instruction: |
|
- | 4797 | mov [opcode_prefix],0F2h |
|
- | 4798 | mov [mmx_size],8 |
|
- | 4799 | jmp movq2dq_ |
|
- | 4800 | movq2dq_instruction: |
|
4775 | lods byte [esi] |
4801 | mov [opcode_prefix],0F3h |
4776 | call get_size_operator |
- | |
4777 | cmp al,10h |
- | |
4778 | jne invalid_operand |
- | |
4779 | lods byte [esi] |
- | |
4780 | call convert_mmx_register |
- | |
4781 | cmp ah,16 |
- | |
4782 | jne invalid_operand_size |
- | |
4783 | mov [postbyte_register],al |
- | |
4784 | mov [operand_size],0 |
- | |
4785 | lods byte [esi] |
- | |
4786 | cmp al,',' |
- | |
4787 | jne invalid_operand |
- | |
4788 | lods byte [esi] |
- | |
4789 | call get_size_operator |
- | |
4790 | cmp al,10h |
- | |
4791 | jne invalid_operand |
- | |
4792 | lods byte [esi] |
- | |
4793 | call convert_mmx_register |
- | |
4794 | cmp ah,8 |
- | |
4795 | jne invalid_operand_size |
- | |
4796 | mov bl,al |
- | |
4797 | mov [opcode_prefix],0F3h |
- | |
4798 | mov [base_code],0Fh |
4802 | mov [mmx_size],16 |
4799 | mov [extended_code],0D6h |
4803 | movq2dq_: |
4800 | jmp nomem_instruction_ready |
- | |
4801 | movdq2q_instruction: |
- | |
4802 | lods byte [esi] |
4804 | lods byte [esi] |
4803 | call get_size_operator |
4805 | call get_size_operator |
4804 | cmp al,10h |
4806 | cmp al,10h |
4805 | jne invalid_operand |
4807 | jne invalid_operand |
4806 | lods byte [esi] |
4808 | lods byte [esi] |
4807 | call convert_mmx_register |
4809 | call convert_mmx_register |
4808 | cmp ah,8 |
4810 | cmp ah,[mmx_size] |
4809 | jne invalid_operand_size |
4811 | jne invalid_operand_size |
4810 | mov [postbyte_register],al |
4812 | mov [postbyte_register],al |
4811 | mov [operand_size],0 |
4813 | mov [operand_size],0 |
4812 | lods byte [esi] |
4814 | lods byte [esi] |
4813 | cmp al,',' |
4815 | cmp al,',' |
4814 | jne invalid_operand |
4816 | jne invalid_operand |
Line 4817... | Line 4819... | ||
4817 | cmp al,10h |
4819 | cmp al,10h |
4818 | jne invalid_operand |
4820 | jne invalid_operand |
4819 | lods byte [esi] |
4821 | lods byte [esi] |
4820 | call convert_mmx_register |
4822 | call convert_mmx_register |
4821 | cmp ah,16 |
4823 | xor [mmx_size],8+16 |
- | 4824 | cmp ah,[mmx_size] |
|
4822 | jne invalid_operand_size |
4825 | jne invalid_operand_size |
4823 | mov bl,al |
4826 | mov bl,al |
4824 | mov [opcode_prefix],0F2h |
4827 | mov [base_code],0Fh |
4825 | mov [base_code],0Fh |
- | |
4826 | mov [extended_code],0D6h |
4828 | mov [extended_code],0D6h |
4827 | jmp nomem_instruction_ready |
4829 | jmp nomem_instruction_ready |
4828 | 4830 | ||
Line 4829... | Line 4831... | ||
4829 | sse_ps_instruction_imm8: |
4831 | sse_ps_instruction_imm8: |
Line 4844... | Line 4846... | ||
4844 | sse_sd_instruction: |
4846 | sse_sd_instruction: |
4845 | mov [mmx_size],8 |
4847 | mov [mmx_size],8 |
4846 | mov [opcode_prefix],0F2h |
4848 | mov [opcode_prefix],0F2h |
4847 | jmp sse_instruction |
4849 | jmp sse_instruction |
4848 | comiss_instruction: |
4850 | cmp_pd_instruction: |
- | 4851 | mov [opcode_prefix],66h |
|
- | 4852 | cmp_ps_instruction: |
|
- | 4853 | mov [mmx_size],16 |
|
- | 4854 | mov byte [value],al |
|
- | 4855 | mov al,0C2h |
|
- | 4856 | jmp sse_instruction |
|
- | 4857 | cmp_ss_instruction: |
|
- | 4858 | mov [mmx_size],4 |
|
- | 4859 | mov [opcode_prefix],0F3h |
|
- | 4860 | jmp cmp_sx_instruction |
|
- | 4861 | cmpsd_instruction: |
|
- | 4862 | mov al,0A7h |
|
- | 4863 | mov ah,[esi] |
|
- | 4864 | or ah,ah |
|
- | 4865 | jz simple_instruction_32bit |
|
- | 4866 | cmp ah,0Fh |
|
- | 4867 | je simple_instruction_32bit |
|
- | 4868 | mov al,-1 |
|
- | 4869 | cmp_sd_instruction: |
|
- | 4870 | mov [mmx_size],8 |
|
- | 4871 | mov [opcode_prefix],0F2h |
|
- | 4872 | cmp_sx_instruction: |
|
- | 4873 | mov byte [value],al |
|
- | 4874 | mov al,0C2h |
|
- | 4875 | jmp sse_instruction |
|
- | 4876 | comiss_instruction: |
|
4849 | mov [mmx_size],4 |
4877 | mov [mmx_size],4 |
4850 | jmp sse_instruction |
4878 | jmp sse_instruction |
4851 | comisd_instruction: |
4879 | comisd_instruction: |
4852 | mov [mmx_size],8 |
4880 | mov [mmx_size],8 |
4853 | mov [opcode_prefix],66h |
4881 | mov [opcode_prefix],66h |
4854 | jmp sse_instruction |
4882 | jmp sse_instruction |
4855 | cvtps2pd_instruction: |
4883 | cvtdq2pd_instruction: |
- | 4884 | mov [opcode_prefix],0F3h |
|
- | 4885 | cvtps2pd_instruction: |
|
4856 | mov [mmx_size],8 |
4886 | mov [mmx_size],8 |
4857 | jmp sse_instruction |
4887 | jmp sse_instruction |
4858 | cvtpd2dq_instruction: |
4888 | cvtpd2dq_instruction: |
4859 | mov [mmx_size],16 |
4889 | mov [mmx_size],16 |
4860 | mov [opcode_prefix],0F2h |
4890 | mov [opcode_prefix],0F2h |
4861 | jmp sse_instruction |
4891 | jmp sse_instruction |
4862 | cvtdq2pd_instruction: |
4892 | movshdup_instruction: |
4863 | mov [mmx_size],16 |
4893 | mov [mmx_size],16 |
4864 | mov [opcode_prefix],0F3h |
4894 | mov [opcode_prefix],0F3h |
4865 | sse_instruction: |
4895 | sse_instruction: |
4866 | mov [base_code],0Fh |
4896 | mov [base_code],0Fh |
4867 | mov [extended_code],al |
4897 | mov [extended_code],al |
4868 | lods byte [esi] |
4898 | lods byte [esi] |
Line 4870... | Line 4900... | ||
4870 | cmp al,10h |
4900 | cmp al,10h |
4871 | jne invalid_operand |
4901 | jne invalid_operand |
4872 | sse_xmmreg: |
4902 | sse_xmmreg: |
4873 | lods byte [esi] |
4903 | lods byte [esi] |
4874 | call convert_mmx_register |
4904 | call convert_xmm_register |
4875 | cmp ah,16 |
4905 | sse_reg: |
4876 | jne invalid_operand_size |
- | |
4877 | sse_reg: |
- | |
4878 | mov [postbyte_register],al |
4906 | mov [postbyte_register],al |
4879 | mov [operand_size],0 |
4907 | mov [operand_size],0 |
4880 | lods byte [esi] |
4908 | lods byte [esi] |
4881 | cmp al,',' |
4909 | cmp al,',' |
4882 | jne invalid_operand |
4910 | jne invalid_operand |
Line 4893... | Line 4921... | ||
4893 | mov al,[mmx_size] |
4921 | mov al,[mmx_size] |
4894 | cmp [operand_size],al |
4922 | cmp [operand_size],al |
4895 | jne invalid_operand_size |
4923 | jne invalid_operand_size |
4896 | sse_mem_size_ok: |
4924 | sse_mem_size_ok: |
4897 | cmp [immediate_size],1 |
4925 | mov al,[extended_code] |
- | 4926 | mov ah,[supplemental_code] |
|
- | 4927 | cmp al,0C2h |
|
- | 4928 | je sse_cmp_mem_ok |
|
- | 4929 | cmp ax,443Ah |
|
- | 4930 | je sse_cmp_mem_ok |
|
- | 4931 | cmp [immediate_size],1 |
|
4898 | je mmx_imm8 |
4932 | je mmx_imm8 |
4899 | cmp [immediate_size],-1 |
4933 | cmp [immediate_size],-1 |
4900 | jne sse_ok |
4934 | jne sse_ok |
4901 | call take_additional_xmm0 |
4935 | call take_additional_xmm0 |
4902 | mov [immediate_size],0 |
4936 | mov [immediate_size],0 |
4903 | sse_ok: |
4937 | sse_ok: |
4904 | jmp instruction_ready |
4938 | jmp instruction_ready |
4905 | sse_xmmreg_xmmreg: |
4939 | sse_cmp_mem_ok: |
- | 4940 | cmp byte [value],-1 |
|
- | 4941 | je mmx_imm8 |
|
- | 4942 | call store_instruction_with_imm8 |
|
- | 4943 | jmp instruction_assembled |
|
- | 4944 | sse_xmmreg_xmmreg: |
|
4906 | cmp [operand_prefix],66h |
4945 | cmp [operand_prefix],66h |
4907 | jne sse_xmmreg_xmmreg_ok |
4946 | jne sse_xmmreg_xmmreg_ok |
4908 | cmp [extended_code],12h |
4947 | cmp [extended_code],12h |
4909 | je invalid_operand |
4948 | je invalid_operand |
4910 | cmp [extended_code],16h |
4949 | cmp [extended_code],16h |
4911 | je invalid_operand |
4950 | je invalid_operand |
4912 | sse_xmmreg_xmmreg_ok: |
4951 | sse_xmmreg_xmmreg_ok: |
4913 | lods byte [esi] |
4952 | lods byte [esi] |
4914 | call convert_mmx_register |
4953 | call convert_xmm_register |
4915 | cmp ah,16 |
4954 | mov bl,al |
4916 | jne invalid_operand_size |
- | |
4917 | mov bl,al |
- | |
4918 | cmp [immediate_size],1 |
4955 | mov al,[extended_code] |
- | 4956 | mov ah,[supplemental_code] |
|
- | 4957 | cmp al,0C2h |
|
- | 4958 | je sse_cmp_nomem_ok |
|
- | 4959 | cmp ax,443Ah |
|
- | 4960 | je sse_cmp_nomem_ok |
|
- | 4961 | cmp [immediate_size],1 |
|
4919 | je mmx_nomem_imm8 |
4962 | je mmx_nomem_imm8 |
4920 | cmp [immediate_size],-1 |
4963 | cmp [immediate_size],-1 |
4921 | jne sse_nomem_ok |
4964 | jne sse_nomem_ok |
4922 | call take_additional_xmm0 |
4965 | call take_additional_xmm0 |
4923 | mov [immediate_size],0 |
4966 | mov [immediate_size],0 |
4924 | sse_nomem_ok: |
4967 | sse_nomem_ok: |
4925 | jmp nomem_instruction_ready |
4968 | jmp nomem_instruction_ready |
4926 | take_additional_xmm0: |
4969 | sse_cmp_nomem_ok: |
- | 4970 | cmp byte [value],-1 |
|
- | 4971 | je mmx_nomem_imm8 |
|
- | 4972 | call store_nomem_instruction |
|
- | 4973 | mov al,byte [value] |
|
- | 4974 | stosb |
|
- | 4975 | jmp instruction_assembled |
|
- | 4976 | take_additional_xmm0: |
|
4927 | cmp byte [esi],',' |
4977 | cmp byte [esi],',' |
4928 | jne additional_xmm0_ok |
4978 | jne additional_xmm0_ok |
4929 | inc esi |
4979 | inc esi |
4930 | lods byte [esi] |
4980 | lods byte [esi] |
4931 | cmp al,10h |
4981 | cmp al,10h |
4932 | jne invalid_operand |
4982 | jne invalid_operand |
4933 | lods byte [esi] |
4983 | lods byte [esi] |
4934 | call convert_mmx_register |
4984 | call convert_xmm_register |
4935 | cmp ah,16 |
4985 | test al,al |
4936 | jne invalid_operand_size |
- | |
4937 | test al,al |
- | |
4938 | jnz invalid_operand |
4986 | jnz invalid_operand |
4939 | additional_xmm0_ok: |
4987 | additional_xmm0_ok: |
4940 | ret |
4988 | ret |
4941 | 4989 | ||
Line 4942... | Line 4990... | ||
4942 | ps_dq_instruction: |
4990 | pslldq_instruction: |
4943 | mov [postbyte_register],al |
4991 | mov [postbyte_register],al |
4944 | mov [opcode_prefix],66h |
4992 | mov [opcode_prefix],66h |
4945 | mov [base_code],0Fh |
4993 | mov [base_code],0Fh |
4946 | mov [extended_code],73h |
4994 | mov [extended_code],73h |
4947 | lods byte [esi] |
4995 | lods byte [esi] |
4948 | call get_size_operator |
4996 | call get_size_operator |
4949 | cmp al,10h |
4997 | cmp al,10h |
4950 | jne invalid_operand |
4998 | jne invalid_operand |
4951 | lods byte [esi] |
4999 | lods byte [esi] |
4952 | call convert_mmx_register |
5000 | call convert_xmm_register |
4953 | cmp ah,16 |
- | |
4954 | jne invalid_operand_size |
- | |
4955 | mov bl,al |
5001 | mov bl,al |
4956 | jmp mmx_nomem_imm8 |
5002 | jmp mmx_nomem_imm8 |
4957 | movpd_instruction: |
5003 | movpd_instruction: |
4958 | mov [opcode_prefix],66h |
5004 | mov [opcode_prefix],66h |
4959 | movps_instruction: |
5005 | movps_instruction: |
Line 5002... | Line 5048... | ||
5002 | call get_size_operator |
5048 | call get_size_operator |
5003 | cmp al,10h |
5049 | cmp al,10h |
5004 | jne invalid_operand |
5050 | jne invalid_operand |
5005 | lods byte [esi] |
5051 | lods byte [esi] |
5006 | call convert_mmx_register |
5052 | call convert_xmm_register |
5007 | cmp ah,16 |
5053 | mov [postbyte_register],al |
5008 | jne invalid_operand_size |
- | |
5009 | mov [postbyte_register],al |
- | |
5010 | jmp instruction_ready |
5054 | jmp instruction_ready |
5011 | movlpd_instruction: |
5055 | movlpd_instruction: |
5012 | mov [opcode_prefix],66h |
5056 | mov [opcode_prefix],66h |
5013 | movlps_instruction: |
5057 | movlps_instruction: |
5014 | mov [base_code],0Fh |
5058 | mov [base_code],0Fh |
Line 5018... | Line 5062... | ||
5018 | call get_size_operator |
5062 | call get_size_operator |
5019 | cmp al,10h |
5063 | cmp al,10h |
5020 | jne sse_mem |
5064 | jne sse_mem |
5021 | lods byte [esi] |
5065 | lods byte [esi] |
5022 | call convert_mmx_register |
5066 | call convert_xmm_register |
5023 | cmp ah,16 |
5067 | mov [postbyte_register],al |
5024 | jne invalid_operand_size |
- | |
5025 | mov [postbyte_register],al |
- | |
5026 | mov [operand_size],0 |
5068 | mov [operand_size],0 |
5027 | lods byte [esi] |
5069 | lods byte [esi] |
5028 | cmp al,',' |
5070 | cmp al,',' |
5029 | jne invalid_operand |
5071 | jne invalid_operand |
5030 | lods byte [esi] |
5072 | lods byte [esi] |
Line 5038... | Line 5080... | ||
5038 | call get_size_operator |
5080 | call get_size_operator |
5039 | cmp al,10h |
5081 | cmp al,10h |
5040 | jne invalid_operand |
5082 | jne invalid_operand |
5041 | lods byte [esi] |
5083 | lods byte [esi] |
5042 | call convert_mmx_register |
5084 | call convert_xmm_register |
5043 | cmp ah,16 |
5085 | mov [postbyte_register],al |
5044 | jne invalid_operand_size |
- | |
5045 | mov [postbyte_register],al |
- | |
5046 | lods byte [esi] |
5086 | lods byte [esi] |
5047 | cmp al,',' |
5087 | cmp al,',' |
5048 | jne invalid_operand |
5088 | jne invalid_operand |
5049 | lods byte [esi] |
5089 | lods byte [esi] |
5050 | call get_size_operator |
5090 | call get_size_operator |
Line 5090... | Line 5130... | ||
5090 | cmp al,10h |
5130 | cmp al,10h |
5091 | jne invalid_operand |
5131 | jne invalid_operand |
5092 | lods byte [esi] |
5132 | lods byte [esi] |
5093 | call convert_register |
5133 | call convert_register |
5094 | cmp ah,4 |
5134 | mov [postbyte_register],al |
5095 | jne invalid_operand_size |
- | |
5096 | mov [operand_size],0 |
- | |
5097 | mov [postbyte_register],al |
- | |
5098 | lods byte [esi] |
5135 | cmp ah,4 |
5099 | cmp al,',' |
- | |
5100 | jne invalid_operand |
- | |
5101 | lods byte [esi] |
- | |
5102 | call get_size_operator |
- | |
5103 | cmp al,10h |
- | |
5104 | jne invalid_operand |
- | |
5105 | lods byte [esi] |
- | |
5106 | call convert_mmx_register |
- | |
5107 | cmp ah,16 |
- | |
5108 | jne invalid_operand_size |
5136 | je movmskps_reg_ok |
5109 | mov bl,al |
- | |
5110 | jmp nomem_instruction_ready |
- | |
5111 | cmppd_instruction: |
- | |
5112 | mov [opcode_prefix],66h |
- | |
5113 | cmpps_instruction: |
- | |
5114 | mov [base_code],0Fh |
- | |
5115 | mov [extended_code],0C2h |
- | |
5116 | mov [mmx_size],16 |
- | |
5117 | mov byte [value],-1 |
- | |
5118 | jmp sse_cmp_instruction |
- | |
5119 | cmp_pd_instruction: |
- | |
5120 | mov [opcode_prefix],66h |
- | |
5121 | cmp_ps_instruction: |
- | |
5122 | mov [base_code],0Fh |
- | |
5123 | mov [extended_code],0C2h |
- | |
5124 | mov [mmx_size],16 |
- | |
5125 | mov byte [value],al |
- | |
5126 | jmp sse_cmp_instruction |
- | |
5127 | cmpss_instruction: |
- | |
5128 | mov [mmx_size],4 |
- | |
5129 | mov [opcode_prefix],0F3h |
- | |
5130 | jmp cmpsx_instruction |
- | |
5131 | cmpsd_instruction: |
- | |
5132 | mov al,0A7h |
- | |
5133 | mov ah,[esi] |
- | |
5134 | or ah,ah |
- | |
5135 | jz simple_instruction_32bit |
- | |
5136 | cmp ah,0Fh |
- | |
5137 | je simple_instruction_32bit |
- | |
5138 | mov [mmx_size],8 |
- | |
5139 | mov [opcode_prefix],0F2h |
- | |
5140 | cmpsx_instruction: |
- | |
5141 | mov [base_code],0Fh |
- | |
5142 | mov [extended_code],0C2h |
- | |
5143 | mov byte [value],-1 |
- | |
5144 | jmp sse_cmp_instruction |
- | |
5145 | cmp_ss_instruction: |
- | |
5146 | mov [mmx_size],4 |
- | |
5147 | mov [opcode_prefix],0F3h |
- | |
5148 | jmp cmp_sx_instruction |
- | |
5149 | cmp_sd_instruction: |
- | |
5150 | mov [mmx_size],8 |
- | |
5151 | mov [opcode_prefix],0F2h |
- | |
5152 | cmp_sx_instruction: |
- | |
5153 | mov [base_code],0Fh |
- | |
5154 | mov [extended_code],0C2h |
- | |
5155 | mov byte [value],al |
- | |
5156 | sse_cmp_instruction: |
- | |
5157 | lods byte [esi] |
- | |
5158 | call get_size_operator |
- | |
5159 | cmp al,10h |
- | |
5160 | jne invalid_operand |
- | |
5161 | lods byte [esi] |
5137 | cmp ah,8 |
5162 | call convert_mmx_register |
- | |
5163 | cmp ah,16 |
- | |
5164 | jne invalid_operand_size |
5138 | jne invalid_operand_size |
5165 | mov [postbyte_register],al |
5139 | cmp [code_type],64 |
5166 | lods byte [esi] |
5140 | jne invalid_operand |
5167 | cmp al,',' |
- | |
5168 | jne invalid_operand |
- | |
5169 | mov [operand_size],0 |
5141 | movmskps_reg_ok: |
5170 | lods byte [esi] |
- | |
5171 | call get_size_operator |
- | |
5172 | cmp al,10h |
- | |
5173 | je sse_cmp_xmmreg_xmmreg |
- | |
5174 | cmp al,'[' |
- | |
5175 | jne invalid_operand |
- | |
5176 | call get_address |
- | |
5177 | mov al,[operand_size] |
- | |
5178 | or al,al |
- | |
5179 | jz sse_cmp_size_ok |
- | |
5180 | cmp al,[mmx_size] |
- | |
5181 | jne invalid_operand_size |
- | |
5182 | sse_cmp_size_ok: |
- | |
5183 | push ebx ecx edx |
5142 | mov [operand_size],0 |
5184 | call get_nextbyte |
- | |
5185 | pop edx ecx ebx |
- | |
5186 | call store_instruction_with_imm8 |
- | |
5187 | jmp instruction_assembled |
- | |
5188 | sse_cmp_xmmreg_xmmreg: |
- | |
5189 | lods byte [esi] |
- | |
5190 | call convert_mmx_register |
- | |
5191 | cmp ah,16 |
- | |
5192 | jne invalid_operand_size |
- | |
5193 | mov bl,al |
- | |
5194 | call store_nomem_instruction |
- | |
5195 | call get_nextbyte |
- | |
5196 | mov al,byte [value] |
- | |
5197 | stos byte [edi] |
- | |
5198 | jmp instruction_assembled |
- | |
5199 | get_nextbyte: |
- | |
5200 | cmp byte [value],-1 |
- | |
5201 | jne nextbyte_ok |
- | |
5202 | mov [operand_size],0 |
- | |
5203 | lods byte [esi] |
5143 | lods byte [esi] |
5204 | cmp al,',' |
5144 | cmp al,',' |
5205 | jne invalid_operand |
5145 | jne invalid_operand |
5206 | lods byte [esi] |
5146 | lods byte [esi] |
5207 | call get_size_operator |
5147 | call get_size_operator |
5208 | test [operand_size],not 1 |
5148 | cmp al,10h |
5209 | jnz invalid_value |
- | |
5210 | cmp al,'(' |
- | |
5211 | jne invalid_operand |
5149 | je sse_xmmreg_xmmreg_ok |
5212 | call get_byte_value |
5150 | jmp invalid_operand |
5213 | cmp al,7 |
- | |
5214 | ja invalid_value |
- | |
5215 | mov byte [value],al |
5151 | |
5216 | nextbyte_ok: |
- | |
5217 | ret |
- | |
5218 | cvtpi2pd_instruction: |
5152 | cvtpi2pd_instruction: |
5219 | mov [opcode_prefix],66h |
5153 | mov [opcode_prefix],66h |
5220 | cvtpi2ps_instruction: |
5154 | cvtpi2ps_instruction: |
5221 | mov [base_code],0Fh |
5155 | mov [base_code],0Fh |
5222 | mov [extended_code],al |
5156 | mov [extended_code],al |
5223 | lods byte [esi] |
5157 | lods byte [esi] |
5224 | call get_size_operator |
5158 | call get_size_operator |
5225 | cmp al,10h |
5159 | cmp al,10h |
5226 | jne invalid_operand |
5160 | jne invalid_operand |
5227 | lods byte [esi] |
5161 | lods byte [esi] |
5228 | call convert_mmx_register |
5162 | call convert_xmm_register |
5229 | cmp ah,16 |
5163 | mov [postbyte_register],al |
5230 | jne invalid_operand_size |
- | |
5231 | mov [postbyte_register],al |
- | |
5232 | mov [operand_size],0 |
5164 | mov [operand_size],0 |
5233 | lods byte [esi] |
5165 | lods byte [esi] |
5234 | cmp al,',' |
5166 | cmp al,',' |
5235 | jne invalid_operand |
5167 | jne invalid_operand |
5236 | lods byte [esi] |
5168 | lods byte [esi] |
Line 5265... | Line 5197... | ||
5265 | call get_size_operator |
5197 | call get_size_operator |
5266 | cmp al,10h |
5198 | cmp al,10h |
5267 | jne invalid_operand |
5199 | jne invalid_operand |
5268 | lods byte [esi] |
5200 | lods byte [esi] |
5269 | call convert_mmx_register |
5201 | call convert_xmm_register |
5270 | cmp ah,16 |
5202 | mov [postbyte_register],al |
5271 | jne invalid_operand_size |
- | |
5272 | mov [postbyte_register],al |
- | |
5273 | mov [operand_size],0 |
5203 | cvtsi_xmmreg: |
- | 5204 | mov [operand_size],0 |
|
5274 | lods byte [esi] |
5205 | lods byte [esi] |
5275 | cmp al,',' |
5206 | cmp al,',' |
5276 | jne invalid_operand |
5207 | jne invalid_operand |
5277 | lods byte [esi] |
5208 | lods byte [esi] |
5278 | call get_size_operator |
5209 | call get_size_operator |
Line 5283... | Line 5214... | ||
5283 | call get_address |
5214 | call get_address |
5284 | cmp [operand_size],0 |
5215 | cmp [operand_size],0 |
5285 | je cvtsi_size_ok |
5216 | je cvtsi_size_ok |
5286 | cmp [operand_size],4 |
5217 | cmp [operand_size],4 |
5287 | jne invalid_operand_size |
5218 | je cvtsi_size_ok |
- | 5219 | cmp [operand_size],8 |
|
- | 5220 | jne invalid_operand_size |
|
5288 | cvtsi_size_ok: |
5221 | call operand_64bit |
- | 5222 | cvtsi_size_ok: |
|
5289 | jmp instruction_ready |
5223 | jmp instruction_ready |
5290 | cvtsi_xmmreg_reg: |
5224 | cvtsi_xmmreg_reg: |
5291 | lods byte [esi] |
5225 | lods byte [esi] |
5292 | call convert_register |
5226 | call convert_register |
5293 | cmp ah,4 |
5227 | cmp ah,4 |
Line 5411... | Line 5345... | ||
5411 | jmp instruction_assembled |
5345 | jmp instruction_assembled |
5412 | 5346 | ||
Line 5413... | Line 5347... | ||
5413 | sse4_instruction_38_xmm0: |
5347 | sse4_instruction_38_xmm0: |
5414 | mov [immediate_size],-1 |
5348 | mov [immediate_size],-1 |
5415 | jmp sse4_instruction_38 |
- | |
5416 | sse4_instruction_38_imm8: |
- | |
5417 | mov [immediate_size],1 |
- | |
5418 | sse4_instruction_38: |
5349 | sse4_instruction_38: |
5419 | mov [mmx_size],16 |
5350 | mov [mmx_size],16 |
5420 | mov [opcode_prefix],66h |
5351 | mov [opcode_prefix],66h |
5421 | mov [base_code],0Fh |
- | |
5422 | mov [supplemental_code],al |
5352 | mov [supplemental_code],al |
5423 | mov al,38h |
5353 | mov al,38h |
5424 | jmp sse_instruction |
5354 | jmp sse_instruction |
5425 | sse4_ss_instruction_3a_imm8: |
5355 | sse4_ss_instruction_3a_imm8: |
5426 | mov [immediate_size],1 |
5356 | mov [immediate_size],1 |
Line 5431... | Line 5361... | ||
5431 | mov [mmx_size],8 |
5361 | mov [mmx_size],8 |
5432 | jmp sse4_instruction_3a_setup |
5362 | jmp sse4_instruction_3a_setup |
5433 | sse4_instruction_3a_imm8: |
5363 | sse4_instruction_3a_imm8: |
5434 | mov [immediate_size],1 |
5364 | mov [immediate_size],1 |
5435 | sse4_instruction_3a: |
5365 | mov [mmx_size],16 |
5436 | mov [mmx_size],16 |
- | |
5437 | sse4_instruction_3a_setup: |
5366 | sse4_instruction_3a_setup: |
5438 | mov [opcode_prefix],66h |
5367 | mov [opcode_prefix],66h |
5439 | mov [base_code],0Fh |
5368 | mov [supplemental_code],al |
5440 | mov [supplemental_code],al |
- | |
5441 | mov al,3Ah |
5369 | mov al,3Ah |
5442 | jmp sse_instruction |
5370 | jmp sse_instruction |
5443 | extractps_instruction: |
5371 | pclmulqdq_instruction: |
- | 5372 | mov byte [value],al |
|
- | 5373 | mov [mmx_size],16 |
|
- | 5374 | mov al,44h |
|
- | 5375 | jmp sse4_instruction_3a_setup |
|
- | 5376 | extractps_instruction: |
|
5444 | mov [opcode_prefix],66h |
5377 | mov [opcode_prefix],66h |
5445 | mov [base_code],0Fh |
5378 | mov [base_code],0Fh |
5446 | mov [extended_code],3Ah |
5379 | mov [extended_code],3Ah |
5447 | mov [supplemental_code],17h |
5380 | mov [supplemental_code],17h |
5448 | lods byte [esi] |
5381 | lods byte [esi] |
Line 5466... | Line 5399... | ||
5466 | call get_size_operator |
5399 | call get_size_operator |
5467 | cmp al,10h |
5400 | cmp al,10h |
5468 | jne invalid_operand |
5401 | jne invalid_operand |
5469 | lods byte [esi] |
5402 | lods byte [esi] |
5470 | call convert_mmx_register |
5403 | call convert_xmm_register |
5471 | cmp ah,16 |
5404 | mov [postbyte_register],al |
5472 | jne invalid_operand_size |
- | |
5473 | mov [postbyte_register],al |
- | |
5474 | pop ecx ebx edx |
5405 | pop ecx ebx edx |
5475 | jmp mmx_imm8 |
5406 | jmp mmx_imm8 |
5476 | extractps_reg: |
5407 | extractps_reg: |
5477 | lods byte [esi] |
5408 | lods byte [esi] |
5478 | call convert_register |
5409 | call convert_register |
Line 5485... | Line 5416... | ||
5485 | call get_size_operator |
5416 | call get_size_operator |
5486 | cmp al,10h |
5417 | cmp al,10h |
5487 | jne invalid_operand |
5418 | jne invalid_operand |
5488 | lods byte [esi] |
5419 | lods byte [esi] |
5489 | call convert_mmx_register |
5420 | call convert_xmm_register |
5490 | cmp ah,16 |
5421 | mov [postbyte_register],al |
5491 | jne invalid_operand_size |
- | |
5492 | mov [postbyte_register],al |
- | |
5493 | pop ebx |
5422 | pop ebx |
5494 | mov al,bh |
5423 | mov al,bh |
5495 | cmp al,4 |
5424 | cmp al,4 |
5496 | je mmx_nomem_imm8 |
5425 | je mmx_nomem_imm8 |
5497 | cmp al,8 |
5426 | cmp al,8 |
5498 | jne invalid_operand_size |
5427 | jne invalid_operand_size |
5499 | call operand_64bit |
5428 | call operand_64bit |
5500 | jmp mmx_nomem_imm8 |
5429 | jmp mmx_nomem_imm8 |
5501 | insertps_instruction: |
5430 | insertps_instruction: |
5502 | mov [opcode_prefix],66h |
5431 | lods byte [esi] |
5503 | mov [base_code],0Fh |
- | |
5504 | mov [extended_code],3Ah |
- | |
5505 | mov [supplemental_code],21h |
- | |
5506 | lods byte [esi] |
- | |
5507 | call get_size_operator |
5432 | call get_size_operator |
5508 | cmp al,10h |
5433 | cmp al,10h |
5509 | jne invalid_operand |
5434 | jne invalid_operand |
5510 | lods byte [esi] |
5435 | lods byte [esi] |
5511 | call convert_mmx_register |
5436 | call convert_xmm_register |
5512 | cmp ah,16 |
5437 | mov [postbyte_register],al |
5513 | jne invalid_operand_size |
- | |
5514 | mov [postbyte_register],al |
- | |
5515 | mov [operand_size],0 |
5438 | insertps_xmmreg: |
- | 5439 | mov [opcode_prefix],66h |
|
- | 5440 | mov [base_code],0Fh |
|
- | 5441 | mov [extended_code],3Ah |
|
- | 5442 | mov [supplemental_code],21h |
|
- | 5443 | mov [operand_size],0 |
|
5516 | lods byte [esi] |
5444 | lods byte [esi] |
5517 | cmp al,',' |
5445 | cmp al,',' |
5518 | jne invalid_operand |
5446 | jne invalid_operand |
5519 | lods byte [esi] |
5447 | lods byte [esi] |
5520 | call get_size_operator |
5448 | call get_size_operator |
5521 | cmp al,10h |
5449 | cmp al,10h |
5522 | je insertps_reg |
5450 | je insertps_xmmreg_reg |
5523 | cmp al,'[' |
5451 | cmp al,'[' |
5524 | jne invalid_operand |
5452 | jne invalid_operand |
5525 | call get_address |
5453 | call get_address |
5526 | cmp [operand_size],4 |
5454 | cmp [operand_size],4 |
5527 | je insertps_size_ok |
5455 | je insertps_size_ok |
5528 | cmp [operand_size],0 |
5456 | cmp [operand_size],0 |
5529 | jne invalid_operand_size |
5457 | jne invalid_operand_size |
5530 | insertps_size_ok: |
5458 | insertps_size_ok: |
5531 | jmp mmx_imm8 |
5459 | jmp mmx_imm8 |
5532 | insertps_reg: |
5460 | insertps_xmmreg_reg: |
5533 | lods byte [esi] |
5461 | lods byte [esi] |
5534 | call convert_mmx_register |
5462 | call convert_mmx_register |
5535 | mov bl,al |
5463 | mov bl,al |
5536 | jmp mmx_nomem_imm8 |
5464 | jmp mmx_nomem_imm8 |
5537 | pextrq_instruction: |
5465 | pextrq_instruction: |
5538 | mov [mmx_size],8 |
5466 | mov [mmx_size],8 |
Line 5562... | Line 5490... | ||
5562 | je pextr_size_ok |
5490 | je pextr_size_ok |
5563 | cmp [operand_size],0 |
5491 | cmp [operand_size],0 |
5564 | jne invalid_operand_size |
5492 | jne invalid_operand_size |
5565 | pextr_size_ok: |
5493 | pextr_size_ok: |
5566 | push edx ebx ecx |
5494 | cmp al,8 |
- | 5495 | jne pextr_prefix_ok |
|
- | 5496 | call operand_64bit |
|
- | 5497 | pextr_prefix_ok: |
|
- | 5498 | push edx ebx ecx |
|
5567 | mov [operand_size],0 |
5499 | mov [operand_size],0 |
5568 | lods byte [esi] |
5500 | lods byte [esi] |
5569 | cmp al,',' |
5501 | cmp al,',' |
5570 | jne invalid_operand |
5502 | jne invalid_operand |
5571 | lods byte [esi] |
5503 | lods byte [esi] |
5572 | call get_size_operator |
5504 | call get_size_operator |
5573 | cmp al,10h |
5505 | cmp al,10h |
5574 | jne invalid_operand |
5506 | jne invalid_operand |
5575 | lods byte [esi] |
5507 | lods byte [esi] |
5576 | call convert_mmx_register |
5508 | call convert_xmm_register |
5577 | cmp ah,16 |
5509 | mov [postbyte_register],al |
5578 | jne invalid_operand_size |
- | |
5579 | mov [postbyte_register],al |
- | |
5580 | pop ecx ebx edx |
5510 | pop ecx ebx edx |
5581 | jmp mmx_imm8 |
5511 | jmp mmx_imm8 |
5582 | pextr_reg: |
5512 | pextr_reg: |
5583 | lods byte [esi] |
5513 | lods byte [esi] |
5584 | call convert_register |
5514 | call convert_register |
Line 5631... | Line 5561... | ||
5631 | mov [mmx_size],4 |
5561 | mov [mmx_size],4 |
5632 | jmp pinsr_instruction |
5562 | jmp pinsr_instruction |
5633 | pinsrq_instruction: |
5563 | pinsrq_instruction: |
5634 | mov [mmx_size],8 |
5564 | mov [mmx_size],8 |
5635 | jmp pinsr_instruction |
5565 | call operand_64bit |
5636 | pinsr_instruction: |
5566 | pinsr_instruction: |
5637 | mov [opcode_prefix],66h |
5567 | mov [opcode_prefix],66h |
5638 | mov [base_code],0Fh |
5568 | mov [base_code],0Fh |
5639 | mov [extended_code],3Ah |
5569 | mov [extended_code],3Ah |
5640 | mov [supplemental_code],al |
5570 | mov [supplemental_code],al |
5641 | lods byte [esi] |
5571 | lods byte [esi] |
5642 | call get_size_operator |
5572 | call get_size_operator |
5643 | cmp al,10h |
5573 | cmp al,10h |
5644 | jne invalid_operand |
5574 | jne invalid_operand |
5645 | lods byte [esi] |
5575 | lods byte [esi] |
5646 | call convert_mmx_register |
5576 | call convert_xmm_register |
5647 | cmp ah,16 |
5577 | mov [postbyte_register],al |
5648 | jne invalid_operand_size |
- | |
5649 | mov [postbyte_register],al |
- | |
5650 | mov [operand_size],0 |
5578 | pinsr_xmmreg: |
- | 5579 | mov [operand_size],0 |
|
5651 | lods byte [esi] |
5580 | lods byte [esi] |
5652 | cmp al,',' |
5581 | cmp al,',' |
5653 | jne invalid_operand |
5582 | jne invalid_operand |
5654 | lods byte [esi] |
5583 | lods byte [esi] |
5655 | call get_size_operator |
5584 | call get_size_operator |
Line 5703... | Line 5632... | ||
5703 | call get_size_operator |
5632 | call get_size_operator |
5704 | cmp al,10h |
5633 | cmp al,10h |
5705 | jne invalid_operand |
5634 | jne invalid_operand |
5706 | lods byte [esi] |
5635 | lods byte [esi] |
5707 | call convert_mmx_register |
5636 | call convert_xmm_register |
5708 | cmp ah,16 |
5637 | mov [postbyte_register],al |
5709 | jne invalid_operand_size |
- | |
5710 | mov [postbyte_register],al |
- | |
5711 | lods byte [esi] |
5638 | lods byte [esi] |
5712 | cmp al,',' |
5639 | cmp al,',' |
5713 | jne invalid_operand |
5640 | jne invalid_operand |
5714 | mov [operand_size],0 |
5641 | mov [operand_size],0 |
5715 | lods byte [esi] |
5642 | lods byte [esi] |
Line 5726... | Line 5653... | ||
5726 | jne invalid_operand_size |
5653 | jne invalid_operand_size |
5727 | jmp instruction_ready |
5654 | jmp instruction_ready |
5728 | pmovsx_xmmreg_reg: |
5655 | pmovsx_xmmreg_reg: |
5729 | lods byte [esi] |
5656 | lods byte [esi] |
5730 | call convert_mmx_register |
5657 | call convert_xmm_register |
5731 | cmp ah,16 |
5658 | mov bl,al |
5732 | jne invalid_operand_size |
- | |
5733 | mov bl,al |
- | |
5734 | jmp nomem_instruction_ready |
5659 | jmp nomem_instruction_ready |
5735 | 5660 | ||
Line -... | Line 5661... | ||
- | 5661 | fxsave_instruction_64bit: |
|
- | 5662 | call operand_64bit |
|
5736 | fxsave_instruction: |
5663 | fxsave_instruction: |
5737 | mov [extended_code],0AEh |
5664 | mov [extended_code],0AEh |
5738 | mov [base_code],0Fh |
5665 | mov [base_code],0Fh |
5739 | mov [postbyte_register],al |
5666 | mov [postbyte_register],al |
5740 | lods byte [esi] |
5667 | lods byte [esi] |
Line 5792... | Line 5719... | ||
5792 | jmp instruction_assembled |
5719 | jmp instruction_assembled |
5793 | movntq_instruction: |
5720 | movntq_instruction: |
5794 | mov [mmx_size],8 |
5721 | mov [mmx_size],8 |
5795 | jmp movnt_instruction |
5722 | jmp movnt_instruction |
5796 | movntps_instruction: |
5723 | movntpd_instruction: |
5797 | mov [mmx_size],16 |
5724 | mov [opcode_prefix],66h |
5798 | jmp movnt_instruction |
- | |
5799 | movntdq_instruction: |
- | |
5800 | mov [opcode_prefix],66h |
- | |
5801 | mov [mmx_size],16 |
5725 | movntps_instruction: |
- | 5726 | mov [mmx_size],16 |
|
5802 | movnt_instruction: |
5727 | movnt_instruction: |
5803 | mov [extended_code],al |
5728 | mov [extended_code],al |
5804 | mov [base_code],0Fh |
5729 | mov [base_code],0Fh |
5805 | lods byte [esi] |
5730 | lods byte [esi] |
5806 | call get_size_operator |
5731 | call get_size_operator |
Line 5850... | Line 5775... | ||
5850 | call get_size_operator |
5775 | call get_size_operator |
5851 | cmp al,10h |
5776 | cmp al,10h |
5852 | jne invalid_operand |
5777 | jne invalid_operand |
5853 | lods byte [esi] |
5778 | lods byte [esi] |
5854 | call convert_mmx_register |
5779 | call convert_xmm_register |
5855 | cmp ah,16 |
5780 | mov [postbyte_register],al |
5856 | jne invalid_operand_size |
- | |
5857 | mov [postbyte_register],al |
- | |
5858 | jmp instruction_ready |
5781 | jmp instruction_ready |
5859 | 5782 | ||
Line 5860... | Line 5783... | ||
5860 | movnti_instruction: |
5783 | movnti_instruction: |
5861 | mov [base_code],0Fh |
5784 | mov [base_code],0Fh |
Line 5935... | Line 5858... | ||
5935 | call get_size_operator |
5858 | call get_size_operator |
5936 | cmp al,10h |
5859 | cmp al,10h |
5937 | jne invalid_operand |
5860 | jne invalid_operand |
5938 | lods byte [esi] |
5861 | lods byte [esi] |
5939 | call convert_mmx_register |
5862 | call convert_xmm_register |
5940 | cmp ah,16 |
5863 | mov [postbyte_register],al |
5941 | jne invalid_operand_size |
- | |
5942 | mov [postbyte_register],al |
- | |
5943 | lods byte [esi] |
5864 | lods byte [esi] |
5944 | cmp al,',' |
5865 | cmp al,',' |
5945 | jne invalid_operand |
5866 | jne invalid_operand |
5946 | lods byte [esi] |
5867 | lods byte [esi] |
5947 | call get_size_operator |
5868 | call get_size_operator |
Line 5958... | Line 5879... | ||
5958 | call get_size_operator |
5879 | call get_size_operator |
5959 | cmp al,10h |
5880 | cmp al,10h |
5960 | jne invalid_operand |
5881 | jne invalid_operand |
5961 | lods byte [esi] |
5882 | lods byte [esi] |
5962 | call convert_mmx_register |
5883 | call convert_xmm_register |
5963 | cmp ah,16 |
5884 | mov [postbyte_register],al |
5964 | jne invalid_operand_size |
- | |
5965 | mov [postbyte_register],al |
- | |
5966 | mov [operand_size],0 |
5885 | mov [operand_size],0 |
5967 | lods byte [esi] |
5886 | lods byte [esi] |
5968 | cmp al,',' |
5887 | cmp al,',' |
5969 | jne invalid_operand |
5888 | jne invalid_operand |
5970 | lods byte [esi] |
5889 | lods byte [esi] |
Line 5984... | Line 5903... | ||
5984 | jmp instruction_assembled |
5903 | jmp instruction_assembled |
5985 | extrq_xmmreg_xmmreg: |
5904 | extrq_xmmreg_xmmreg: |
5986 | inc [extended_code] |
5905 | inc [extended_code] |
5987 | lods byte [esi] |
5906 | lods byte [esi] |
5988 | call convert_mmx_register |
5907 | call convert_xmm_register |
5989 | cmp ah,16 |
5908 | mov bl,al |
5990 | jne invalid_operand_size |
- | |
5991 | mov bl,al |
- | |
5992 | jmp nomem_instruction_ready |
5909 | jmp nomem_instruction_ready |
5993 | insertq_instruction: |
5910 | insertq_instruction: |
5994 | mov [opcode_prefix],0F2h |
5911 | mov [opcode_prefix],0F2h |
5995 | mov [base_code],0Fh |
5912 | mov [base_code],0Fh |
5996 | mov [extended_code],78h |
5913 | mov [extended_code],78h |
Line 5998... | Line 5915... | ||
5998 | call get_size_operator |
5915 | call get_size_operator |
5999 | cmp al,10h |
5916 | cmp al,10h |
6000 | jne invalid_operand |
5917 | jne invalid_operand |
6001 | lods byte [esi] |
5918 | lods byte [esi] |
6002 | call convert_mmx_register |
5919 | call convert_xmm_register |
6003 | cmp ah,16 |
5920 | mov [postbyte_register],al |
6004 | jne invalid_operand_size |
- | |
6005 | mov [postbyte_register],al |
- | |
6006 | mov [operand_size],0 |
5921 | mov [operand_size],0 |
6007 | lods byte [esi] |
5922 | lods byte [esi] |
6008 | cmp al,',' |
5923 | cmp al,',' |
6009 | jne invalid_operand |
5924 | jne invalid_operand |
6010 | lods byte [esi] |
5925 | lods byte [esi] |
6011 | call get_size_operator |
5926 | call get_size_operator |
6012 | cmp al,10h |
5927 | cmp al,10h |
6013 | jne invalid_operand |
5928 | jne invalid_operand |
6014 | lods byte [esi] |
5929 | lods byte [esi] |
6015 | call convert_mmx_register |
5930 | call convert_xmm_register |
6016 | cmp ah,16 |
5931 | mov bl,al |
6017 | jne invalid_operand_size |
- | |
6018 | mov bl,al |
- | |
6019 | cmp byte [esi],',' |
5932 | cmp byte [esi],',' |
6020 | je insertq_with_imm |
5933 | je insertq_with_imm |
6021 | inc [extended_code] |
5934 | inc [extended_code] |
6022 | jmp nomem_instruction_ready |
5935 | jmp nomem_instruction_ready |
6023 | insertq_with_imm: |
5936 | insertq_with_imm: |
Line 6138... | Line 6051... | ||
6138 | cmp al,',' |
6051 | cmp al,',' |
6139 | jne invalid_operand |
6052 | jne invalid_operand |
6140 | lods byte [esi] |
6053 | lods byte [esi] |
6141 | call get_size_operator |
6054 | call get_size_operator |
6142 | ; cmp al,10h |
6055 | cmp al,'[' |
6143 | ; je movbe_reg_reg |
- | |
6144 | cmp al,'[' |
- | |
6145 | jne invalid_argument |
6056 | jne invalid_argument |
6146 | call get_address |
6057 | call get_address |
6147 | mov al,[operand_size] |
6058 | mov al,[operand_size] |
6148 | call operand_autodetect |
6059 | call operand_autodetect |
6149 | jmp instruction_ready |
6060 | jmp instruction_ready |
6150 | ; movbe_reg_reg: |
6061 | movbe_mem: |
6151 | ; lods byte [esi] |
- | |
6152 | ; call convert_register |
- | |
6153 | ; mov bl,al |
- | |
6154 | ; mov al,ah |
- | |
6155 | ; call operand_autodetect |
- | |
6156 | ; jmp nomem_instruction_ready |
- | |
6157 | movbe_mem: |
- | |
6158 | inc [supplemental_code] |
6062 | inc [supplemental_code] |
6159 | call get_address |
6063 | call get_address |
6160 | push edx ebx ecx |
6064 | push edx ebx ecx |
6161 | lods byte [esi] |
6065 | lods byte [esi] |
6162 | cmp al,',' |
6066 | cmp al,',' |
Line 6380... | Line 6284... | ||
6380 | jne invalid_operand |
6284 | jne invalid_operand |
6381 | mov ah,bl |
6285 | mov ah,bl |
6382 | jmp simple_svm_detect_size |
6286 | jmp simple_svm_detect_size |
6383 | 6287 | ||
Line -... | Line 6288... | ||
- | 6288 | rdrand_instruction: |
|
- | 6289 | mov [base_code],0Fh |
|
- | 6290 | mov [extended_code],0C7h |
|
- | 6291 | mov [postbyte_register],al |
|
- | 6292 | lods byte [esi] |
|
- | 6293 | call get_size_operator |
|
- | 6294 | cmp al,10h |
|
- | 6295 | jne invalid_operand |
|
- | 6296 | lods byte [esi] |
|
- | 6297 | call convert_register |
|
- | 6298 | mov bl,al |
|
- | 6299 | mov al,ah |
|
- | 6300 | call operand_autodetect |
|
- | 6301 | jmp nomem_instruction_ready |
|
- | 6302 | rdfsbase_instruction: |
|
- | 6303 | mov [opcode_prefix],0F3h |
|
- | 6304 | mov [base_code],0Fh |
|
- | 6305 | mov [extended_code],0AEh |
|
- | 6306 | mov [postbyte_register],al |
|
- | 6307 | lods byte [esi] |
|
- | 6308 | call get_size_operator |
|
- | 6309 | cmp al,10h |
|
- | 6310 | jne invalid_operand |
|
- | 6311 | lods byte [esi] |
|
- | 6312 | call convert_register |
|
- | 6313 | mov bl,al |
|
- | 6314 | mov al,ah |
|
- | 6315 | cmp ah,2 |
|
- | 6316 | je invalid_operand_size |
|
- | 6317 | call operand_autodetect |
|
- | 6318 | jmp nomem_instruction_ready |
|
- | 6319 | ||
6384 | convert_register: |
6320 | convert_register: |
6385 | mov ah,al |
6321 | mov ah,al |
6386 | shr ah,4 |
6322 | shr ah,4 |
6387 | and al,0Fh |
6323 | and al,0Fh |
6388 | cmp ah,8 |
6324 | cmp ah,8 |
Line 6424... | Line 6360... | ||
6424 | and al,111b |
6360 | and al,111b |
6425 | cmp ah,0Bh |
6361 | cmp ah,0Bh |
6426 | jne invalid_operand |
6362 | jne invalid_operand |
6427 | mov ah,8 |
6363 | mov ah,8 |
6428 | jmp match_register_size |
6364 | cmp [vex_required],0 |
- | 6365 | jne invalid_operand |
|
- | 6366 | jmp match_register_size |
|
6429 | xmm_register: |
6367 | xmm_register: |
6430 | and al,0Fh |
6368 | and al,0Fh |
6431 | mov ah,16 |
6369 | mov ah,16 |
6432 | cmp al,8 |
6370 | cmp al,8 |
6433 | jb match_register_size |
6371 | jb match_register_size |
6434 | cmp [code_type],64 |
6372 | cmp [code_type],64 |
6435 | jne invalid_operand |
6373 | jne invalid_operand |
6436 | jmp match_register_size |
6374 | jmp match_register_size |
6437 | get_size_operator: |
6375 | convert_xmm_register: |
- | 6376 | mov ah,al |
|
- | 6377 | shr ah,4 |
|
- | 6378 | cmp ah,0Ch |
|
- | 6379 | je xmm_register |
|
- | 6380 | jmp invalid_operand |
|
- | 6381 | get_size_operator: |
|
6438 | xor ah,ah |
6382 | xor ah,ah |
6439 | cmp al,11h |
6383 | cmp al,11h |
6440 | jne no_size_operator |
6384 | jne no_size_operator |
6441 | mov [size_declared],1 |
6385 | mov [size_declared],1 |
6442 | lods word [esi] |
6386 | lods word [esi] |
Line 6551... | Line 6495... | ||
6551 | store_segment_prefix_if_necessary: |
6495 | store_segment_prefix_if_necessary: |
6552 | mov al,[segment_register] |
6496 | mov al,[segment_register] |
6553 | or al,al |
6497 | or al,al |
6554 | jz segment_prefix_ok |
6498 | jz segment_prefix_ok |
6555 | cmp al,3 |
6499 | cmp al,4 |
6556 | je ss_prefix |
- | |
6557 | cmp al,4 |
- | |
6558 | ja segment_prefix_386 |
6500 | ja segment_prefix_386 |
6559 | jb segment_prefix_86 |
6501 | cmp [code_type],64 |
- | 6502 | je segment_prefix_ok |
|
- | 6503 | cmp al,3 |
|
- | 6504 | je ss_prefix |
|
- | 6505 | jb segment_prefix_86 |
|
6560 | cmp bl,25h |
6506 | cmp bl,25h |
6561 | je segment_prefix_86 |
6507 | je segment_prefix_86 |
6562 | cmp bh,25h |
6508 | cmp bh,25h |
6563 | je segment_prefix_86 |
6509 | je segment_prefix_86 |
6564 | cmp bh,45h |
6510 | cmp bh,45h |
Line 6593... | Line 6539... | ||
6593 | stos byte [edi] |
6539 | stos byte [edi] |
6594 | segment_prefix_ok: |
6540 | segment_prefix_ok: |
6595 | ret |
6541 | ret |
6596 | store_instruction_code: |
6542 | store_instruction_code: |
6597 | mov al,[operand_prefix] |
6543 | cmp [vex_required],0 |
- | 6544 | jne store_vex_instruction_code |
|
- | 6545 | mov al,[operand_prefix] |
|
6598 | or al,al |
6546 | or al,al |
6599 | jz operand_prefix_ok |
6547 | jz operand_prefix_ok |
6600 | stos byte [edi] |
6548 | stos byte [edi] |
6601 | operand_prefix_ok: |
6549 | operand_prefix_ok: |
6602 | mov al,[opcode_prefix] |
6550 | mov al,[opcode_prefix] |
Line 6654... | Line 6602... | ||
6654 | jz reg_code_ok |
6602 | jz reg_code_ok |
6655 | or [rex_prefix],44h |
6603 | or [rex_prefix],44h |
6656 | and [postbyte_register],111b |
6604 | and [postbyte_register],111b |
6657 | reg_code_ok: |
6605 | reg_code_ok: |
6658 | call store_segment_prefix_if_necessary |
6606 | cmp [code_type],64 |
- | 6607 | jne address_value_ok |
|
- | 6608 | xor eax,eax |
|
- | 6609 | bt edx,31 |
|
- | 6610 | sbb eax,[address_high] |
|
- | 6611 | jz address_value_ok |
|
- | 6612 | cmp [address_high],0 |
|
- | 6613 | jne address_value_out_of_range |
|
- | 6614 | test ch,44h |
|
- | 6615 | jnz address_value_ok |
|
- | 6616 | test bx,8080h |
|
- | 6617 | jz address_value_ok |
|
- | 6618 | address_value_out_of_range: |
|
- | 6619 | cmp [error_line],0 |
|
- | 6620 | jne address_value_ok |
|
- | 6621 | mov edx,[current_line] |
|
- | 6622 | mov [error_line],edx |
|
- | 6623 | mov [error],value_out_of_range |
|
- | 6624 | address_value_ok: |
|
- | 6625 | call store_segment_prefix_if_necessary |
|
6659 | or bx,bx |
6626 | or bx,bx |
6660 | jz address_immediate |
6627 | jz address_immediate |
6661 | cmp bx,0F800h |
6628 | cmp bx,0F800h |
6662 | je address_rip_based |
6629 | je address_rip_based |
6663 | cmp bx,0F400h |
6630 | cmp bx,0F400h |
Line 6772... | Line 6739... | ||
6772 | cmp [code_type],64 |
6739 | cmp [code_type],64 |
6773 | jne invalid_address_size |
6740 | jne invalid_address_size |
6774 | address_prefix_ok: |
6741 | address_prefix_ok: |
6775 | cmp bl,44h |
6742 | cmp bl,44h |
6776 | je swap_base_with_index |
6743 | je invalid_address |
6777 | cmp bl,84h |
- | |
6778 | jne base_register_ok |
- | |
6779 | swap_base_with_index: |
- | |
6780 | cmp cl,1 |
- | |
6781 | jne invalid_address |
- | |
6782 | xchg bl,bh |
- | |
6783 | cmp bl,44h |
- | |
6784 | je invalid_address |
- | |
6785 | cmp bl,84h |
6744 | cmp bl,84h |
6786 | je invalid_address |
6745 | je invalid_address |
6787 | base_register_ok: |
6746 | test bh,1000b |
6788 | test bh,1000b |
- | |
6789 | jz base_code_ok |
6747 | jz base_code_ok |
6790 | or [rex_prefix],41h |
6748 | or [rex_prefix],41h |
6791 | base_code_ok: |
6749 | base_code_ok: |
6792 | test bl,1000b |
6750 | test bl,1000b |
6793 | jz index_code_ok |
6751 | jz index_code_ok |
Line 6840... | Line 6798... | ||
6840 | mov cl,[postbyte_register] |
6798 | mov cl,[postbyte_register] |
6841 | shl cl,3 |
6799 | shl cl,3 |
6842 | or al,cl |
6800 | or al,cl |
6843 | stos word [edi] |
6801 | stos word [edi] |
6844 | address_32bit_value: |
6802 | jmp store_address_32bit_value |
6845 | cmp [code_type],64 |
- | |
6846 | jne store_address_32bit_value |
- | |
6847 | mov eax,edx |
- | |
6848 | cdq |
- | |
6849 | cmp edx,[address_high] |
- | |
6850 | je address_32bit_value_ok |
- | |
6851 | cmp [error_line],0 |
- | |
6852 | jne address_32bit_value_ok |
- | |
6853 | mov edx,[current_line] |
- | |
6854 | mov [error_line],edx |
- | |
6855 | mov [error],value_out_of_range |
- | |
6856 | address_32bit_value_ok: |
- | |
6857 | mov edx,eax |
- | |
6858 | jmp store_address_32bit_value |
- | |
6859 | sib_address_8bit_value: |
6803 | sib_address_8bit_value: |
6860 | or al,01000000b |
6804 | or al,01000000b |
6861 | mov cl,[postbyte_register] |
6805 | mov cl,[postbyte_register] |
6862 | shl cl,3 |
6806 | shl cl,3 |
6863 | or al,cl |
6807 | or al,cl |
Line 6884... | Line 6828... | ||
6884 | shl cl,3 |
6828 | shl cl,3 |
6885 | or al,cl |
6829 | or al,cl |
6886 | stos word [edi] |
6830 | stos word [edi] |
6887 | test ch,44h |
6831 | test ch,44h |
6888 | jnz address_32bit_value |
6832 | jnz store_address_32bit_value |
6889 | test ch,88h |
6833 | test ch,88h |
6890 | jnz address_32bit_value |
6834 | jnz store_address_32bit_value |
6891 | or ch,ch |
6835 | or ch,ch |
6892 | jnz invalid_address_size |
6836 | jnz invalid_address_size |
6893 | jmp address_32bit_value |
6837 | jmp store_address_32bit_value |
6894 | zero_index_register: |
6838 | zero_index_register: |
6895 | mov bl,4 |
6839 | mov bl,4 |
6896 | mov cl,1 |
6840 | mov cl,1 |
6897 | jmp base_and_index |
6841 | jmp base_and_index |
6898 | only_base_register: |
6842 | only_base_register: |
6899 | mov al,bh |
6843 | mov al,bh |
Line 6917... | Line 6861... | ||
6917 | mov cl,[postbyte_register] |
6861 | mov cl,[postbyte_register] |
6918 | shl cl,3 |
6862 | shl cl,3 |
6919 | or al,cl |
6863 | or al,cl |
6920 | stos byte [edi] |
6864 | stos byte [edi] |
6921 | jmp address_32bit_value |
6865 | jmp store_address_32bit_value |
6922 | simple_address_8bit_value: |
6866 | simple_address_8bit_value: |
6923 | or al,01000000b |
6867 | or al,01000000b |
6924 | mov cl,[postbyte_register] |
6868 | mov cl,[postbyte_register] |
6925 | shl cl,3 |
6869 | shl cl,3 |
6926 | or al,cl |
6870 | or al,cl |
6927 | stos byte [edi] |
6871 | stos byte [edi] |
Line 7000... | Line 6944... | ||
7000 | test ch,44h |
6944 | test ch,44h |
7001 | jnz address_immediate_sib_32bit |
6945 | jnz address_immediate_sib_32bit |
7002 | test ch,not 88h |
6946 | test ch,not 88h |
7003 | jnz invalid_address_size |
6947 | jnz invalid_address_size |
7004 | xor eax,eax |
6948 | address_immediate_sib_store: |
7005 | bt edx,31 |
- | |
7006 | sbb eax,0 |
- | |
7007 | cmp eax,[address_high] |
- | |
7008 | jne value_out_of_range |
- | |
7009 | address_immediate_sib_store: |
- | |
7010 | call store_instruction_code |
6949 | call store_instruction_code |
7011 | mov al,100b |
6950 | mov al,100b |
7012 | mov ah,100101b |
6951 | mov ah,100101b |
7013 | mov cl,[postbyte_register] |
6952 | mov cl,[postbyte_register] |
7014 | shl cl,3 |
6953 | shl cl,3 |