1,6 → 1,6 |
|
; flat assembler core |
; Copyright (c) 1999-2007, Tomasz Grysztar. |
; Copyright (c) 1999-2009, Tomasz Grysztar. |
; All rights reserved. |
|
simple_instruction_except64: |
2337,24 → 2337,21 |
cmp ah,al |
jae invalid_operand_size |
cmp ah,1 |
je movx_mem_8bit |
je movx_mem_store |
cmp ah,2 |
jne invalid_operand_size |
movx_mem_16bit: |
inc [extended_code] |
movx_mem_store: |
call operand_autodetect |
call store_instruction |
jmp instruction_assembled |
movx_unknown_size: |
cmp [error_line],0 |
jne movx_mem_8bit |
jne movx_mem_store |
mov eax,[current_line] |
mov [error_line],eax |
mov [error],operand_size_not_specified |
movx_mem_8bit: |
call operand_autodetect |
call store_instruction |
jmp instruction_assembled |
jmp movx_mem_store |
movx_reg: |
lods byte [esi] |
call convert_register |
4069,18 → 4066,11 |
call get_address |
mov al,[operand_size] |
or al,al |
jz extended_nop_nosize |
jz extended_nop_store |
call operand_autodetect |
extended_nop_store: |
call store_instruction |
jmp instruction_assembled |
extended_nop_nosize: |
cmp [error_line],0 |
jne extended_nop_store |
mov eax,[current_line] |
mov [error_line],eax |
mov [error],operand_size_not_specified |
jmp extended_nop_store |
extended_nop_reg: |
lods byte [esi] |
call convert_register |
4396,6 → 4386,7 |
mov ax,dx |
stos word [edi] |
jmp instruction_assembled |
|
fstenv_instruction: |
mov byte [edi],9Bh |
inc edi |
4402,6 → 4393,30 |
fldenv_instruction: |
mov [base_code],0D9h |
jmp fpu_mem |
fstenv_instruction_16bit: |
mov byte [edi],9Bh |
inc edi |
fldenv_instruction_16bit: |
call operand_16bit |
jmp fldenv_instruction |
fstenv_instruction_32bit: |
mov byte [edi],9Bh |
inc edi |
fldenv_instruction_32bit: |
call operand_32bit |
jmp fldenv_instruction |
fsave_instruction_32bit: |
mov byte [edi],9Bh |
inc edi |
fnsave_instruction_32bit: |
call operand_32bit |
jmp fnsave_instruction |
fsave_instruction_16bit: |
mov byte [edi],9Bh |
inc edi |
fnsave_instruction_16bit: |
call operand_16bit |
jmp fnsave_instruction |
fsave_instruction: |
mov byte [edi],9Bh |
inc edi |
4588,7 → 4603,7 |
mov al,byte [value] |
stos byte [edi] |
jmp instruction_assembled |
pextrw_instruction: |
pmovmskb_instruction: |
mov [base_code],0Fh |
mov [extended_code],al |
lods byte [esi] |
4635,6 → 4650,9 |
jmp instruction_assembled |
mmx_nomem_imm8: |
call store_nomem_instruction |
call append_imm8 |
jmp instruction_assembled |
append_imm8: |
mov [operand_size],0 |
lods byte [esi] |
cmp al,',' |
4647,7 → 4665,7 |
jne invalid_operand |
call get_byte_value |
stosb |
jmp instruction_assembled |
ret |
pinsrw_instruction: |
mov [extended_code],al |
mov [base_code],0Fh |
4684,11 → 4702,11 |
jmp mmx_nomem_imm8 |
pshufw_instruction: |
mov [mmx_size],8 |
mov [operand_prefix],al |
mov [opcode_prefix],al |
jmp pshuf_instruction |
pshufd_instruction: |
mov [mmx_size],16 |
mov [operand_prefix],al |
mov [opcode_prefix],al |
pshuf_instruction: |
mov [base_code],0Fh |
mov [extended_code],70h |
4827,7 → 4845,7 |
jmp instruction_assembled |
movq_mem_xmmreg: |
mov [extended_code],0D6h |
mov [operand_prefix],66h |
mov [opcode_prefix],66h |
call store_instruction |
jmp instruction_assembled |
movq_reg: |
4862,7 → 4880,7 |
cmp ah,16 |
jne movq_mmreg_ |
mov [extended_code],7Eh |
mov [operand_prefix],0F3h |
mov [opcode_prefix],0F3h |
movq_mmreg_: |
lods byte [esi] |
cmp al,',' |
4886,11 → 4904,11 |
cmp ah,8 |
jne invalid_operand_size |
mov [extended_code],6Eh |
mov [operand_prefix],0 |
mov [opcode_prefix],0 |
mov bl,al |
cmp [mmx_size],16 |
jne movq_mmreg_reg_store |
mov [operand_prefix],66h |
mov [opcode_prefix],66h |
movq_mmreg_reg_store: |
call operand_64bit |
call store_nomem_instruction |
4903,7 → 4921,7 |
call store_nomem_instruction |
jmp instruction_assembled |
movdq_instruction: |
mov [operand_prefix],al |
mov [opcode_prefix],al |
mov [base_code],0Fh |
mov [extended_code],6Fh |
lods byte [esi] |
4974,7 → 4992,7 |
call get_address |
pop eax |
mov [postbyte_register],al |
mov [operand_prefix],0F2h |
mov [opcode_prefix],0F2h |
mov [base_code],0Fh |
mov [extended_code],0F0h |
call store_instruction |
5002,7 → 5020,7 |
cmp ah,8 |
jne invalid_operand_size |
mov bl,al |
mov [operand_prefix],0F3h |
mov [opcode_prefix],0F3h |
mov [base_code],0Fh |
mov [extended_code],0D6h |
call store_nomem_instruction |
5030,7 → 5048,7 |
cmp ah,16 |
jne invalid_operand_size |
mov bl,al |
mov [operand_prefix],0F2h |
mov [opcode_prefix],0F2h |
mov [base_code],0Fh |
mov [extended_code],0D6h |
call store_nomem_instruction |
5045,15 → 5063,15 |
mov [immediate_size],8 |
sse_pd_instruction: |
mov [mmx_size],16 |
mov [operand_prefix],66h |
mov [opcode_prefix],66h |
jmp sse_instruction |
sse_ss_instruction: |
mov [mmx_size],4 |
mov [operand_prefix],0F3h |
mov [opcode_prefix],0F3h |
jmp sse_instruction |
sse_sd_instruction: |
mov [mmx_size],8 |
mov [operand_prefix],0F2h |
mov [opcode_prefix],0F2h |
jmp sse_instruction |
comiss_instruction: |
mov [mmx_size],4 |
5060,7 → 5078,7 |
jmp sse_instruction |
comisd_instruction: |
mov [mmx_size],8 |
mov [operand_prefix],66h |
mov [opcode_prefix],66h |
jmp sse_instruction |
cvtps2pd_instruction: |
mov [mmx_size],8 |
5067,11 → 5085,11 |
jmp sse_instruction |
cvtpd2dq_instruction: |
mov [mmx_size],16 |
mov [operand_prefix],0F2h |
mov [opcode_prefix],0F2h |
jmp sse_instruction |
cvtdq2pd_instruction: |
mov [mmx_size],16 |
mov [operand_prefix],0F3h |
mov [opcode_prefix],0F3h |
sse_instruction: |
mov [base_code],0Fh |
mov [extended_code],al |
5150,7 → 5168,7 |
|
ps_dq_instruction: |
mov [postbyte_register],al |
mov [operand_prefix],66h |
mov [opcode_prefix],66h |
mov [base_code],0Fh |
mov [extended_code],73h |
lods byte [esi] |
5164,7 → 5182,7 |
mov bl,al |
jmp mmx_nomem_imm8 |
movpd_instruction: |
mov [operand_prefix],66h |
mov [opcode_prefix],66h |
movps_instruction: |
mov [base_code],0Fh |
mov [extended_code],al |
5172,7 → 5190,7 |
jmp sse_mov_instruction |
movss_instruction: |
mov [mmx_size],4 |
mov [operand_prefix],0F3h |
mov [opcode_prefix],0F3h |
jmp sse_movs |
movsd_instruction: |
mov al,0A5h |
5182,7 → 5200,7 |
cmp ah,0Fh |
je simple_instruction_32bit |
mov [mmx_size],8 |
mov [operand_prefix],0F2h |
mov [opcode_prefix],0F2h |
sse_movs: |
mov [base_code],0Fh |
mov [extended_code],10h |
5219,7 → 5237,7 |
call store_instruction |
jmp instruction_assembled |
movlpd_instruction: |
mov [operand_prefix],66h |
mov [opcode_prefix],66h |
movlps_instruction: |
mov [base_code],0Fh |
mov [extended_code],al |
5266,7 → 5284,7 |
jmp maskmov_instruction |
maskmovdqu_instruction: |
mov cl,16 |
mov [operand_prefix],66h |
mov [opcode_prefix],66h |
maskmov_instruction: |
mov [base_code],0Fh |
mov [extended_code],0F7h |
5292,7 → 5310,7 |
call store_nomem_instruction |
jmp instruction_assembled |
movmskpd_instruction: |
mov [operand_prefix],66h |
mov [opcode_prefix],66h |
movmskps_instruction: |
mov [base_code],0Fh |
mov [extended_code],50h |
5321,7 → 5339,7 |
call store_nomem_instruction |
jmp instruction_assembled |
cmppd_instruction: |
mov [operand_prefix],66h |
mov [opcode_prefix],66h |
cmpps_instruction: |
mov [base_code],0Fh |
mov [extended_code],0C2h |
5329,7 → 5347,7 |
mov byte [value],-1 |
jmp sse_cmp_instruction |
cmp_pd_instruction: |
mov [operand_prefix],66h |
mov [opcode_prefix],66h |
cmp_ps_instruction: |
mov [base_code],0Fh |
mov [extended_code],0C2h |
5338,7 → 5356,7 |
jmp sse_cmp_instruction |
cmpss_instruction: |
mov [mmx_size],4 |
mov [operand_prefix],0F3h |
mov [opcode_prefix],0F3h |
jmp cmpsx_instruction |
cmpsd_instruction: |
mov al,0A7h |
5348,7 → 5366,7 |
cmp ah,0Fh |
je simple_instruction_32bit |
mov [mmx_size],8 |
mov [operand_prefix],0F2h |
mov [opcode_prefix],0F2h |
cmpsx_instruction: |
mov [base_code],0Fh |
mov [extended_code],0C2h |
5356,11 → 5374,11 |
jmp sse_cmp_instruction |
cmp_ss_instruction: |
mov [mmx_size],4 |
mov [operand_prefix],0F3h |
mov [opcode_prefix],0F3h |
jmp cmp_sx_instruction |
cmp_sd_instruction: |
mov [mmx_size],8 |
mov [operand_prefix],0F2h |
mov [opcode_prefix],0F2h |
cmp_sx_instruction: |
mov [base_code],0Fh |
mov [extended_code],0C2h |
5428,7 → 5446,7 |
nextbyte_ok: |
ret |
cvtpi2pd_instruction: |
mov [operand_prefix],66h |
mov [opcode_prefix],66h |
cvtpi2ps_instruction: |
mov [base_code],0Fh |
mov [extended_code],al |
5468,10 → 5486,10 |
call store_nomem_instruction |
jmp instruction_assembled |
cvtsi2ss_instruction: |
mov [operand_prefix],0F3h |
mov [opcode_prefix],0F3h |
jmp cvtsi_instruction |
cvtsi2sd_instruction: |
mov [operand_prefix],0F2h |
mov [opcode_prefix],0F2h |
cvtsi_instruction: |
mov [base_code],0Fh |
mov [extended_code],al |
5518,7 → 5536,7 |
mov [mmx_size],8 |
jmp cvtpd_instruction |
cvtpd2pi_instruction: |
mov [operand_prefix],66h |
mov [opcode_prefix],66h |
mov [mmx_size],16 |
cvtpd_instruction: |
mov [base_code],0Fh |
5534,11 → 5552,11 |
mov [operand_size],0 |
jmp sse_reg |
cvtss2si_instruction: |
mov [operand_prefix],0F3h |
mov [opcode_prefix],0F3h |
mov [mmx_size],4 |
jmp cvt2si_instruction |
cvtsd2si_instruction: |
mov [operand_prefix],0F2h |
mov [opcode_prefix],0F2h |
mov [mmx_size],8 |
cvt2si_instruction: |
mov [extended_code],al |
5632,7 → 5650,7 |
sse4_instruction_38_imm8: |
mov [immediate_size],8 |
sse4_instruction_38: |
mov [operand_prefix],66h |
mov [opcode_prefix],66h |
mov [base_code],0Fh |
mov [supplemental_code],al |
mov al,38h |
5640,11 → 5658,304 |
sse4_instruction_3a_imm8: |
mov [immediate_size],8 |
sse4_instruction_3a: |
mov [operand_prefix],66h |
mov [opcode_prefix],66h |
mov [base_code],0Fh |
mov [supplemental_code],al |
mov al,3Ah |
jmp sse_instruction |
extractps_instruction: |
mov [opcode_prefix],66h |
mov [base_code],0Fh |
mov [extended_code],3Ah |
mov [supplemental_code],17h |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
je extractps_reg |
cmp al,'[' |
jne invalid_operand |
call get_address |
cmp [operand_size],4 |
je extractps_size_ok |
cmp [operand_size],0 |
jne invalid_operand_size |
extractps_size_ok: |
push edx ebx ecx |
mov [operand_size],0 |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_mmx_register |
cmp ah,16 |
jne invalid_operand_size |
mov [postbyte_register],al |
pop ecx ebx edx |
jmp mmx_imm8 |
extractps_reg: |
lods byte [esi] |
call convert_register |
push eax |
mov [operand_size],0 |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_mmx_register |
cmp ah,16 |
jne invalid_operand_size |
mov [postbyte_register],al |
pop ebx |
mov al,bh |
cmp al,8 |
je extractps_store |
cmp al,4 |
jne invalid_operand_size |
extractps_store: |
call operand_autodetect |
jmp mmx_nomem_imm8 |
insertps_instruction: |
mov [opcode_prefix],66h |
mov [base_code],0Fh |
mov [extended_code],3Ah |
mov [supplemental_code],21h |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_mmx_register |
cmp ah,16 |
jne invalid_operand_size |
mov [postbyte_register],al |
mov [operand_size],0 |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
je insertps_reg |
cmp al,'[' |
jne invalid_operand |
call get_address |
cmp [operand_size],4 |
je insertps_size_ok |
cmp [operand_size],0 |
jne invalid_operand_size |
insertps_size_ok: |
jmp mmx_imm8 |
insertps_reg: |
lods byte [esi] |
call convert_mmx_register |
mov bl,al |
jmp mmx_nomem_imm8 |
pextrq_instruction: |
mov [mmx_size],8 |
jmp pextr_instruction |
pextrd_instruction: |
mov [mmx_size],4 |
jmp pextr_instruction |
pextrw_instruction: |
mov [mmx_size],2 |
jmp pextr_instruction |
pextrb_instruction: |
mov [mmx_size],1 |
pextr_instruction: |
mov [opcode_prefix],66h |
mov [base_code],0Fh |
mov [extended_code],3Ah |
mov [supplemental_code],al |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
je pextr_reg |
cmp al,'[' |
jne invalid_operand |
call get_address |
mov al,[mmx_size] |
cmp al,[operand_size] |
je pextr_size_ok |
cmp [operand_size],0 |
jne invalid_operand_size |
pextr_size_ok: |
push edx ebx ecx |
mov [operand_size],0 |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_mmx_register |
cmp ah,16 |
jne invalid_operand_size |
mov [postbyte_register],al |
pop ecx ebx edx |
jmp mmx_imm8 |
pextr_reg: |
lods byte [esi] |
call convert_register |
cmp [mmx_size],4 |
ja pextrq_reg |
cmp ah,4 |
je pextr_reg_size_ok |
cmp ah,8 |
je pextr_reg_size_ok |
pextr_invalid_size: |
jmp invalid_operand_size |
pextrq_reg: |
cmp ah,8 |
jne pextr_invalid_size |
call operand_64bit |
pextr_reg_size_ok: |
mov [operand_size],0 |
push eax |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_mmx_register |
mov ebx,eax |
pop eax |
mov [postbyte_register],al |
mov al,ah |
cmp [mmx_size],2 |
jne pextr_reg_store |
mov [opcode_prefix],0 |
mov [extended_code],0C5h |
call make_mmx_prefix |
jmp mmx_nomem_imm8 |
pextr_reg_store: |
cmp bh,16 |
jne invalid_operand_size |
xchg bl,[postbyte_register] |
call operand_autodetect |
jmp mmx_nomem_imm8 |
pinsrb_instruction: |
mov [mmx_size],1 |
jmp pinsr_instruction |
pinsrd_instruction: |
mov [mmx_size],4 |
jmp pinsr_instruction |
pinsrq_instruction: |
mov [mmx_size],8 |
jmp pinsr_instruction |
pinsr_instruction: |
mov [opcode_prefix],66h |
mov [base_code],0Fh |
mov [extended_code],3Ah |
mov [supplemental_code],al |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_mmx_register |
cmp ah,16 |
jne invalid_operand_size |
mov [postbyte_register],al |
mov [operand_size],0 |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
je pinsr_xmmreg_reg |
cmp al,'[' |
jne invalid_operand |
call get_address |
cmp [operand_size],0 |
je mmx_imm8 |
mov al,[mmx_size] |
cmp al,[operand_size] |
je mmx_imm8 |
jmp invalid_operand_size |
pinsr_xmmreg_reg: |
lods byte [esi] |
call convert_register |
mov bl,al |
cmp [mmx_size],8 |
je pinsrq_xmmreg_reg |
cmp ah,4 |
je mmx_nomem_imm8 |
jmp invalid_operand_size |
pinsrq_xmmreg_reg: |
cmp ah,8 |
je mmx_nomem_imm8 |
jmp invalid_operand_size |
pmovsxbw_instruction: |
mov [mmx_size],8 |
jmp pmovsx_instruction |
pmovsxbd_instruction: |
mov [mmx_size],4 |
jmp pmovsx_instruction |
pmovsxbq_instruction: |
mov [mmx_size],2 |
jmp pmovsx_instruction |
pmovsxwd_instruction: |
mov [mmx_size],8 |
jmp pmovsx_instruction |
pmovsxwq_instruction: |
mov [mmx_size],4 |
jmp pmovsx_instruction |
pmovsxdq_instruction: |
mov [mmx_size],8 |
pmovsx_instruction: |
mov [opcode_prefix],66h |
mov [base_code],0Fh |
mov [extended_code],38h |
mov [supplemental_code],al |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_mmx_register |
cmp ah,16 |
jne invalid_operand_size |
mov [postbyte_register],al |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
mov [operand_size],0 |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
je pmovsx_xmmreg_reg |
cmp al,'[' |
jne invalid_operand |
call get_address |
cmp [operand_size],0 |
je mmx_imm8 |
mov al,[mmx_size] |
cmp al,[operand_size] |
jne invalid_operand_size |
call store_instruction |
jmp instruction_assembled |
pmovsx_xmmreg_reg: |
lods byte [esi] |
call convert_mmx_register |
cmp ah,16 |
jne invalid_operand_size |
mov bl,al |
call store_nomem_instruction |
jmp instruction_assembled |
|
fxsave_instruction: |
mov [extended_code],0AEh |
5712,7 → 6023,7 |
mov [mmx_size],16 |
jmp movnt_instruction |
movntdq_instruction: |
mov [operand_prefix],66h |
mov [opcode_prefix],66h |
mov [mmx_size],16 |
movnt_instruction: |
mov [extended_code],al |
5736,6 → 6047,44 |
mov [postbyte_register],al |
call store_instruction |
jmp instruction_assembled |
|
movntsd_instruction: |
mov [opcode_prefix],0F2h |
mov [mmx_size],8 |
jmp movnts_instruction |
movntss_instruction: |
mov [opcode_prefix],0F3h |
mov [mmx_size],4 |
movnts_instruction: |
mov [extended_code],al |
mov [base_code],0Fh |
lods byte [esi] |
call get_size_operator |
cmp al,'[' |
jne invalid_operand |
call get_address |
mov al,[operand_size] |
cmp al,[mmx_size] |
je movnts_size_ok |
test al,al |
jnz invalid_operand_size |
movnts_size_ok: |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
mov [operand_size],0 |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_mmx_register |
cmp ah,16 |
jne invalid_operand_size |
mov [postbyte_register],al |
call store_instruction |
jmp instruction_assembled |
|
movnti_instruction: |
mov [base_code],0Fh |
mov [extended_code],al |
5802,7 → 6151,205 |
mov al,[postbyte_register] |
stos byte [edi] |
jmp instruction_assembled |
movntdqa_instruction: |
mov [opcode_prefix],66h |
mov [base_code],0Fh |
mov [extended_code],38h |
mov [supplemental_code],2Ah |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_mmx_register |
cmp ah,16 |
jne invalid_operand_size |
mov [postbyte_register],al |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
call get_size_operator |
cmp al,'[' |
jne invalid_operand |
call get_address |
call store_instruction |
jmp instruction_assembled |
|
extrq_instruction: |
mov [opcode_prefix],66h |
mov [base_code],0Fh |
mov [extended_code],78h |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_mmx_register |
cmp ah,16 |
jne invalid_operand_size |
mov [postbyte_register],al |
mov [operand_size],0 |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
je extrq_xmmreg_xmmreg |
test ah,not 1 |
jnz invalid_operand_size |
cmp al,'(' |
jne invalid_operand |
xor bl,bl |
call store_nomem_instruction |
call get_byte_value |
stosb |
call append_imm8 |
jmp instruction_assembled |
extrq_xmmreg_xmmreg: |
inc [extended_code] |
lods byte [esi] |
call convert_mmx_register |
cmp ah,16 |
jne invalid_operand_size |
mov bl,al |
call store_nomem_instruction |
jmp instruction_assembled |
insertq_instruction: |
mov [opcode_prefix],0F2h |
mov [base_code],0Fh |
mov [extended_code],78h |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_mmx_register |
cmp ah,16 |
jne invalid_operand_size |
mov [postbyte_register],al |
mov [operand_size],0 |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_mmx_register |
cmp ah,16 |
jne invalid_operand_size |
mov bl,al |
cmp byte [esi],',' |
je insertq_with_imm |
inc [extended_code] |
call store_nomem_instruction |
jmp instruction_assembled |
insertq_with_imm: |
call store_nomem_instruction |
call append_imm8 |
call append_imm8 |
jmp instruction_assembled |
|
crc32_instruction: |
mov [opcode_prefix],0F2h |
mov [base_code],0Fh |
mov [extended_code],38h |
mov [supplemental_code],0F0h |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
jne invalid_operand |
lods byte [esi] |
call convert_register |
mov [postbyte_register],al |
cmp ah,8 |
je crc32_reg64 |
cmp ah,4 |
jne invalid_operand |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
mov [operand_size],0 |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
je crc32_reg32_reg |
cmp al,'[' |
jne invalid_operand |
call get_address |
mov al,[operand_size] |
test al,al |
jz crc32_unknown_size |
cmp al,1 |
je crc32_reg32_mem_store |
cmp al,4 |
ja invalid_operand_size |
inc [supplemental_code] |
call operand_autodetect |
crc32_reg32_mem_store: |
call store_instruction |
jmp instruction_assembled |
crc32_unknown_size: |
cmp [error_line],0 |
jne crc32_reg32_mem_store |
mov eax,[current_line] |
mov [error_line],eax |
mov [error],operand_size_not_specified |
jmp crc32_reg32_mem_store |
crc32_reg32_reg: |
lods byte [esi] |
call convert_register |
mov bl,al |
mov al,ah |
cmp al,1 |
je crc32_reg32_reg_store |
cmp al,4 |
ja invalid_operand_size |
inc [supplemental_code] |
call operand_autodetect |
crc32_reg32_reg_store: |
call store_nomem_instruction |
jmp instruction_assembled |
crc32_reg64: |
lods byte [esi] |
cmp al,',' |
jne invalid_operand |
mov [operand_size],0 |
lods byte [esi] |
call get_size_operator |
cmp al,10h |
je crc32_reg64_reg |
cmp al,'[' |
jne invalid_operand |
call get_address |
mov ah,[operand_size] |
mov al,8 |
test ah,ah |
jz crc32_unknown_size |
cmp ah,1 |
je crc32_reg32_mem_store |
cmp ah,al |
jne invalid_operand_size |
inc [supplemental_code] |
jmp crc32_reg32_mem_store |
crc32_reg64_reg: |
lods byte [esi] |
call convert_register |
mov bl,al |
mov al,8 |
cmp ah,1 |
je crc32_reg32_reg_store |
cmp ah,al |
jne invalid_operand_size |
inc [supplemental_code] |
jmp crc32_reg32_reg_store |
popcnt_instruction: |
mov [opcode_prefix],0F3h |
jmp bs_instruction |
|
simple_vmx_instruction: |
mov ah,al |
mov al,0Fh |
5811,10 → 6358,10 |
stos word [edi] |
jmp instruction_assembled |
vmclear_instruction: |
mov [operand_prefix],66h |
mov [opcode_prefix],66h |
jmp vmx_instruction |
vmxon_instruction: |
mov [operand_prefix],0F3h |
mov [opcode_prefix],0F3h |
vmx_instruction: |
mov [postbyte_register],al |
mov [extended_code],0C7h |
6210,6 → 6757,11 |
jz operand_prefix_ok |
stos byte [edi] |
operand_prefix_ok: |
mov al,[opcode_prefix] |
or al,al |
jz opcode_prefix_ok |
stos byte [edi] |
opcode_prefix_ok: |
mov al,[rex_prefix] |
test al,40h |
jz rex_prefix_ok |