Rev 992 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 992 | Rev 1039 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | ; flat assembler core |
1 | ; flat assembler core |
2 | ; Copyright (c) 1999-2007, Tomasz Grysztar. |
2 | ; Copyright (c) 1999-2009, 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 2335... | Line 2335... | ||
2335 | jz movx_unknown_size |
2335 | jz movx_unknown_size |
2336 | cmp ah,al |
2336 | cmp ah,al |
2337 | jae invalid_operand_size |
2337 | jae invalid_operand_size |
2338 | cmp ah,1 |
2338 | cmp ah,1 |
2339 | je movx_mem_8bit |
2339 | je movx_mem_store |
2340 | cmp ah,2 |
2340 | cmp ah,2 |
2341 | jne invalid_operand_size |
2341 | jne invalid_operand_size |
2342 | movx_mem_16bit: |
2342 | inc [extended_code] |
2343 | inc [extended_code] |
- | |
2344 | call operand_autodetect |
2343 | movx_mem_store: |
- | 2344 | call operand_autodetect |
|
2345 | call store_instruction |
2345 | call store_instruction |
2346 | jmp instruction_assembled |
2346 | jmp instruction_assembled |
2347 | movx_unknown_size: |
2347 | movx_unknown_size: |
2348 | cmp [error_line],0 |
2348 | cmp [error_line],0 |
2349 | jne movx_mem_8bit |
2349 | jne movx_mem_store |
2350 | mov eax,[current_line] |
2350 | mov eax,[current_line] |
2351 | mov [error_line],eax |
2351 | mov [error_line],eax |
2352 | mov [error],operand_size_not_specified |
2352 | mov [error],operand_size_not_specified |
2353 | movx_mem_8bit: |
2353 | jmp movx_mem_store |
2354 | call operand_autodetect |
2354 | movx_reg: |
2355 | call store_instruction |
- | |
2356 | jmp instruction_assembled |
- | |
2357 | movx_reg: |
- | |
2358 | lods byte [esi] |
2355 | lods byte [esi] |
2359 | call convert_register |
2356 | call convert_register |
2360 | pop ebx |
2357 | pop ebx |
2361 | xchg bl,al |
2358 | xchg bl,al |
2362 | cmp ah,al |
2359 | cmp ah,al |
Line 4067... | Line 4064... | ||
4067 | jne invalid_operand |
4064 | jne invalid_operand |
4068 | call get_address |
4065 | call get_address |
4069 | mov al,[operand_size] |
4066 | mov al,[operand_size] |
4070 | or al,al |
4067 | or al,al |
4071 | jz extended_nop_nosize |
4068 | jz extended_nop_store |
4072 | call operand_autodetect |
4069 | call operand_autodetect |
4073 | extended_nop_store: |
4070 | extended_nop_store: |
4074 | call store_instruction |
4071 | call store_instruction |
4075 | jmp instruction_assembled |
4072 | jmp instruction_assembled |
4076 | extended_nop_nosize: |
4073 | extended_nop_reg: |
4077 | cmp [error_line],0 |
- | |
4078 | jne extended_nop_store |
- | |
4079 | mov eax,[current_line] |
- | |
4080 | mov [error_line],eax |
- | |
4081 | mov [error],operand_size_not_specified |
- | |
4082 | jmp extended_nop_store |
- | |
4083 | extended_nop_reg: |
- | |
4084 | lods byte [esi] |
4074 | lods byte [esi] |
4085 | call convert_register |
4075 | call convert_register |
4086 | mov bl,al |
4076 | mov bl,al |
4087 | mov al,ah |
4077 | mov al,ah |
4088 | call operand_autodetect |
4078 | call operand_autodetect |
Line 4394... | Line 4384... | ||
4394 | or dh,11000000b |
4384 | or dh,11000000b |
4395 | mov ax,dx |
4385 | mov ax,dx |
4396 | stos word [edi] |
4386 | stos word [edi] |
4397 | jmp instruction_assembled |
4387 | jmp instruction_assembled |
4398 | fstenv_instruction: |
4388 | |
- | 4389 | fstenv_instruction: |
|
4399 | mov byte [edi],9Bh |
4390 | mov byte [edi],9Bh |
4400 | inc edi |
4391 | inc edi |
4401 | fldenv_instruction: |
4392 | fldenv_instruction: |
4402 | mov [base_code],0D9h |
4393 | mov [base_code],0D9h |
4403 | jmp fpu_mem |
4394 | jmp fpu_mem |
4404 | fsave_instruction: |
4395 | fstenv_instruction_16bit: |
- | 4396 | mov byte [edi],9Bh |
|
- | 4397 | inc edi |
|
- | 4398 | fldenv_instruction_16bit: |
|
- | 4399 | call operand_16bit |
|
- | 4400 | jmp fldenv_instruction |
|
- | 4401 | fstenv_instruction_32bit: |
|
- | 4402 | mov byte [edi],9Bh |
|
- | 4403 | inc edi |
|
- | 4404 | fldenv_instruction_32bit: |
|
- | 4405 | call operand_32bit |
|
- | 4406 | jmp fldenv_instruction |
|
- | 4407 | fsave_instruction_32bit: |
|
- | 4408 | mov byte [edi],9Bh |
|
- | 4409 | inc edi |
|
- | 4410 | fnsave_instruction_32bit: |
|
- | 4411 | call operand_32bit |
|
- | 4412 | jmp fnsave_instruction |
|
- | 4413 | fsave_instruction_16bit: |
|
- | 4414 | mov byte [edi],9Bh |
|
- | 4415 | inc edi |
|
- | 4416 | fnsave_instruction_16bit: |
|
- | 4417 | call operand_16bit |
|
- | 4418 | jmp fnsave_instruction |
|
- | 4419 | fsave_instruction: |
|
4405 | mov byte [edi],9Bh |
4420 | mov byte [edi],9Bh |
4406 | inc edi |
4421 | inc edi |
4407 | fnsave_instruction: |
4422 | fnsave_instruction: |
4408 | mov [base_code],0DDh |
4423 | mov [base_code],0DDh |
4409 | fpu_mem: |
4424 | fpu_mem: |
Line 4586... | Line 4601... | ||
4586 | call store_nomem_instruction |
4601 | call store_nomem_instruction |
4587 | mov al,byte [value] |
4602 | mov al,byte [value] |
4588 | stos byte [edi] |
4603 | stos byte [edi] |
4589 | jmp instruction_assembled |
4604 | jmp instruction_assembled |
4590 | pextrw_instruction: |
4605 | pmovmskb_instruction: |
4591 | mov [base_code],0Fh |
4606 | mov [base_code],0Fh |
4592 | mov [extended_code],al |
4607 | mov [extended_code],al |
4593 | lods byte [esi] |
4608 | lods byte [esi] |
4594 | call get_size_operator |
4609 | call get_size_operator |
4595 | cmp al,10h |
4610 | cmp al,10h |
4596 | jne invalid_operand |
4611 | jne invalid_operand |
Line 4633... | Line 4648... | ||
4633 | call store_instruction_with_imm8 |
4648 | call store_instruction_with_imm8 |
4634 | jmp instruction_assembled |
4649 | jmp instruction_assembled |
4635 | mmx_nomem_imm8: |
4650 | mmx_nomem_imm8: |
4636 | call store_nomem_instruction |
4651 | call store_nomem_instruction |
4637 | mov [operand_size],0 |
4652 | call append_imm8 |
- | 4653 | jmp instruction_assembled |
|
- | 4654 | append_imm8: |
|
- | 4655 | mov [operand_size],0 |
|
4638 | lods byte [esi] |
4656 | lods byte [esi] |
4639 | cmp al,',' |
4657 | cmp al,',' |
4640 | jne invalid_operand |
4658 | jne invalid_operand |
4641 | lods byte [esi] |
4659 | lods byte [esi] |
4642 | call get_size_operator |
4660 | call get_size_operator |
Line 4645... | Line 4663... | ||
4645 | cmp al,'(' |
4663 | cmp al,'(' |
4646 | jne invalid_operand |
4664 | jne invalid_operand |
4647 | call get_byte_value |
4665 | call get_byte_value |
4648 | stosb |
4666 | stosb |
4649 | jmp instruction_assembled |
4667 | ret |
4650 | pinsrw_instruction: |
4668 | pinsrw_instruction: |
4651 | mov [extended_code],al |
4669 | mov [extended_code],al |
4652 | mov [base_code],0Fh |
4670 | mov [base_code],0Fh |
4653 | lods byte [esi] |
4671 | lods byte [esi] |
4654 | call get_size_operator |
4672 | call get_size_operator |
4655 | cmp al,10h |
4673 | cmp al,10h |
Line 4682... | Line 4700... | ||
4682 | mov bl,al |
4700 | mov bl,al |
4683 | jmp mmx_nomem_imm8 |
4701 | jmp mmx_nomem_imm8 |
4684 | pshufw_instruction: |
4702 | pshufw_instruction: |
4685 | mov [mmx_size],8 |
4703 | mov [mmx_size],8 |
4686 | mov [operand_prefix],al |
4704 | mov [opcode_prefix],al |
4687 | jmp pshuf_instruction |
4705 | jmp pshuf_instruction |
4688 | pshufd_instruction: |
4706 | pshufd_instruction: |
4689 | mov [mmx_size],16 |
4707 | mov [mmx_size],16 |
4690 | mov [operand_prefix],al |
4708 | mov [opcode_prefix],al |
4691 | pshuf_instruction: |
4709 | pshuf_instruction: |
4692 | mov [base_code],0Fh |
4710 | mov [base_code],0Fh |
4693 | mov [extended_code],70h |
4711 | mov [extended_code],70h |
4694 | lods byte [esi] |
4712 | lods byte [esi] |
4695 | call get_size_operator |
4713 | call get_size_operator |
4696 | cmp al,10h |
4714 | cmp al,10h |
Line 4825... | Line 4843... | ||
4825 | call store_instruction |
4843 | call store_instruction |
4826 | jmp instruction_assembled |
4844 | jmp instruction_assembled |
4827 | movq_mem_xmmreg: |
4845 | movq_mem_xmmreg: |
4828 | mov [extended_code],0D6h |
4846 | mov [extended_code],0D6h |
4829 | mov [operand_prefix],66h |
4847 | mov [opcode_prefix],66h |
4830 | call store_instruction |
4848 | call store_instruction |
4831 | jmp instruction_assembled |
4849 | jmp instruction_assembled |
4832 | movq_reg: |
4850 | movq_reg: |
4833 | lods byte [esi] |
4851 | lods byte [esi] |
4834 | cmp al,0B0h |
4852 | cmp al,0B0h |
4835 | jae movq_mmreg |
4853 | jae movq_mmreg |
Line 4860... | Line 4878... | ||
4860 | mov [mmx_size],ah |
4878 | mov [mmx_size],ah |
4861 | cmp ah,16 |
4879 | cmp ah,16 |
4862 | jne movq_mmreg_ |
4880 | jne movq_mmreg_ |
4863 | mov [extended_code],7Eh |
4881 | mov [extended_code],7Eh |
4864 | mov [operand_prefix],0F3h |
4882 | mov [opcode_prefix],0F3h |
4865 | movq_mmreg_: |
4883 | movq_mmreg_: |
4866 | lods byte [esi] |
4884 | lods byte [esi] |
4867 | cmp al,',' |
4885 | cmp al,',' |
4868 | jne invalid_operand |
4886 | jne invalid_operand |
4869 | mov [operand_size],0 |
4887 | mov [operand_size],0 |
4870 | lods byte [esi] |
4888 | lods byte [esi] |
Line 4884... | Line 4902... | ||
4884 | call convert_register |
4902 | call convert_register |
4885 | cmp ah,8 |
4903 | cmp ah,8 |
4886 | jne invalid_operand_size |
4904 | jne invalid_operand_size |
4887 | mov [extended_code],6Eh |
4905 | mov [extended_code],6Eh |
4888 | mov [operand_prefix],0 |
4906 | mov [opcode_prefix],0 |
4889 | mov bl,al |
4907 | mov bl,al |
4890 | cmp [mmx_size],16 |
4908 | cmp [mmx_size],16 |
4891 | jne movq_mmreg_reg_store |
4909 | jne movq_mmreg_reg_store |
4892 | mov [operand_prefix],66h |
4910 | mov [opcode_prefix],66h |
4893 | movq_mmreg_reg_store: |
4911 | movq_mmreg_reg_store: |
4894 | call operand_64bit |
4912 | call operand_64bit |
4895 | call store_nomem_instruction |
4913 | call store_nomem_instruction |
4896 | jmp instruction_assembled |
4914 | jmp instruction_assembled |
4897 | movq_mmreg_mmreg: |
4915 | movq_mmreg_mmreg: |
4898 | call convert_mmx_register |
4916 | call convert_mmx_register |
Line 4901... | Line 4919... | ||
4901 | mov bl,al |
4919 | mov bl,al |
4902 | call store_nomem_instruction |
4920 | call store_nomem_instruction |
4903 | jmp instruction_assembled |
4921 | jmp instruction_assembled |
4904 | movdq_instruction: |
4922 | movdq_instruction: |
4905 | mov [operand_prefix],al |
4923 | mov [opcode_prefix],al |
4906 | mov [base_code],0Fh |
4924 | mov [base_code],0Fh |
4907 | mov [extended_code],6Fh |
4925 | mov [extended_code],6Fh |
4908 | lods byte [esi] |
4926 | lods byte [esi] |
4909 | call get_size_operator |
4927 | call get_size_operator |
4910 | cmp al,10h |
4928 | cmp al,10h |
4911 | je movdq_mmreg |
4929 | je movdq_mmreg |
Line 4972... | Line 4990... | ||
4972 | jne invalid_operand |
4990 | jne invalid_operand |
4973 | call get_address |
4991 | call get_address |
4974 | pop eax |
4992 | pop eax |
4975 | mov [postbyte_register],al |
4993 | mov [postbyte_register],al |
4976 | mov [operand_prefix],0F2h |
4994 | mov [opcode_prefix],0F2h |
4977 | mov [base_code],0Fh |
4995 | mov [base_code],0Fh |
4978 | mov [extended_code],0F0h |
4996 | mov [extended_code],0F0h |
4979 | call store_instruction |
4997 | call store_instruction |
4980 | jmp instruction_assembled |
4998 | jmp instruction_assembled |
4981 | movq2dq_instruction: |
4999 | movq2dq_instruction: |
4982 | lods byte [esi] |
5000 | lods byte [esi] |
Line 5000... | Line 5018... | ||
5000 | call convert_mmx_register |
5018 | call convert_mmx_register |
5001 | cmp ah,8 |
5019 | cmp ah,8 |
5002 | jne invalid_operand_size |
5020 | jne invalid_operand_size |
5003 | mov bl,al |
5021 | mov bl,al |
5004 | mov [operand_prefix],0F3h |
5022 | mov [opcode_prefix],0F3h |
5005 | mov [base_code],0Fh |
5023 | mov [base_code],0Fh |
5006 | mov [extended_code],0D6h |
5024 | mov [extended_code],0D6h |
5007 | call store_nomem_instruction |
5025 | call store_nomem_instruction |
5008 | jmp instruction_assembled |
5026 | jmp instruction_assembled |
5009 | movdq2q_instruction: |
5027 | movdq2q_instruction: |
5010 | lods byte [esi] |
5028 | lods byte [esi] |
Line 5028... | Line 5046... | ||
5028 | call convert_mmx_register |
5046 | call convert_mmx_register |
5029 | cmp ah,16 |
5047 | cmp ah,16 |
5030 | jne invalid_operand_size |
5048 | jne invalid_operand_size |
5031 | mov bl,al |
5049 | mov bl,al |
5032 | mov [operand_prefix],0F2h |
5050 | mov [opcode_prefix],0F2h |
5033 | mov [base_code],0Fh |
5051 | mov [base_code],0Fh |
5034 | mov [extended_code],0D6h |
5052 | mov [extended_code],0D6h |
5035 | call store_nomem_instruction |
5053 | call store_nomem_instruction |
5036 | jmp instruction_assembled |
5054 | jmp instruction_assembled |
5037 | 5055 | ||
Line 5043... | Line 5061... | ||
5043 | sse_pd_instruction_imm8: |
5061 | sse_pd_instruction_imm8: |
5044 | mov [immediate_size],8 |
5062 | mov [immediate_size],8 |
5045 | sse_pd_instruction: |
5063 | sse_pd_instruction: |
5046 | mov [mmx_size],16 |
5064 | mov [mmx_size],16 |
5047 | mov [operand_prefix],66h |
5065 | mov [opcode_prefix],66h |
5048 | jmp sse_instruction |
5066 | jmp sse_instruction |
5049 | sse_ss_instruction: |
5067 | sse_ss_instruction: |
5050 | mov [mmx_size],4 |
5068 | mov [mmx_size],4 |
5051 | mov [operand_prefix],0F3h |
5069 | mov [opcode_prefix],0F3h |
5052 | jmp sse_instruction |
5070 | jmp sse_instruction |
5053 | sse_sd_instruction: |
5071 | sse_sd_instruction: |
5054 | mov [mmx_size],8 |
5072 | mov [mmx_size],8 |
5055 | mov [operand_prefix],0F2h |
5073 | mov [opcode_prefix],0F2h |
5056 | jmp sse_instruction |
5074 | jmp sse_instruction |
5057 | comiss_instruction: |
5075 | comiss_instruction: |
5058 | mov [mmx_size],4 |
5076 | mov [mmx_size],4 |
5059 | jmp sse_instruction |
5077 | jmp sse_instruction |
5060 | comisd_instruction: |
5078 | comisd_instruction: |
5061 | mov [mmx_size],8 |
5079 | mov [mmx_size],8 |
5062 | mov [operand_prefix],66h |
5080 | mov [opcode_prefix],66h |
5063 | jmp sse_instruction |
5081 | jmp sse_instruction |
5064 | cvtps2pd_instruction: |
5082 | cvtps2pd_instruction: |
5065 | mov [mmx_size],8 |
5083 | mov [mmx_size],8 |
5066 | jmp sse_instruction |
5084 | jmp sse_instruction |
5067 | cvtpd2dq_instruction: |
5085 | cvtpd2dq_instruction: |
5068 | mov [mmx_size],16 |
5086 | mov [mmx_size],16 |
5069 | mov [operand_prefix],0F2h |
5087 | mov [opcode_prefix],0F2h |
5070 | jmp sse_instruction |
5088 | jmp sse_instruction |
5071 | cvtdq2pd_instruction: |
5089 | cvtdq2pd_instruction: |
5072 | mov [mmx_size],16 |
5090 | mov [mmx_size],16 |
5073 | mov [operand_prefix],0F3h |
5091 | mov [opcode_prefix],0F3h |
5074 | sse_instruction: |
5092 | sse_instruction: |
5075 | mov [base_code],0Fh |
5093 | mov [base_code],0Fh |
5076 | mov [extended_code],al |
5094 | mov [extended_code],al |
5077 | lods byte [esi] |
5095 | lods byte [esi] |
5078 | call get_size_operator |
5096 | call get_size_operator |
5079 | cmp al,10h |
5097 | cmp al,10h |
Line 5148... | Line 5166... | ||
5148 | ret |
5166 | ret |
5149 | 5167 | ||
Line 5150... | Line 5168... | ||
5150 | ps_dq_instruction: |
5168 | ps_dq_instruction: |
5151 | mov [postbyte_register],al |
5169 | mov [postbyte_register],al |
5152 | mov [operand_prefix],66h |
5170 | mov [opcode_prefix],66h |
5153 | mov [base_code],0Fh |
5171 | mov [base_code],0Fh |
5154 | mov [extended_code],73h |
5172 | mov [extended_code],73h |
5155 | lods byte [esi] |
5173 | lods byte [esi] |
5156 | call get_size_operator |
5174 | call get_size_operator |
5157 | cmp al,10h |
5175 | cmp al,10h |
Line 5162... | Line 5180... | ||
5162 | jne invalid_operand_size |
5180 | jne invalid_operand_size |
5163 | mov bl,al |
5181 | mov bl,al |
5164 | jmp mmx_nomem_imm8 |
5182 | jmp mmx_nomem_imm8 |
5165 | movpd_instruction: |
5183 | movpd_instruction: |
5166 | mov [operand_prefix],66h |
5184 | mov [opcode_prefix],66h |
5167 | movps_instruction: |
5185 | movps_instruction: |
5168 | mov [base_code],0Fh |
5186 | mov [base_code],0Fh |
5169 | mov [extended_code],al |
5187 | mov [extended_code],al |
5170 | mov [mmx_size],16 |
5188 | mov [mmx_size],16 |
5171 | jmp sse_mov_instruction |
5189 | jmp sse_mov_instruction |
5172 | movss_instruction: |
5190 | movss_instruction: |
5173 | mov [mmx_size],4 |
5191 | mov [mmx_size],4 |
5174 | mov [operand_prefix],0F3h |
5192 | mov [opcode_prefix],0F3h |
5175 | jmp sse_movs |
5193 | jmp sse_movs |
5176 | movsd_instruction: |
5194 | movsd_instruction: |
5177 | mov al,0A5h |
5195 | mov al,0A5h |
5178 | mov ah,[esi] |
5196 | mov ah,[esi] |
5179 | or ah,ah |
5197 | or ah,ah |
5180 | jz simple_instruction_32bit |
5198 | jz simple_instruction_32bit |
5181 | cmp ah,0Fh |
5199 | cmp ah,0Fh |
5182 | je simple_instruction_32bit |
5200 | je simple_instruction_32bit |
5183 | mov [mmx_size],8 |
5201 | mov [mmx_size],8 |
5184 | mov [operand_prefix],0F2h |
5202 | mov [opcode_prefix],0F2h |
5185 | sse_movs: |
5203 | sse_movs: |
5186 | mov [base_code],0Fh |
5204 | mov [base_code],0Fh |
5187 | mov [extended_code],10h |
5205 | mov [extended_code],10h |
5188 | jmp sse_mov_instruction |
5206 | jmp sse_mov_instruction |
5189 | sse_mov_instruction: |
5207 | sse_mov_instruction: |
5190 | lods byte [esi] |
5208 | lods byte [esi] |
Line 5217... | Line 5235... | ||
5217 | mov [postbyte_register],al |
5235 | mov [postbyte_register],al |
5218 | call store_instruction |
5236 | call store_instruction |
5219 | jmp instruction_assembled |
5237 | jmp instruction_assembled |
5220 | movlpd_instruction: |
5238 | movlpd_instruction: |
5221 | mov [operand_prefix],66h |
5239 | mov [opcode_prefix],66h |
5222 | movlps_instruction: |
5240 | movlps_instruction: |
5223 | mov [base_code],0Fh |
5241 | mov [base_code],0Fh |
5224 | mov [extended_code],al |
5242 | mov [extended_code],al |
5225 | mov [mmx_size],8 |
5243 | mov [mmx_size],8 |
5226 | lods byte [esi] |
5244 | lods byte [esi] |
5227 | call get_size_operator |
5245 | call get_size_operator |
Line 5264... | Line 5282... | ||
5264 | mov cl,8 |
5282 | mov cl,8 |
5265 | jmp maskmov_instruction |
5283 | jmp maskmov_instruction |
5266 | maskmovdqu_instruction: |
5284 | maskmovdqu_instruction: |
5267 | mov cl,16 |
5285 | mov cl,16 |
5268 | mov [operand_prefix],66h |
5286 | mov [opcode_prefix],66h |
5269 | maskmov_instruction: |
5287 | maskmov_instruction: |
5270 | mov [base_code],0Fh |
5288 | mov [base_code],0Fh |
5271 | mov [extended_code],0F7h |
5289 | mov [extended_code],0F7h |
5272 | lods byte [esi] |
5290 | lods byte [esi] |
5273 | call get_size_operator |
5291 | call get_size_operator |
5274 | cmp al,10h |
5292 | cmp al,10h |
Line 5290... | Line 5308... | ||
5290 | mov bl,al |
5308 | mov bl,al |
5291 | call store_nomem_instruction |
5309 | call store_nomem_instruction |
5292 | jmp instruction_assembled |
5310 | jmp instruction_assembled |
5293 | movmskpd_instruction: |
5311 | movmskpd_instruction: |
5294 | mov [operand_prefix],66h |
5312 | mov [opcode_prefix],66h |
5295 | movmskps_instruction: |
5313 | movmskps_instruction: |
5296 | mov [base_code],0Fh |
5314 | mov [base_code],0Fh |
5297 | mov [extended_code],50h |
5315 | mov [extended_code],50h |
5298 | lods byte [esi] |
5316 | lods byte [esi] |
5299 | call get_size_operator |
5317 | call get_size_operator |
5300 | cmp al,10h |
5318 | cmp al,10h |
Line 5319... | Line 5337... | ||
5319 | mov bl,al |
5337 | mov bl,al |
5320 | call store_nomem_instruction |
5338 | call store_nomem_instruction |
5321 | jmp instruction_assembled |
5339 | jmp instruction_assembled |
5322 | cmppd_instruction: |
5340 | cmppd_instruction: |
5323 | mov [operand_prefix],66h |
5341 | mov [opcode_prefix],66h |
5324 | cmpps_instruction: |
5342 | cmpps_instruction: |
5325 | mov [base_code],0Fh |
5343 | mov [base_code],0Fh |
5326 | mov [extended_code],0C2h |
5344 | mov [extended_code],0C2h |
5327 | mov [mmx_size],16 |
5345 | mov [mmx_size],16 |
5328 | mov byte [value],-1 |
5346 | mov byte [value],-1 |
5329 | jmp sse_cmp_instruction |
5347 | jmp sse_cmp_instruction |
5330 | cmp_pd_instruction: |
5348 | cmp_pd_instruction: |
5331 | mov [operand_prefix],66h |
5349 | mov [opcode_prefix],66h |
5332 | cmp_ps_instruction: |
5350 | cmp_ps_instruction: |
5333 | mov [base_code],0Fh |
5351 | mov [base_code],0Fh |
5334 | mov [extended_code],0C2h |
5352 | mov [extended_code],0C2h |
5335 | mov [mmx_size],16 |
5353 | mov [mmx_size],16 |
5336 | mov byte [value],al |
5354 | mov byte [value],al |
5337 | jmp sse_cmp_instruction |
5355 | jmp sse_cmp_instruction |
5338 | cmpss_instruction: |
5356 | cmpss_instruction: |
5339 | mov [mmx_size],4 |
5357 | mov [mmx_size],4 |
5340 | mov [operand_prefix],0F3h |
5358 | mov [opcode_prefix],0F3h |
5341 | jmp cmpsx_instruction |
5359 | jmp cmpsx_instruction |
5342 | cmpsd_instruction: |
5360 | cmpsd_instruction: |
5343 | mov al,0A7h |
5361 | mov al,0A7h |
5344 | mov ah,[esi] |
5362 | mov ah,[esi] |
5345 | or ah,ah |
5363 | or ah,ah |
5346 | jz simple_instruction_32bit |
5364 | jz simple_instruction_32bit |
5347 | cmp ah,0Fh |
5365 | cmp ah,0Fh |
5348 | je simple_instruction_32bit |
5366 | je simple_instruction_32bit |
5349 | mov [mmx_size],8 |
5367 | mov [mmx_size],8 |
5350 | mov [operand_prefix],0F2h |
5368 | mov [opcode_prefix],0F2h |
5351 | cmpsx_instruction: |
5369 | cmpsx_instruction: |
5352 | mov [base_code],0Fh |
5370 | mov [base_code],0Fh |
5353 | mov [extended_code],0C2h |
5371 | mov [extended_code],0C2h |
5354 | mov byte [value],-1 |
5372 | mov byte [value],-1 |
5355 | jmp sse_cmp_instruction |
5373 | jmp sse_cmp_instruction |
5356 | cmp_ss_instruction: |
5374 | cmp_ss_instruction: |
5357 | mov [mmx_size],4 |
5375 | mov [mmx_size],4 |
5358 | mov [operand_prefix],0F3h |
5376 | mov [opcode_prefix],0F3h |
5359 | jmp cmp_sx_instruction |
5377 | jmp cmp_sx_instruction |
5360 | cmp_sd_instruction: |
5378 | cmp_sd_instruction: |
5361 | mov [mmx_size],8 |
5379 | mov [mmx_size],8 |
5362 | mov [operand_prefix],0F2h |
5380 | mov [opcode_prefix],0F2h |
5363 | cmp_sx_instruction: |
5381 | cmp_sx_instruction: |
5364 | mov [base_code],0Fh |
5382 | mov [base_code],0Fh |
5365 | mov [extended_code],0C2h |
5383 | mov [extended_code],0C2h |
5366 | mov byte [value],al |
5384 | mov byte [value],al |
5367 | sse_cmp_instruction: |
5385 | sse_cmp_instruction: |
5368 | lods byte [esi] |
5386 | lods byte [esi] |
Line 5426... | Line 5444... | ||
5426 | mov byte [value],al |
5444 | mov byte [value],al |
5427 | nextbyte_ok: |
5445 | nextbyte_ok: |
5428 | ret |
5446 | ret |
5429 | cvtpi2pd_instruction: |
5447 | cvtpi2pd_instruction: |
5430 | mov [operand_prefix],66h |
5448 | mov [opcode_prefix],66h |
5431 | cvtpi2ps_instruction: |
5449 | cvtpi2ps_instruction: |
5432 | mov [base_code],0Fh |
5450 | mov [base_code],0Fh |
5433 | mov [extended_code],al |
5451 | mov [extended_code],al |
5434 | lods byte [esi] |
5452 | lods byte [esi] |
5435 | call get_size_operator |
5453 | call get_size_operator |
5436 | cmp al,10h |
5454 | cmp al,10h |
Line 5466... | Line 5484... | ||
5466 | mov bl,al |
5484 | mov bl,al |
5467 | call store_nomem_instruction |
5485 | call store_nomem_instruction |
5468 | jmp instruction_assembled |
5486 | jmp instruction_assembled |
5469 | cvtsi2ss_instruction: |
5487 | cvtsi2ss_instruction: |
5470 | mov [operand_prefix],0F3h |
5488 | mov [opcode_prefix],0F3h |
5471 | jmp cvtsi_instruction |
5489 | jmp cvtsi_instruction |
5472 | cvtsi2sd_instruction: |
5490 | cvtsi2sd_instruction: |
5473 | mov [operand_prefix],0F2h |
5491 | mov [opcode_prefix],0F2h |
5474 | cvtsi_instruction: |
5492 | cvtsi_instruction: |
5475 | mov [base_code],0Fh |
5493 | mov [base_code],0Fh |
5476 | mov [extended_code],al |
5494 | mov [extended_code],al |
5477 | lods byte [esi] |
5495 | lods byte [esi] |
5478 | call get_size_operator |
5496 | call get_size_operator |
5479 | cmp al,10h |
5497 | cmp al,10h |
Line 5516... | Line 5534... | ||
5516 | cvtps2pi_instruction: |
5534 | cvtps2pi_instruction: |
5517 | mov [mmx_size],8 |
5535 | mov [mmx_size],8 |
5518 | jmp cvtpd_instruction |
5536 | jmp cvtpd_instruction |
5519 | cvtpd2pi_instruction: |
5537 | cvtpd2pi_instruction: |
5520 | mov [operand_prefix],66h |
5538 | mov [opcode_prefix],66h |
5521 | mov [mmx_size],16 |
5539 | mov [mmx_size],16 |
5522 | cvtpd_instruction: |
5540 | cvtpd_instruction: |
5523 | mov [base_code],0Fh |
5541 | mov [base_code],0Fh |
5524 | mov [extended_code],al |
5542 | mov [extended_code],al |
5525 | lods byte [esi] |
5543 | lods byte [esi] |
5526 | call get_size_operator |
5544 | call get_size_operator |
Line 5532... | Line 5550... | ||
5532 | jne invalid_operand_size |
5550 | jne invalid_operand_size |
5533 | mov [operand_size],0 |
5551 | mov [operand_size],0 |
5534 | jmp sse_reg |
5552 | jmp sse_reg |
5535 | cvtss2si_instruction: |
5553 | cvtss2si_instruction: |
5536 | mov [operand_prefix],0F3h |
5554 | mov [opcode_prefix],0F3h |
5537 | mov [mmx_size],4 |
5555 | mov [mmx_size],4 |
5538 | jmp cvt2si_instruction |
5556 | jmp cvt2si_instruction |
5539 | cvtsd2si_instruction: |
5557 | cvtsd2si_instruction: |
5540 | mov [operand_prefix],0F2h |
5558 | mov [opcode_prefix],0F2h |
5541 | mov [mmx_size],8 |
5559 | mov [mmx_size],8 |
5542 | cvt2si_instruction: |
5560 | cvt2si_instruction: |
5543 | mov [extended_code],al |
5561 | mov [extended_code],al |
5544 | mov [base_code],0Fh |
5562 | mov [base_code],0Fh |
5545 | lods byte [esi] |
5563 | lods byte [esi] |
5546 | call get_size_operator |
5564 | call get_size_operator |
Line 5630... | Line 5648... | ||
5630 | jmp sse4_instruction_38 |
5648 | jmp sse4_instruction_38 |
5631 | sse4_instruction_38_imm8: |
5649 | sse4_instruction_38_imm8: |
5632 | mov [immediate_size],8 |
5650 | mov [immediate_size],8 |
5633 | sse4_instruction_38: |
5651 | sse4_instruction_38: |
5634 | mov [operand_prefix],66h |
5652 | mov [opcode_prefix],66h |
5635 | mov [base_code],0Fh |
5653 | mov [base_code],0Fh |
5636 | mov [supplemental_code],al |
5654 | mov [supplemental_code],al |
5637 | mov al,38h |
5655 | mov al,38h |
5638 | jmp sse_instruction |
5656 | jmp sse_instruction |
5639 | sse4_instruction_3a_imm8: |
5657 | sse4_instruction_3a_imm8: |
5640 | mov [immediate_size],8 |
5658 | mov [immediate_size],8 |
5641 | sse4_instruction_3a: |
5659 | sse4_instruction_3a: |
5642 | mov [operand_prefix],66h |
5660 | mov [opcode_prefix],66h |
5643 | mov [base_code],0Fh |
5661 | mov [base_code],0Fh |
5644 | mov [supplemental_code],al |
5662 | mov [supplemental_code],al |
5645 | mov al,3Ah |
5663 | mov al,3Ah |
5646 | jmp sse_instruction |
5664 | jmp sse_instruction |
5647 | 5665 | extractps_instruction: |
|
- | 5666 | mov [opcode_prefix],66h |
|
- | 5667 | mov [base_code],0Fh |
|
- | 5668 | mov [extended_code],3Ah |
|
- | 5669 | mov [supplemental_code],17h |
|
- | 5670 | lods byte [esi] |
|
- | 5671 | call get_size_operator |
|
- | 5672 | cmp al,10h |
|
- | 5673 | je extractps_reg |
|
- | 5674 | cmp al,'[' |
|
- | 5675 | jne invalid_operand |
|
- | 5676 | call get_address |
|
- | 5677 | cmp [operand_size],4 |
|
- | 5678 | je extractps_size_ok |
|
- | 5679 | cmp [operand_size],0 |
|
- | 5680 | jne invalid_operand_size |
|
- | 5681 | extractps_size_ok: |
|
- | 5682 | push edx ebx ecx |
|
- | 5683 | mov [operand_size],0 |
|
- | 5684 | lods byte [esi] |
|
- | 5685 | cmp al,',' |
|
- | 5686 | jne invalid_operand |
|
- | 5687 | lods byte [esi] |
|
- | 5688 | call get_size_operator |
|
- | 5689 | cmp al,10h |
|
- | 5690 | jne invalid_operand |
|
- | 5691 | lods byte [esi] |
|
- | 5692 | call convert_mmx_register |
|
- | 5693 | cmp ah,16 |
|
- | 5694 | jne invalid_operand_size |
|
- | 5695 | mov [postbyte_register],al |
|
- | 5696 | pop ecx ebx edx |
|
- | 5697 | jmp mmx_imm8 |
|
- | 5698 | extractps_reg: |
|
- | 5699 | lods byte [esi] |
|
- | 5700 | call convert_register |
|
- | 5701 | push eax |
|
- | 5702 | mov [operand_size],0 |
|
- | 5703 | lods byte [esi] |
|
- | 5704 | cmp al,',' |
|
- | 5705 | jne invalid_operand |
|
- | 5706 | lods byte [esi] |
|
- | 5707 | call get_size_operator |
|
- | 5708 | cmp al,10h |
|
- | 5709 | jne invalid_operand |
|
- | 5710 | lods byte [esi] |
|
- | 5711 | call convert_mmx_register |
|
- | 5712 | cmp ah,16 |
|
- | 5713 | jne invalid_operand_size |
|
- | 5714 | mov [postbyte_register],al |
|
- | 5715 | pop ebx |
|
- | 5716 | mov al,bh |
|
- | 5717 | cmp al,8 |
|
- | 5718 | je extractps_store |
|
- | 5719 | cmp al,4 |
|
- | 5720 | jne invalid_operand_size |
|
- | 5721 | extractps_store: |
|
- | 5722 | call operand_autodetect |
|
- | 5723 | jmp mmx_nomem_imm8 |
|
- | 5724 | insertps_instruction: |
|
- | 5725 | mov [opcode_prefix],66h |
|
- | 5726 | mov [base_code],0Fh |
|
- | 5727 | mov [extended_code],3Ah |
|
- | 5728 | mov [supplemental_code],21h |
|
- | 5729 | lods byte [esi] |
|
- | 5730 | call get_size_operator |
|
- | 5731 | cmp al,10h |
|
- | 5732 | jne invalid_operand |
|
- | 5733 | lods byte [esi] |
|
- | 5734 | call convert_mmx_register |
|
- | 5735 | cmp ah,16 |
|
- | 5736 | jne invalid_operand_size |
|
- | 5737 | mov [postbyte_register],al |
|
- | 5738 | mov [operand_size],0 |
|
- | 5739 | lods byte [esi] |
|
- | 5740 | cmp al,',' |
|
- | 5741 | jne invalid_operand |
|
- | 5742 | lods byte [esi] |
|
- | 5743 | call get_size_operator |
|
- | 5744 | cmp al,10h |
|
- | 5745 | je insertps_reg |
|
- | 5746 | cmp al,'[' |
|
- | 5747 | jne invalid_operand |
|
- | 5748 | call get_address |
|
- | 5749 | cmp [operand_size],4 |
|
- | 5750 | je insertps_size_ok |
|
- | 5751 | cmp [operand_size],0 |
|
- | 5752 | jne invalid_operand_size |
|
- | 5753 | insertps_size_ok: |
|
- | 5754 | jmp mmx_imm8 |
|
- | 5755 | insertps_reg: |
|
- | 5756 | lods byte [esi] |
|
- | 5757 | call convert_mmx_register |
|
- | 5758 | mov bl,al |
|
- | 5759 | jmp mmx_nomem_imm8 |
|
- | 5760 | pextrq_instruction: |
|
- | 5761 | mov [mmx_size],8 |
|
- | 5762 | jmp pextr_instruction |
|
- | 5763 | pextrd_instruction: |
|
- | 5764 | mov [mmx_size],4 |
|
- | 5765 | jmp pextr_instruction |
|
- | 5766 | pextrw_instruction: |
|
- | 5767 | mov [mmx_size],2 |
|
- | 5768 | jmp pextr_instruction |
|
- | 5769 | pextrb_instruction: |
|
- | 5770 | mov [mmx_size],1 |
|
- | 5771 | pextr_instruction: |
|
- | 5772 | mov [opcode_prefix],66h |
|
- | 5773 | mov [base_code],0Fh |
|
- | 5774 | mov [extended_code],3Ah |
|
- | 5775 | mov [supplemental_code],al |
|
- | 5776 | lods byte [esi] |
|
- | 5777 | call get_size_operator |
|
- | 5778 | cmp al,10h |
|
- | 5779 | je pextr_reg |
|
- | 5780 | cmp al,'[' |
|
- | 5781 | jne invalid_operand |
|
- | 5782 | call get_address |
|
- | 5783 | mov al,[mmx_size] |
|
- | 5784 | cmp al,[operand_size] |
|
- | 5785 | je pextr_size_ok |
|
- | 5786 | cmp [operand_size],0 |
|
- | 5787 | jne invalid_operand_size |
|
- | 5788 | pextr_size_ok: |
|
- | 5789 | push edx ebx ecx |
|
- | 5790 | mov [operand_size],0 |
|
- | 5791 | lods byte [esi] |
|
- | 5792 | cmp al,',' |
|
- | 5793 | jne invalid_operand |
|
- | 5794 | lods byte [esi] |
|
- | 5795 | call get_size_operator |
|
- | 5796 | cmp al,10h |
|
- | 5797 | jne invalid_operand |
|
- | 5798 | lods byte [esi] |
|
- | 5799 | call convert_mmx_register |
|
- | 5800 | cmp ah,16 |
|
- | 5801 | jne invalid_operand_size |
|
- | 5802 | mov [postbyte_register],al |
|
- | 5803 | pop ecx ebx edx |
|
- | 5804 | jmp mmx_imm8 |
|
- | 5805 | pextr_reg: |
|
- | 5806 | lods byte [esi] |
|
- | 5807 | call convert_register |
|
- | 5808 | cmp [mmx_size],4 |
|
- | 5809 | ja pextrq_reg |
|
- | 5810 | cmp ah,4 |
|
- | 5811 | je pextr_reg_size_ok |
|
- | 5812 | cmp ah,8 |
|
- | 5813 | je pextr_reg_size_ok |
|
- | 5814 | pextr_invalid_size: |
|
- | 5815 | jmp invalid_operand_size |
|
- | 5816 | pextrq_reg: |
|
- | 5817 | cmp ah,8 |
|
- | 5818 | jne pextr_invalid_size |
|
- | 5819 | call operand_64bit |
|
- | 5820 | pextr_reg_size_ok: |
|
- | 5821 | mov [operand_size],0 |
|
- | 5822 | push eax |
|
- | 5823 | lods byte [esi] |
|
- | 5824 | cmp al,',' |
|
- | 5825 | jne invalid_operand |
|
- | 5826 | lods byte [esi] |
|
- | 5827 | call get_size_operator |
|
- | 5828 | cmp al,10h |
|
- | 5829 | jne invalid_operand |
|
- | 5830 | lods byte [esi] |
|
- | 5831 | call convert_mmx_register |
|
- | 5832 | mov ebx,eax |
|
- | 5833 | pop eax |
|
- | 5834 | mov [postbyte_register],al |
|
- | 5835 | mov al,ah |
|
- | 5836 | cmp [mmx_size],2 |
|
- | 5837 | jne pextr_reg_store |
|
- | 5838 | mov [opcode_prefix],0 |
|
- | 5839 | mov [extended_code],0C5h |
|
- | 5840 | call make_mmx_prefix |
|
- | 5841 | jmp mmx_nomem_imm8 |
|
- | 5842 | pextr_reg_store: |
|
- | 5843 | cmp bh,16 |
|
- | 5844 | jne invalid_operand_size |
|
- | 5845 | xchg bl,[postbyte_register] |
|
- | 5846 | call operand_autodetect |
|
- | 5847 | jmp mmx_nomem_imm8 |
|
- | 5848 | pinsrb_instruction: |
|
- | 5849 | mov [mmx_size],1 |
|
- | 5850 | jmp pinsr_instruction |
|
- | 5851 | pinsrd_instruction: |
|
- | 5852 | mov [mmx_size],4 |
|
- | 5853 | jmp pinsr_instruction |
|
- | 5854 | pinsrq_instruction: |
|
- | 5855 | mov [mmx_size],8 |
|
- | 5856 | jmp pinsr_instruction |
|
- | 5857 | pinsr_instruction: |
|
- | 5858 | mov [opcode_prefix],66h |
|
- | 5859 | mov [base_code],0Fh |
|
- | 5860 | mov [extended_code],3Ah |
|
- | 5861 | mov [supplemental_code],al |
|
- | 5862 | lods byte [esi] |
|
- | 5863 | call get_size_operator |
|
- | 5864 | cmp al,10h |
|
- | 5865 | jne invalid_operand |
|
- | 5866 | lods byte [esi] |
|
- | 5867 | call convert_mmx_register |
|
- | 5868 | cmp ah,16 |
|
- | 5869 | jne invalid_operand_size |
|
- | 5870 | mov [postbyte_register],al |
|
- | 5871 | mov [operand_size],0 |
|
- | 5872 | lods byte [esi] |
|
- | 5873 | cmp al,',' |
|
- | 5874 | jne invalid_operand |
|
- | 5875 | lods byte [esi] |
|
- | 5876 | call get_size_operator |
|
- | 5877 | cmp al,10h |
|
- | 5878 | je pinsr_xmmreg_reg |
|
- | 5879 | cmp al,'[' |
|
- | 5880 | jne invalid_operand |
|
- | 5881 | call get_address |
|
- | 5882 | cmp [operand_size],0 |
|
- | 5883 | je mmx_imm8 |
|
- | 5884 | mov al,[mmx_size] |
|
- | 5885 | cmp al,[operand_size] |
|
- | 5886 | je mmx_imm8 |
|
- | 5887 | jmp invalid_operand_size |
|
- | 5888 | pinsr_xmmreg_reg: |
|
- | 5889 | lods byte [esi] |
|
- | 5890 | call convert_register |
|
- | 5891 | mov bl,al |
|
- | 5892 | cmp [mmx_size],8 |
|
- | 5893 | je pinsrq_xmmreg_reg |
|
- | 5894 | cmp ah,4 |
|
- | 5895 | je mmx_nomem_imm8 |
|
- | 5896 | jmp invalid_operand_size |
|
- | 5897 | pinsrq_xmmreg_reg: |
|
- | 5898 | cmp ah,8 |
|
- | 5899 | je mmx_nomem_imm8 |
|
- | 5900 | jmp invalid_operand_size |
|
- | 5901 | pmovsxbw_instruction: |
|
- | 5902 | mov [mmx_size],8 |
|
- | 5903 | jmp pmovsx_instruction |
|
- | 5904 | pmovsxbd_instruction: |
|
- | 5905 | mov [mmx_size],4 |
|
- | 5906 | jmp pmovsx_instruction |
|
- | 5907 | pmovsxbq_instruction: |
|
- | 5908 | mov [mmx_size],2 |
|
- | 5909 | jmp pmovsx_instruction |
|
- | 5910 | pmovsxwd_instruction: |
|
- | 5911 | mov [mmx_size],8 |
|
- | 5912 | jmp pmovsx_instruction |
|
- | 5913 | pmovsxwq_instruction: |
|
- | 5914 | mov [mmx_size],4 |
|
- | 5915 | jmp pmovsx_instruction |
|
- | 5916 | pmovsxdq_instruction: |
|
- | 5917 | mov [mmx_size],8 |
|
- | 5918 | pmovsx_instruction: |
|
- | 5919 | mov [opcode_prefix],66h |
|
- | 5920 | mov [base_code],0Fh |
|
- | 5921 | mov [extended_code],38h |
|
- | 5922 | mov [supplemental_code],al |
|
- | 5923 | lods byte [esi] |
|
- | 5924 | call get_size_operator |
|
- | 5925 | cmp al,10h |
|
- | 5926 | jne invalid_operand |
|
- | 5927 | lods byte [esi] |
|
- | 5928 | call convert_mmx_register |
|
- | 5929 | cmp ah,16 |
|
- | 5930 | jne invalid_operand_size |
|
- | 5931 | mov [postbyte_register],al |
|
- | 5932 | lods byte [esi] |
|
- | 5933 | cmp al,',' |
|
- | 5934 | jne invalid_operand |
|
- | 5935 | mov [operand_size],0 |
|
- | 5936 | lods byte [esi] |
|
- | 5937 | call get_size_operator |
|
- | 5938 | cmp al,10h |
|
- | 5939 | je pmovsx_xmmreg_reg |
|
- | 5940 | cmp al,'[' |
|
- | 5941 | jne invalid_operand |
|
- | 5942 | call get_address |
|
- | 5943 | cmp [operand_size],0 |
|
- | 5944 | je mmx_imm8 |
|
- | 5945 | mov al,[mmx_size] |
|
- | 5946 | cmp al,[operand_size] |
|
- | 5947 | jne invalid_operand_size |
|
- | 5948 | call store_instruction |
|
- | 5949 | jmp instruction_assembled |
|
- | 5950 | pmovsx_xmmreg_reg: |
|
- | 5951 | lods byte [esi] |
|
- | 5952 | call convert_mmx_register |
|
- | 5953 | cmp ah,16 |
|
- | 5954 | jne invalid_operand_size |
|
- | 5955 | mov bl,al |
|
- | 5956 | call store_nomem_instruction |
|
- | 5957 | jmp instruction_assembled |
|
- | 5958 | ||
Line 5648... | Line 5959... | ||
5648 | fxsave_instruction: |
5959 | fxsave_instruction: |
5649 | mov [extended_code],0AEh |
5960 | mov [extended_code],0AEh |
5650 | mov [base_code],0Fh |
5961 | mov [base_code],0Fh |
5651 | mov [postbyte_register],al |
5962 | mov [postbyte_register],al |
Line 5710... | Line 6021... | ||
5710 | movntps_instruction: |
6021 | movntps_instruction: |
5711 | mov [mmx_size],16 |
6022 | mov [mmx_size],16 |
5712 | jmp movnt_instruction |
6023 | jmp movnt_instruction |
5713 | movntdq_instruction: |
6024 | movntdq_instruction: |
5714 | mov [operand_prefix],66h |
6025 | mov [opcode_prefix],66h |
5715 | mov [mmx_size],16 |
6026 | mov [mmx_size],16 |
5716 | movnt_instruction: |
6027 | movnt_instruction: |
5717 | mov [extended_code],al |
6028 | mov [extended_code],al |
5718 | mov [base_code],0Fh |
6029 | mov [base_code],0Fh |
5719 | lods byte [esi] |
6030 | lods byte [esi] |
5720 | call get_size_operator |
6031 | call get_size_operator |
Line 5734... | Line 6045... | ||
5734 | jne invalid_operand_size |
6045 | jne invalid_operand_size |
5735 | mov [postbyte_register],al |
6046 | mov [postbyte_register],al |
5736 | call store_instruction |
6047 | call store_instruction |
5737 | jmp instruction_assembled |
6048 | jmp instruction_assembled |
5738 | movnti_instruction: |
6049 | |
- | 6050 | movntsd_instruction: |
|
- | 6051 | mov [opcode_prefix],0F2h |
|
- | 6052 | mov [mmx_size],8 |
|
- | 6053 | jmp movnts_instruction |
|
- | 6054 | movntss_instruction: |
|
- | 6055 | mov [opcode_prefix],0F3h |
|
- | 6056 | mov [mmx_size],4 |
|
- | 6057 | movnts_instruction: |
|
- | 6058 | mov [extended_code],al |
|
- | 6059 | mov [base_code],0Fh |
|
- | 6060 | lods byte [esi] |
|
- | 6061 | call get_size_operator |
|
- | 6062 | cmp al,'[' |
|
- | 6063 | jne invalid_operand |
|
- | 6064 | call get_address |
|
- | 6065 | mov al,[operand_size] |
|
- | 6066 | cmp al,[mmx_size] |
|
- | 6067 | je movnts_size_ok |
|
- | 6068 | test al,al |
|
- | 6069 | jnz invalid_operand_size |
|
- | 6070 | movnts_size_ok: |
|
- | 6071 | lods byte [esi] |
|
- | 6072 | cmp al,',' |
|
- | 6073 | jne invalid_operand |
|
- | 6074 | mov [operand_size],0 |
|
- | 6075 | lods byte [esi] |
|
- | 6076 | call get_size_operator |
|
- | 6077 | cmp al,10h |
|
- | 6078 | jne invalid_operand |
|
- | 6079 | lods byte [esi] |
|
- | 6080 | call convert_mmx_register |
|
- | 6081 | cmp ah,16 |
|
- | 6082 | jne invalid_operand_size |
|
- | 6083 | mov [postbyte_register],al |
|
- | 6084 | call store_instruction |
|
- | 6085 | jmp instruction_assembled |
|
- | 6086 | ||
- | 6087 | movnti_instruction: |
|
5739 | mov [base_code],0Fh |
6088 | mov [base_code],0Fh |
5740 | mov [extended_code],al |
6089 | mov [extended_code],al |
5741 | lods byte [esi] |
6090 | lods byte [esi] |
5742 | call get_size_operator |
6091 | call get_size_operator |
5743 | cmp al,'[' |
6092 | cmp al,'[' |
Line 5800... | Line 6149... | ||
5800 | stos word [edi] |
6149 | stos word [edi] |
5801 | mov al,[postbyte_register] |
6150 | mov al,[postbyte_register] |
5802 | stos byte [edi] |
6151 | stos byte [edi] |
5803 | jmp instruction_assembled |
6152 | jmp instruction_assembled |
5804 | 6153 | movntdqa_instruction: |
|
- | 6154 | mov [opcode_prefix],66h |
|
- | 6155 | mov [base_code],0Fh |
|
- | 6156 | mov [extended_code],38h |
|
- | 6157 | mov [supplemental_code],2Ah |
|
- | 6158 | lods byte [esi] |
|
- | 6159 | call get_size_operator |
|
- | 6160 | cmp al,10h |
|
- | 6161 | jne invalid_operand |
|
- | 6162 | lods byte [esi] |
|
- | 6163 | call convert_mmx_register |
|
- | 6164 | cmp ah,16 |
|
- | 6165 | jne invalid_operand_size |
|
- | 6166 | mov [postbyte_register],al |
|
- | 6167 | lods byte [esi] |
|
- | 6168 | cmp al,',' |
|
- | 6169 | jne invalid_operand |
|
- | 6170 | lods byte [esi] |
|
- | 6171 | call get_size_operator |
|
- | 6172 | cmp al,'[' |
|
- | 6173 | jne invalid_operand |
|
- | 6174 | call get_address |
|
- | 6175 | call store_instruction |
|
- | 6176 | jmp instruction_assembled |
|
- | 6177 | ||
- | 6178 | extrq_instruction: |
|
- | 6179 | mov [opcode_prefix],66h |
|
- | 6180 | mov [base_code],0Fh |
|
- | 6181 | mov [extended_code],78h |
|
- | 6182 | lods byte [esi] |
|
- | 6183 | call get_size_operator |
|
- | 6184 | cmp al,10h |
|
- | 6185 | jne invalid_operand |
|
- | 6186 | lods byte [esi] |
|
- | 6187 | call convert_mmx_register |
|
- | 6188 | cmp ah,16 |
|
- | 6189 | jne invalid_operand_size |
|
- | 6190 | mov [postbyte_register],al |
|
- | 6191 | mov [operand_size],0 |
|
- | 6192 | lods byte [esi] |
|
- | 6193 | cmp al,',' |
|
- | 6194 | jne invalid_operand |
|
- | 6195 | lods byte [esi] |
|
- | 6196 | call get_size_operator |
|
- | 6197 | cmp al,10h |
|
- | 6198 | je extrq_xmmreg_xmmreg |
|
- | 6199 | test ah,not 1 |
|
- | 6200 | jnz invalid_operand_size |
|
- | 6201 | cmp al,'(' |
|
- | 6202 | jne invalid_operand |
|
- | 6203 | xor bl,bl |
|
- | 6204 | call store_nomem_instruction |
|
- | 6205 | call get_byte_value |
|
- | 6206 | stosb |
|
- | 6207 | call append_imm8 |
|
- | 6208 | jmp instruction_assembled |
|
- | 6209 | extrq_xmmreg_xmmreg: |
|
- | 6210 | inc [extended_code] |
|
- | 6211 | lods byte [esi] |
|
- | 6212 | call convert_mmx_register |
|
- | 6213 | cmp ah,16 |
|
- | 6214 | jne invalid_operand_size |
|
- | 6215 | mov bl,al |
|
- | 6216 | call store_nomem_instruction |
|
- | 6217 | jmp instruction_assembled |
|
- | 6218 | insertq_instruction: |
|
- | 6219 | mov [opcode_prefix],0F2h |
|
- | 6220 | mov [base_code],0Fh |
|
- | 6221 | mov [extended_code],78h |
|
- | 6222 | lods byte [esi] |
|
- | 6223 | call get_size_operator |
|
- | 6224 | cmp al,10h |
|
- | 6225 | jne invalid_operand |
|
- | 6226 | lods byte [esi] |
|
- | 6227 | call convert_mmx_register |
|
- | 6228 | cmp ah,16 |
|
- | 6229 | jne invalid_operand_size |
|
- | 6230 | mov [postbyte_register],al |
|
- | 6231 | mov [operand_size],0 |
|
- | 6232 | lods byte [esi] |
|
- | 6233 | cmp al,',' |
|
- | 6234 | jne invalid_operand |
|
- | 6235 | lods byte [esi] |
|
- | 6236 | call get_size_operator |
|
- | 6237 | cmp al,10h |
|
- | 6238 | jne invalid_operand |
|
- | 6239 | lods byte [esi] |
|
- | 6240 | call convert_mmx_register |
|
- | 6241 | cmp ah,16 |
|
- | 6242 | jne invalid_operand_size |
|
- | 6243 | mov bl,al |
|
- | 6244 | cmp byte [esi],',' |
|
- | 6245 | je insertq_with_imm |
|
- | 6246 | inc [extended_code] |
|
- | 6247 | call store_nomem_instruction |
|
- | 6248 | jmp instruction_assembled |
|
- | 6249 | insertq_with_imm: |
|
- | 6250 | call store_nomem_instruction |
|
- | 6251 | call append_imm8 |
|
- | 6252 | call append_imm8 |
|
- | 6253 | jmp instruction_assembled |
|
- | 6254 | ||
- | 6255 | crc32_instruction: |
|
- | 6256 | mov [opcode_prefix],0F2h |
|
- | 6257 | mov [base_code],0Fh |
|
- | 6258 | mov [extended_code],38h |
|
- | 6259 | mov [supplemental_code],0F0h |
|
- | 6260 | lods byte [esi] |
|
- | 6261 | call get_size_operator |
|
- | 6262 | cmp al,10h |
|
- | 6263 | jne invalid_operand |
|
- | 6264 | lods byte [esi] |
|
- | 6265 | call convert_register |
|
- | 6266 | mov [postbyte_register],al |
|
- | 6267 | cmp ah,8 |
|
- | 6268 | je crc32_reg64 |
|
- | 6269 | cmp ah,4 |
|
- | 6270 | jne invalid_operand |
|
- | 6271 | lods byte [esi] |
|
- | 6272 | cmp al,',' |
|
- | 6273 | jne invalid_operand |
|
- | 6274 | mov [operand_size],0 |
|
- | 6275 | lods byte [esi] |
|
- | 6276 | call get_size_operator |
|
- | 6277 | cmp al,10h |
|
- | 6278 | je crc32_reg32_reg |
|
- | 6279 | cmp al,'[' |
|
- | 6280 | jne invalid_operand |
|
- | 6281 | call get_address |
|
- | 6282 | mov al,[operand_size] |
|
- | 6283 | test al,al |
|
- | 6284 | jz crc32_unknown_size |
|
- | 6285 | cmp al,1 |
|
- | 6286 | je crc32_reg32_mem_store |
|
- | 6287 | cmp al,4 |
|
- | 6288 | ja invalid_operand_size |
|
- | 6289 | inc [supplemental_code] |
|
- | 6290 | call operand_autodetect |
|
- | 6291 | crc32_reg32_mem_store: |
|
- | 6292 | call store_instruction |
|
- | 6293 | jmp instruction_assembled |
|
- | 6294 | crc32_unknown_size: |
|
- | 6295 | cmp [error_line],0 |
|
- | 6296 | jne crc32_reg32_mem_store |
|
- | 6297 | mov eax,[current_line] |
|
- | 6298 | mov [error_line],eax |
|
- | 6299 | mov [error],operand_size_not_specified |
|
- | 6300 | jmp crc32_reg32_mem_store |
|
- | 6301 | crc32_reg32_reg: |
|
- | 6302 | lods byte [esi] |
|
- | 6303 | call convert_register |
|
- | 6304 | mov bl,al |
|
- | 6305 | mov al,ah |
|
- | 6306 | cmp al,1 |
|
- | 6307 | je crc32_reg32_reg_store |
|
- | 6308 | cmp al,4 |
|
- | 6309 | ja invalid_operand_size |
|
- | 6310 | inc [supplemental_code] |
|
- | 6311 | call operand_autodetect |
|
- | 6312 | crc32_reg32_reg_store: |
|
- | 6313 | call store_nomem_instruction |
|
- | 6314 | jmp instruction_assembled |
|
- | 6315 | crc32_reg64: |
|
- | 6316 | lods byte [esi] |
|
- | 6317 | cmp al,',' |
|
- | 6318 | jne invalid_operand |
|
- | 6319 | mov [operand_size],0 |
|
- | 6320 | lods byte [esi] |
|
- | 6321 | call get_size_operator |
|
- | 6322 | cmp al,10h |
|
- | 6323 | je crc32_reg64_reg |
|
- | 6324 | cmp al,'[' |
|
- | 6325 | jne invalid_operand |
|
- | 6326 | call get_address |
|
- | 6327 | mov ah,[operand_size] |
|
- | 6328 | mov al,8 |
|
- | 6329 | test ah,ah |
|
- | 6330 | jz crc32_unknown_size |
|
- | 6331 | cmp ah,1 |
|
- | 6332 | je crc32_reg32_mem_store |
|
- | 6333 | cmp ah,al |
|
- | 6334 | jne invalid_operand_size |
|
- | 6335 | inc [supplemental_code] |
|
- | 6336 | jmp crc32_reg32_mem_store |
|
- | 6337 | crc32_reg64_reg: |
|
- | 6338 | lods byte [esi] |
|
- | 6339 | call convert_register |
|
- | 6340 | mov bl,al |
|
- | 6341 | mov al,8 |
|
- | 6342 | cmp ah,1 |
|
- | 6343 | je crc32_reg32_reg_store |
|
- | 6344 | cmp ah,al |
|
- | 6345 | jne invalid_operand_size |
|
- | 6346 | inc [supplemental_code] |
|
- | 6347 | jmp crc32_reg32_reg_store |
|
- | 6348 | popcnt_instruction: |
|
- | 6349 | mov [opcode_prefix],0F3h |
|
- | 6350 | jmp bs_instruction |
|
- | 6351 | ||
Line 5805... | Line 6352... | ||
5805 | simple_vmx_instruction: |
6352 | simple_vmx_instruction: |
5806 | mov ah,al |
6353 | mov ah,al |
5807 | mov al,0Fh |
6354 | mov al,0Fh |
5808 | stos byte [edi] |
6355 | stos byte [edi] |
5809 | mov al,1 |
6356 | mov al,1 |
5810 | stos word [edi] |
6357 | stos word [edi] |
5811 | jmp instruction_assembled |
6358 | jmp instruction_assembled |
5812 | vmclear_instruction: |
6359 | vmclear_instruction: |
5813 | mov [operand_prefix],66h |
6360 | mov [opcode_prefix],66h |
5814 | jmp vmx_instruction |
6361 | jmp vmx_instruction |
5815 | vmxon_instruction: |
6362 | vmxon_instruction: |
5816 | mov [operand_prefix],0F3h |
6363 | mov [opcode_prefix],0F3h |
5817 | vmx_instruction: |
6364 | vmx_instruction: |
5818 | mov [postbyte_register],al |
6365 | mov [postbyte_register],al |
5819 | mov [extended_code],0C7h |
6366 | mov [extended_code],0C7h |
5820 | lods byte [esi] |
6367 | lods byte [esi] |
5821 | call get_size_operator |
6368 | call get_size_operator |
Line 6208... | Line 6755... | ||
6208 | or al,al |
6755 | or al,al |
6209 | jz operand_prefix_ok |
6756 | jz operand_prefix_ok |
6210 | stos byte [edi] |
6757 | stos byte [edi] |
6211 | operand_prefix_ok: |
6758 | operand_prefix_ok: |
6212 | mov al,[rex_prefix] |
6759 | mov al,[opcode_prefix] |
- | 6760 | or al,al |
|
- | 6761 | jz opcode_prefix_ok |
|
- | 6762 | stos byte [edi] |
|
- | 6763 | opcode_prefix_ok: |
|
- | 6764 | mov al,[rex_prefix] |
|
6213 | test al,40h |
6765 | test al,40h |
6214 | jz rex_prefix_ok |
6766 | jz rex_prefix_ok |
6215 | cmp [code_type],64 |
6767 | cmp [code_type],64 |
6216 | jne invalid_operand |
6768 | jne invalid_operand |
6217 | test al,0B0h |
6769 | test al,0B0h |