fasm: the program updated to 1.70.01
tested with the kernel and several applications sorry for previous ugly commit git-svn-id: svn://kolibrios.org@2665 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
96a29bfdda
commit
73798864bd
@ -2,46 +2,26 @@
|
|||||||
Visit http://flatassembler.net/ for more information.
|
Visit http://flatassembler.net/ for more information.
|
||||||
|
|
||||||
|
|
||||||
version 1.69.11 (Dec 19, 2009)
|
version 1.70.01 (Apr 30, 2012)
|
||||||
|
|
||||||
[+] Allowed syntax of "pmovmskb" with 64-bit register destination in long mode.
|
[-] Corrected a recently introduced bug that caused some incorrect
|
||||||
|
address expressions to cause an error prematurely during the
|
||||||
[-] The code generated for "call eax" instruction was missing prefix in 16-bit
|
parsing stage.
|
||||||
mode - fixed.
|
|
||||||
|
|
||||||
|
|
||||||
version 1.69.10 (Oct 28, 2009)
|
version 1.70 (Apr 17, 2012)
|
||||||
|
|
||||||
[-] Fixed long mode opcode generator to allow absolute addresses to be
|
[+] Added support for AVX, AVX2, AES, CLMUL, FMA, RDRAND, FSGSBASE, F16C,
|
||||||
generated with "qword" keyword inside square brackets.
|
FMA4, XOP, MOVBE, BMI, TBM, INVPCID, HLE and RTM instruction sets.
|
||||||
|
|
||||||
|
[+] Added half-precision floating point values support.
|
||||||
|
|
||||||
version 1.69.09 (Oct 20, 2009)
|
[+] Extended the syntax of "rept" directive to allow numerical expressions
|
||||||
|
to be calculated by preprocessor in its arguments.
|
||||||
|
|
||||||
[-] Fixed a crash during the symbolic information generation when a "static"
|
[+] Added "large" and "NX" settings from PE format.
|
||||||
symbol was encountered.
|
|
||||||
|
|
||||||
|
[+] Allowed PE fixups to be resolved anywhere in the generated executable.
|
||||||
version 1.69.08 (Oct 04, 2009)
|
|
||||||
|
|
||||||
[-] Minor bugfixes.
|
|
||||||
|
|
||||||
|
|
||||||
version 1.69.07 (Oct 03, 2009)
|
|
||||||
|
|
||||||
[-] Corrected encoding of "extrq" intruction for some cases.
|
|
||||||
|
|
||||||
|
|
||||||
version 1.69.06 (Sep 29, 2009)
|
|
||||||
|
|
||||||
[-] The prefix 67h for "jecxz" and "loopd" instructions in 64-bit mode wasn't
|
|
||||||
correctly generated - fixed.
|
|
||||||
|
|
||||||
[-] It's no longer possible to define two special segments of the same type
|
|
||||||
in ELF executables.
|
|
||||||
|
|
||||||
|
|
||||||
version 1.69.05 (Sep 14, 2009)
|
|
||||||
|
|
||||||
[+] Allowed to specify branding value (use 3 for Linux) after the
|
[+] Allowed to specify branding value (use 3 for Linux) after the
|
||||||
"format ELF executable" setting.
|
"format ELF executable" setting.
|
||||||
@ -49,38 +29,42 @@ version 1.69.05 (Sep 14, 2009)
|
|||||||
[+] Added "intepreter", "dynamic" and "note" keywords for creation of
|
[+] Added "intepreter", "dynamic" and "note" keywords for creation of
|
||||||
special segments in ELF executables.
|
special segments in ELF executables.
|
||||||
|
|
||||||
|
[-] Fixed long mode opcode generator to allow absolute addresses to be
|
||||||
|
generated with "qword" keyword inside square brackets.
|
||||||
|
|
||||||
version 1.69.04 (Sep 7, 2009)
|
[-] Disallowed negative immediates with "int", "enter", "ret" instructions.
|
||||||
|
|
||||||
[-] Fixed a bug with REX prefix generation with address of type "rX+rsp".
|
[+] Allowed symbolic information dump file to be created even in case of error.
|
||||||
|
In such case it contains only the preprocessed source that can be extracted
|
||||||
|
with PREPSRC tool. If error occured during preprocessing, only the source up
|
||||||
|
to the point of error is provided.
|
||||||
|
|
||||||
|
[+] Added symbol references table to symbolic dump file.
|
||||||
|
|
||||||
version 1.69.03 (Aug 03, 2009)
|
[-] Corrected the "defined" and "used" flags in the symbols dump to reflect the
|
||||||
|
state from the final assembly pass.
|
||||||
|
|
||||||
[+] Allowed simplified syntax for "monitor", "mwait", "blendvps", "blendvpd" and
|
[+] Added "assert" directive.
|
||||||
"pblendvb" instructions.
|
|
||||||
|
|
||||||
|
[-] Formatter symbols like "PE" or "readable" are now recognized only in the
|
||||||
|
context of formatter directives, and thus are no longer disallowed as
|
||||||
|
labels.
|
||||||
|
|
||||||
version 1.69.02 (Jul 04, 2009)
|
[+] Macroinstruction argument now can have default value, defined with "="
|
||||||
|
symbol followed by value after the argument name in definition.
|
||||||
|
|
||||||
[-] Minor bugfixes.
|
[+] Added "relativeto" operator, which can be used in logical expressions
|
||||||
|
to test whether two values differ only by a constant and not relocatable
|
||||||
|
amount.
|
||||||
|
|
||||||
|
[-] Revised the expression calculator, it now is able to correctly perform
|
||||||
version 1.69.01 (Jul 01, 2009)
|
calculations in signed and unsigned ranges in full 64-bit. This fixes
|
||||||
|
a number of issues - the overflow will now be correctly detected for
|
||||||
[+] Added "movbe" instruction.
|
64-bit values in cases, where previous versions could not distinguish
|
||||||
|
whether it was an overflow or not. The effect of these corrections is
|
||||||
[-] "extractps" no longer generates the double 66h prefix.
|
that "dq" directive will now behave consistently with behavior of the
|
||||||
|
data directives for smaller sizes, and the same applies to all the
|
||||||
|
places where "qword" size for value is used.
|
||||||
version 1.69.00 (Jun 23, 2009)
|
|
||||||
|
|
||||||
[+] Extended the syntax of "rept" directive to allow numerical expressions
|
|
||||||
to be calculated by preprocessor in its arguments.
|
|
||||||
|
|
||||||
[-] The code of assembler (but not data) has been made position-independent, and
|
|
||||||
this allowed to use code segmentation in DOS unREAL mode, so the code is
|
|
||||||
no longer limited to 64 kilobytes.
|
|
||||||
|
|
||||||
|
|
||||||
version 1.68 (Jun 13, 2009)
|
version 1.68 (Jun 13, 2009)
|
||||||
|
@ -35,6 +35,8 @@ assembler:
|
|||||||
mov [file_extension],eax
|
mov [file_extension],eax
|
||||||
mov [next_pass_needed],al
|
mov [next_pass_needed],al
|
||||||
mov [output_format],al
|
mov [output_format],al
|
||||||
|
mov [org_origin_sign],al
|
||||||
|
mov [adjustment_sign],al
|
||||||
mov [labels_type],al
|
mov [labels_type],al
|
||||||
mov [virtual_data],al
|
mov [virtual_data],al
|
||||||
mov [code_type],16
|
mov [code_type],16
|
||||||
@ -169,6 +171,8 @@ assemble_line:
|
|||||||
mov [prefixed_instruction],0
|
mov [prefixed_instruction],0
|
||||||
cmp [symbols_file],0
|
cmp [symbols_file],0
|
||||||
je continue_line
|
je continue_line
|
||||||
|
cmp [next_pass_needed],0
|
||||||
|
jne continue_line
|
||||||
mov ebx,[display_buffer]
|
mov ebx,[display_buffer]
|
||||||
mov dword [ebx-4],1
|
mov dword [ebx-4],1
|
||||||
mov dword [ebx-8],1Ch
|
mov dword [ebx-8],1Ch
|
||||||
@ -185,6 +189,11 @@ assemble_line:
|
|||||||
mov [ebx+8+4],edx
|
mov [ebx+8+4],edx
|
||||||
mov [ebx+10h],ecx
|
mov [ebx+10h],ecx
|
||||||
mov edx,[org_symbol]
|
mov edx,[org_symbol]
|
||||||
|
; mov al,[virtual_data]
|
||||||
|
; mov ah,[org_origin_sign]
|
||||||
|
; shl eax,16
|
||||||
|
; mov al,[labels_type]
|
||||||
|
; mov ah,[code_type]
|
||||||
mov eax,dword [labels_type]
|
mov eax,dword [labels_type]
|
||||||
mov [ebx+14h],edx
|
mov [ebx+14h],edx
|
||||||
mov [ebx+18h],eax
|
mov [ebx+18h],eax
|
||||||
@ -199,24 +208,39 @@ assemble_line:
|
|||||||
je reserved_word_used_as_symbol
|
je reserved_word_used_as_symbol
|
||||||
mov ebx,eax
|
mov ebx,eax
|
||||||
lods byte [esi]
|
lods byte [esi]
|
||||||
mov cl,al
|
mov [label_size],al
|
||||||
|
call make_label
|
||||||
|
jmp continue_line
|
||||||
|
make_label:
|
||||||
mov eax,edi
|
mov eax,edi
|
||||||
xor edx,edx
|
xor edx,edx
|
||||||
|
xor cl,cl
|
||||||
sub eax,dword [org_origin]
|
sub eax,dword [org_origin]
|
||||||
sbb edx,dword [org_origin+4]
|
sbb edx,dword [org_origin+4]
|
||||||
mov ch,[labels_type]
|
sbb cl,[org_origin_sign]
|
||||||
|
jp label_value_ok
|
||||||
|
call recoverable_overflow
|
||||||
|
label_value_ok:
|
||||||
|
mov [address_sign],cl
|
||||||
cmp [virtual_data],0
|
cmp [virtual_data],0
|
||||||
jne make_virtual_label
|
jne make_virtual_label
|
||||||
or byte [ebx+9],1
|
or byte [ebx+9],1
|
||||||
xchg eax,[ebx]
|
xchg eax,[ebx]
|
||||||
xchg edx,[ebx+4]
|
xchg edx,[ebx+4]
|
||||||
|
mov ch,[ebx+9]
|
||||||
|
shr ch,1
|
||||||
|
and ch,1
|
||||||
|
neg ch
|
||||||
sub eax,[ebx]
|
sub eax,[ebx]
|
||||||
sbb edx,[ebx+4]
|
sbb edx,[ebx+4]
|
||||||
|
sbb ch,cl
|
||||||
mov dword [adjustment],eax
|
mov dword [adjustment],eax
|
||||||
mov dword [adjustment+4],edx
|
mov dword [adjustment+4],edx
|
||||||
|
mov [adjustment_sign],ch
|
||||||
|
or al,ch
|
||||||
or eax,edx
|
or eax,edx
|
||||||
setnz ah
|
setnz ah
|
||||||
jmp finish_label_symbol
|
jmp finish_label
|
||||||
make_virtual_label:
|
make_virtual_label:
|
||||||
and byte [ebx+9],not 1
|
and byte [ebx+9],not 1
|
||||||
cmp eax,[ebx]
|
cmp eax,[ebx]
|
||||||
@ -226,7 +250,17 @@ assemble_line:
|
|||||||
mov [ebx+4],edx
|
mov [ebx+4],edx
|
||||||
setne al
|
setne al
|
||||||
or ah,al
|
or ah,al
|
||||||
|
finish_label:
|
||||||
|
mov ch,[labels_type]
|
||||||
|
mov cl,[label_size]
|
||||||
|
mov ebp,[org_registers]
|
||||||
|
mov edx,[org_symbol]
|
||||||
finish_label_symbol:
|
finish_label_symbol:
|
||||||
|
mov al,[address_sign]
|
||||||
|
xor al,[ebx+9]
|
||||||
|
and al,10b
|
||||||
|
or ah,al
|
||||||
|
xor [ebx+9],al
|
||||||
cmp cl,[ebx+10]
|
cmp cl,[ebx+10]
|
||||||
mov [ebx+10],cl
|
mov [ebx+10],cl
|
||||||
setne al
|
setne al
|
||||||
@ -235,14 +269,12 @@ assemble_line:
|
|||||||
mov [ebx+11],ch
|
mov [ebx+11],ch
|
||||||
setne al
|
setne al
|
||||||
or ah,al
|
or ah,al
|
||||||
mov edx,[org_registers]
|
cmp ebp,[ebx+12]
|
||||||
cmp edx,[ebx+12]
|
mov [ebx+12],ebp
|
||||||
mov [ebx+12],edx
|
|
||||||
setne al
|
setne al
|
||||||
or ah,al
|
or ah,al
|
||||||
or ch,ch
|
or ch,ch
|
||||||
jz label_symbol_ok
|
jz label_symbol_ok
|
||||||
mov edx,[org_symbol]
|
|
||||||
cmp edx,[ebx+20]
|
cmp edx,[ebx+20]
|
||||||
mov [ebx+20],edx
|
mov [ebx+20],edx
|
||||||
setne al
|
setne al
|
||||||
@ -261,17 +293,18 @@ assemble_line:
|
|||||||
sub cx,[ebx+16]
|
sub cx,[ebx+16]
|
||||||
setnz al
|
setnz al
|
||||||
or ah,al
|
or ah,al
|
||||||
jz continue_line
|
jz label_made
|
||||||
test byte [ebx+8],8
|
test byte [ebx+8],8
|
||||||
jz continue_line
|
jz label_made
|
||||||
mov cx,[current_pass]
|
mov cx,[current_pass]
|
||||||
cmp cx,[ebx+18]
|
cmp cx,[ebx+18]
|
||||||
jne continue_line
|
jne label_made
|
||||||
or [next_pass_needed],-1
|
or [next_pass_needed],-1
|
||||||
jmp continue_line
|
label_made:
|
||||||
|
ret
|
||||||
new_label:
|
new_label:
|
||||||
or byte [ebx+8],1
|
or byte [ebx+8],1
|
||||||
jmp continue_line
|
ret
|
||||||
define_constant:
|
define_constant:
|
||||||
lods dword [esi]
|
lods dword [esi]
|
||||||
inc esi
|
inc esi
|
||||||
@ -293,6 +326,7 @@ assemble_line:
|
|||||||
push eax
|
push eax
|
||||||
mov al,byte [esi-1]
|
mov al,byte [esi-1]
|
||||||
push eax
|
push eax
|
||||||
|
or [size_override],-1
|
||||||
call get_value
|
call get_value
|
||||||
pop ebx
|
pop ebx
|
||||||
mov ch,bl
|
mov ch,bl
|
||||||
@ -314,6 +348,11 @@ assemble_line:
|
|||||||
mov [ebx+4],edx
|
mov [ebx+4],edx
|
||||||
setne al
|
setne al
|
||||||
or ah,al
|
or ah,al
|
||||||
|
mov al,[value_sign]
|
||||||
|
xor al,[ebx+9]
|
||||||
|
and al,10b
|
||||||
|
or ah,al
|
||||||
|
xor [ebx+9],al
|
||||||
cmp cl,[ebx+10]
|
cmp cl,[ebx+10]
|
||||||
mov [ebx+10],cl
|
mov [ebx+10],cl
|
||||||
setne al
|
setne al
|
||||||
@ -370,12 +409,12 @@ assemble_line:
|
|||||||
; mov [size_override],0
|
; mov [size_override],0
|
||||||
; mov [operand_prefix],0
|
; mov [operand_prefix],0
|
||||||
; mov [opcode_prefix],0
|
; mov [opcode_prefix],0
|
||||||
mov dword [operand_size],0
|
and dword [operand_size],0
|
||||||
; mov [rex_prefix],0
|
; mov [rex_prefix],0
|
||||||
; mov [vex_required],0
|
; mov [vex_required],0
|
||||||
; mov [vex_register],0
|
; mov [vex_register],0
|
||||||
; mov [immediate_size],0
|
; mov [immediate_size],0
|
||||||
mov dword [rex_prefix],0
|
and dword [rex_prefix],0
|
||||||
call instruction_handler
|
call instruction_handler
|
||||||
instruction_handler:
|
instruction_handler:
|
||||||
movzx ebx,word [esi]
|
movzx ebx,word [esi]
|
||||||
@ -408,13 +447,18 @@ org_directive:
|
|||||||
test cl,1
|
test cl,1
|
||||||
jnz invalid_use_of_symbol
|
jnz invalid_use_of_symbol
|
||||||
mov [labels_type],cl
|
mov [labels_type],cl
|
||||||
mov ecx,edi
|
mov dword [org_origin],edi
|
||||||
sub ecx,eax
|
xor ecx,ecx
|
||||||
adc edx,0
|
mov dword [org_origin+4],ecx
|
||||||
neg edx
|
mov [org_origin_sign],cl
|
||||||
mov dword [org_origin],ecx
|
mov [org_registers],ecx
|
||||||
mov dword [org_origin+4],edx
|
mov cl,[value_sign]
|
||||||
mov [org_registers],0
|
sub dword [org_origin],eax
|
||||||
|
sbb dword [org_origin+4],edx
|
||||||
|
sbb [org_origin_sign],cl
|
||||||
|
jp org_value_ok
|
||||||
|
call recoverable_overflow
|
||||||
|
org_value_ok:
|
||||||
mov [org_start],edi
|
mov [org_start],edi
|
||||||
mov edx,[symbol_identifier]
|
mov edx,[symbol_identifier]
|
||||||
mov [org_symbol],edx
|
mov [org_symbol],edx
|
||||||
@ -436,7 +480,7 @@ label_directive:
|
|||||||
je reserved_word_used_as_symbol
|
je reserved_word_used_as_symbol
|
||||||
inc esi
|
inc esi
|
||||||
mov ebx,eax
|
mov ebx,eax
|
||||||
xor cl,cl
|
mov [label_size],0
|
||||||
lods byte [esi]
|
lods byte [esi]
|
||||||
cmp al,':'
|
cmp al,':'
|
||||||
je get_label_size
|
je get_label_size
|
||||||
@ -447,30 +491,12 @@ label_directive:
|
|||||||
lods word [esi]
|
lods word [esi]
|
||||||
cmp al,11h
|
cmp al,11h
|
||||||
jne invalid_argument
|
jne invalid_argument
|
||||||
mov cl,ah
|
mov [label_size],ah
|
||||||
label_size_ok:
|
label_size_ok:
|
||||||
mov eax,edi
|
|
||||||
xor edx,edx
|
|
||||||
sub eax,dword [org_origin]
|
|
||||||
sbb edx,dword [org_origin+4]
|
|
||||||
mov ebp,[org_registers]
|
|
||||||
cmp byte [esi],80h
|
cmp byte [esi],80h
|
||||||
je get_free_label_value
|
je get_free_label_value
|
||||||
mov ch,[labels_type]
|
call make_label
|
||||||
push [org_symbol]
|
jmp instruction_assembled
|
||||||
pop [address_symbol]
|
|
||||||
cmp [virtual_data],0
|
|
||||||
jne make_free_label
|
|
||||||
or byte [ebx+9],1
|
|
||||||
xchg eax,[ebx]
|
|
||||||
xchg edx,[ebx+4]
|
|
||||||
sub eax,[ebx]
|
|
||||||
sbb edx,[ebx+4]
|
|
||||||
mov dword [adjustment],eax
|
|
||||||
mov dword [adjustment+4],edx
|
|
||||||
or eax,edx
|
|
||||||
setne ah
|
|
||||||
jmp finish_label
|
|
||||||
get_free_label_value:
|
get_free_label_value:
|
||||||
inc esi
|
inc esi
|
||||||
lods byte [esi]
|
lods byte [esi]
|
||||||
@ -507,50 +533,9 @@ label_directive:
|
|||||||
mov [ebx+4],edx
|
mov [ebx+4],edx
|
||||||
setne al
|
setne al
|
||||||
or ah,al
|
or ah,al
|
||||||
finish_label:
|
|
||||||
cmp cl,[ebx+10]
|
|
||||||
mov [ebx+10],cl
|
|
||||||
setne al
|
|
||||||
or ah,al
|
|
||||||
cmp ch,[ebx+11]
|
|
||||||
mov [ebx+11],ch
|
|
||||||
setne al
|
|
||||||
or ah,al
|
|
||||||
cmp ebp,[ebx+12]
|
|
||||||
mov [ebx+12],ebp
|
|
||||||
setne al
|
|
||||||
or ah,al
|
|
||||||
or ch,ch
|
|
||||||
jz free_label_symbol_ok
|
|
||||||
mov edx,[address_symbol]
|
mov edx,[address_symbol]
|
||||||
cmp edx,[ebx+20]
|
mov cl,[label_size]
|
||||||
mov [ebx+20],edx
|
call finish_label_symbol
|
||||||
setne al
|
|
||||||
or ah,al
|
|
||||||
free_label_symbol_ok:
|
|
||||||
mov cx,[current_pass]
|
|
||||||
xchg [ebx+16],cx
|
|
||||||
mov edx,[current_line]
|
|
||||||
mov [ebx+28],edx
|
|
||||||
and byte [ebx+8],not 2
|
|
||||||
test byte [ebx+8],1
|
|
||||||
jz new_free_label
|
|
||||||
cmp cx,[ebx+16]
|
|
||||||
je symbol_already_defined
|
|
||||||
inc cx
|
|
||||||
sub cx,[ebx+16]
|
|
||||||
setnz al
|
|
||||||
or ah,al
|
|
||||||
jz instruction_assembled
|
|
||||||
test byte [ebx+8],8
|
|
||||||
jz instruction_assembled
|
|
||||||
mov cx,[current_pass]
|
|
||||||
cmp cx,[ebx+18]
|
|
||||||
jne instruction_assembled
|
|
||||||
or [next_pass_needed],-1
|
|
||||||
jmp instruction_assembled
|
|
||||||
new_free_label:
|
|
||||||
or byte [ebx+8],1
|
|
||||||
jmp instruction_assembled
|
jmp instruction_assembled
|
||||||
load_directive:
|
load_directive:
|
||||||
lods byte [esi]
|
lods byte [esi]
|
||||||
@ -571,8 +556,8 @@ load_directive:
|
|||||||
cmp al,8
|
cmp al,8
|
||||||
ja invalid_value
|
ja invalid_value
|
||||||
mov [operand_size],al
|
mov [operand_size],al
|
||||||
mov dword [value],0
|
and dword [value],0
|
||||||
mov dword [value+4],0
|
and dword [value+4],0
|
||||||
lods word [esi]
|
lods word [esi]
|
||||||
cmp ax,82h+'(' shl 8
|
cmp ax,82h+'(' shl 8
|
||||||
jne invalid_argument
|
jne invalid_argument
|
||||||
@ -603,13 +588,10 @@ load_directive:
|
|||||||
rep movs byte [edi],[esi]
|
rep movs byte [edi],[esi]
|
||||||
jmp value_loaded
|
jmp value_loaded
|
||||||
bad_load_address:
|
bad_load_address:
|
||||||
cmp [error_line],0
|
call recoverable_overflow
|
||||||
jne value_loaded
|
|
||||||
mov eax,[current_line]
|
|
||||||
mov [error_line],eax
|
|
||||||
mov [error],value_out_of_range
|
|
||||||
value_loaded:
|
value_loaded:
|
||||||
pop edi esi
|
pop edi esi
|
||||||
|
mov [value_sign],0
|
||||||
mov eax,dword [value]
|
mov eax,dword [value]
|
||||||
mov edx,dword [value+4]
|
mov edx,dword [value+4]
|
||||||
pop ebx
|
pop ebx
|
||||||
@ -627,6 +609,7 @@ store_directive:
|
|||||||
mov [operand_size],1
|
mov [operand_size],1
|
||||||
jmp store_value_ok
|
jmp store_value_ok
|
||||||
sized_store:
|
sized_store:
|
||||||
|
or [size_override],-1
|
||||||
call get_value
|
call get_value
|
||||||
store_value_ok:
|
store_value_ok:
|
||||||
cmp [value_type],0
|
cmp [value_type],0
|
||||||
@ -669,11 +652,7 @@ store_directive:
|
|||||||
jmp instruction_assembled
|
jmp instruction_assembled
|
||||||
bad_store_address:
|
bad_store_address:
|
||||||
pop edi esi
|
pop edi esi
|
||||||
cmp [error_line],0
|
call recoverable_overflow
|
||||||
jne instruction_assembled
|
|
||||||
mov eax,[current_line]
|
|
||||||
mov [error_line],eax
|
|
||||||
mov [error],value_out_of_range
|
|
||||||
jmp instruction_assembled
|
jmp instruction_assembled
|
||||||
|
|
||||||
display_directive:
|
display_directive:
|
||||||
@ -795,10 +774,8 @@ virtual_directive:
|
|||||||
je invalid_value
|
je invalid_value
|
||||||
call get_address_value
|
call get_address_value
|
||||||
mov ebp,[address_symbol]
|
mov ebp,[address_symbol]
|
||||||
xor ch,ch
|
|
||||||
or bh,bh
|
or bh,bh
|
||||||
jz set_virtual
|
setnz ch
|
||||||
mov ch,1
|
|
||||||
jmp set_virtual
|
jmp set_virtual
|
||||||
virtual_at_current:
|
virtual_at_current:
|
||||||
dec esi
|
dec esi
|
||||||
@ -807,8 +784,11 @@ virtual_directive:
|
|||||||
mov ebp,[org_symbol]
|
mov ebp,[org_symbol]
|
||||||
mov eax,edi
|
mov eax,edi
|
||||||
xor edx,edx
|
xor edx,edx
|
||||||
|
xor cl,cl
|
||||||
sub eax,dword [org_origin]
|
sub eax,dword [org_origin]
|
||||||
sbb edx,dword [org_origin+4]
|
sbb edx,dword [org_origin+4]
|
||||||
|
sbb cl,[org_origin_sign]
|
||||||
|
mov [address_sign],cl
|
||||||
mov bx,word [org_registers]
|
mov bx,word [org_registers]
|
||||||
mov cx,word [org_registers+2]
|
mov cx,word [org_registers+2]
|
||||||
xchg bh,bl
|
xchg bh,bl
|
||||||
@ -821,19 +801,27 @@ virtual_directive:
|
|||||||
mov byte [org_registers+3],cl
|
mov byte [org_registers+3],cl
|
||||||
call allocate_structure_data
|
call allocate_structure_data
|
||||||
mov word [ebx],virtual_directive-instruction_handler
|
mov word [ebx],virtual_directive-instruction_handler
|
||||||
|
mov cl,[address_sign]
|
||||||
not eax
|
not eax
|
||||||
not edx
|
not edx
|
||||||
|
not cl
|
||||||
add eax,1
|
add eax,1
|
||||||
adc edx,0
|
adc edx,0
|
||||||
|
adc cl,0
|
||||||
add eax,edi
|
add eax,edi
|
||||||
adc edx,0
|
adc edx,0
|
||||||
|
adc cl,0
|
||||||
xchg dword [org_origin],eax
|
xchg dword [org_origin],eax
|
||||||
xchg dword [org_origin+4],edx
|
xchg dword [org_origin+4],edx
|
||||||
|
xchg [org_origin_sign],cl
|
||||||
mov [ebx+10h],eax
|
mov [ebx+10h],eax
|
||||||
mov [ebx+14h],edx
|
mov [ebx+14h],edx
|
||||||
pop eax
|
pop eax
|
||||||
mov [ebx+18h],eax
|
mov [ebx+18h],eax
|
||||||
mov al,[virtual_data]
|
mov al,[virtual_data]
|
||||||
|
and al,0Fh
|
||||||
|
shl cl,4
|
||||||
|
or al,cl
|
||||||
mov [ebx+2],al
|
mov [ebx+2],al
|
||||||
mov al,[labels_type]
|
mov al,[labels_type]
|
||||||
mov [ebx+3],al
|
mov [ebx+3],al
|
||||||
@ -876,7 +864,14 @@ virtual_directive:
|
|||||||
call find_structure_data
|
call find_structure_data
|
||||||
jc unexpected_instruction
|
jc unexpected_instruction
|
||||||
mov al,[ebx+2]
|
mov al,[ebx+2]
|
||||||
|
mov ah,al
|
||||||
|
shr ah,4
|
||||||
|
and al,1
|
||||||
|
neg al
|
||||||
|
and ah,1
|
||||||
|
neg ah
|
||||||
mov [virtual_data],al
|
mov [virtual_data],al
|
||||||
|
mov [org_origin_sign],ah
|
||||||
mov al,[ebx+3]
|
mov al,[ebx+3]
|
||||||
mov [labels_type],al
|
mov [labels_type],al
|
||||||
mov eax,[ebx+10h]
|
mov eax,[ebx+10h]
|
||||||
@ -1339,7 +1334,7 @@ data_words:
|
|||||||
cmp al,'?'
|
cmp al,'?'
|
||||||
jne invalid_argument
|
jne invalid_argument
|
||||||
mov eax,edi
|
mov eax,edi
|
||||||
mov word [edi],0
|
and word [edi],0
|
||||||
scas word [edi]
|
scas word [edi]
|
||||||
jmp undefined_data
|
jmp undefined_data
|
||||||
ret
|
ret
|
||||||
@ -1377,7 +1372,7 @@ data_dwords:
|
|||||||
cmp al,'?'
|
cmp al,'?'
|
||||||
jne invalid_argument
|
jne invalid_argument
|
||||||
mov eax,edi
|
mov eax,edi
|
||||||
mov dword [edi],0
|
and dword [edi],0
|
||||||
scas dword [edi]
|
scas dword [edi]
|
||||||
jmp undefined_data
|
jmp undefined_data
|
||||||
get_dword:
|
get_dword:
|
||||||
@ -1420,9 +1415,9 @@ data_pwords:
|
|||||||
cmp al,'?'
|
cmp al,'?'
|
||||||
jne invalid_argument
|
jne invalid_argument
|
||||||
mov eax,edi
|
mov eax,edi
|
||||||
mov dword [edi],0
|
and dword [edi],0
|
||||||
scas dword [edi]
|
scas dword [edi]
|
||||||
mov word [edi],0
|
and word [edi],0
|
||||||
scas word [edi]
|
scas word [edi]
|
||||||
jmp undefined_data
|
jmp undefined_data
|
||||||
get_pword:
|
get_pword:
|
||||||
@ -1467,9 +1462,9 @@ data_qwords:
|
|||||||
cmp al,'?'
|
cmp al,'?'
|
||||||
jne invalid_argument
|
jne invalid_argument
|
||||||
mov eax,edi
|
mov eax,edi
|
||||||
mov dword [edi],0
|
and dword [edi],0
|
||||||
scas dword [edi]
|
scas dword [edi]
|
||||||
mov dword [edi],0
|
and dword [edi],0
|
||||||
scas dword [edi]
|
scas dword [edi]
|
||||||
jmp undefined_data
|
jmp undefined_data
|
||||||
get_qword:
|
get_qword:
|
||||||
@ -1487,11 +1482,11 @@ data_twords:
|
|||||||
cmp al,'?'
|
cmp al,'?'
|
||||||
jne invalid_argument
|
jne invalid_argument
|
||||||
mov eax,edi
|
mov eax,edi
|
||||||
mov dword [edi],0
|
and dword [edi],0
|
||||||
scas dword [edi]
|
scas dword [edi]
|
||||||
mov dword [edi],0
|
and dword [edi],0
|
||||||
scas dword [edi]
|
scas dword [edi]
|
||||||
mov word [edi],0
|
and word [edi],0
|
||||||
scas word [edi]
|
scas word [edi]
|
||||||
jmp undefined_data
|
jmp undefined_data
|
||||||
get_tword:
|
get_tword:
|
||||||
@ -1647,7 +1642,7 @@ data_file:
|
|||||||
mov esi,[eax]
|
mov esi,[eax]
|
||||||
test byte [eax+7],80h
|
test byte [eax+7],80h
|
||||||
jz get_current_path
|
jz get_current_path
|
||||||
mov eax,[eax+12]
|
mov eax,[eax+8]
|
||||||
jmp find_current_source_path
|
jmp find_current_source_path
|
||||||
get_current_path:
|
get_current_path:
|
||||||
lodsb
|
lodsb
|
||||||
@ -1665,15 +1660,31 @@ data_file:
|
|||||||
jmp cut_current_path
|
jmp cut_current_path
|
||||||
current_path_ok:
|
current_path_ok:
|
||||||
mov esi,[esp+4]
|
mov esi,[esp+4]
|
||||||
call preprocess_path
|
call expand_path
|
||||||
pop edx
|
pop edx
|
||||||
mov esi,edx
|
mov esi,edx
|
||||||
call open
|
call open
|
||||||
jnc file_opened
|
jnc file_opened
|
||||||
|
mov edx,[include_paths]
|
||||||
|
search_in_include_paths:
|
||||||
|
push edx esi
|
||||||
|
mov edi,esi
|
||||||
|
mov esi,[esp+4]
|
||||||
|
call get_include_directory
|
||||||
|
mov [esp+4],esi
|
||||||
|
mov esi,[esp+8]
|
||||||
|
call expand_path
|
||||||
|
pop edx
|
||||||
|
mov esi,edx
|
||||||
|
call open
|
||||||
|
pop edx
|
||||||
|
jnc file_opened
|
||||||
|
cmp byte [edx],0
|
||||||
|
jne search_in_include_paths
|
||||||
mov edi,esi
|
mov edi,esi
|
||||||
mov esi,[esp]
|
mov esi,[esp]
|
||||||
push edi
|
push edi
|
||||||
call preprocess_path
|
call expand_path
|
||||||
pop edx
|
pop edx
|
||||||
mov esi,edx
|
mov esi,edx
|
||||||
call open
|
call open
|
||||||
|
@ -68,6 +68,10 @@ avx_movshdup_instruction:
|
|||||||
or [vex_required],2
|
or [vex_required],2
|
||||||
mov [opcode_prefix],0F3h
|
mov [opcode_prefix],0F3h
|
||||||
mov [mmx_size],0
|
mov [mmx_size],0
|
||||||
|
jmp avx_instruction
|
||||||
|
avx_128bit_instruction:
|
||||||
|
mov [mmx_size],16
|
||||||
|
mov [opcode_prefix],66h
|
||||||
avx_instruction:
|
avx_instruction:
|
||||||
mov [base_code],0Fh
|
mov [base_code],0Fh
|
||||||
mov [extended_code],al
|
mov [extended_code],al
|
||||||
@ -207,8 +211,11 @@ avx_instruction:
|
|||||||
ret
|
ret
|
||||||
avx_smem:
|
avx_smem:
|
||||||
xchg al,[operand_size]
|
xchg al,[operand_size]
|
||||||
|
or al,al
|
||||||
|
jz avx_smem_ok
|
||||||
cmp al,[mmx_size]
|
cmp al,[mmx_size]
|
||||||
jne invalid_operand_size
|
jne invalid_operand_size
|
||||||
|
avx_smem_ok:
|
||||||
clc
|
clc
|
||||||
ret
|
ret
|
||||||
take_imm4_if_needed:
|
take_imm4_if_needed:
|
||||||
@ -229,23 +236,24 @@ avx_instruction:
|
|||||||
imm4_ok:
|
imm4_ok:
|
||||||
ret
|
ret
|
||||||
|
|
||||||
avx_128bit_instruction:
|
|
||||||
mov [mmx_size],16
|
|
||||||
mov [opcode_prefix],66h
|
|
||||||
jmp avx_instruction
|
|
||||||
avx_single_source_128bit_instruction_38:
|
avx_single_source_128bit_instruction_38:
|
||||||
or [vex_required],2
|
or [vex_required],2
|
||||||
avx_128bit_instruction_38:
|
avx_128bit_instruction_38:
|
||||||
mov [mmx_size],16
|
mov [mmx_size],16
|
||||||
|
jmp avx_instruction_38_setup
|
||||||
|
avx_single_source_instruction_38:
|
||||||
|
or [vex_required],2
|
||||||
|
avx_instruction_38:
|
||||||
|
mov [mmx_size],0
|
||||||
avx_instruction_38_setup:
|
avx_instruction_38_setup:
|
||||||
mov [opcode_prefix],66h
|
mov [opcode_prefix],66h
|
||||||
mov [supplemental_code],al
|
mov [supplemental_code],al
|
||||||
mov al,38h
|
mov al,38h
|
||||||
jmp avx_instruction
|
jmp avx_instruction
|
||||||
avx_single_source_instruction_38:
|
avx_instruction_38_w1:
|
||||||
or [vex_required],2
|
or [rex_prefix],8
|
||||||
mov [mmx_size],0
|
jmp avx_instruction_38
|
||||||
jmp avx_instruction_38_setup
|
|
||||||
avx_ss_instruction_3a_imm8:
|
avx_ss_instruction_3a_imm8:
|
||||||
mov [mmx_size],4
|
mov [mmx_size],4
|
||||||
jmp avx_instruction_3a_imm8_setup
|
jmp avx_instruction_3a_imm8_setup
|
||||||
@ -262,11 +270,6 @@ avx_triple_source_instruction_3a:
|
|||||||
mov [immediate_size],-1
|
mov [immediate_size],-1
|
||||||
mov byte [value],0
|
mov byte [value],0
|
||||||
jmp avx_instruction_3a_setup
|
jmp avx_instruction_3a_setup
|
||||||
avx_triple_source_128bit_instruction_3a:
|
|
||||||
mov [mmx_size],16
|
|
||||||
mov [immediate_size],-1
|
|
||||||
mov byte [value],0
|
|
||||||
jmp avx_instruction_3a_setup
|
|
||||||
avx_single_source_instruction_3a_imm8:
|
avx_single_source_instruction_3a_imm8:
|
||||||
or [vex_required],2
|
or [vex_required],2
|
||||||
avx_instruction_3a_imm8:
|
avx_instruction_3a_imm8:
|
||||||
@ -283,9 +286,21 @@ avx_pclmulqdq_instruction:
|
|||||||
mov [mmx_size],16
|
mov [mmx_size],16
|
||||||
mov al,44h
|
mov al,44h
|
||||||
jmp avx_instruction_3a_setup
|
jmp avx_instruction_3a_setup
|
||||||
|
|
||||||
|
avx_permq_instruction:
|
||||||
|
or [vex_required],2
|
||||||
|
or [rex_prefix],8
|
||||||
avx_perm2f128_instruction:
|
avx_perm2f128_instruction:
|
||||||
call setup_66_0f_3a
|
|
||||||
mov [immediate_size],1
|
mov [immediate_size],1
|
||||||
|
mov ah,3Ah
|
||||||
|
jmp avx_perm_instruction
|
||||||
|
avx_permd_instruction:
|
||||||
|
mov ah,38h
|
||||||
|
avx_perm_instruction:
|
||||||
|
mov [opcode_prefix],66h
|
||||||
|
mov [base_code],0Fh
|
||||||
|
mov [extended_code],ah
|
||||||
|
mov [supplemental_code],al
|
||||||
mov [mmx_size],0
|
mov [mmx_size],0
|
||||||
or [vex_required],1
|
or [vex_required],1
|
||||||
call take_avx_register
|
call take_avx_register
|
||||||
@ -293,12 +308,6 @@ avx_perm2f128_instruction:
|
|||||||
jne invalid_operand_size
|
jne invalid_operand_size
|
||||||
mov [postbyte_register],al
|
mov [postbyte_register],al
|
||||||
jmp avx_vex_reg
|
jmp avx_vex_reg
|
||||||
setup_66_0f_3a:
|
|
||||||
mov [opcode_prefix],66h
|
|
||||||
mov [base_code],0Fh
|
|
||||||
mov [extended_code],3Ah
|
|
||||||
mov [supplemental_code],al
|
|
||||||
ret
|
|
||||||
|
|
||||||
avx_movdqu_instruction:
|
avx_movdqu_instruction:
|
||||||
mov [opcode_prefix],0F3h
|
mov [opcode_prefix],0F3h
|
||||||
@ -340,7 +349,7 @@ avx_movntps_instruction:
|
|||||||
avx_lddqu_instruction:
|
avx_lddqu_instruction:
|
||||||
mov [opcode_prefix],0F2h
|
mov [opcode_prefix],0F2h
|
||||||
mov [mmx_size],0
|
mov [mmx_size],0
|
||||||
xor cl,cl
|
xor cx,cx
|
||||||
avx_load_instruction:
|
avx_load_instruction:
|
||||||
mov [base_code],0Fh
|
mov [base_code],0Fh
|
||||||
mov [extended_code],al
|
mov [extended_code],al
|
||||||
@ -362,6 +371,8 @@ avx_lddqu_instruction:
|
|||||||
jne invalid_operand
|
jne invalid_operand
|
||||||
lods byte [esi]
|
lods byte [esi]
|
||||||
call get_size_operator
|
call get_size_operator
|
||||||
|
cmp al,10h
|
||||||
|
je avx_load_reg_reg
|
||||||
cmp al,'['
|
cmp al,'['
|
||||||
jne invalid_operand
|
jne invalid_operand
|
||||||
call get_address
|
call get_address
|
||||||
@ -376,25 +387,50 @@ avx_lddqu_instruction:
|
|||||||
cmp al,ah
|
cmp al,ah
|
||||||
jne invalid_operand_size
|
jne invalid_operand_size
|
||||||
jmp instruction_ready
|
jmp instruction_ready
|
||||||
|
avx_load_reg_reg:
|
||||||
|
lods byte [esi]
|
||||||
|
call convert_avx_register
|
||||||
|
cmp ch,ah
|
||||||
|
jne invalid_operand
|
||||||
|
mov bl,al
|
||||||
|
pop eax
|
||||||
|
xchg ah,[operand_size]
|
||||||
|
mov [postbyte_register],al
|
||||||
|
jmp nomem_instruction_ready
|
||||||
|
|
||||||
avx_movntdqa_instruction:
|
avx_movntdqa_instruction:
|
||||||
mov [mmx_size],16
|
mov [mmx_size],0
|
||||||
mov al,2Ah
|
xor cx,cx
|
||||||
mov cl,16
|
|
||||||
jmp avx_load_instruction_38
|
jmp avx_load_instruction_38
|
||||||
avx_broadcastss_instruction:
|
avx_broadcastss_instruction:
|
||||||
mov [mmx_size],4
|
mov [mmx_size],4
|
||||||
mov al,18h
|
|
||||||
xor cl,cl
|
xor cl,cl
|
||||||
|
mov ch,16
|
||||||
jmp avx_load_instruction_38
|
jmp avx_load_instruction_38
|
||||||
avx_broadcastsd_instruction:
|
avx_broadcastsd_instruction:
|
||||||
mov [mmx_size],8
|
mov [mmx_size],8
|
||||||
mov al,19h
|
|
||||||
mov cl,32
|
mov cl,32
|
||||||
|
mov ch,16
|
||||||
|
jmp avx_load_instruction_38
|
||||||
|
avx_pbroadcastb_instruction:
|
||||||
|
mov [mmx_size],1
|
||||||
|
jmp avx_pbroadcast_instruction
|
||||||
|
avx_pbroadcastw_instruction:
|
||||||
|
mov [mmx_size],2
|
||||||
|
jmp avx_pbroadcast_instruction
|
||||||
|
avx_pbroadcastd_instruction:
|
||||||
|
mov [mmx_size],4
|
||||||
|
jmp avx_pbroadcast_instruction
|
||||||
|
avx_pbroadcastq_instruction:
|
||||||
|
mov [mmx_size],8
|
||||||
|
avx_pbroadcast_instruction:
|
||||||
|
xor cl,cl
|
||||||
|
mov ch,16
|
||||||
jmp avx_load_instruction_38
|
jmp avx_load_instruction_38
|
||||||
avx_broadcastf128_instruction:
|
avx_broadcastf128_instruction:
|
||||||
mov [mmx_size],16
|
mov [mmx_size],16
|
||||||
mov al,1Ah
|
|
||||||
mov cl,32
|
mov cl,32
|
||||||
|
xor ch,ch
|
||||||
avx_load_instruction_38:
|
avx_load_instruction_38:
|
||||||
mov [opcode_prefix],66h
|
mov [opcode_prefix],66h
|
||||||
mov [supplemental_code],al
|
mov [supplemental_code],al
|
||||||
@ -467,11 +503,10 @@ avx_movhlps_instruction:
|
|||||||
call take_avx_register
|
call take_avx_register
|
||||||
mov bl,al
|
mov bl,al
|
||||||
jmp nomem_instruction_ready
|
jmp nomem_instruction_ready
|
||||||
|
avx_maskmov_w1_instruction:
|
||||||
|
or [rex_prefix],8
|
||||||
avx_maskmov_instruction:
|
avx_maskmov_instruction:
|
||||||
mov [opcode_prefix],66h
|
call setup_66_0f_38
|
||||||
mov [base_code],0Fh
|
|
||||||
mov [extended_code],38h
|
|
||||||
mov [supplemental_code],al
|
|
||||||
mov [mmx_size],0
|
mov [mmx_size],0
|
||||||
or [vex_required],1
|
or [vex_required],1
|
||||||
lods byte [esi]
|
lods byte [esi]
|
||||||
@ -508,6 +543,12 @@ avx_maskmov_instruction:
|
|||||||
mov [postbyte_register],al
|
mov [postbyte_register],al
|
||||||
add [supplemental_code],2
|
add [supplemental_code],2
|
||||||
jmp instruction_ready
|
jmp instruction_ready
|
||||||
|
setup_66_0f_38:
|
||||||
|
mov [extended_code],38h
|
||||||
|
mov [supplemental_code],al
|
||||||
|
mov [base_code],0Fh
|
||||||
|
mov [opcode_prefix],66h
|
||||||
|
ret
|
||||||
avx_movd_instruction:
|
avx_movd_instruction:
|
||||||
or [vex_required],1
|
or [vex_required],1
|
||||||
jmp movd_instruction
|
jmp movd_instruction
|
||||||
@ -638,13 +679,14 @@ avx_cvtps2pd_instruction:
|
|||||||
jne invalid_operand
|
jne invalid_operand
|
||||||
mov [mmx_size],cl
|
mov [mmx_size],cl
|
||||||
call get_address
|
call get_address
|
||||||
mov al,[operand_size]
|
mov al,[mmx_size]
|
||||||
|
mov ah,al
|
||||||
|
xchg al,[operand_size]
|
||||||
or al,al
|
or al,al
|
||||||
jz instruction_ready
|
jz instruction_ready
|
||||||
shl al,1
|
shl al,1
|
||||||
cmp al,[mmx_size]
|
cmp al,ah
|
||||||
jne invalid_operand_size
|
jne invalid_operand_size
|
||||||
mov [operand_size],al
|
|
||||||
jmp instruction_ready
|
jmp instruction_ready
|
||||||
avx_cvtpd2dq_instruction:
|
avx_cvtpd2dq_instruction:
|
||||||
mov [opcode_prefix],0F2h
|
mov [opcode_prefix],0F2h
|
||||||
@ -753,6 +795,12 @@ avx_extractf128_instruction:
|
|||||||
mov [postbyte_register],al
|
mov [postbyte_register],al
|
||||||
pop ebx
|
pop ebx
|
||||||
jmp mmx_nomem_imm8
|
jmp mmx_nomem_imm8
|
||||||
|
setup_66_0f_3a:
|
||||||
|
mov [extended_code],3Ah
|
||||||
|
mov [supplemental_code],al
|
||||||
|
mov [base_code],0Fh
|
||||||
|
mov [opcode_prefix],66h
|
||||||
|
ret
|
||||||
avx_insertf128_instruction:
|
avx_insertf128_instruction:
|
||||||
or [vex_required],1
|
or [vex_required],1
|
||||||
call setup_66_0f_3a
|
call setup_66_0f_3a
|
||||||
@ -840,10 +888,46 @@ avx_maskmovdqu_instruction:
|
|||||||
jmp maskmovdqu_instruction
|
jmp maskmovdqu_instruction
|
||||||
avx_pmovmskb_instruction:
|
avx_pmovmskb_instruction:
|
||||||
or [vex_required],1
|
or [vex_required],1
|
||||||
jmp pmovmskb_instruction
|
mov [opcode_prefix],66h
|
||||||
|
mov [base_code],0Fh
|
||||||
|
mov [extended_code],al
|
||||||
|
lods byte [esi]
|
||||||
|
call get_size_operator
|
||||||
|
cmp al,10h
|
||||||
|
jne invalid_operand
|
||||||
|
lods byte [esi]
|
||||||
|
call convert_register
|
||||||
|
cmp ah,4
|
||||||
|
je avx_pmovmskb_reg_size_ok
|
||||||
|
cmp [code_type],64
|
||||||
|
jne invalid_operand_size
|
||||||
|
cmp ah,8
|
||||||
|
jnz invalid_operand_size
|
||||||
|
avx_pmovmskb_reg_size_ok:
|
||||||
|
mov [postbyte_register],al
|
||||||
|
mov [operand_size],0
|
||||||
|
lods byte [esi]
|
||||||
|
cmp al,','
|
||||||
|
jne invalid_operand
|
||||||
|
call take_avx_register
|
||||||
|
mov bl,al
|
||||||
|
jmp nomem_instruction_ready
|
||||||
avx_pshufd_instruction:
|
avx_pshufd_instruction:
|
||||||
or [vex_required],1
|
or [vex_required],1
|
||||||
jmp pshufd_instruction
|
mov [mmx_size],0
|
||||||
|
mov [opcode_prefix],al
|
||||||
|
mov [base_code],0Fh
|
||||||
|
mov [extended_code],70h
|
||||||
|
call take_avx_register
|
||||||
|
mov [postbyte_register],al
|
||||||
|
lods byte [esi]
|
||||||
|
cmp al,','
|
||||||
|
jne invalid_operand
|
||||||
|
call take_avx_rm
|
||||||
|
jnc mmx_imm8
|
||||||
|
mov bl,al
|
||||||
|
jmp mmx_nomem_imm8
|
||||||
|
|
||||||
avx_pmovsxbw_instruction:
|
avx_pmovsxbw_instruction:
|
||||||
mov [mmx_size],8
|
mov [mmx_size],8
|
||||||
jmp avx_pmovsx_instruction
|
jmp avx_pmovsx_instruction
|
||||||
@ -863,7 +947,40 @@ avx_pmovsxdq_instruction:
|
|||||||
mov [mmx_size],8
|
mov [mmx_size],8
|
||||||
avx_pmovsx_instruction:
|
avx_pmovsx_instruction:
|
||||||
or [vex_required],1
|
or [vex_required],1
|
||||||
jmp pmovsx_instruction
|
call setup_66_0f_38
|
||||||
|
call take_avx_register
|
||||||
|
mov [postbyte_register],al
|
||||||
|
lods byte [esi]
|
||||||
|
cmp al,','
|
||||||
|
jne invalid_operand
|
||||||
|
xor al,al
|
||||||
|
xchg al,[operand_size]
|
||||||
|
push eax
|
||||||
|
lods byte [esi]
|
||||||
|
call get_size_operator
|
||||||
|
cmp al,10h
|
||||||
|
je avx_pmovsx_xmmreg_reg
|
||||||
|
cmp al,'['
|
||||||
|
jne invalid_operand
|
||||||
|
call get_address
|
||||||
|
pop eax
|
||||||
|
cmp al,32
|
||||||
|
jb avx_pmovsx_size_check
|
||||||
|
shl [mmx_size],1
|
||||||
|
avx_pmovsx_size_check:
|
||||||
|
xchg al,[operand_size]
|
||||||
|
test al,al
|
||||||
|
jz instruction_ready
|
||||||
|
cmp al,[mmx_size]
|
||||||
|
jne invalid_operand_size
|
||||||
|
jmp instruction_ready
|
||||||
|
avx_pmovsx_xmmreg_reg:
|
||||||
|
lods byte [esi]
|
||||||
|
call convert_xmm_register
|
||||||
|
mov bl,al
|
||||||
|
pop eax
|
||||||
|
mov [operand_size],al
|
||||||
|
jmp nomem_instruction_ready
|
||||||
avx_permil_instruction:
|
avx_permil_instruction:
|
||||||
call setup_66_0f_3a
|
call setup_66_0f_3a
|
||||||
or [vex_required],1
|
or [vex_required],1
|
||||||
@ -915,30 +1032,12 @@ avx_permil_instruction:
|
|||||||
avx_permil_reg_mem:
|
avx_permil_reg_mem:
|
||||||
call get_address
|
call get_address
|
||||||
jmp mmx_imm8
|
jmp mmx_imm8
|
||||||
avx_pslldq_instruction:
|
|
||||||
mov [postbyte_register],al
|
|
||||||
mov [opcode_prefix],66h
|
|
||||||
mov [base_code],0Fh
|
|
||||||
mov [extended_code],73h
|
|
||||||
or [vex_required],1
|
|
||||||
call take_avx_register
|
|
||||||
cmp ah,16
|
|
||||||
jne invalid_operand
|
|
||||||
mov [vex_register],al
|
|
||||||
lods byte [esi]
|
|
||||||
cmp al,','
|
|
||||||
jne invalid_operand
|
|
||||||
call take_avx_register
|
|
||||||
mov bl,al
|
|
||||||
jmp mmx_nomem_imm8
|
|
||||||
avx_bit_shift_instruction:
|
avx_bit_shift_instruction:
|
||||||
mov [opcode_prefix],66h
|
mov [opcode_prefix],66h
|
||||||
mov [base_code],0Fh
|
mov [base_code],0Fh
|
||||||
mov [extended_code],al
|
mov [extended_code],al
|
||||||
or [vex_required],1
|
or [vex_required],1
|
||||||
call take_avx_register
|
call take_avx_register
|
||||||
cmp ah,16
|
|
||||||
jne invalid_operand
|
|
||||||
mov [postbyte_register],al
|
mov [postbyte_register],al
|
||||||
lods byte [esi]
|
lods byte [esi]
|
||||||
cmp al,','
|
cmp al,','
|
||||||
@ -953,12 +1052,12 @@ avx_bit_shift_instruction:
|
|||||||
xchg cl,[operand_size]
|
xchg cl,[operand_size]
|
||||||
lods byte [esi]
|
lods byte [esi]
|
||||||
call get_size_operator
|
call get_size_operator
|
||||||
xchg cl,[operand_size]
|
|
||||||
pop esi
|
|
||||||
cmp al,10h
|
cmp al,10h
|
||||||
je avx_bit_shift_regs_reg
|
je avx_bit_shift_regs_reg
|
||||||
|
pop esi
|
||||||
cmp al,'['
|
cmp al,'['
|
||||||
je avx_bit_shift_regs_mem
|
je avx_bit_shift_regs_mem
|
||||||
|
xchg cl,[operand_size]
|
||||||
dec esi
|
dec esi
|
||||||
mov bl,[extended_code]
|
mov bl,[extended_code]
|
||||||
mov al,bl
|
mov al,bl
|
||||||
@ -972,14 +1071,38 @@ avx_bit_shift_instruction:
|
|||||||
xchg bl,[vex_register]
|
xchg bl,[vex_register]
|
||||||
jmp mmx_nomem_imm8
|
jmp mmx_nomem_imm8
|
||||||
avx_bit_shift_regs_reg:
|
avx_bit_shift_regs_reg:
|
||||||
call take_avx_register
|
pop eax
|
||||||
|
lods byte [esi]
|
||||||
|
call convert_xmm_register
|
||||||
|
xchg cl,[operand_size]
|
||||||
mov bl,al
|
mov bl,al
|
||||||
jmp nomem_instruction_ready
|
jmp nomem_instruction_ready
|
||||||
avx_bit_shift_regs_mem:
|
avx_bit_shift_regs_mem:
|
||||||
|
push ecx
|
||||||
lods byte [esi]
|
lods byte [esi]
|
||||||
call get_size_operator
|
call get_size_operator
|
||||||
call get_address
|
call get_address
|
||||||
|
pop eax
|
||||||
|
xchg al,[operand_size]
|
||||||
|
test al,al
|
||||||
|
jz instruction_ready
|
||||||
|
cmp al,16
|
||||||
|
jne invalid_operand_size
|
||||||
jmp instruction_ready
|
jmp instruction_ready
|
||||||
|
avx_pslldq_instruction:
|
||||||
|
mov [postbyte_register],al
|
||||||
|
mov [opcode_prefix],66h
|
||||||
|
mov [base_code],0Fh
|
||||||
|
mov [extended_code],73h
|
||||||
|
or [vex_required],1
|
||||||
|
call take_avx_register
|
||||||
|
mov [vex_register],al
|
||||||
|
lods byte [esi]
|
||||||
|
cmp al,','
|
||||||
|
jne invalid_operand
|
||||||
|
call take_avx_register
|
||||||
|
mov bl,al
|
||||||
|
jmp mmx_nomem_imm8
|
||||||
|
|
||||||
vzeroall_instruction:
|
vzeroall_instruction:
|
||||||
mov [operand_size],32
|
mov [operand_size],32
|
||||||
@ -1026,6 +1149,166 @@ vcvtps2ph_instruction:
|
|||||||
mov [postbyte_register],al
|
mov [postbyte_register],al
|
||||||
jmp mmx_nomem_imm8
|
jmp mmx_nomem_imm8
|
||||||
|
|
||||||
|
bmi_instruction:
|
||||||
|
mov [base_code],0Fh
|
||||||
|
mov [extended_code],38h
|
||||||
|
mov [supplemental_code],0F3h
|
||||||
|
mov [postbyte_register],al
|
||||||
|
bmi_reg:
|
||||||
|
or [vex_required],1
|
||||||
|
lods byte [esi]
|
||||||
|
call get_size_operator
|
||||||
|
cmp al,10h
|
||||||
|
jne invalid_operand
|
||||||
|
lods byte [esi]
|
||||||
|
call convert_register
|
||||||
|
mov [vex_register],al
|
||||||
|
lods byte [esi]
|
||||||
|
cmp al,','
|
||||||
|
jne invalid_operand
|
||||||
|
lods byte [esi]
|
||||||
|
call get_size_operator
|
||||||
|
cmp al,10h
|
||||||
|
je bmi_reg_reg
|
||||||
|
cmp al,'['
|
||||||
|
jne invalid_argument
|
||||||
|
call get_address
|
||||||
|
call operand_32or64
|
||||||
|
jmp instruction_ready
|
||||||
|
bmi_reg_reg:
|
||||||
|
lods byte [esi]
|
||||||
|
call convert_register
|
||||||
|
mov bl,al
|
||||||
|
call operand_32or64
|
||||||
|
jmp nomem_instruction_ready
|
||||||
|
operand_32or64:
|
||||||
|
mov al,[operand_size]
|
||||||
|
cmp al,4
|
||||||
|
je operand_32or64_ok
|
||||||
|
cmp al,8
|
||||||
|
jne invalid_operand_size
|
||||||
|
cmp [code_type],64
|
||||||
|
jne invalid_operand
|
||||||
|
or [rex_prefix],8
|
||||||
|
operand_32or64_ok:
|
||||||
|
ret
|
||||||
|
pdep_instruction:
|
||||||
|
mov [opcode_prefix],0F2h
|
||||||
|
jmp andn_instruction
|
||||||
|
pext_instruction:
|
||||||
|
mov [opcode_prefix],0F3h
|
||||||
|
andn_instruction:
|
||||||
|
mov [base_code],0Fh
|
||||||
|
mov [extended_code],38h
|
||||||
|
mov [supplemental_code],al
|
||||||
|
or [vex_required],1
|
||||||
|
lods byte [esi]
|
||||||
|
call get_size_operator
|
||||||
|
cmp al,10h
|
||||||
|
jne invalid_operand
|
||||||
|
lods byte [esi]
|
||||||
|
call convert_register
|
||||||
|
mov [postbyte_register],al
|
||||||
|
lods byte [esi]
|
||||||
|
cmp al,','
|
||||||
|
jne invalid_operand
|
||||||
|
jmp bmi_reg
|
||||||
|
sarx_instruction:
|
||||||
|
mov [opcode_prefix],0F3h
|
||||||
|
jmp bzhi_instruction
|
||||||
|
shrx_instruction:
|
||||||
|
mov [opcode_prefix],0F2h
|
||||||
|
jmp bzhi_instruction
|
||||||
|
shlx_instruction:
|
||||||
|
mov [opcode_prefix],66h
|
||||||
|
bzhi_instruction:
|
||||||
|
mov [base_code],0Fh
|
||||||
|
mov [extended_code],38h
|
||||||
|
mov [supplemental_code],al
|
||||||
|
or [vex_required],1
|
||||||
|
call get_reg_mem
|
||||||
|
jc bzhi_reg_reg
|
||||||
|
call get_vex_source_register
|
||||||
|
jc invalid_operand
|
||||||
|
call operand_32or64
|
||||||
|
jmp instruction_ready
|
||||||
|
bzhi_reg_reg:
|
||||||
|
call get_vex_source_register
|
||||||
|
jc invalid_operand
|
||||||
|
call operand_32or64
|
||||||
|
jmp nomem_instruction_ready
|
||||||
|
get_vex_source_register:
|
||||||
|
lods byte [esi]
|
||||||
|
cmp al,','
|
||||||
|
jne invalid_operand
|
||||||
|
lods byte [esi]
|
||||||
|
call get_size_operator
|
||||||
|
cmp al,10h
|
||||||
|
jne no_vex_source_register
|
||||||
|
lods byte [esi]
|
||||||
|
call convert_register
|
||||||
|
mov [vex_register],al
|
||||||
|
clc
|
||||||
|
ret
|
||||||
|
no_vex_source_register:
|
||||||
|
stc
|
||||||
|
ret
|
||||||
|
bextr_instruction:
|
||||||
|
mov [base_code],0Fh
|
||||||
|
mov [extended_code],38h
|
||||||
|
mov [supplemental_code],al
|
||||||
|
or [vex_required],1
|
||||||
|
call get_reg_mem
|
||||||
|
jc bextr_reg_reg
|
||||||
|
call get_vex_source_register
|
||||||
|
jc bextr_reg_mem_imm32
|
||||||
|
call operand_32or64
|
||||||
|
jmp instruction_ready
|
||||||
|
bextr_reg_reg:
|
||||||
|
call get_vex_source_register
|
||||||
|
jc bextr_reg_reg_imm32
|
||||||
|
call operand_32or64
|
||||||
|
jmp nomem_instruction_ready
|
||||||
|
setup_bextr_imm_opcode:
|
||||||
|
mov [xop_opcode_map],0Ah
|
||||||
|
mov [base_code],10h
|
||||||
|
call operand_32or64
|
||||||
|
ret
|
||||||
|
bextr_reg_mem_imm32:
|
||||||
|
call get_imm32
|
||||||
|
call setup_bextr_imm_opcode
|
||||||
|
jmp store_instruction_with_imm32
|
||||||
|
bextr_reg_reg_imm32:
|
||||||
|
call get_imm32
|
||||||
|
call setup_bextr_imm_opcode
|
||||||
|
store_nomem_instruction_with_imm32:
|
||||||
|
call store_nomem_instruction
|
||||||
|
mov eax,dword [value]
|
||||||
|
call mark_relocation
|
||||||
|
stos dword [edi]
|
||||||
|
jmp instruction_assembled
|
||||||
|
get_imm32:
|
||||||
|
cmp al,'('
|
||||||
|
jne invalid_operand
|
||||||
|
push edx ebx ecx
|
||||||
|
call get_dword_value
|
||||||
|
mov dword [value],eax
|
||||||
|
pop ecx ebx edx
|
||||||
|
ret
|
||||||
|
rorx_instruction:
|
||||||
|
mov [opcode_prefix],0F2h
|
||||||
|
mov [base_code],0Fh
|
||||||
|
mov [extended_code],3Ah
|
||||||
|
mov [supplemental_code],al
|
||||||
|
or [vex_required],1
|
||||||
|
call get_reg_mem
|
||||||
|
jc rorx_reg_reg
|
||||||
|
call operand_32or64
|
||||||
|
jmp mmx_imm8
|
||||||
|
rorx_reg_reg:
|
||||||
|
call operand_32or64
|
||||||
|
jmp mmx_nomem_imm8
|
||||||
|
|
||||||
fma_instruction_pd:
|
fma_instruction_pd:
|
||||||
or [rex_prefix],8
|
or [rex_prefix],8
|
||||||
fma_instruction_ps:
|
fma_instruction_ps:
|
||||||
@ -1219,6 +1502,157 @@ vpermil2_instruction:
|
|||||||
mov [mmx_size],0
|
mov [mmx_size],0
|
||||||
jmp avx_instruction
|
jmp avx_instruction
|
||||||
|
|
||||||
|
tbm_instruction:
|
||||||
|
mov [xop_opcode_map],9
|
||||||
|
mov ah,al
|
||||||
|
shr ah,4
|
||||||
|
and al,111b
|
||||||
|
mov [base_code],ah
|
||||||
|
mov [postbyte_register],al
|
||||||
|
jmp bmi_reg
|
||||||
|
|
||||||
|
llwpcb_instruction:
|
||||||
|
or [vex_required],1
|
||||||
|
mov [xop_opcode_map],9
|
||||||
|
mov [base_code],12h
|
||||||
|
mov [postbyte_register],al
|
||||||
|
lods byte [esi]
|
||||||
|
call get_size_operator
|
||||||
|
cmp al,10h
|
||||||
|
jne invalid_operand
|
||||||
|
lods byte [esi]
|
||||||
|
call convert_register
|
||||||
|
mov bl,al
|
||||||
|
call operand_32or64
|
||||||
|
jmp nomem_instruction_ready
|
||||||
|
lwpins_instruction:
|
||||||
|
or [vex_required],1
|
||||||
|
mov [xop_opcode_map],0Ah
|
||||||
|
mov [base_code],12h
|
||||||
|
mov [vex_register],al
|
||||||
|
lods byte [esi]
|
||||||
|
call get_size_operator
|
||||||
|
cmp al,10h
|
||||||
|
jne invalid_operand
|
||||||
|
lods byte [esi]
|
||||||
|
call convert_register
|
||||||
|
mov [postbyte_register],al
|
||||||
|
lods byte [esi]
|
||||||
|
cmp al,','
|
||||||
|
jne invalid_operand
|
||||||
|
xor cl,cl
|
||||||
|
xchg cl,[operand_size]
|
||||||
|
lods byte [esi]
|
||||||
|
call get_size_operator
|
||||||
|
cmp al,10h
|
||||||
|
je lwpins_reg_reg
|
||||||
|
cmp al,'['
|
||||||
|
jne invalid_argument
|
||||||
|
push ecx
|
||||||
|
call get_address
|
||||||
|
pop eax
|
||||||
|
xchg al,[operand_size]
|
||||||
|
test al,al
|
||||||
|
jz lwpins_reg_mem_size_ok
|
||||||
|
cmp al,4
|
||||||
|
jne invalid_operand_size
|
||||||
|
lwpins_reg_mem_size_ok:
|
||||||
|
call prepare_lwpins
|
||||||
|
jmp store_instruction_with_imm32
|
||||||
|
lwpins_reg_reg:
|
||||||
|
lods byte [esi]
|
||||||
|
call convert_register
|
||||||
|
cmp ah,4
|
||||||
|
jne invalid_operand_size
|
||||||
|
mov [operand_size],cl
|
||||||
|
mov bl,al
|
||||||
|
call prepare_lwpins
|
||||||
|
jmp store_nomem_instruction_with_imm32
|
||||||
|
prepare_lwpins:
|
||||||
|
lods byte [esi]
|
||||||
|
cmp al,','
|
||||||
|
jne invalid_operand
|
||||||
|
lods byte [esi]
|
||||||
|
call get_imm32
|
||||||
|
call operand_32or64
|
||||||
|
mov al,[vex_register]
|
||||||
|
xchg al,[postbyte_register]
|
||||||
|
mov [vex_register],al
|
||||||
|
ret
|
||||||
|
|
||||||
|
gather_instruction_pd:
|
||||||
|
or [rex_prefix],8
|
||||||
|
gather_instruction_ps:
|
||||||
|
call setup_66_0f_38
|
||||||
|
or [vex_required],4
|
||||||
|
call take_avx_register
|
||||||
|
mov [postbyte_register],al
|
||||||
|
lods byte [esi]
|
||||||
|
cmp al,','
|
||||||
|
jne invalid_operand
|
||||||
|
xor cl,cl
|
||||||
|
xchg cl,[operand_size]
|
||||||
|
push ecx
|
||||||
|
lods byte [esi]
|
||||||
|
call get_size_operator
|
||||||
|
cmp al,'['
|
||||||
|
jne invalid_argument
|
||||||
|
call get_address
|
||||||
|
pop eax
|
||||||
|
xchg al,[operand_size]
|
||||||
|
test al,al
|
||||||
|
jz gather_elements_size_ok
|
||||||
|
test [rex_prefix],8
|
||||||
|
jnz gather_elements_64bit
|
||||||
|
cmp al,4
|
||||||
|
jne invalid_operand_size
|
||||||
|
jmp gather_elements_size_ok
|
||||||
|
gather_elements_64bit:
|
||||||
|
cmp al,8
|
||||||
|
jne invalid_operand_size
|
||||||
|
gather_elements_size_ok:
|
||||||
|
lods byte [esi]
|
||||||
|
cmp al,','
|
||||||
|
jne invalid_operand
|
||||||
|
call take_avx_register
|
||||||
|
mov [vex_register],al
|
||||||
|
cmp al,[postbyte_register]
|
||||||
|
je disallowed_combination_of_registers
|
||||||
|
mov al,bl
|
||||||
|
and al,1111b
|
||||||
|
cmp al,[postbyte_register]
|
||||||
|
je disallowed_combination_of_registers
|
||||||
|
cmp al,[vex_register]
|
||||||
|
je disallowed_combination_of_registers
|
||||||
|
mov al,bl
|
||||||
|
shr al,4
|
||||||
|
cmp al,0Ch
|
||||||
|
je gather_vr_128bit
|
||||||
|
mov al,[rex_prefix]
|
||||||
|
shr al,3
|
||||||
|
xor al,[supplemental_code]
|
||||||
|
test al,1
|
||||||
|
jz gather_256bit
|
||||||
|
test [supplemental_code],1
|
||||||
|
jz invalid_operand_size
|
||||||
|
mov al,32
|
||||||
|
xchg al,[operand_size]
|
||||||
|
cmp al,16
|
||||||
|
jne invalid_operand_size
|
||||||
|
jmp instruction_ready
|
||||||
|
gather_256bit:
|
||||||
|
cmp ah,32
|
||||||
|
jne invalid_operand_size
|
||||||
|
jmp instruction_ready
|
||||||
|
gather_vr_128bit:
|
||||||
|
cmp ah,16
|
||||||
|
je instruction_ready
|
||||||
|
test [supplemental_code],1
|
||||||
|
jnz invalid_operand_size
|
||||||
|
test [rex_prefix],8
|
||||||
|
jz invalid_operand_size
|
||||||
|
jmp instruction_ready
|
||||||
|
|
||||||
take_avx_register:
|
take_avx_register:
|
||||||
lods byte [esi]
|
lods byte [esi]
|
||||||
call get_size_operator
|
call get_size_operator
|
||||||
@ -1276,7 +1710,7 @@ store_vex_instruction_code:
|
|||||||
cmp ah,0F2h
|
cmp ah,0F2h
|
||||||
je vex_f2
|
je vex_f2
|
||||||
test ah,ah
|
test ah,ah
|
||||||
jnz prefix_conflict
|
jnz disallowed_combination_of_registers
|
||||||
ret
|
ret
|
||||||
vex_f2:
|
vex_f2:
|
||||||
or al,11b
|
or al,11b
|
||||||
|
@ -72,8 +72,8 @@ invalid_address_size:
|
|||||||
address_sizes_do_not_agree:
|
address_sizes_do_not_agree:
|
||||||
push _address_sizes_do_not_agree
|
push _address_sizes_do_not_agree
|
||||||
jmp error_with_source
|
jmp error_with_source
|
||||||
prefix_conflict:
|
disallowed_combination_of_registers:
|
||||||
push _prefix_conflict
|
push _disallowed_combination_of_registers
|
||||||
jmp error_with_source
|
jmp error_with_source
|
||||||
long_immediate_not_encodable:
|
long_immediate_not_encodable:
|
||||||
push _long_immediate_not_encodable
|
push _long_immediate_not_encodable
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -134,11 +134,39 @@ convert_number:
|
|||||||
symbol_value:
|
symbol_value:
|
||||||
cmp [source_start],0
|
cmp [source_start],0
|
||||||
je preprocessor_value
|
je preprocessor_value
|
||||||
push edi
|
push edi esi
|
||||||
mov edi,address_registers
|
lods word [esi]
|
||||||
call get_operator
|
cmp al,1Ah
|
||||||
or al,al
|
jne no_address_register
|
||||||
jnz register_value
|
movzx ecx,ah
|
||||||
|
call get_symbol
|
||||||
|
jc no_address_register
|
||||||
|
cmp al,10h
|
||||||
|
jne no_address_register
|
||||||
|
mov al,ah
|
||||||
|
shr ah,4
|
||||||
|
cmp ah,4
|
||||||
|
je register_value
|
||||||
|
cmp ah,8
|
||||||
|
je register_value
|
||||||
|
cmp ah,0Ch
|
||||||
|
je register_value
|
||||||
|
cmp ah,0Dh
|
||||||
|
je register_value
|
||||||
|
cmp ah,0Fh
|
||||||
|
je register_value
|
||||||
|
cmp ah,2
|
||||||
|
jne no_address_register
|
||||||
|
cmp al,23h
|
||||||
|
je register_value
|
||||||
|
cmp al,25h
|
||||||
|
je register_value
|
||||||
|
cmp al,26h
|
||||||
|
je register_value
|
||||||
|
cmp al,27h
|
||||||
|
je register_value
|
||||||
|
no_address_register:
|
||||||
|
pop esi
|
||||||
mov edi,directive_operators
|
mov edi,directive_operators
|
||||||
call get_operator
|
call get_operator
|
||||||
pop edi
|
pop edi
|
||||||
@ -158,7 +186,7 @@ convert_number:
|
|||||||
mov eax,0Fh
|
mov eax,0Fh
|
||||||
jmp store_label_value
|
jmp store_label_value
|
||||||
register_value:
|
register_value:
|
||||||
pop edi
|
pop edx edi
|
||||||
mov byte [edi-1],10h
|
mov byte [edi-1],10h
|
||||||
stos byte [edi]
|
stos byte [edi]
|
||||||
ret
|
ret
|
||||||
|
@ -35,14 +35,15 @@ formatter:
|
|||||||
jae out_of_memory
|
jae out_of_memory
|
||||||
cmp [file_extension],0
|
cmp [file_extension],0
|
||||||
jne extension_specified
|
jne extension_specified
|
||||||
cmp [output_format],2
|
mov al,[output_format]
|
||||||
|
cmp al,2
|
||||||
je exe_extension
|
je exe_extension
|
||||||
jb bin_extension
|
jb bin_extension
|
||||||
cmp [output_format],4
|
cmp al,4
|
||||||
je obj_extension
|
je obj_extension
|
||||||
cmp [output_format],5
|
cmp al,5
|
||||||
je o_extension
|
je o_extension
|
||||||
cmp [output_format],3
|
cmp al,3
|
||||||
jne no_extension
|
jne no_extension
|
||||||
cmp [subsystem],1
|
cmp [subsystem],1
|
||||||
je sys_extension
|
je sys_extension
|
||||||
@ -164,7 +165,7 @@ formatter:
|
|||||||
mov [current_offset],edi
|
mov [current_offset],edi
|
||||||
sub edi,[code_start]
|
sub edi,[code_start]
|
||||||
mov [code_size],edi
|
mov [code_size],edi
|
||||||
mov [written_size],0
|
and [written_size],0
|
||||||
mov edx,[output_file]
|
mov edx,[output_file]
|
||||||
call create
|
call create
|
||||||
jc write_failed
|
jc write_failed
|
||||||
@ -324,10 +325,18 @@ public_directive:
|
|||||||
cmp eax,0Fh
|
cmp eax,0Fh
|
||||||
jb invalid_use_of_symbol
|
jb invalid_use_of_symbol
|
||||||
je reserved_word_used_as_symbol
|
je reserved_word_used_as_symbol
|
||||||
|
inc esi
|
||||||
mov dx,[current_pass]
|
mov dx,[current_pass]
|
||||||
mov [eax+18],dx
|
mov [eax+18],dx
|
||||||
or byte [eax+8],8
|
or byte [eax+8],8
|
||||||
inc esi
|
cmp [symbols_file],0
|
||||||
|
je public_reference_ok
|
||||||
|
cmp [next_pass_needed],0
|
||||||
|
jne public_reference_ok
|
||||||
|
mov ebx,eax
|
||||||
|
call store_label_reference
|
||||||
|
mov eax,ebx
|
||||||
|
public_reference_ok:
|
||||||
mov ebx,[free_additional_memory]
|
mov ebx,[free_additional_memory]
|
||||||
lea edx,[ebx+10h]
|
lea edx,[ebx+10h]
|
||||||
cmp edx,[structures_buffer]
|
cmp edx,[structures_buffer]
|
||||||
@ -395,6 +404,7 @@ extrn_directive:
|
|||||||
jne invalid_argument
|
jne invalid_argument
|
||||||
extrn_size_ok:
|
extrn_size_ok:
|
||||||
mov [address_symbol],edx
|
mov [address_symbol],edx
|
||||||
|
mov [label_size],ah
|
||||||
movzx ecx,ah
|
movzx ecx,ah
|
||||||
mov [edx+8],ecx
|
mov [edx+8],ecx
|
||||||
xor eax,eax
|
xor eax,eax
|
||||||
@ -485,6 +495,7 @@ mz_segment:
|
|||||||
rep stos byte [edi]
|
rep stos byte [edi]
|
||||||
mov dword [org_origin],edi
|
mov dword [org_origin],edi
|
||||||
mov dword [org_origin+4],eax
|
mov dword [org_origin+4],eax
|
||||||
|
mov [org_origin_sign],al
|
||||||
mov [org_registers],eax
|
mov [org_registers],eax
|
||||||
mov [org_start],edi
|
mov [org_start],edi
|
||||||
mov eax,edx
|
mov eax,edx
|
||||||
@ -503,7 +514,8 @@ mz_segment:
|
|||||||
segment_type_ok:
|
segment_type_ok:
|
||||||
mov [code_type],al
|
mov [code_type],al
|
||||||
mov eax,edx
|
mov eax,edx
|
||||||
mov cx,0100h
|
mov ch,1
|
||||||
|
mov [label_size],0
|
||||||
xor edx,edx
|
xor edx,edx
|
||||||
xor ebp,ebp
|
xor ebp,ebp
|
||||||
mov [address_symbol],edx
|
mov [address_symbol],edx
|
||||||
@ -515,11 +527,7 @@ mz_entry:
|
|||||||
call get_word_value
|
call get_word_value
|
||||||
cmp [value_type],1
|
cmp [value_type],1
|
||||||
je initial_cs_ok
|
je initial_cs_ok
|
||||||
cmp [error_line],0
|
call recoverable_invalid_address
|
||||||
jne initial_cs_ok
|
|
||||||
mov eax,[current_line]
|
|
||||||
mov [error_line],eax
|
|
||||||
mov [error],invalid_address
|
|
||||||
initial_cs_ok:
|
initial_cs_ok:
|
||||||
mov edx,[additional_memory]
|
mov edx,[additional_memory]
|
||||||
mov [edx+16h],ax
|
mov [edx+16h],ax
|
||||||
@ -536,6 +544,14 @@ mz_entry:
|
|||||||
mov edx,[additional_memory]
|
mov edx,[additional_memory]
|
||||||
mov [edx+14h],ax
|
mov [edx+14h],ax
|
||||||
jmp instruction_assembled
|
jmp instruction_assembled
|
||||||
|
recoverable_invalid_address:
|
||||||
|
cmp [error_line],0
|
||||||
|
jne ignore_invalid_address
|
||||||
|
push [current_line]
|
||||||
|
pop [error_line]
|
||||||
|
mov [error],invalid_address
|
||||||
|
ignore_invalid_address:
|
||||||
|
ret
|
||||||
mz_stack:
|
mz_stack:
|
||||||
lods byte [esi]
|
lods byte [esi]
|
||||||
cmp al,'('
|
cmp al,'('
|
||||||
@ -553,11 +569,7 @@ mz_stack:
|
|||||||
stack_pointer:
|
stack_pointer:
|
||||||
cmp [value_type],1
|
cmp [value_type],1
|
||||||
je initial_ss_ok
|
je initial_ss_ok
|
||||||
cmp [error_line],0
|
call recoverable_invalid_address
|
||||||
jne initial_ss_ok
|
|
||||||
mov eax,[current_line]
|
|
||||||
mov [error_line],eax
|
|
||||||
mov [error],invalid_address
|
|
||||||
initial_ss_ok:
|
initial_ss_ok:
|
||||||
mov edx,[additional_memory]
|
mov edx,[additional_memory]
|
||||||
mov [edx+0Eh],ax
|
mov [edx+0Eh],ax
|
||||||
@ -834,7 +846,7 @@ format_pe:
|
|||||||
mov [subsystem],3
|
mov [subsystem],3
|
||||||
mov [subsystem_version],3 + 10 shl 16
|
mov [subsystem_version],3 + 10 shl 16
|
||||||
mov [image_base],400000h
|
mov [image_base],400000h
|
||||||
mov [image_base_high],0
|
and [image_base_high],0
|
||||||
test [format_flags],8
|
test [format_flags],8
|
||||||
jz pe_settings
|
jz pe_settings
|
||||||
mov [machine],8664h
|
mov [machine],8664h
|
||||||
@ -1061,7 +1073,7 @@ format_pe:
|
|||||||
jc pe_entry_init_ok
|
jc pe_entry_init_ok
|
||||||
mov [edx+28h],eax ; entry point rva
|
mov [edx+28h],eax ; entry point rva
|
||||||
pe_entry_init_ok:
|
pe_entry_init_ok:
|
||||||
mov [number_of_sections],0
|
and [number_of_sections],0
|
||||||
movzx ebx,word [edx+14h]
|
movzx ebx,word [edx+14h]
|
||||||
lea ebx,[edx+18h+ebx]
|
lea ebx,[edx+18h+ebx]
|
||||||
mov [current_section],ebx
|
mov [current_section],ebx
|
||||||
@ -1071,38 +1083,45 @@ format_pe:
|
|||||||
mov [ebx+0Ch],eax
|
mov [ebx+0Ch],eax
|
||||||
mov dword [ebx+24h],0E0000060h
|
mov dword [ebx+24h],0E0000060h
|
||||||
xor ecx,ecx
|
xor ecx,ecx
|
||||||
|
xor bl,bl
|
||||||
not eax
|
not eax
|
||||||
not ecx
|
not ecx
|
||||||
|
not bl
|
||||||
add eax,1
|
add eax,1
|
||||||
adc ecx,0
|
adc ecx,0
|
||||||
|
adc bl,0
|
||||||
add eax,edi
|
add eax,edi
|
||||||
adc ecx,0
|
adc ecx,0
|
||||||
|
adc bl,0
|
||||||
test [format_flags],4
|
test [format_flags],4
|
||||||
jnz peplus_org
|
jnz peplus_org
|
||||||
sub eax,[edx+34h]
|
sub eax,[edx+34h]
|
||||||
sbb ecx,0
|
sbb ecx,0
|
||||||
|
sbb bl,0
|
||||||
jmp pe_org_ok
|
jmp pe_org_ok
|
||||||
peplus_org:
|
peplus_org:
|
||||||
sub eax,[edx+30h]
|
sub eax,[edx+30h]
|
||||||
sbb ecx,[edx+34h]
|
sbb ecx,[edx+34h]
|
||||||
|
sbb bl,0
|
||||||
pe_org_ok:
|
pe_org_ok:
|
||||||
test [format_flags],8
|
test [format_flags],8
|
||||||
jnz pe64_code
|
jnz pe64_code
|
||||||
mov bl,2
|
mov bh,2
|
||||||
mov [code_type],32
|
mov [code_type],32
|
||||||
jmp pe_code_type_ok
|
jmp pe_code_type_ok
|
||||||
pe64_code:
|
pe64_code:
|
||||||
mov bl,4
|
mov bh,4
|
||||||
mov [code_type],64
|
mov [code_type],64
|
||||||
pe_code_type_ok:
|
pe_code_type_ok:
|
||||||
bt [resolver_flags],0
|
bt [resolver_flags],0
|
||||||
jc pe_labels_type_ok
|
jc pe_labels_type_ok
|
||||||
xor bl,bl
|
xor bh,bh
|
||||||
pe_labels_type_ok:
|
pe_labels_type_ok:
|
||||||
mov [labels_type],bl
|
mov [labels_type],bh
|
||||||
mov dword [org_origin],eax
|
mov dword [org_origin],eax
|
||||||
mov dword [org_origin+4],ecx
|
mov dword [org_origin+4],ecx
|
||||||
mov [org_registers],0
|
mov [org_origin_sign],bl
|
||||||
|
and [org_registers],0
|
||||||
mov [org_start],edi
|
mov [org_start],edi
|
||||||
bt [format_flags],8
|
bt [format_flags],8
|
||||||
jnc dll_flag_ok
|
jnc dll_flag_ok
|
||||||
@ -1155,13 +1174,15 @@ pe_section:
|
|||||||
mov esi,edx
|
mov esi,edx
|
||||||
rep movs byte [edi],[esi]
|
rep movs byte [edi],[esi]
|
||||||
pop edi esi
|
pop edi esi
|
||||||
mov dword [ebx+24h],0
|
and dword [ebx+24h],0
|
||||||
mov [ebx+14h],edi
|
mov [ebx+14h],edi
|
||||||
mov edx,[code_start]
|
mov edx,[code_start]
|
||||||
mov eax,edi
|
mov eax,edi
|
||||||
xor ecx,ecx
|
xor ecx,ecx
|
||||||
|
mov [org_origin_sign],0
|
||||||
sub eax,[ebx+0Ch]
|
sub eax,[ebx+0Ch]
|
||||||
sbb ecx,0
|
sbb ecx,0
|
||||||
|
sbb [org_origin_sign],0
|
||||||
mov [labels_type],2
|
mov [labels_type],2
|
||||||
mov [code_type],32
|
mov [code_type],32
|
||||||
test [format_flags],8
|
test [format_flags],8
|
||||||
@ -1173,6 +1194,7 @@ pe_section:
|
|||||||
jnz peplus_section_org
|
jnz peplus_section_org
|
||||||
sub eax,[edx+34h]
|
sub eax,[edx+34h]
|
||||||
sbb ecx,0
|
sbb ecx,0
|
||||||
|
sbb [org_origin_sign],0
|
||||||
bt [resolver_flags],0
|
bt [resolver_flags],0
|
||||||
jc pe_section_org_ok
|
jc pe_section_org_ok
|
||||||
mov [labels_type],0
|
mov [labels_type],0
|
||||||
@ -1180,13 +1202,14 @@ pe_section:
|
|||||||
peplus_section_org:
|
peplus_section_org:
|
||||||
sub eax,[edx+30h]
|
sub eax,[edx+30h]
|
||||||
sbb ecx,[edx+34h]
|
sbb ecx,[edx+34h]
|
||||||
|
sbb [org_origin_sign],0
|
||||||
bt [resolver_flags],0
|
bt [resolver_flags],0
|
||||||
jc pe_section_org_ok
|
jc pe_section_org_ok
|
||||||
mov [labels_type],0
|
mov [labels_type],0
|
||||||
pe_section_org_ok:
|
pe_section_org_ok:
|
||||||
mov dword [org_origin],eax
|
mov dword [org_origin],eax
|
||||||
mov dword [org_origin+4],ecx
|
mov dword [org_origin+4],ecx
|
||||||
mov [org_registers],0
|
and [org_registers],0
|
||||||
mov [org_start],edi
|
mov [org_start],edi
|
||||||
get_section_flags:
|
get_section_flags:
|
||||||
lods byte [esi]
|
lods byte [esi]
|
||||||
@ -1246,7 +1269,7 @@ pe_section:
|
|||||||
jb align_section
|
jb align_section
|
||||||
mov edi,[undefined_data_start]
|
mov edi,[undefined_data_start]
|
||||||
align_section:
|
align_section:
|
||||||
mov [undefined_data_end],0
|
and [undefined_data_end],0
|
||||||
mov ebp,edi
|
mov ebp,edi
|
||||||
sub ebp,[ebx+14h]
|
sub ebp,[ebx+14h]
|
||||||
mov ecx,[edx+3Ch]
|
mov ecx,[edx+3Ch]
|
||||||
@ -1373,11 +1396,7 @@ pe_entry:
|
|||||||
check_pe_entry_label_type:
|
check_pe_entry_label_type:
|
||||||
cmp [value_type],bl
|
cmp [value_type],bl
|
||||||
je pe_entry_ok
|
je pe_entry_ok
|
||||||
cmp [error_line],0
|
call recoverable_invalid_address
|
||||||
jne pe_entry_ok
|
|
||||||
mov edx,[current_line]
|
|
||||||
mov [error_line],edx
|
|
||||||
mov [error],invalid_address
|
|
||||||
pe_entry_ok:
|
pe_entry_ok:
|
||||||
cdq
|
cdq
|
||||||
test [format_flags],4
|
test [format_flags],4
|
||||||
@ -1395,19 +1414,13 @@ pe_entry:
|
|||||||
check_pe64_entry_label_type:
|
check_pe64_entry_label_type:
|
||||||
cmp [value_type],bl
|
cmp [value_type],bl
|
||||||
je pe64_entry_type_ok
|
je pe64_entry_type_ok
|
||||||
cmp [error_line],0
|
call recoverable_invalid_address
|
||||||
jne pe64_entry_type_ok
|
|
||||||
mov edx,[current_line]
|
|
||||||
mov [error_line],edx
|
|
||||||
mov [error],invalid_address
|
|
||||||
pe64_entry_type_ok:
|
pe64_entry_type_ok:
|
||||||
mov ecx,[code_start]
|
mov ecx,[code_start]
|
||||||
sub eax,[ecx+30h]
|
sub eax,[ecx+30h]
|
||||||
sbb edx,[ecx+34h]
|
sbb edx,[ecx+34h]
|
||||||
jz pe64_entry_range_ok
|
jz pe64_entry_range_ok
|
||||||
mov edx,[current_line]
|
call recoverable_overflow
|
||||||
mov [error_line],edx
|
|
||||||
mov [error],value_out_of_range
|
|
||||||
pe64_entry_range_ok:
|
pe64_entry_range_ok:
|
||||||
mov [ecx+28h],eax
|
mov [ecx+28h],eax
|
||||||
jmp instruction_assembled
|
jmp instruction_assembled
|
||||||
@ -1540,11 +1553,7 @@ mark_pe_relocation:
|
|||||||
check_standard_pe_relocation_type:
|
check_standard_pe_relocation_type:
|
||||||
cmp [value_type],2
|
cmp [value_type],2
|
||||||
je pe_relocation_type_ok
|
je pe_relocation_type_ok
|
||||||
cmp [error_line],0
|
call recoverable_misuse
|
||||||
jne pe_relocation_type_ok
|
|
||||||
mov eax,[current_line]
|
|
||||||
mov [error_line],eax
|
|
||||||
mov [error],invalid_use_of_symbol
|
|
||||||
pe_relocation_type_ok:
|
pe_relocation_type_ok:
|
||||||
mov ebx,[current_section]
|
mov ebx,[current_section]
|
||||||
mov eax,edi
|
mov eax,edi
|
||||||
@ -1580,7 +1589,7 @@ make_pe_fixups:
|
|||||||
jc fixups_ready
|
jc fixups_ready
|
||||||
or [next_pass_needed],-1
|
or [next_pass_needed],-1
|
||||||
fixups_ready:
|
fixups_ready:
|
||||||
mov [last_fixup_base],0
|
and [last_fixup_base],0
|
||||||
call make_fixups
|
call make_fixups
|
||||||
xchg eax,[actual_fixups_size]
|
xchg eax,[actual_fixups_size]
|
||||||
sub eax,[actual_fixups_size]
|
sub eax,[actual_fixups_size]
|
||||||
@ -1652,7 +1661,7 @@ make_pe_resource:
|
|||||||
je resource_from_file
|
je resource_from_file
|
||||||
cmp [current_pass],0
|
cmp [current_pass],0
|
||||||
jne reserve_space_for_resource
|
jne reserve_space_for_resource
|
||||||
mov [resource_size],0
|
and [resource_size],0
|
||||||
reserve_space_for_resource:
|
reserve_space_for_resource:
|
||||||
add edi,[resource_size]
|
add edi,[resource_size]
|
||||||
cmp edi,[display_buffer]
|
cmp edi,[display_buffer]
|
||||||
@ -2310,18 +2319,28 @@ format_coff:
|
|||||||
mov [current_section],ebx
|
mov [current_section],ebx
|
||||||
xor eax,eax
|
xor eax,eax
|
||||||
mov [number_of_sections],eax
|
mov [number_of_sections],eax
|
||||||
mov dword [org_origin],edi
|
call setup_coff_section_org
|
||||||
mov dword [org_origin+4],eax
|
|
||||||
mov [org_registers],eax
|
|
||||||
mov [org_start],edi
|
|
||||||
mov [org_symbol],ebx
|
|
||||||
mov [labels_type],2
|
|
||||||
mov [code_type],32
|
mov [code_type],32
|
||||||
test [format_flags],8
|
test [format_flags],8
|
||||||
jz format_defined
|
jz format_defined
|
||||||
mov [labels_type],4
|
|
||||||
mov [code_type],64
|
mov [code_type],64
|
||||||
jmp format_defined
|
jmp format_defined
|
||||||
|
setup_coff_section_org:
|
||||||
|
xor eax,eax
|
||||||
|
mov dword [org_origin],edi
|
||||||
|
mov dword [org_origin+4],eax
|
||||||
|
mov [org_origin_sign],al
|
||||||
|
mov [org_registers],eax
|
||||||
|
mov [org_start],edi
|
||||||
|
mov [org_symbol],ebx
|
||||||
|
test [format_flags],8
|
||||||
|
jnz coff_64bit_labels
|
||||||
|
mov [labels_type],2
|
||||||
|
ret
|
||||||
|
coff_64bit_labels:
|
||||||
|
mov [labels_type],4
|
||||||
|
ret
|
||||||
|
|
||||||
coff_section:
|
coff_section:
|
||||||
call close_coff_section
|
call close_coff_section
|
||||||
mov ebx,[free_additional_memory]
|
mov ebx,[free_additional_memory]
|
||||||
@ -2334,18 +2353,9 @@ coff_section:
|
|||||||
xor eax,eax
|
xor eax,eax
|
||||||
mov [ebx],al
|
mov [ebx],al
|
||||||
mov [ebx+8],edi
|
mov [ebx+8],edi
|
||||||
mov dword [org_origin],edi
|
|
||||||
mov dword [org_origin+4],eax
|
|
||||||
mov [org_registers],eax
|
|
||||||
mov [org_start],edi
|
|
||||||
mov [org_symbol],ebx
|
|
||||||
mov [labels_type],2
|
|
||||||
test [format_flags],8
|
|
||||||
jz coff_labels_type_ok
|
|
||||||
mov [labels_type],4
|
|
||||||
coff_labels_type_ok:
|
|
||||||
mov [ebx+10h],eax
|
mov [ebx+10h],eax
|
||||||
mov [ebx+14h],eax
|
mov [ebx+14h],eax
|
||||||
|
call setup_coff_section_org
|
||||||
lods word [esi]
|
lods word [esi]
|
||||||
cmp ax,'('
|
cmp ax,'('
|
||||||
jne invalid_argument
|
jne invalid_argument
|
||||||
@ -2552,8 +2562,8 @@ coff_formatter:
|
|||||||
mov edx,[esi+8]
|
mov edx,[esi+8]
|
||||||
add esi,10h
|
add esi,10h
|
||||||
inc eax
|
inc eax
|
||||||
cmp byte [edx+11],2
|
cmp byte [edx+11],0
|
||||||
jne enumerate_symbols
|
je enumerate_symbols
|
||||||
mov edx,[edx+20]
|
mov edx,[edx+20]
|
||||||
cmp byte [edx],0C0h
|
cmp byte [edx],0C0h
|
||||||
jae enumerate_symbols
|
jae enumerate_symbols
|
||||||
@ -2803,13 +2813,14 @@ coff_formatter:
|
|||||||
mov cx,[ecx+1Eh]
|
mov cx,[ecx+1Eh]
|
||||||
mov [ebx+0Ch],cx
|
mov [ebx+0Ch],cx
|
||||||
public_symbol_section_ok:
|
public_symbol_section_ok:
|
||||||
cmp dword [eax+4],0
|
movzx ecx,byte [eax+9]
|
||||||
je store_public_symbol
|
shr cl,1
|
||||||
cmp dword [eax+4],-1
|
and cl,1
|
||||||
|
neg ecx
|
||||||
|
cmp ecx,[eax+4]
|
||||||
jne value_out_of_range
|
jne value_out_of_range
|
||||||
bt dword [eax],31
|
xor ecx,[eax]
|
||||||
jnc value_out_of_range
|
js value_out_of_range
|
||||||
store_public_symbol:
|
|
||||||
mov eax,[eax]
|
mov eax,[eax]
|
||||||
mov [ebx+8],eax
|
mov [ebx+8],eax
|
||||||
mov al,2
|
mov al,2
|
||||||
@ -2850,7 +2861,7 @@ coff_formatter:
|
|||||||
mov [edx],eax
|
mov [edx],eax
|
||||||
sub edi,[code_start]
|
sub edi,[code_start]
|
||||||
mov [code_size],edi
|
mov [code_size],edi
|
||||||
mov [written_size],0
|
and [written_size],0
|
||||||
mov edx,[output_file]
|
mov edx,[output_file]
|
||||||
call create
|
call create
|
||||||
jc write_failed
|
jc write_failed
|
||||||
@ -2910,7 +2921,6 @@ format_elf:
|
|||||||
mov [code_type],32
|
mov [code_type],32
|
||||||
cmp word [esi],1D19h
|
cmp word [esi],1D19h
|
||||||
je format_elf_exe
|
je format_elf_exe
|
||||||
mov [labels_type],2
|
|
||||||
elf_header_ok:
|
elf_header_ok:
|
||||||
mov byte [edx+10h],1
|
mov byte [edx+10h],1
|
||||||
mov eax,[additional_memory]
|
mov eax,[additional_memory]
|
||||||
@ -2923,11 +2933,6 @@ format_elf:
|
|||||||
xor eax,eax
|
xor eax,eax
|
||||||
mov [current_section],ebx
|
mov [current_section],ebx
|
||||||
mov [number_of_sections],eax
|
mov [number_of_sections],eax
|
||||||
mov dword [org_origin],edi
|
|
||||||
mov dword [org_origin+4],eax
|
|
||||||
mov [org_registers],eax
|
|
||||||
mov [org_start],edi
|
|
||||||
mov [org_symbol],ebx
|
|
||||||
mov [ebx],al
|
mov [ebx],al
|
||||||
mov [ebx+4],eax
|
mov [ebx+4],eax
|
||||||
mov [ebx+8],edi
|
mov [ebx+8],edi
|
||||||
@ -2935,6 +2940,7 @@ format_elf:
|
|||||||
mov [ebx+14h],eax
|
mov [ebx+14h],eax
|
||||||
mov al,4
|
mov al,4
|
||||||
mov [ebx+10h],eax
|
mov [ebx+10h],eax
|
||||||
|
call setup_coff_section_org
|
||||||
test [format_flags],8
|
test [format_flags],8
|
||||||
jz format_defined
|
jz format_defined
|
||||||
mov byte [ebx+10h],8
|
mov byte [ebx+10h],8
|
||||||
@ -2958,9 +2964,8 @@ format_elf:
|
|||||||
mov byte [edx+3Ah],40h
|
mov byte [edx+3Ah],40h
|
||||||
mov [code_type],64
|
mov [code_type],64
|
||||||
cmp word [esi],1D19h
|
cmp word [esi],1D19h
|
||||||
je format_elf64_exe
|
jne elf_header_ok
|
||||||
mov [labels_type],4
|
jmp format_elf64_exe
|
||||||
jmp elf_header_ok
|
|
||||||
elf_section:
|
elf_section:
|
||||||
bt [format_flags],0
|
bt [format_flags],0
|
||||||
jc illegal_instruction
|
jc illegal_instruction
|
||||||
@ -2976,21 +2981,10 @@ elf_section:
|
|||||||
xor eax,eax
|
xor eax,eax
|
||||||
mov [ebx],al
|
mov [ebx],al
|
||||||
mov [ebx+8],edi
|
mov [ebx+8],edi
|
||||||
mov dword [org_origin],edi
|
|
||||||
mov dword [org_origin+4],eax
|
|
||||||
mov [org_registers],eax
|
|
||||||
mov [org_start],edi
|
|
||||||
mov [org_symbol],ebx
|
|
||||||
test [format_flags],8
|
|
||||||
jnz elf64_labels_type
|
|
||||||
mov [labels_type],2
|
|
||||||
jmp elf_labels_type_ok
|
|
||||||
elf64_labels_type:
|
|
||||||
mov [labels_type],4
|
|
||||||
elf_labels_type_ok:
|
|
||||||
mov [ebx+10h],eax
|
mov [ebx+10h],eax
|
||||||
mov al,10b
|
mov al,10b
|
||||||
mov [ebx+14h],eax
|
mov [ebx+14h],eax
|
||||||
|
call setup_coff_section_org
|
||||||
lods word [esi]
|
lods word [esi]
|
||||||
cmp ax,'('
|
cmp ax,'('
|
||||||
jne invalid_argument
|
jne invalid_argument
|
||||||
@ -3218,8 +3212,7 @@ elf_formatter:
|
|||||||
mov dx,[eax+0Eh]
|
mov dx,[eax+0Eh]
|
||||||
jmp section_for_public_ok
|
jmp section_for_public_ok
|
||||||
undefined_public:
|
undefined_public:
|
||||||
mov eax,[ebx+24]
|
mov [error_info],ebx
|
||||||
mov [error_info],eax
|
|
||||||
jmp undefined_symbol
|
jmp undefined_symbol
|
||||||
elf64_public:
|
elf64_public:
|
||||||
cmp dl,4
|
cmp dl,4
|
||||||
@ -3233,7 +3226,15 @@ elf_formatter:
|
|||||||
stos dword [edi]
|
stos dword [edi]
|
||||||
test [format_flags],8
|
test [format_flags],8
|
||||||
jnz elf64_public_symbol
|
jnz elf64_public_symbol
|
||||||
call get_public_value
|
movzx eax,byte [ebx+9]
|
||||||
|
shr al,1
|
||||||
|
and al,1
|
||||||
|
neg eax
|
||||||
|
cmp eax,[ebx+4]
|
||||||
|
jne value_out_of_range
|
||||||
|
xor eax,[ebx]
|
||||||
|
js value_out_of_range
|
||||||
|
mov eax,[ebx]
|
||||||
stos dword [edi]
|
stos dword [edi]
|
||||||
xor eax,eax
|
xor eax,eax
|
||||||
mov al,[ebx+10]
|
mov al,[ebx+10]
|
||||||
@ -3262,9 +3263,13 @@ elf_formatter:
|
|||||||
or al,2
|
or al,2
|
||||||
store_elf64_public_info:
|
store_elf64_public_info:
|
||||||
stos dword [edi]
|
stos dword [edi]
|
||||||
call get_public_value
|
mov al,[ebx+9]
|
||||||
|
shl eax,31-1
|
||||||
|
xor eax,[ebx+4]
|
||||||
|
js value_out_of_range
|
||||||
|
mov eax,[ebx]
|
||||||
stos dword [edi]
|
stos dword [edi]
|
||||||
xor eax,eax
|
mov eax,[ebx+4]
|
||||||
stos dword [edi]
|
stos dword [edi]
|
||||||
mov al,[ebx+10]
|
mov al,[ebx+10]
|
||||||
stos dword [edi]
|
stos dword [edi]
|
||||||
@ -3278,16 +3283,6 @@ elf_formatter:
|
|||||||
mov [esi],eax
|
mov [esi],eax
|
||||||
add esi,10h
|
add esi,10h
|
||||||
jmp find_other_symbols
|
jmp find_other_symbols
|
||||||
get_public_value:
|
|
||||||
mov eax,[ebx]
|
|
||||||
cmp dword [ebx+4],0
|
|
||||||
je public_value_ok
|
|
||||||
cmp dword [ebx+4],-1
|
|
||||||
jne value_out_of_range
|
|
||||||
bt eax,31
|
|
||||||
jnc value_out_of_range
|
|
||||||
public_value_ok:
|
|
||||||
ret
|
|
||||||
make_extrn_symbol:
|
make_extrn_symbol:
|
||||||
mov eax,[esi+4]
|
mov eax,[esi+4]
|
||||||
stos dword [edi]
|
stos dword [edi]
|
||||||
@ -3488,7 +3483,7 @@ elf_formatter:
|
|||||||
stos dword [edi]
|
stos dword [edi]
|
||||||
test [format_flags],8
|
test [format_flags],8
|
||||||
jz elf_machine_word_ok
|
jz elf_machine_word_ok
|
||||||
mov dword [edi],0
|
and dword [edi],0
|
||||||
add edi,4
|
add edi,4
|
||||||
elf_machine_word_ok:
|
elf_machine_word_ok:
|
||||||
ret
|
ret
|
||||||
@ -3669,27 +3664,36 @@ format_elf_exe:
|
|||||||
init_elf_segments:
|
init_elf_segments:
|
||||||
xor eax,eax
|
xor eax,eax
|
||||||
rep stos dword [edi]
|
rep stos dword [edi]
|
||||||
mov [number_of_sections],0
|
and [number_of_sections],0
|
||||||
mov byte [ebx],1
|
mov byte [ebx],1
|
||||||
mov word [ebx+1Ch],1000h
|
mov word [ebx+1Ch],1000h
|
||||||
mov byte [ebx+18h],111b
|
mov byte [ebx+18h],111b
|
||||||
mov eax,edi
|
mov eax,edi
|
||||||
|
xor ebp,ebp
|
||||||
|
xor cl,cl
|
||||||
sub eax,[code_start]
|
sub eax,[code_start]
|
||||||
|
sbb ebp,0
|
||||||
|
sbb cl,0
|
||||||
mov [ebx+4],eax
|
mov [ebx+4],eax
|
||||||
add eax,[image_base]
|
add eax,[image_base]
|
||||||
|
adc ebp,0
|
||||||
|
adc cl,0
|
||||||
mov [ebx+8],eax
|
mov [ebx+8],eax
|
||||||
mov [ebx+0Ch],eax
|
mov [ebx+0Ch],eax
|
||||||
mov [edx+18h],eax
|
mov [edx+18h],eax
|
||||||
xor edx,edx
|
|
||||||
not eax
|
not eax
|
||||||
not edx
|
not ebp
|
||||||
|
not cl
|
||||||
add eax,1
|
add eax,1
|
||||||
adc edx,0
|
adc ebp,0
|
||||||
|
adc cl,0
|
||||||
add eax,edi
|
add eax,edi
|
||||||
adc edx,0
|
adc ebp,0
|
||||||
|
adc cl,0
|
||||||
mov dword [org_origin],eax
|
mov dword [org_origin],eax
|
||||||
mov dword [org_origin+4],edx
|
mov dword [org_origin+4],edx
|
||||||
mov [org_registers],0
|
mov [org_origin_sign],cl
|
||||||
|
and [org_registers],0
|
||||||
mov [org_start],edi
|
mov [org_start],edi
|
||||||
mov [symbols_stream],edi
|
mov [symbols_stream],edi
|
||||||
jmp format_defined
|
jmp format_defined
|
||||||
@ -3709,7 +3713,7 @@ format_elf_exe:
|
|||||||
mov [edx+7],al
|
mov [edx+7],al
|
||||||
elf64_exe_brand_ok:
|
elf64_exe_brand_ok:
|
||||||
mov [image_base],400000h
|
mov [image_base],400000h
|
||||||
mov [image_base_high],0
|
and [image_base_high],0
|
||||||
cmp byte [esi],80h
|
cmp byte [esi],80h
|
||||||
jne elf64_exe_base_ok
|
jne elf64_exe_base_ok
|
||||||
lods word [esi]
|
lods word [esi]
|
||||||
@ -3735,7 +3739,7 @@ format_elf_exe:
|
|||||||
init_elf64_segments:
|
init_elf64_segments:
|
||||||
xor eax,eax
|
xor eax,eax
|
||||||
rep stos dword [edi]
|
rep stos dword [edi]
|
||||||
mov [number_of_sections],0
|
and [number_of_sections],0
|
||||||
mov byte [ebx],1
|
mov byte [ebx],1
|
||||||
mov word [ebx+30h],1000h
|
mov word [ebx+30h],1000h
|
||||||
mov byte [ebx+4],111b
|
mov byte [ebx+4],111b
|
||||||
@ -3744,8 +3748,10 @@ format_elf_exe:
|
|||||||
sub eax,[code_start]
|
sub eax,[code_start]
|
||||||
mov [ebx+8],eax
|
mov [ebx+8],eax
|
||||||
xor edx,edx
|
xor edx,edx
|
||||||
|
xor cl,cl
|
||||||
add eax,[image_base]
|
add eax,[image_base]
|
||||||
adc edx,[image_base_high]
|
adc edx,[image_base_high]
|
||||||
|
adc cl,0
|
||||||
mov [ebx+10h],eax
|
mov [ebx+10h],eax
|
||||||
mov [ebx+10h+4],edx
|
mov [ebx+10h+4],edx
|
||||||
mov [ebx+18h],eax
|
mov [ebx+18h],eax
|
||||||
@ -3755,13 +3761,17 @@ format_elf_exe:
|
|||||||
mov [ebx+18h+4],edx
|
mov [ebx+18h+4],edx
|
||||||
not eax
|
not eax
|
||||||
not edx
|
not edx
|
||||||
|
not cl
|
||||||
add eax,1
|
add eax,1
|
||||||
adc edx,0
|
adc edx,0
|
||||||
|
adc cl,0
|
||||||
add eax,edi
|
add eax,edi
|
||||||
adc edx,0
|
adc edx,0
|
||||||
|
adc cl,0
|
||||||
mov dword [org_origin],eax
|
mov dword [org_origin],eax
|
||||||
mov dword [org_origin+4],edx
|
mov dword [org_origin+4],edx
|
||||||
mov [org_registers],0
|
mov [org_origin_sign],cl
|
||||||
|
and [org_registers],0
|
||||||
mov [org_start],edi
|
mov [org_start],edi
|
||||||
mov [symbols_stream],edi
|
mov [symbols_stream],edi
|
||||||
jmp format_defined
|
jmp format_defined
|
||||||
@ -3863,15 +3873,20 @@ elf_segment:
|
|||||||
mov [ebx+0Ch],edx
|
mov [ebx+0Ch],edx
|
||||||
mov eax,edx
|
mov eax,edx
|
||||||
xor edx,edx
|
xor edx,edx
|
||||||
|
xor cl,cl
|
||||||
not eax
|
not eax
|
||||||
not edx
|
not edx
|
||||||
|
not cl
|
||||||
add eax,1
|
add eax,1
|
||||||
adc edx,0
|
adc edx,0
|
||||||
|
adc cl,0
|
||||||
add eax,edi
|
add eax,edi
|
||||||
adc edx,0
|
adc edx,0
|
||||||
|
adc cl,0
|
||||||
mov dword [org_origin],eax
|
mov dword [org_origin],eax
|
||||||
mov dword [org_origin+4],edx
|
mov dword [org_origin+4],edx
|
||||||
mov [org_registers],0
|
mov [org_origin_sign],cl
|
||||||
|
and [org_registers],0
|
||||||
mov [org_start],edi
|
mov [org_start],edi
|
||||||
inc [number_of_sections]
|
inc [number_of_sections]
|
||||||
jmp instruction_assembled
|
jmp instruction_assembled
|
||||||
@ -3990,15 +4005,20 @@ elf_segment:
|
|||||||
mov [ebx+10h+4],edx
|
mov [ebx+10h+4],edx
|
||||||
mov [ebx+18h],eax
|
mov [ebx+18h],eax
|
||||||
mov [ebx+18h+4],edx
|
mov [ebx+18h+4],edx
|
||||||
|
xor cl,cl
|
||||||
not eax
|
not eax
|
||||||
not edx
|
not edx
|
||||||
|
not cl
|
||||||
add eax,1
|
add eax,1
|
||||||
adc edx,0
|
adc edx,0
|
||||||
|
adc cl,0
|
||||||
add eax,edi
|
add eax,edi
|
||||||
adc edx,0
|
adc edx,0
|
||||||
|
adc cl,0
|
||||||
mov dword [org_origin],eax
|
mov dword [org_origin],eax
|
||||||
mov dword [org_origin+4],edx
|
mov dword [org_origin+4],edx
|
||||||
mov [org_registers],0
|
mov [org_origin_sign],cl
|
||||||
|
and [org_registers],0
|
||||||
mov [org_start],edi
|
mov [org_start],edi
|
||||||
inc [number_of_sections]
|
inc [number_of_sections]
|
||||||
jmp instruction_assembled
|
jmp instruction_assembled
|
||||||
|
@ -25,7 +25,7 @@ _operand_size_not_specified db 'operand size not specified',0
|
|||||||
_operand_sizes_do_not_match db 'operand sizes do not match',0
|
_operand_sizes_do_not_match db 'operand sizes do not match',0
|
||||||
_invalid_address_size db 'invalid size of address value',0
|
_invalid_address_size db 'invalid size of address value',0
|
||||||
_address_sizes_do_not_agree db 'address sizes do not agree',0
|
_address_sizes_do_not_agree db 'address sizes do not agree',0
|
||||||
_prefix_conflict db 'disallowed combination of registers',0
|
_disallowed_combination_of_registers db 'disallowed combination of registers',0
|
||||||
_long_immediate_not_encodable db 'not encodable with long immediate',0
|
_long_immediate_not_encodable db 'not encodable with long immediate',0
|
||||||
_relative_jump_out_of_range db 'relative jump out of range',0
|
_relative_jump_out_of_range db 'relative jump out of range',0
|
||||||
_invalid_expression db 'invalid expression',0
|
_invalid_expression db 'invalid expression',0
|
||||||
|
@ -503,7 +503,7 @@ parse_line_contents:
|
|||||||
cmp al,','
|
cmp al,','
|
||||||
je separator
|
je separator
|
||||||
cmp al,'='
|
cmp al,'='
|
||||||
je separator
|
je expression_comparator
|
||||||
cmp al,'|'
|
cmp al,'|'
|
||||||
je separator
|
je separator
|
||||||
cmp al,'&'
|
cmp al,'&'
|
||||||
@ -569,7 +569,11 @@ parse_line_contents:
|
|||||||
je parse_from_operator
|
je parse_from_operator
|
||||||
cmp al,89h
|
cmp al,89h
|
||||||
je parse_label_operator
|
je parse_label_operator
|
||||||
|
cmp al,0F8h
|
||||||
|
je forced_expression
|
||||||
jmp argument_parsed
|
jmp argument_parsed
|
||||||
|
instruction_separator:
|
||||||
|
stos byte [edi]
|
||||||
allow_embedded_instruction:
|
allow_embedded_instruction:
|
||||||
cmp byte [esi],1Ah
|
cmp byte [esi],1Ah
|
||||||
jne parse_argument
|
jne parse_argument
|
||||||
@ -810,6 +814,29 @@ parse_line_contents:
|
|||||||
stos byte [edi]
|
stos byte [edi]
|
||||||
inc [parenthesis_stack]
|
inc [parenthesis_stack]
|
||||||
jmp parse_argument
|
jmp parse_argument
|
||||||
|
expression_comparator:
|
||||||
|
stos byte [edi]
|
||||||
|
jmp forced_expression
|
||||||
|
greater:
|
||||||
|
cmp byte [esi],'='
|
||||||
|
jne separator
|
||||||
|
inc esi
|
||||||
|
mov al,0F2h
|
||||||
|
jmp separator
|
||||||
|
less:
|
||||||
|
cmp byte [edi-1],0F6h
|
||||||
|
je separator
|
||||||
|
cmp byte [esi],'>'
|
||||||
|
je not_equal
|
||||||
|
cmp byte [esi],'='
|
||||||
|
jne separator
|
||||||
|
inc esi
|
||||||
|
mov al,0F3h
|
||||||
|
jmp separator
|
||||||
|
not_equal:
|
||||||
|
inc esi
|
||||||
|
mov al,0F1h
|
||||||
|
jmp expression_comparator
|
||||||
expression:
|
expression:
|
||||||
mov al,'('
|
mov al,'('
|
||||||
stos byte [edi]
|
stos byte [edi]
|
||||||
@ -892,30 +919,6 @@ parse_line_contents:
|
|||||||
mov al,'}'
|
mov al,'}'
|
||||||
separator:
|
separator:
|
||||||
stos byte [edi]
|
stos byte [edi]
|
||||||
jmp argument_parsed
|
|
||||||
instruction_separator:
|
|
||||||
stos byte [edi]
|
|
||||||
jmp allow_embedded_instruction
|
|
||||||
greater:
|
|
||||||
cmp byte [esi],'='
|
|
||||||
jne separator
|
|
||||||
inc esi
|
|
||||||
mov al,0F2h
|
|
||||||
jmp separator
|
|
||||||
less:
|
|
||||||
cmp byte [edi-1],0F6h
|
|
||||||
je separator
|
|
||||||
cmp byte [esi],'>'
|
|
||||||
je not_equal
|
|
||||||
cmp byte [esi],'='
|
|
||||||
jne separator
|
|
||||||
inc esi
|
|
||||||
mov al,0F3h
|
|
||||||
jmp separator
|
|
||||||
not_equal:
|
|
||||||
inc esi
|
|
||||||
mov al,0F1h
|
|
||||||
jmp separator
|
|
||||||
argument_parsed:
|
argument_parsed:
|
||||||
cmp [parenthesis_stack],0
|
cmp [parenthesis_stack],0
|
||||||
je parse_argument
|
je parse_argument
|
||||||
@ -984,6 +987,7 @@ get_operator:
|
|||||||
jne next_operator
|
jne next_operator
|
||||||
repe cmps byte [esi],[edi]
|
repe cmps byte [esi],[edi]
|
||||||
je operator_found
|
je operator_found
|
||||||
|
jb no_operator
|
||||||
next_operator:
|
next_operator:
|
||||||
mov edi,ebx
|
mov edi,ebx
|
||||||
inc edi
|
inc edi
|
||||||
@ -1046,12 +1050,10 @@ get_symbol:
|
|||||||
ja symbols_up
|
ja symbols_up
|
||||||
jb symbols_down
|
jb symbols_down
|
||||||
mov ax,[edi]
|
mov ax,[edi]
|
||||||
|
|
||||||
cmp al,18h
|
cmp al,18h
|
||||||
jb symbol_ok
|
jb symbol_ok
|
||||||
cmp [formatter_symbols_allowed],0
|
cmp [formatter_symbols_allowed],0
|
||||||
je no_symbol
|
je no_symbol
|
||||||
|
|
||||||
symbol_ok:
|
symbol_ok:
|
||||||
pop esi
|
pop esi
|
||||||
add esi,ebp
|
add esi,ebp
|
||||||
|
@ -40,6 +40,7 @@ preprocessor:
|
|||||||
mov [source_start],eax
|
mov [source_start],eax
|
||||||
mov [display_buffer],eax
|
mov [display_buffer],eax
|
||||||
mov [hash_tree],eax
|
mov [hash_tree],eax
|
||||||
|
mov [error],eax
|
||||||
mov [macro_status],al
|
mov [macro_status],al
|
||||||
mov esi,[input_file]
|
mov esi,[input_file]
|
||||||
mov edx,esi
|
mov edx,esi
|
||||||
@ -870,6 +871,7 @@ define_macro:
|
|||||||
je found_macro_block
|
je found_macro_block
|
||||||
jmp invalid_macro_arguments
|
jmp invalid_macro_arguments
|
||||||
macro_argument_with_default_value:
|
macro_argument_with_default_value:
|
||||||
|
or [default_argument_value],-1
|
||||||
call skip_macro_argument_value
|
call skip_macro_argument_value
|
||||||
inc esi
|
inc esi
|
||||||
jmp macro_argument_end
|
jmp macro_argument_end
|
||||||
@ -908,6 +910,10 @@ define_macro:
|
|||||||
jz argument_value_end
|
jz argument_value_end
|
||||||
cmp al,','
|
cmp al,','
|
||||||
je argument_value_end
|
je argument_value_end
|
||||||
|
cmp [default_argument_value],0
|
||||||
|
je invalid_macro_arguments
|
||||||
|
cmp al,'{'
|
||||||
|
je argument_value_end
|
||||||
or ebp,ebp
|
or ebp,ebp
|
||||||
jz invalid_macro_arguments
|
jz invalid_macro_arguments
|
||||||
cmp al,']'
|
cmp al,']'
|
||||||
@ -923,6 +929,10 @@ define_macro:
|
|||||||
je argument_string
|
je argument_string
|
||||||
cmp al,1Ah
|
cmp al,1Ah
|
||||||
je argument_symbol
|
je argument_symbol
|
||||||
|
cmp [default_argument_value],0
|
||||||
|
je simple_argument
|
||||||
|
cmp al,'{'
|
||||||
|
je argument_value_end
|
||||||
or ebp,ebp
|
or ebp,ebp
|
||||||
jz simple_argument
|
jz simple_argument
|
||||||
cmp al,']'
|
cmp al,']'
|
||||||
@ -1500,10 +1510,8 @@ use_macro:
|
|||||||
add esi,ecx
|
add esi,ecx
|
||||||
xchg esi,ebx
|
xchg esi,ebx
|
||||||
mov [edx+12],esi
|
mov [edx+12],esi
|
||||||
push ebp
|
mov [default_argument_value],0
|
||||||
xor ebp,ebp
|
|
||||||
call skip_macro_argument_value
|
call skip_macro_argument_value
|
||||||
pop ebp
|
|
||||||
call finish_macro_argument
|
call finish_macro_argument
|
||||||
xchg esi,ebx
|
xchg esi,ebx
|
||||||
cmp byte [esi],'='
|
cmp byte [esi],'='
|
||||||
@ -1523,12 +1531,14 @@ use_macro:
|
|||||||
jne argument_value_length_ok
|
jne argument_value_length_ok
|
||||||
inc dword [edx+12]
|
inc dword [edx+12]
|
||||||
sub ecx,2
|
sub ecx,2
|
||||||
|
or ecx,80000000h
|
||||||
argument_value_length_ok:
|
argument_value_length_ok:
|
||||||
mov [edx+8],ecx
|
mov [edx+8],ecx
|
||||||
ret
|
ret
|
||||||
argument_with_default_value:
|
argument_with_default_value:
|
||||||
inc esi
|
inc esi
|
||||||
push esi
|
push esi
|
||||||
|
or [default_argument_value],-1
|
||||||
call skip_macro_argument_value
|
call skip_macro_argument_value
|
||||||
pop eax
|
pop eax
|
||||||
cmp dword [edx+8],0
|
cmp dword [edx+8],0
|
||||||
@ -1637,14 +1647,21 @@ use_instant_macro:
|
|||||||
stosb
|
stosb
|
||||||
push esi
|
push esi
|
||||||
mov esi,[esp+4]
|
mov esi,[esp+4]
|
||||||
mov [value_size],8
|
mov [error_line],0
|
||||||
|
mov [value_size],0
|
||||||
call calculate_expression
|
call calculate_expression
|
||||||
|
cmp [error_line],0
|
||||||
|
je value_precalculated
|
||||||
|
jmp [error]
|
||||||
|
value_precalculated:
|
||||||
mov eax,[edi]
|
mov eax,[edi]
|
||||||
mov ecx,[edi+4]
|
mov ecx,[edi+4]
|
||||||
pop esi edi
|
|
||||||
cdq
|
cdq
|
||||||
cmp edx,ecx
|
cmp edx,ecx
|
||||||
jne value_out_of_range
|
jne value_out_of_range
|
||||||
|
cmp dl,[edi+13]
|
||||||
|
jne value_out_of_range
|
||||||
|
pop esi edi
|
||||||
ret
|
ret
|
||||||
do_irp:
|
do_irp:
|
||||||
cmp byte [esi],1Ah
|
cmp byte [esi],1Ah
|
||||||
@ -1665,6 +1682,7 @@ do_irp:
|
|||||||
jmp irp_parameters_start
|
jmp irp_parameters_start
|
||||||
irp_with_default_value:
|
irp_with_default_value:
|
||||||
xor ebp,ebp
|
xor ebp,ebp
|
||||||
|
or [default_argument_value],-1
|
||||||
call skip_macro_argument_value
|
call skip_macro_argument_value
|
||||||
inc esi
|
inc esi
|
||||||
irps_name_ok:
|
irps_name_ok:
|
||||||
@ -2490,7 +2508,7 @@ include_file:
|
|||||||
jmp cut_current_file_name
|
jmp cut_current_file_name
|
||||||
current_file_path_ok:
|
current_file_path_ok:
|
||||||
mov esi,[esp+4]
|
mov esi,[esp+4]
|
||||||
call preprocess_path
|
call expand_path
|
||||||
pop edx
|
pop edx
|
||||||
mov esi,edx
|
mov esi,edx
|
||||||
call open
|
call open
|
||||||
@ -2503,26 +2521,10 @@ include_file:
|
|||||||
je try_in_current_directory
|
je try_in_current_directory
|
||||||
push ebp
|
push ebp
|
||||||
push edi
|
push edi
|
||||||
copy_include_directory:
|
call get_include_directory
|
||||||
lods byte [esi]
|
|
||||||
cmp al,';'
|
|
||||||
je include_directory_ok
|
|
||||||
stos byte [edi]
|
|
||||||
or al,al
|
|
||||||
jnz copy_include_directory
|
|
||||||
dec esi
|
|
||||||
dec edi
|
|
||||||
include_directory_ok:
|
|
||||||
cmp byte [edi-1],'/'
|
|
||||||
je path_separator_ok
|
|
||||||
cmp byte [edi-1],'\'
|
|
||||||
je path_separator_ok
|
|
||||||
mov al,'/'
|
|
||||||
stos byte [edi]
|
|
||||||
path_separator_ok:
|
|
||||||
mov [esp+4],esi
|
mov [esp+4],esi
|
||||||
mov esi,[esp+8]
|
mov esi,[esp+8]
|
||||||
call preprocess_path
|
call expand_path
|
||||||
pop edx
|
pop edx
|
||||||
mov esi,edx
|
mov esi,edx
|
||||||
call open
|
call open
|
||||||
@ -2533,7 +2535,7 @@ include_file:
|
|||||||
try_in_current_directory:
|
try_in_current_directory:
|
||||||
mov esi,[esp]
|
mov esi,[esp]
|
||||||
push edi
|
push edi
|
||||||
call preprocess_path
|
call expand_path
|
||||||
pop edx
|
pop edx
|
||||||
mov esi,edx
|
mov esi,edx
|
||||||
call open
|
call open
|
||||||
@ -2553,35 +2555,7 @@ include_file:
|
|||||||
and [macro_status],0Fh
|
and [macro_status],0Fh
|
||||||
call preprocess_file
|
call preprocess_file
|
||||||
pop eax
|
pop eax
|
||||||
mov [macro_status],al
|
and al,0F0h
|
||||||
|
and [macro_status],0Fh
|
||||||
|
or [macro_status],al
|
||||||
jmp line_preprocessed
|
jmp line_preprocessed
|
||||||
preprocess_path:
|
|
||||||
lods byte [esi]
|
|
||||||
cmp al,'%'
|
|
||||||
je environment_variable
|
|
||||||
stos byte [edi]
|
|
||||||
or al,al
|
|
||||||
jnz preprocess_path
|
|
||||||
cmp edi,[memory_end]
|
|
||||||
ja out_of_memory
|
|
||||||
ret
|
|
||||||
environment_variable:
|
|
||||||
mov ebx,esi
|
|
||||||
find_variable_end:
|
|
||||||
lods byte [esi]
|
|
||||||
or al,al
|
|
||||||
jz not_environment_variable
|
|
||||||
cmp al,'%'
|
|
||||||
jne find_variable_end
|
|
||||||
mov byte [esi-1],0
|
|
||||||
push esi
|
|
||||||
mov esi,ebx
|
|
||||||
call get_environment_variable
|
|
||||||
pop esi
|
|
||||||
mov byte [esi-1],'%'
|
|
||||||
jmp preprocess_path
|
|
||||||
not_environment_variable:
|
|
||||||
mov al,'%'
|
|
||||||
stos byte [edi]
|
|
||||||
mov esi,ebx
|
|
||||||
jmp preprocess_path
|
|
||||||
|
@ -12,14 +12,14 @@ dump_symbols:
|
|||||||
jae out_of_memory
|
jae out_of_memory
|
||||||
mov eax,edi
|
mov eax,edi
|
||||||
sub eax,ebx
|
sub eax,ebx
|
||||||
mov [ebx-38h+0Ch],eax
|
mov [ebx-40h+0Ch],eax
|
||||||
mov esi,[output_file]
|
mov esi,[output_file]
|
||||||
call copy_asciiz
|
call copy_asciiz
|
||||||
cmp edi,[display_buffer]
|
cmp edi,[display_buffer]
|
||||||
jae out_of_memory
|
jae out_of_memory
|
||||||
mov edx,[symbols_stream]
|
mov edx,[symbols_stream]
|
||||||
mov ebp,[free_additional_memory]
|
mov ebp,[free_additional_memory]
|
||||||
mov [number_of_sections],0
|
and [number_of_sections],0
|
||||||
cmp [output_format],4
|
cmp [output_format],4
|
||||||
je prepare_strings_table
|
je prepare_strings_table
|
||||||
cmp [output_format],5
|
cmp [output_format],5
|
||||||
@ -152,22 +152,22 @@ dump_symbols:
|
|||||||
labels_dump_ok:
|
labels_dump_ok:
|
||||||
mov eax,edi
|
mov eax,edi
|
||||||
sub eax,ebx
|
sub eax,ebx
|
||||||
mov [ebx-38h+14h],eax
|
mov [ebx-40h+14h],eax
|
||||||
add eax,38h
|
add eax,40h
|
||||||
mov [ebx-38h+18h],eax
|
mov [ebx-40h+18h],eax
|
||||||
mov ecx,[memory_end]
|
mov ecx,[memory_end]
|
||||||
sub ecx,[labels_list]
|
sub ecx,[labels_list]
|
||||||
mov [ebx-38h+1Ch],ecx
|
mov [ebx-40h+1Ch],ecx
|
||||||
add eax,ecx
|
add eax,ecx
|
||||||
mov [ebx-38h+20h],eax
|
mov [ebx-40h+20h],eax
|
||||||
mov ecx,[source_start]
|
mov ecx,[source_start]
|
||||||
sub ecx,[memory_start]
|
sub ecx,[memory_start]
|
||||||
mov [ebx-38h+24h],ecx
|
mov [ebx-40h+24h],ecx
|
||||||
add eax,ecx
|
add eax,ecx
|
||||||
mov [ebx-38h+28h],eax
|
mov [ebx-40h+28h],eax
|
||||||
mov eax,[number_of_sections]
|
mov eax,[number_of_sections]
|
||||||
shl eax,2
|
shl eax,2
|
||||||
mov [ebx-38h+34h],eax
|
mov [ebx-40h+34h],eax
|
||||||
call prepare_preprocessed_source
|
call prepare_preprocessed_source
|
||||||
mov esi,[labels_list]
|
mov esi,[labels_list]
|
||||||
mov ebp,edi
|
mov ebp,edi
|
||||||
@ -179,7 +179,12 @@ dump_symbols:
|
|||||||
sub esi,8
|
sub esi,8
|
||||||
sub esi,ecx
|
sub esi,ecx
|
||||||
cmp eax,1
|
cmp eax,1
|
||||||
|
je process_line_dump
|
||||||
|
cmp eax,2
|
||||||
jne make_lines_dump
|
jne make_lines_dump
|
||||||
|
add dword [ebx-40h+3Ch],8
|
||||||
|
jmp make_lines_dump
|
||||||
|
process_line_dump:
|
||||||
mov eax,[esi+4]
|
mov eax,[esi+4]
|
||||||
sub eax,[code_start]
|
sub eax,[code_start]
|
||||||
add eax,[headers_size]
|
add eax,[headers_size]
|
||||||
@ -193,8 +198,10 @@ dump_symbols:
|
|||||||
stos dword [edi]
|
stos dword [edi]
|
||||||
mov eax,[esi+4]
|
mov eax,[esi+4]
|
||||||
xor edx,edx
|
xor edx,edx
|
||||||
|
xor cl,cl
|
||||||
sub eax,[esi+8]
|
sub eax,[esi+8]
|
||||||
sbb edx,[esi+8+4]
|
sbb edx,[esi+8+4]
|
||||||
|
sbb cl,[esi+1Bh]
|
||||||
stos dword [edi]
|
stos dword [edi]
|
||||||
mov eax,edx
|
mov eax,edx
|
||||||
stos dword [edi]
|
stos dword [edi]
|
||||||
@ -210,10 +217,15 @@ dump_symbols:
|
|||||||
base_symbol_for_line_ok:
|
base_symbol_for_line_ok:
|
||||||
stos dword [edi]
|
stos dword [edi]
|
||||||
mov eax,[esi+18h]
|
mov eax,[esi+18h]
|
||||||
and eax,001FFFFh
|
and eax,01FFFFh
|
||||||
stos dword [edi]
|
stos dword [edi]
|
||||||
|
mov [edi-1],cl
|
||||||
cmp edi,[display_buffer]
|
cmp edi,[display_buffer]
|
||||||
jae out_of_memory
|
jae out_of_memory
|
||||||
|
mov eax,edi
|
||||||
|
sub eax,1Ch
|
||||||
|
sub eax,ebp
|
||||||
|
mov [esi],eax
|
||||||
jmp make_lines_dump
|
jmp make_lines_dump
|
||||||
lines_dump_ok:
|
lines_dump_ok:
|
||||||
mov edx,edi
|
mov edx,edi
|
||||||
@ -223,10 +235,12 @@ dump_symbols:
|
|||||||
stos dword [edi]
|
stos dword [edi]
|
||||||
mov ecx,edi
|
mov ecx,edi
|
||||||
sub ecx,ebx
|
sub ecx,ebx
|
||||||
sub ecx,[ebx-38h+14h]
|
sub ecx,[ebx-40h+14h]
|
||||||
mov [ebx-38h+2Ch],ecx
|
mov [ebx-40h+2Ch],ecx
|
||||||
add ecx,[ebx-38h+28h]
|
add ecx,[ebx-40h+28h]
|
||||||
mov [ebx-38h+30h],ecx
|
mov [ebx-40h+30h],ecx
|
||||||
|
add ecx,[ebx-40h+34h]
|
||||||
|
mov [ebx-40h+38h],ecx
|
||||||
find_inexisting_offsets:
|
find_inexisting_offsets:
|
||||||
sub edx,1Ch
|
sub edx,1Ch
|
||||||
cmp edx,ebp
|
cmp edx,ebp
|
||||||
@ -238,7 +252,7 @@ dump_symbols:
|
|||||||
mov eax,[edx]
|
mov eax,[edx]
|
||||||
jmp find_inexisting_offsets
|
jmp find_inexisting_offsets
|
||||||
correct_inexisting_offset:
|
correct_inexisting_offset:
|
||||||
mov dword [edx],0
|
and dword [edx],0
|
||||||
or byte [edx+1Ah],2
|
or byte [edx+1Ah],2
|
||||||
jmp find_inexisting_offsets
|
jmp find_inexisting_offsets
|
||||||
write_symbols:
|
write_symbols:
|
||||||
@ -247,7 +261,7 @@ dump_symbols:
|
|||||||
jc write_failed
|
jc write_failed
|
||||||
mov edx,[code_start]
|
mov edx,[code_start]
|
||||||
mov ecx,[edx+14h]
|
mov ecx,[edx+14h]
|
||||||
add ecx,38h
|
add ecx,40h
|
||||||
call write
|
call write
|
||||||
jc write_failed
|
jc write_failed
|
||||||
mov edx,[display_buffer]
|
mov edx,[display_buffer]
|
||||||
@ -270,16 +284,47 @@ dump_symbols:
|
|||||||
shl ecx,2
|
shl ecx,2
|
||||||
call write
|
call write
|
||||||
jc write_failed
|
jc write_failed
|
||||||
|
mov esi,[labels_list]
|
||||||
|
mov edi,[memory_start]
|
||||||
|
make_references_dump:
|
||||||
|
cmp esi,[display_buffer]
|
||||||
|
je references_dump_ok
|
||||||
|
mov eax,[esi-4]
|
||||||
|
mov ecx,[esi-8]
|
||||||
|
sub esi,8
|
||||||
|
sub esi,ecx
|
||||||
|
cmp eax,2
|
||||||
|
je dump_reference
|
||||||
|
cmp eax,1
|
||||||
|
jne make_references_dump
|
||||||
|
mov edx,[esi]
|
||||||
|
jmp make_references_dump
|
||||||
|
dump_reference:
|
||||||
|
mov eax,[memory_end]
|
||||||
|
sub eax,[esi]
|
||||||
|
sub eax,LABEL_STRUCTURE_SIZE
|
||||||
|
stosd
|
||||||
|
mov eax,edx
|
||||||
|
stosd
|
||||||
|
cmp edi,[display_buffer]
|
||||||
|
jb make_references_dump
|
||||||
|
jmp out_of_memory
|
||||||
|
references_dump_ok:
|
||||||
|
mov edx,[memory_start]
|
||||||
|
mov ecx,edi
|
||||||
|
sub ecx,edx
|
||||||
|
call write
|
||||||
|
jc write_failed
|
||||||
call close
|
call close
|
||||||
ret
|
ret
|
||||||
setup_dump_header:
|
setup_dump_header:
|
||||||
xor eax,eax
|
xor eax,eax
|
||||||
mov ecx,38h shr 2
|
mov ecx,40h shr 2
|
||||||
rep stos dword [edi]
|
rep stos dword [edi]
|
||||||
mov ebx,edi
|
mov ebx,edi
|
||||||
mov dword [ebx-38h],'fas'+1Ah shl 24
|
mov dword [ebx-40h],'fas'+1Ah shl 24
|
||||||
mov dword [ebx-38h+4],VERSION_MAJOR + VERSION_MINOR shl 8 + 38h shl 16
|
mov dword [ebx-40h+4],VERSION_MAJOR + VERSION_MINOR shl 8 + 40h shl 16
|
||||||
mov dword [ebx-38h+10h],38h
|
mov dword [ebx-40h+10h],40h
|
||||||
ret
|
ret
|
||||||
prepare_preprocessed_source:
|
prepare_preprocessed_source:
|
||||||
mov esi,[memory_start]
|
mov esi,[memory_start]
|
||||||
@ -365,21 +410,21 @@ dump_preprocessed_source:
|
|||||||
mov eax,edi
|
mov eax,edi
|
||||||
sub eax,ebx
|
sub eax,ebx
|
||||||
dec eax
|
dec eax
|
||||||
mov [ebx-38h+0Ch],eax
|
mov [ebx-40h+0Ch],eax
|
||||||
mov eax,edi
|
mov eax,edi
|
||||||
sub eax,ebx
|
sub eax,ebx
|
||||||
mov [ebx-38h+14h],eax
|
mov [ebx-40h+14h],eax
|
||||||
add eax,38h
|
add eax,40h
|
||||||
mov [ebx-38h+20h],eax
|
mov [ebx-40h+20h],eax
|
||||||
call prepare_preprocessed_source
|
call prepare_preprocessed_source
|
||||||
sub esi,[memory_start]
|
sub esi,[memory_start]
|
||||||
mov [ebx-38h+24h],esi
|
mov [ebx-40h+24h],esi
|
||||||
mov edx,[symbols_file]
|
mov edx,[symbols_file]
|
||||||
call create
|
call create
|
||||||
jc write_failed
|
jc write_failed
|
||||||
mov edx,[free_additional_memory]
|
mov edx,[free_additional_memory]
|
||||||
mov ecx,[edx+14h]
|
mov ecx,[edx+14h]
|
||||||
add ecx,38h
|
add ecx,40h
|
||||||
call write
|
call write
|
||||||
jc write_failed
|
jc write_failed
|
||||||
mov edx,[memory_start]
|
mov edx,[memory_start]
|
||||||
|
@ -49,12 +49,12 @@ operators:
|
|||||||
db 1,'-',81h
|
db 1,'-',81h
|
||||||
db 1,'*',90h
|
db 1,'*',90h
|
||||||
db 1,'/',91h
|
db 1,'/',91h
|
||||||
db 3,'mod',0A0h
|
|
||||||
db 3,'and',0B0h
|
db 3,'and',0B0h
|
||||||
|
db 3,'mod',0A0h
|
||||||
db 2,'or',0B1h
|
db 2,'or',0B1h
|
||||||
db 3,'xor',0B2h
|
|
||||||
db 3,'shl',0C0h
|
db 3,'shl',0C0h
|
||||||
db 3,'shr',0C1h
|
db 3,'shr',0C1h
|
||||||
|
db 3,'xor',0B2h
|
||||||
db 0
|
db 0
|
||||||
|
|
||||||
single_operand_operators:
|
single_operand_operators:
|
||||||
@ -77,50 +77,10 @@ directive_operators:
|
|||||||
db 2,'in',0F6h
|
db 2,'in',0F6h
|
||||||
db 2,'on',84h
|
db 2,'on',84h
|
||||||
db 3,'ptr',85h
|
db 3,'ptr',85h
|
||||||
|
db 10,'relativeto',0F8h
|
||||||
db 4,'used',89h
|
db 4,'used',89h
|
||||||
db 0
|
db 0
|
||||||
|
|
||||||
address_registers:
|
|
||||||
db 2,'bp',25h
|
|
||||||
db 2,'bx',23h
|
|
||||||
db 2,'di',27h
|
|
||||||
db 3,'eax',40h
|
|
||||||
db 3,'ebp',45h
|
|
||||||
db 3,'ebx',43h
|
|
||||||
db 3,'ecx',41h
|
|
||||||
db 3,'edi',47h
|
|
||||||
db 3,'edx',42h
|
|
||||||
db 3,'eip',0F4h
|
|
||||||
db 3,'esi',46h
|
|
||||||
db 3,'esp',44h
|
|
||||||
db 3,'r10',8Ah
|
|
||||||
db 4,'r10d',4Ah
|
|
||||||
db 3,'r11',8Bh
|
|
||||||
db 4,'r11d',4Bh
|
|
||||||
db 3,'r12',8Ch
|
|
||||||
db 4,'r12d',4Ch
|
|
||||||
db 3,'r13',8Dh
|
|
||||||
db 4,'r13d',4Dh
|
|
||||||
db 3,'r14',8Eh
|
|
||||||
db 4,'r14d',4Eh
|
|
||||||
db 3,'r15',8Fh
|
|
||||||
db 4,'r15d',4Fh
|
|
||||||
db 2,'r8',88h
|
|
||||||
db 3,'r8d',48h
|
|
||||||
db 2,'r9',89h
|
|
||||||
db 3,'r9d',49h
|
|
||||||
db 3,'rax',80h
|
|
||||||
db 3,'rbp',85h
|
|
||||||
db 3,'rbx',83h
|
|
||||||
db 3,'rcx',81h
|
|
||||||
db 3,'rdi',87h
|
|
||||||
db 3,'rdx',82h
|
|
||||||
db 3,'rip',0F8h
|
|
||||||
db 3,'rsi',86h
|
|
||||||
db 3,'rsp',84h
|
|
||||||
db 2,'si',26h
|
|
||||||
db 0
|
|
||||||
|
|
||||||
address_sizes:
|
address_sizes:
|
||||||
db 4,'byte',1
|
db 4,'byte',1
|
||||||
db 5,'dword',4
|
db 5,'dword',4
|
||||||
@ -603,8 +563,20 @@ instructions_3:
|
|||||||
db 'xor',30h
|
db 'xor',30h
|
||||||
dw basic_instruction-instruction_handler
|
dw basic_instruction-instruction_handler
|
||||||
instructions_4:
|
instructions_4:
|
||||||
|
db 'andn',0F2h
|
||||||
|
dw andn_instruction-instruction_handler
|
||||||
db 'arpl',0
|
db 'arpl',0
|
||||||
dw arpl_instruction-instruction_handler
|
dw arpl_instruction-instruction_handler
|
||||||
|
db 'blci',26h
|
||||||
|
dw tbm_instruction-instruction_handler
|
||||||
|
db 'blcs',13h
|
||||||
|
dw tbm_instruction-instruction_handler
|
||||||
|
db 'blsi',3
|
||||||
|
dw bmi_instruction-instruction_handler
|
||||||
|
db 'blsr',1
|
||||||
|
dw bmi_instruction-instruction_handler
|
||||||
|
db 'bzhi',0F5h
|
||||||
|
dw bzhi_instruction-instruction_handler
|
||||||
db 'call',0
|
db 'call',0
|
||||||
dw call_instruction-instruction_handler
|
dw call_instruction-instruction_handler
|
||||||
db 'cdqe',98h
|
db 'cdqe',98h
|
||||||
@ -723,6 +695,8 @@ instructions_4:
|
|||||||
dw movq_instruction-instruction_handler
|
dw movq_instruction-instruction_handler
|
||||||
db 'movs',0A4h
|
db 'movs',0A4h
|
||||||
dw movs_instruction-instruction_handler
|
dw movs_instruction-instruction_handler
|
||||||
|
db 'mulx',0F6h
|
||||||
|
dw pdep_instruction-instruction_handler
|
||||||
db 'orpd',56h
|
db 'orpd',56h
|
||||||
dw sse_pd_instruction-instruction_handler
|
dw sse_pd_instruction-instruction_handler
|
||||||
db 'orps',56h
|
db 'orps',56h
|
||||||
@ -731,6 +705,10 @@ instructions_4:
|
|||||||
dw outs_instruction-instruction_handler
|
dw outs_instruction-instruction_handler
|
||||||
db 'pand',0DBh
|
db 'pand',0DBh
|
||||||
dw basic_mmx_instruction-instruction_handler
|
dw basic_mmx_instruction-instruction_handler
|
||||||
|
db 'pdep',0F5h
|
||||||
|
dw pdep_instruction-instruction_handler
|
||||||
|
db 'pext',0F5h
|
||||||
|
dw pext_instruction-instruction_handler
|
||||||
db 'popa',61h
|
db 'popa',61h
|
||||||
dw simple_instruction_except64-instruction_handler
|
dw simple_instruction_except64-instruction_handler
|
||||||
db 'popd',4
|
db 'popd',4
|
||||||
@ -759,10 +737,14 @@ instructions_4:
|
|||||||
dw ret_instruction_only64-instruction_handler
|
dw ret_instruction_only64-instruction_handler
|
||||||
db 'retw',0C2h
|
db 'retw',0C2h
|
||||||
dw ret_instruction_16bit-instruction_handler
|
dw ret_instruction_16bit-instruction_handler
|
||||||
|
db 'rorx',0F0h
|
||||||
|
dw rorx_instruction-instruction_handler
|
||||||
db 'sahf',9Eh
|
db 'sahf',9Eh
|
||||||
dw simple_instruction-instruction_handler
|
dw simple_instruction-instruction_handler
|
||||||
db 'salc',0D6h
|
db 'salc',0D6h
|
||||||
dw simple_instruction_except64-instruction_handler
|
dw simple_instruction_except64-instruction_handler
|
||||||
|
db 'sarx',0F7h
|
||||||
|
dw sarx_instruction-instruction_handler
|
||||||
db 'scas',0AEh
|
db 'scas',0AEh
|
||||||
dw stos_instruction-instruction_handler
|
dw stos_instruction-instruction_handler
|
||||||
db 'seta',97h
|
db 'seta',97h
|
||||||
@ -789,8 +771,12 @@ instructions_4:
|
|||||||
dw lgdt_instruction-instruction_handler
|
dw lgdt_instruction-instruction_handler
|
||||||
db 'shld',0A4h
|
db 'shld',0A4h
|
||||||
dw shd_instruction-instruction_handler
|
dw shd_instruction-instruction_handler
|
||||||
|
db 'shlx',0F7h
|
||||||
|
dw shlx_instruction-instruction_handler
|
||||||
db 'shrd',0ACh
|
db 'shrd',0ACh
|
||||||
dw shd_instruction-instruction_handler
|
dw shd_instruction-instruction_handler
|
||||||
|
db 'shrx',0F7h
|
||||||
|
dw shrx_instruction-instruction_handler
|
||||||
db 'sidt',1
|
db 'sidt',1
|
||||||
dw lgdt_instruction-instruction_handler
|
dw lgdt_instruction-instruction_handler
|
||||||
db 'sldt',0
|
db 'sldt',0
|
||||||
@ -808,13 +794,15 @@ instructions_4:
|
|||||||
db 'verw',5
|
db 'verw',5
|
||||||
dw pm_word_instruction-instruction_handler
|
dw pm_word_instruction-instruction_handler
|
||||||
db 'vpor',0EBh
|
db 'vpor',0EBh
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'wait',9Bh
|
db 'wait',9Bh
|
||||||
dw simple_instruction-instruction_handler
|
dw simple_instruction-instruction_handler
|
||||||
db 'xadd',0C0h
|
db 'xadd',0C0h
|
||||||
dw basic_486_instruction-instruction_handler
|
dw basic_486_instruction-instruction_handler
|
||||||
db 'xchg',0
|
db 'xchg',0
|
||||||
dw xchg_instruction-instruction_handler
|
dw xchg_instruction-instruction_handler
|
||||||
|
db 'xend',0D5h
|
||||||
|
dw simple_vmx_instruction-instruction_handler
|
||||||
db 'xlat',0D7h
|
db 'xlat',0D7h
|
||||||
dw xlat_instruction-instruction_handler
|
dw xlat_instruction-instruction_handler
|
||||||
instructions_5:
|
instructions_5:
|
||||||
@ -832,6 +820,12 @@ instructions_5:
|
|||||||
dw sse_pd_instruction-instruction_handler
|
dw sse_pd_instruction-instruction_handler
|
||||||
db 'andps',54h
|
db 'andps',54h
|
||||||
dw sse_ps_instruction-instruction_handler
|
dw sse_ps_instruction-instruction_handler
|
||||||
|
db 'bextr',0F7h
|
||||||
|
dw bextr_instruction-instruction_handler
|
||||||
|
db 'blcic',15h
|
||||||
|
dw tbm_instruction-instruction_handler
|
||||||
|
db 'blsic',16h
|
||||||
|
dw tbm_instruction-instruction_handler
|
||||||
db 'bound',0
|
db 'bound',0
|
||||||
dw bound_instruction-instruction_handler
|
dw bound_instruction-instruction_handler
|
||||||
db 'break',0
|
db 'break',0
|
||||||
@ -839,25 +833,25 @@ instructions_5:
|
|||||||
db 'bswap',0
|
db 'bswap',0
|
||||||
dw bswap_instruction-instruction_handler
|
dw bswap_instruction-instruction_handler
|
||||||
db 'cmova',47h
|
db 'cmova',47h
|
||||||
dw cmov_instruction-instruction_handler
|
dw bs_instruction-instruction_handler
|
||||||
db 'cmovb',42h
|
db 'cmovb',42h
|
||||||
dw cmov_instruction-instruction_handler
|
dw bs_instruction-instruction_handler
|
||||||
db 'cmovc',42h
|
db 'cmovc',42h
|
||||||
dw cmov_instruction-instruction_handler
|
dw bs_instruction-instruction_handler
|
||||||
db 'cmove',44h
|
db 'cmove',44h
|
||||||
dw cmov_instruction-instruction_handler
|
dw bs_instruction-instruction_handler
|
||||||
db 'cmovg',4Fh
|
db 'cmovg',4Fh
|
||||||
dw cmov_instruction-instruction_handler
|
dw bs_instruction-instruction_handler
|
||||||
db 'cmovl',4Ch
|
db 'cmovl',4Ch
|
||||||
dw cmov_instruction-instruction_handler
|
dw bs_instruction-instruction_handler
|
||||||
db 'cmovo',40h
|
db 'cmovo',40h
|
||||||
dw cmov_instruction-instruction_handler
|
dw bs_instruction-instruction_handler
|
||||||
db 'cmovp',4Ah
|
db 'cmovp',4Ah
|
||||||
dw cmov_instruction-instruction_handler
|
dw bs_instruction-instruction_handler
|
||||||
db 'cmovs',48h
|
db 'cmovs',48h
|
||||||
dw cmov_instruction-instruction_handler
|
dw bs_instruction-instruction_handler
|
||||||
db 'cmovz',44h
|
db 'cmovz',44h
|
||||||
dw cmov_instruction-instruction_handler
|
dw bs_instruction-instruction_handler
|
||||||
db 'cmppd',-1
|
db 'cmppd',-1
|
||||||
dw cmp_pd_instruction-instruction_handler
|
dw cmp_pd_instruction-instruction_handler
|
||||||
db 'cmpps',-1
|
db 'cmpps',-1
|
||||||
@ -1222,6 +1216,10 @@ instructions_5:
|
|||||||
dw sse_ss_instruction-instruction_handler
|
dw sse_ss_instruction-instruction_handler
|
||||||
db 'times',0
|
db 'times',0
|
||||||
dw times_directive-instruction_handler
|
dw times_directive-instruction_handler
|
||||||
|
db 'tzcnt',0BCh
|
||||||
|
dw popcnt_instruction-instruction_handler
|
||||||
|
db 'tzmsk',14h
|
||||||
|
dw tbm_instruction-instruction_handler
|
||||||
db 'vdppd',41h
|
db 'vdppd',41h
|
||||||
dw avx_128bit_instruction_3a_imm8-instruction_handler
|
dw avx_128bit_instruction_3a_imm8-instruction_handler
|
||||||
db 'vdpps',40h
|
db 'vdpps',40h
|
||||||
@ -1239,9 +1237,9 @@ instructions_5:
|
|||||||
db 'vorps',56h
|
db 'vorps',56h
|
||||||
dw avx_ps_instruction-instruction_handler
|
dw avx_ps_instruction-instruction_handler
|
||||||
db 'vpand',0DBh
|
db 'vpand',0DBh
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpxor',0EFh
|
db 'vpxor',0EFh
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'while',0
|
db 'while',0
|
||||||
dw while_directive-instruction_handler
|
dw while_directive-instruction_handler
|
||||||
db 'wrmsr',30h
|
db 'wrmsr',30h
|
||||||
@ -1254,6 +1252,8 @@ instructions_5:
|
|||||||
dw sse_ps_instruction-instruction_handler
|
dw sse_ps_instruction-instruction_handler
|
||||||
db 'xsave',100b
|
db 'xsave',100b
|
||||||
dw fxsave_instruction-instruction_handler
|
dw fxsave_instruction-instruction_handler
|
||||||
|
db 'xtest',0D6h
|
||||||
|
dw simple_vmx_instruction-instruction_handler
|
||||||
instructions_6:
|
instructions_6:
|
||||||
db 'aesdec',0DEh
|
db 'aesdec',0DEh
|
||||||
dw sse4_instruction_38-instruction_handler
|
dw sse4_instruction_38-instruction_handler
|
||||||
@ -1267,38 +1267,42 @@ instructions_6:
|
|||||||
dw sse_ps_instruction-instruction_handler
|
dw sse_ps_instruction-instruction_handler
|
||||||
db 'assert',0
|
db 'assert',0
|
||||||
dw assert_directive-instruction_handler
|
dw assert_directive-instruction_handler
|
||||||
|
db 'blcmsk',21h
|
||||||
|
dw tbm_instruction-instruction_handler
|
||||||
|
db 'blsmsk',2
|
||||||
|
dw bmi_instruction-instruction_handler
|
||||||
db 'cmovae',43h
|
db 'cmovae',43h
|
||||||
dw cmov_instruction-instruction_handler
|
dw bs_instruction-instruction_handler
|
||||||
db 'cmovbe',46h
|
db 'cmovbe',46h
|
||||||
dw cmov_instruction-instruction_handler
|
dw bs_instruction-instruction_handler
|
||||||
db 'cmovge',4Dh
|
db 'cmovge',4Dh
|
||||||
dw cmov_instruction-instruction_handler
|
dw bs_instruction-instruction_handler
|
||||||
db 'cmovle',4Eh
|
db 'cmovle',4Eh
|
||||||
dw cmov_instruction-instruction_handler
|
dw bs_instruction-instruction_handler
|
||||||
db 'cmovna',46h
|
db 'cmovna',46h
|
||||||
dw cmov_instruction-instruction_handler
|
dw bs_instruction-instruction_handler
|
||||||
db 'cmovnb',43h
|
db 'cmovnb',43h
|
||||||
dw cmov_instruction-instruction_handler
|
dw bs_instruction-instruction_handler
|
||||||
db 'cmovnc',43h
|
db 'cmovnc',43h
|
||||||
dw cmov_instruction-instruction_handler
|
dw bs_instruction-instruction_handler
|
||||||
db 'cmovne',45h
|
db 'cmovne',45h
|
||||||
dw cmov_instruction-instruction_handler
|
dw bs_instruction-instruction_handler
|
||||||
db 'cmovng',4Eh
|
db 'cmovng',4Eh
|
||||||
dw cmov_instruction-instruction_handler
|
dw bs_instruction-instruction_handler
|
||||||
db 'cmovnl',4Dh
|
db 'cmovnl',4Dh
|
||||||
dw cmov_instruction-instruction_handler
|
dw bs_instruction-instruction_handler
|
||||||
db 'cmovno',41h
|
db 'cmovno',41h
|
||||||
dw cmov_instruction-instruction_handler
|
dw bs_instruction-instruction_handler
|
||||||
db 'cmovnp',4Bh
|
db 'cmovnp',4Bh
|
||||||
dw cmov_instruction-instruction_handler
|
dw bs_instruction-instruction_handler
|
||||||
db 'cmovns',49h
|
db 'cmovns',49h
|
||||||
dw cmov_instruction-instruction_handler
|
dw bs_instruction-instruction_handler
|
||||||
db 'cmovnz',45h
|
db 'cmovnz',45h
|
||||||
dw cmov_instruction-instruction_handler
|
dw bs_instruction-instruction_handler
|
||||||
db 'cmovpe',4Ah
|
db 'cmovpe',4Ah
|
||||||
dw cmov_instruction-instruction_handler
|
dw bs_instruction-instruction_handler
|
||||||
db 'cmovpo',4Bh
|
db 'cmovpo',4Bh
|
||||||
dw cmov_instruction-instruction_handler
|
dw bs_instruction-instruction_handler
|
||||||
db 'comisd',2Fh
|
db 'comisd',2Fh
|
||||||
dw comisd_instruction-instruction_handler
|
dw comisd_instruction-instruction_handler
|
||||||
db 'comiss',2Fh
|
db 'comiss',2Fh
|
||||||
@ -1391,6 +1395,8 @@ instructions_6:
|
|||||||
dw invlpg_instruction-instruction_handler
|
dw invlpg_instruction-instruction_handler
|
||||||
db 'lfence',0E8h
|
db 'lfence',0E8h
|
||||||
dw fence_instruction-instruction_handler
|
dw fence_instruction-instruction_handler
|
||||||
|
db 'llwpcb',0
|
||||||
|
dw llwpcb_instruction-instruction_handler
|
||||||
db 'looped',0E1h
|
db 'looped',0E1h
|
||||||
dw loop_instruction_32bit-instruction_handler
|
dw loop_instruction_32bit-instruction_handler
|
||||||
db 'loopeq',0E1h
|
db 'loopeq',0E1h
|
||||||
@ -1407,6 +1413,10 @@ instructions_6:
|
|||||||
dw loop_instruction_64bit-instruction_handler
|
dw loop_instruction_64bit-instruction_handler
|
||||||
db 'loopzw',0E1h
|
db 'loopzw',0E1h
|
||||||
dw loop_instruction_16bit-instruction_handler
|
dw loop_instruction_16bit-instruction_handler
|
||||||
|
db 'lwpins',0
|
||||||
|
dw lwpins_instruction-instruction_handler
|
||||||
|
db 'lwpval',1
|
||||||
|
dw lwpins_instruction-instruction_handler
|
||||||
db 'mfence',0F0h
|
db 'mfence',0F0h
|
||||||
dw fence_instruction-instruction_handler
|
dw fence_instruction-instruction_handler
|
||||||
db 'movapd',28h
|
db 'movapd',28h
|
||||||
@ -1563,6 +1573,8 @@ instructions_6:
|
|||||||
dw sse_ps_instruction_imm8-instruction_handler
|
dw sse_ps_instruction_imm8-instruction_handler
|
||||||
db 'skinit',0
|
db 'skinit',0
|
||||||
dw skinit_instruction-instruction_handler
|
dw skinit_instruction-instruction_handler
|
||||||
|
db 'slwpcb',1
|
||||||
|
dw llwpcb_instruction-instruction_handler
|
||||||
db 'sqrtpd',51h
|
db 'sqrtpd',51h
|
||||||
dw sse_pd_instruction-instruction_handler
|
dw sse_pd_instruction-instruction_handler
|
||||||
db 'sqrtps',51h
|
db 'sqrtps',51h
|
||||||
@ -1575,6 +1587,8 @@ instructions_6:
|
|||||||
dw swapgs_instruction-instruction_handler
|
dw swapgs_instruction-instruction_handler
|
||||||
db 'sysret',07h
|
db 'sysret',07h
|
||||||
dw simple_extended_instruction-instruction_handler
|
dw simple_extended_instruction-instruction_handler
|
||||||
|
db 't1mskc',17h
|
||||||
|
dw tbm_instruction-instruction_handler
|
||||||
db 'vaddpd',58h
|
db 'vaddpd',58h
|
||||||
dw avx_pd_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vaddps',58h
|
db 'vaddps',58h
|
||||||
@ -1644,25 +1658,25 @@ instructions_6:
|
|||||||
db 'vmxoff',0C4h
|
db 'vmxoff',0C4h
|
||||||
dw simple_vmx_instruction-instruction_handler
|
dw simple_vmx_instruction-instruction_handler
|
||||||
db 'vpabsb',1Ch
|
db 'vpabsb',1Ch
|
||||||
dw avx_single_source_128bit_instruction_38-instruction_handler
|
dw avx_single_source_instruction_38-instruction_handler
|
||||||
db 'vpabsd',1Eh
|
db 'vpabsd',1Eh
|
||||||
dw avx_single_source_128bit_instruction_38-instruction_handler
|
dw avx_single_source_instruction_38-instruction_handler
|
||||||
db 'vpabsw',1Dh
|
db 'vpabsw',1Dh
|
||||||
dw avx_single_source_128bit_instruction_38-instruction_handler
|
dw avx_single_source_instruction_38-instruction_handler
|
||||||
db 'vpaddb',0FCh
|
db 'vpaddb',0FCh
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpaddd',0FEh
|
db 'vpaddd',0FEh
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpaddq',0D4h
|
db 'vpaddq',0D4h
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpaddw',0FDh
|
db 'vpaddw',0FDh
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpandn',0DFh
|
db 'vpandn',0DFh
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpavgb',0E0h
|
db 'vpavgb',0E0h
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpavgw',0E3h
|
db 'vpavgw',0E3h
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpcmov',0A2h
|
db 'vpcmov',0A2h
|
||||||
dw vpcmov_instruction-instruction_handler
|
dw vpcmov_instruction-instruction_handler
|
||||||
db 'vpcomb',-1
|
db 'vpcomb',-1
|
||||||
@ -1673,6 +1687,10 @@ instructions_6:
|
|||||||
dw xop_pcom_q_instruction-instruction_handler
|
dw xop_pcom_q_instruction-instruction_handler
|
||||||
db 'vpcomw',-1
|
db 'vpcomw',-1
|
||||||
dw xop_pcom_w_instruction-instruction_handler
|
dw xop_pcom_w_instruction-instruction_handler
|
||||||
|
db 'vpermd',36h
|
||||||
|
dw avx_permd_instruction-instruction_handler
|
||||||
|
db 'vpermq',0
|
||||||
|
dw avx_permq_instruction-instruction_handler
|
||||||
db 'vpperm',0A3h
|
db 'vpperm',0A3h
|
||||||
dw xop_128bit_instruction-instruction_handler
|
dw xop_128bit_instruction-instruction_handler
|
||||||
db 'vprotb',90h
|
db 'vprotb',90h
|
||||||
@ -1716,13 +1734,13 @@ instructions_6:
|
|||||||
db 'vpsrlw',0D1h
|
db 'vpsrlw',0D1h
|
||||||
dw avx_bit_shift_instruction-instruction_handler
|
dw avx_bit_shift_instruction-instruction_handler
|
||||||
db 'vpsubb',0F8h
|
db 'vpsubb',0F8h
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpsubd',0FAh
|
db 'vpsubd',0FAh
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpsubq',0FBh
|
db 'vpsubq',0FBh
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpsubw',0F9h
|
db 'vpsubw',0F9h
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vptest',17h
|
db 'vptest',17h
|
||||||
dw avx_single_source_instruction_38-instruction_handler
|
dw avx_single_source_instruction_38-instruction_handler
|
||||||
db 'vrcpps',53h
|
db 'vrcpps',53h
|
||||||
@ -1745,6 +1763,10 @@ instructions_6:
|
|||||||
dw simple_extended_instruction-instruction_handler
|
dw simple_extended_instruction-instruction_handler
|
||||||
db 'wrmsrq',30h
|
db 'wrmsrq',30h
|
||||||
dw simple_extended_instruction_64bit-instruction_handler
|
dw simple_extended_instruction_64bit-instruction_handler
|
||||||
|
db 'xabort',0
|
||||||
|
dw xabort_instruction-instruction_handler
|
||||||
|
db 'xbegin',0
|
||||||
|
dw xbegin_instruction-instruction_handler
|
||||||
db 'xgetbv',0D0h
|
db 'xgetbv',0D0h
|
||||||
dw simple_vmx_instruction-instruction_handler
|
dw simple_vmx_instruction-instruction_handler
|
||||||
db 'xrstor',101b
|
db 'xrstor',101b
|
||||||
@ -1752,20 +1774,24 @@ instructions_6:
|
|||||||
db 'xsetbv',0D1h
|
db 'xsetbv',0D1h
|
||||||
dw simple_vmx_instruction-instruction_handler
|
dw simple_vmx_instruction-instruction_handler
|
||||||
instructions_7:
|
instructions_7:
|
||||||
|
db 'blcfill',11h
|
||||||
|
dw tbm_instruction-instruction_handler
|
||||||
db 'blendpd',0Dh
|
db 'blendpd',0Dh
|
||||||
dw sse4_instruction_3a_imm8-instruction_handler
|
dw sse4_instruction_3a_imm8-instruction_handler
|
||||||
db 'blendps',0Ch
|
db 'blendps',0Ch
|
||||||
dw sse4_instruction_3a_imm8-instruction_handler
|
dw sse4_instruction_3a_imm8-instruction_handler
|
||||||
|
db 'blsfill',12h
|
||||||
|
dw tbm_instruction-instruction_handler
|
||||||
db 'clflush',111b
|
db 'clflush',111b
|
||||||
dw fxsave_instruction-instruction_handler
|
dw fxsave_instruction-instruction_handler
|
||||||
db 'cmovnae',42h
|
db 'cmovnae',42h
|
||||||
dw cmov_instruction-instruction_handler
|
dw bs_instruction-instruction_handler
|
||||||
db 'cmovnbe',47h
|
db 'cmovnbe',47h
|
||||||
dw cmov_instruction-instruction_handler
|
dw bs_instruction-instruction_handler
|
||||||
db 'cmovnge',4Ch
|
db 'cmovnge',4Ch
|
||||||
dw cmov_instruction-instruction_handler
|
dw bs_instruction-instruction_handler
|
||||||
db 'cmovnle',4Fh
|
db 'cmovnle',4Fh
|
||||||
dw cmov_instruction-instruction_handler
|
dw bs_instruction-instruction_handler
|
||||||
db 'cmpeqpd',0
|
db 'cmpeqpd',0
|
||||||
dw cmp_pd_instruction-instruction_handler
|
dw cmp_pd_instruction-instruction_handler
|
||||||
db 'cmpeqps',0
|
db 'cmpeqps',0
|
||||||
@ -1842,6 +1868,8 @@ instructions_7:
|
|||||||
dw insertq_instruction-instruction_handler
|
dw insertq_instruction-instruction_handler
|
||||||
db 'invlpga',0DFh
|
db 'invlpga',0DFh
|
||||||
dw invlpga_instruction-instruction_handler
|
dw invlpga_instruction-instruction_handler
|
||||||
|
db 'invpcid',82h
|
||||||
|
dw vmx_inv_instruction-instruction_handler
|
||||||
db 'invvpid',81h
|
db 'invvpid',81h
|
||||||
dw vmx_inv_instruction-instruction_handler
|
dw vmx_inv_instruction-instruction_handler
|
||||||
db 'ldmxcsr',10b
|
db 'ldmxcsr',10b
|
||||||
@ -2029,9 +2057,9 @@ instructions_7:
|
|||||||
db 'vmwrite',0
|
db 'vmwrite',0
|
||||||
dw vmwrite_instruction-instruction_handler
|
dw vmwrite_instruction-instruction_handler
|
||||||
db 'vpaddsb',0ECh
|
db 'vpaddsb',0ECh
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpaddsw',0EDh
|
db 'vpaddsw',0EDh
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpcomub',-1
|
db 'vpcomub',-1
|
||||||
dw xop_pcom_ub_instruction-instruction_handler
|
dw xop_pcom_ub_instruction-instruction_handler
|
||||||
db 'vpcomud',-1
|
db 'vpcomud',-1
|
||||||
@ -2040,6 +2068,10 @@ instructions_7:
|
|||||||
dw xop_pcom_uq_instruction-instruction_handler
|
dw xop_pcom_uq_instruction-instruction_handler
|
||||||
db 'vpcomuw',-1
|
db 'vpcomuw',-1
|
||||||
dw xop_pcom_uw_instruction-instruction_handler
|
dw xop_pcom_uw_instruction-instruction_handler
|
||||||
|
db 'vpermpd',1
|
||||||
|
dw avx_permq_instruction-instruction_handler
|
||||||
|
db 'vpermps',16h
|
||||||
|
dw avx_permd_instruction-instruction_handler
|
||||||
db 'vpextrb',14h
|
db 'vpextrb',14h
|
||||||
dw avx_pextrb_instruction-instruction_handler
|
dw avx_pextrb_instruction-instruction_handler
|
||||||
db 'vpextrd',16h
|
db 'vpextrd',16h
|
||||||
@ -2049,13 +2081,13 @@ instructions_7:
|
|||||||
db 'vpextrw',15h
|
db 'vpextrw',15h
|
||||||
dw avx_pextrw_instruction-instruction_handler
|
dw avx_pextrw_instruction-instruction_handler
|
||||||
db 'vphaddd',2
|
db 'vphaddd',2
|
||||||
dw avx_128bit_instruction_38-instruction_handler
|
dw avx_instruction_38-instruction_handler
|
||||||
db 'vphaddw',1
|
db 'vphaddw',1
|
||||||
dw avx_128bit_instruction_38-instruction_handler
|
dw avx_instruction_38-instruction_handler
|
||||||
db 'vphsubd',6
|
db 'vphsubd',6
|
||||||
dw avx_128bit_instruction_38-instruction_handler
|
dw avx_instruction_38-instruction_handler
|
||||||
db 'vphsubw',5
|
db 'vphsubw',5
|
||||||
dw avx_128bit_instruction_38-instruction_handler
|
dw avx_instruction_38-instruction_handler
|
||||||
db 'vpinsrb',20h
|
db 'vpinsrb',20h
|
||||||
dw avx_pinsrb_instruction-instruction_handler
|
dw avx_pinsrb_instruction-instruction_handler
|
||||||
db 'vpinsrd',22h
|
db 'vpinsrd',22h
|
||||||
@ -2065,57 +2097,67 @@ instructions_7:
|
|||||||
db 'vpinsrw',0C4h
|
db 'vpinsrw',0C4h
|
||||||
dw avx_pinsrw_instruction-instruction_handler
|
dw avx_pinsrw_instruction-instruction_handler
|
||||||
db 'vpmaxsb',3Ch
|
db 'vpmaxsb',3Ch
|
||||||
dw avx_128bit_instruction_38-instruction_handler
|
dw avx_instruction_38-instruction_handler
|
||||||
db 'vpmaxsd',3Dh
|
db 'vpmaxsd',3Dh
|
||||||
dw avx_128bit_instruction_38-instruction_handler
|
dw avx_instruction_38-instruction_handler
|
||||||
db 'vpmaxsw',0EEh
|
db 'vpmaxsw',0EEh
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpmaxub',0DEh
|
db 'vpmaxub',0DEh
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpmaxud',3Fh
|
db 'vpmaxud',3Fh
|
||||||
dw avx_128bit_instruction_38-instruction_handler
|
dw avx_instruction_38-instruction_handler
|
||||||
db 'vpmaxuw',3Eh
|
db 'vpmaxuw',3Eh
|
||||||
dw avx_128bit_instruction_38-instruction_handler
|
dw avx_instruction_38-instruction_handler
|
||||||
db 'vpminsb',38h
|
db 'vpminsb',38h
|
||||||
dw avx_128bit_instruction_38-instruction_handler
|
dw avx_instruction_38-instruction_handler
|
||||||
db 'vpminsd',39h
|
db 'vpminsd',39h
|
||||||
dw avx_128bit_instruction_38-instruction_handler
|
dw avx_instruction_38-instruction_handler
|
||||||
db 'vpminsw',0EAh
|
db 'vpminsw',0EAh
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpminub',0DAh
|
db 'vpminub',0DAh
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpminud',3Bh
|
db 'vpminud',3Bh
|
||||||
dw avx_128bit_instruction_38-instruction_handler
|
dw avx_instruction_38-instruction_handler
|
||||||
db 'vpminuw',3Ah
|
db 'vpminuw',3Ah
|
||||||
dw avx_128bit_instruction_38-instruction_handler
|
dw avx_instruction_38-instruction_handler
|
||||||
db 'vpmuldq',28h
|
db 'vpmuldq',28h
|
||||||
dw avx_128bit_instruction_38-instruction_handler
|
dw avx_instruction_38-instruction_handler
|
||||||
db 'vpmulhw',0E5h
|
db 'vpmulhw',0E5h
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpmulld',40h
|
db 'vpmulld',40h
|
||||||
dw avx_128bit_instruction_38-instruction_handler
|
dw avx_instruction_38-instruction_handler
|
||||||
db 'vpmullw',0D5h
|
db 'vpmullw',0D5h
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpsadbw',0F6h
|
db 'vpsadbw',0F6h
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpshufb',0
|
db 'vpshufb',0
|
||||||
dw avx_128bit_instruction_38-instruction_handler
|
dw avx_instruction_38-instruction_handler
|
||||||
db 'vpshufd',66h
|
db 'vpshufd',66h
|
||||||
dw avx_pshufd_instruction-instruction_handler
|
dw avx_pshufd_instruction-instruction_handler
|
||||||
db 'vpsignb',8
|
db 'vpsignb',8
|
||||||
dw avx_128bit_instruction_38-instruction_handler
|
dw avx_instruction_38-instruction_handler
|
||||||
db 'vpsignd',0Ah
|
db 'vpsignd',0Ah
|
||||||
dw avx_128bit_instruction_38-instruction_handler
|
dw avx_instruction_38-instruction_handler
|
||||||
db 'vpsignw',9
|
db 'vpsignw',9
|
||||||
dw avx_128bit_instruction_38-instruction_handler
|
dw avx_instruction_38-instruction_handler
|
||||||
db 'vpslldq',111b
|
db 'vpslldq',111b
|
||||||
dw avx_pslldq_instruction-instruction_handler
|
dw avx_pslldq_instruction-instruction_handler
|
||||||
|
db 'vpsllvd',47h
|
||||||
|
dw avx_instruction_38-instruction_handler
|
||||||
|
db 'vpsllvq',47h
|
||||||
|
dw avx_instruction_38_w1-instruction_handler
|
||||||
|
db 'vpsravd',46h
|
||||||
|
dw avx_instruction_38-instruction_handler
|
||||||
db 'vpsrldq',011b
|
db 'vpsrldq',011b
|
||||||
dw avx_pslldq_instruction-instruction_handler
|
dw avx_pslldq_instruction-instruction_handler
|
||||||
|
db 'vpsrlvd',45h
|
||||||
|
dw avx_instruction_38-instruction_handler
|
||||||
|
db 'vpsrlvq',45h
|
||||||
|
dw avx_instruction_38_w1-instruction_handler
|
||||||
db 'vpsubsb',0E8h
|
db 'vpsubsb',0E8h
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpsubsw',0E9h
|
db 'vpsubsw',0E9h
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vshufpd',0C6h
|
db 'vshufpd',0C6h
|
||||||
dw avx_pd_instruction_imm8-instruction_handler
|
dw avx_pd_instruction_imm8-instruction_handler
|
||||||
db 'vshufps',0C6h
|
db 'vshufps',0C6h
|
||||||
@ -2213,6 +2255,8 @@ instructions_8:
|
|||||||
dw fldenv_instruction_32bit-instruction_handler
|
dw fldenv_instruction_32bit-instruction_handler
|
||||||
db 'fnstenvw',6
|
db 'fnstenvw',6
|
||||||
dw fldenv_instruction_16bit-instruction_handler
|
dw fldenv_instruction_16bit-instruction_handler
|
||||||
|
db 'fxsave64',0
|
||||||
|
dw fxsave_instruction_64bit-instruction_handler
|
||||||
db 'insertps',0
|
db 'insertps',0
|
||||||
dw insertps_instruction-instruction_handler
|
dw insertps_instruction-instruction_handler
|
||||||
db 'maskmovq',0
|
db 'maskmovq',0
|
||||||
@ -2221,7 +2265,7 @@ instructions_8:
|
|||||||
dw movmskpd_instruction-instruction_handler
|
dw movmskpd_instruction-instruction_handler
|
||||||
db 'movmskps',0
|
db 'movmskps',0
|
||||||
dw movmskps_instruction-instruction_handler
|
dw movmskps_instruction-instruction_handler
|
||||||
db 'movntdqa',0
|
db 'movntdqa',2Ah
|
||||||
dw movntdqa_instruction-instruction_handler
|
dw movntdqa_instruction-instruction_handler
|
||||||
db 'movshdup',16h
|
db 'movshdup',16h
|
||||||
dw movshdup_instruction-instruction_handler
|
dw movshdup_instruction-instruction_handler
|
||||||
@ -2366,33 +2410,35 @@ instructions_8:
|
|||||||
db 'vmovntps',2Bh
|
db 'vmovntps',2Bh
|
||||||
dw avx_movntps_instruction-instruction_handler
|
dw avx_movntps_instruction-instruction_handler
|
||||||
db 'vmpsadbw',42h
|
db 'vmpsadbw',42h
|
||||||
dw avx_128bit_instruction_3a_imm8-instruction_handler
|
dw avx_instruction_3a_imm8-instruction_handler
|
||||||
db 'vmresume',0C3h
|
db 'vmresume',0C3h
|
||||||
dw simple_vmx_instruction-instruction_handler
|
dw simple_vmx_instruction-instruction_handler
|
||||||
db 'vpaddusb',0DCh
|
db 'vpaddusb',0DCh
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpaddusw',0DDh
|
db 'vpaddusw',0DDh
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpalignr',0Fh
|
db 'vpalignr',0Fh
|
||||||
dw avx_128bit_instruction_3a_imm8-instruction_handler
|
dw avx_instruction_3a_imm8-instruction_handler
|
||||||
|
db 'vpblendd',2
|
||||||
|
dw avx_instruction_3a_imm8-instruction_handler
|
||||||
db 'vpblendw',0Eh
|
db 'vpblendw',0Eh
|
||||||
dw avx_128bit_instruction_3a_imm8-instruction_handler
|
dw avx_instruction_3a_imm8-instruction_handler
|
||||||
db 'vpcmpeqb',74h
|
db 'vpcmpeqb',74h
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpcmpeqd',76h
|
db 'vpcmpeqd',76h
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpcmpeqq',29h
|
db 'vpcmpeqq',29h
|
||||||
dw avx_128bit_instruction_38-instruction_handler
|
dw avx_instruction_38-instruction_handler
|
||||||
db 'vpcmpeqw',75h
|
db 'vpcmpeqw',75h
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpcmpgtb',64h
|
db 'vpcmpgtb',64h
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpcmpgtd',66h
|
db 'vpcmpgtd',66h
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpcmpgtq',37h
|
db 'vpcmpgtq',37h
|
||||||
dw avx_128bit_instruction_38-instruction_handler
|
dw avx_instruction_38-instruction_handler
|
||||||
db 'vpcmpgtw',65h
|
db 'vpcmpgtw',65h
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpcomeqb',4
|
db 'vpcomeqb',4
|
||||||
dw xop_pcom_b_instruction-instruction_handler
|
dw xop_pcom_b_instruction-instruction_handler
|
||||||
db 'vpcomeqd',4
|
db 'vpcomeqd',4
|
||||||
@ -2442,7 +2488,7 @@ instructions_8:
|
|||||||
db 'vphadddq',0CBh
|
db 'vphadddq',0CBh
|
||||||
dw xop_single_source_128bit_instruction-instruction_handler
|
dw xop_single_source_128bit_instruction-instruction_handler
|
||||||
db 'vphaddsw',3
|
db 'vphaddsw',3
|
||||||
dw avx_128bit_instruction_38-instruction_handler
|
dw avx_instruction_38-instruction_handler
|
||||||
db 'vphaddwd',0C6h
|
db 'vphaddwd',0C6h
|
||||||
dw xop_single_source_128bit_instruction-instruction_handler
|
dw xop_single_source_128bit_instruction-instruction_handler
|
||||||
db 'vphaddwq',0C7h
|
db 'vphaddwq',0C7h
|
||||||
@ -2452,7 +2498,7 @@ instructions_8:
|
|||||||
db 'vphsubdq',0E3h
|
db 'vphsubdq',0E3h
|
||||||
dw xop_single_source_128bit_instruction-instruction_handler
|
dw xop_single_source_128bit_instruction-instruction_handler
|
||||||
db 'vphsubsw',7
|
db 'vphsubsw',7
|
||||||
dw avx_128bit_instruction_38-instruction_handler
|
dw avx_instruction_38-instruction_handler
|
||||||
db 'vphsubwd',0E2h
|
db 'vphsubwd',0E2h
|
||||||
dw xop_single_source_128bit_instruction-instruction_handler
|
dw xop_single_source_128bit_instruction-instruction_handler
|
||||||
db 'vpmacsdd',9Eh
|
db 'vpmacsdd',9Eh
|
||||||
@ -2462,19 +2508,19 @@ instructions_8:
|
|||||||
db 'vpmacsww',95h
|
db 'vpmacsww',95h
|
||||||
dw xop_triple_source_128bit_instruction-instruction_handler
|
dw xop_triple_source_128bit_instruction-instruction_handler
|
||||||
db 'vpmaddwd',0F5h
|
db 'vpmaddwd',0F5h
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpmulhuw',0E4h
|
db 'vpmulhuw',0E4h
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpmuludq',0F4h
|
db 'vpmuludq',0F4h
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpshufhw',0F3h
|
db 'vpshufhw',0F3h
|
||||||
dw avx_pshufd_instruction-instruction_handler
|
dw avx_pshufd_instruction-instruction_handler
|
||||||
db 'vpshuflw',0F2h
|
db 'vpshuflw',0F2h
|
||||||
dw avx_pshufd_instruction-instruction_handler
|
dw avx_pshufd_instruction-instruction_handler
|
||||||
db 'vpsubusb',0D8h
|
db 'vpsubusb',0D8h
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpsubusw',0D9h
|
db 'vpsubusw',0D9h
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vroundpd',9
|
db 'vroundpd',9
|
||||||
dw avx_single_source_instruction_3a_imm8-instruction_handler
|
dw avx_single_source_instruction_3a_imm8-instruction_handler
|
||||||
db 'vroundps',8
|
db 'vroundps',8
|
||||||
@ -2499,6 +2545,10 @@ instructions_8:
|
|||||||
dw rdfsbase_instruction-instruction_handler
|
dw rdfsbase_instruction-instruction_handler
|
||||||
db 'wrgsbase',3
|
db 'wrgsbase',3
|
||||||
dw rdfsbase_instruction-instruction_handler
|
dw rdfsbase_instruction-instruction_handler
|
||||||
|
db 'xacquire',0F2h
|
||||||
|
dw prefix_instruction-instruction_handler
|
||||||
|
db 'xrelease',0F3h
|
||||||
|
dw prefix_instruction-instruction_handler
|
||||||
db 'xrstor64',101b
|
db 'xrstor64',101b
|
||||||
dw fxsave_instruction_64bit-instruction_handler
|
dw fxsave_instruction_64bit-instruction_handler
|
||||||
db 'xsaveopt',110b
|
db 'xsaveopt',110b
|
||||||
@ -2520,6 +2570,8 @@ instructions_9:
|
|||||||
dw cvtss2si_instruction-instruction_handler
|
dw cvtss2si_instruction-instruction_handler
|
||||||
db 'extractps',0
|
db 'extractps',0
|
||||||
dw extractps_instruction-instruction_handler
|
dw extractps_instruction-instruction_handler
|
||||||
|
db 'fxrstor64',1
|
||||||
|
dw fxsave_instruction_64bit-instruction_handler
|
||||||
db 'pclmulqdq',-1
|
db 'pclmulqdq',-1
|
||||||
dw pclmulqdq_instruction-instruction_handler
|
dw pclmulqdq_instruction-instruction_handler
|
||||||
db 'pcmpestri',61h
|
db 'pcmpestri',61h
|
||||||
@ -2652,22 +2704,22 @@ instructions_9:
|
|||||||
dw avx_movmskpd_instruction-instruction_handler
|
dw avx_movmskpd_instruction-instruction_handler
|
||||||
db 'vmovmskps',0
|
db 'vmovmskps',0
|
||||||
dw avx_movmskps_instruction-instruction_handler
|
dw avx_movmskps_instruction-instruction_handler
|
||||||
db 'vmovntdqa',0
|
db 'vmovntdqa',2Ah
|
||||||
dw avx_movntdqa_instruction-instruction_handler
|
dw avx_movntdqa_instruction-instruction_handler
|
||||||
db 'vmovshdup',16h
|
db 'vmovshdup',16h
|
||||||
dw avx_movshdup_instruction-instruction_handler
|
dw avx_movshdup_instruction-instruction_handler
|
||||||
db 'vmovsldup',12h
|
db 'vmovsldup',12h
|
||||||
dw avx_movshdup_instruction-instruction_handler
|
dw avx_movshdup_instruction-instruction_handler
|
||||||
db 'vpackssdw',6Bh
|
db 'vpackssdw',6Bh
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpacksswb',63h
|
db 'vpacksswb',63h
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpackusdw',2Bh
|
db 'vpackusdw',2Bh
|
||||||
dw avx_128bit_instruction_38-instruction_handler
|
dw avx_instruction_38-instruction_handler
|
||||||
db 'vpackuswb',67h
|
db 'vpackuswb',67h
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpblendvb',4Ch
|
db 'vpblendvb',4Ch
|
||||||
dw avx_triple_source_128bit_instruction_3a-instruction_handler
|
dw avx_triple_source_instruction_3a-instruction_handler
|
||||||
db 'vpcomequb',4
|
db 'vpcomequb',4
|
||||||
dw xop_pcom_ub_instruction-instruction_handler
|
dw xop_pcom_ub_instruction-instruction_handler
|
||||||
db 'vpcomequd',4
|
db 'vpcomequd',4
|
||||||
@ -2771,15 +2823,15 @@ instructions_9:
|
|||||||
db 'vpmovzxwq',34h
|
db 'vpmovzxwq',34h
|
||||||
dw avx_pmovsxwq_instruction-instruction_handler
|
dw avx_pmovsxwq_instruction-instruction_handler
|
||||||
db 'vpmulhrsw',0Bh
|
db 'vpmulhrsw',0Bh
|
||||||
dw avx_128bit_instruction_38-instruction_handler
|
dw avx_instruction_38-instruction_handler
|
||||||
db 'vunpckhpd',15h
|
db 'vunpckhpd',15h
|
||||||
dw avx_pd_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vunpckhps',15h
|
db 'vunpckhps',15h
|
||||||
dw avx_instruction-instruction_handler
|
dw avx_ps_instruction-instruction_handler
|
||||||
db 'vunpcklpd',14h
|
db 'vunpcklpd',14h
|
||||||
dw avx_pd_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vunpcklps',14h
|
db 'vunpcklps',14h
|
||||||
dw avx_instruction-instruction_handler
|
dw avx_ps_instruction-instruction_handler
|
||||||
instructions_10:
|
instructions_10:
|
||||||
db 'aesdeclast',0DFh
|
db 'aesdeclast',0DFh
|
||||||
dw sse4_instruction_38-instruction_handler
|
dw sse4_instruction_38-instruction_handler
|
||||||
@ -2831,6 +2883,14 @@ instructions_10:
|
|||||||
dw avx_cvtss2si_instruction-instruction_handler
|
dw avx_cvtss2si_instruction-instruction_handler
|
||||||
db 'vextractps',0
|
db 'vextractps',0
|
||||||
dw avx_extractps_instruction-instruction_handler
|
dw avx_extractps_instruction-instruction_handler
|
||||||
|
db 'vgatherdpd',92h
|
||||||
|
dw gather_instruction_pd-instruction_handler
|
||||||
|
db 'vgatherdps',92h
|
||||||
|
dw gather_instruction_ps-instruction_handler
|
||||||
|
db 'vgatherqpd',93h
|
||||||
|
dw gather_instruction_pd-instruction_handler
|
||||||
|
db 'vgatherqps',93h
|
||||||
|
dw gather_instruction_ps-instruction_handler
|
||||||
db 'vmaskmovpd',2Dh
|
db 'vmaskmovpd',2Dh
|
||||||
dw avx_maskmov_instruction-instruction_handler
|
dw avx_maskmov_instruction-instruction_handler
|
||||||
db 'vmaskmovps',2Ch
|
db 'vmaskmovps',2Ch
|
||||||
@ -2863,10 +2923,20 @@ instructions_10:
|
|||||||
dw xop_pcom_w_instruction-instruction_handler
|
dw xop_pcom_w_instruction-instruction_handler
|
||||||
db 'vperm2f128',6
|
db 'vperm2f128',6
|
||||||
dw avx_perm2f128_instruction-instruction_handler
|
dw avx_perm2f128_instruction-instruction_handler
|
||||||
|
db 'vperm2i128',46h
|
||||||
|
dw avx_perm2f128_instruction-instruction_handler
|
||||||
db 'vpermil2pd',49h
|
db 'vpermil2pd',49h
|
||||||
dw vpermil2_instruction-instruction_handler
|
dw vpermil2_instruction-instruction_handler
|
||||||
db 'vpermil2ps',48h
|
db 'vpermil2ps',48h
|
||||||
dw vpermil2_instruction-instruction_handler
|
dw vpermil2_instruction-instruction_handler
|
||||||
|
db 'vpgatherdd',90h
|
||||||
|
dw gather_instruction_ps-instruction_handler
|
||||||
|
db 'vpgatherdq',90h
|
||||||
|
dw gather_instruction_pd-instruction_handler
|
||||||
|
db 'vpgatherqd',91h
|
||||||
|
dw gather_instruction_ps-instruction_handler
|
||||||
|
db 'vpgatherqq',91h
|
||||||
|
dw gather_instruction_pd-instruction_handler
|
||||||
db 'vpmacssdqh',8Fh
|
db 'vpmacssdqh',8Fh
|
||||||
dw xop_triple_source_128bit_instruction-instruction_handler
|
dw xop_triple_source_128bit_instruction-instruction_handler
|
||||||
db 'vpmacssdql',87h
|
db 'vpmacssdql',87h
|
||||||
@ -2874,19 +2944,23 @@ instructions_10:
|
|||||||
db 'vpmadcsswd',0A6h
|
db 'vpmadcsswd',0A6h
|
||||||
dw xop_triple_source_128bit_instruction-instruction_handler
|
dw xop_triple_source_128bit_instruction-instruction_handler
|
||||||
db 'vpmaddubsw',4
|
db 'vpmaddubsw',4
|
||||||
dw avx_128bit_instruction_38-instruction_handler
|
dw avx_instruction_38-instruction_handler
|
||||||
|
db 'vpmaskmovd',8Ch
|
||||||
|
dw avx_maskmov_instruction-instruction_handler
|
||||||
|
db 'vpmaskmovq',8Ch
|
||||||
|
dw avx_maskmov_w1_instruction-instruction_handler
|
||||||
db 'vpunpckhbw',68h
|
db 'vpunpckhbw',68h
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpunpckhdq',6Ah
|
db 'vpunpckhdq',6Ah
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpunpckhwd',69h
|
db 'vpunpckhwd',69h
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpunpcklbw',60h
|
db 'vpunpcklbw',60h
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpunpckldq',62h
|
db 'vpunpckldq',62h
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpunpcklwd',61h
|
db 'vpunpcklwd',61h
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vzeroupper',77h
|
db 'vzeroupper',77h
|
||||||
dw vzeroupper_instruction-instruction_handler
|
dw vzeroupper_instruction-instruction_handler
|
||||||
db 'xsaveopt64',110b
|
db 'xsaveopt64',110b
|
||||||
@ -3040,6 +3114,8 @@ instructions_11:
|
|||||||
dw fma4_instruction_p-instruction_handler
|
dw fma4_instruction_p-instruction_handler
|
||||||
db 'vinsertf128',18h
|
db 'vinsertf128',18h
|
||||||
dw avx_insertf128_instruction-instruction_handler
|
dw avx_insertf128_instruction-instruction_handler
|
||||||
|
db 'vinserti128',38h
|
||||||
|
dw avx_insertf128_instruction-instruction_handler
|
||||||
db 'vmaskmovdqu',0
|
db 'vmaskmovdqu',0
|
||||||
dw avx_maskmovdqu_instruction-instruction_handler
|
dw avx_maskmovdqu_instruction-instruction_handler
|
||||||
db 'vpcomfalseb',6
|
db 'vpcomfalseb',6
|
||||||
@ -3059,19 +3135,23 @@ instructions_11:
|
|||||||
db 'vpcomtrueuw',7
|
db 'vpcomtrueuw',7
|
||||||
dw xop_pcom_uw_instruction-instruction_handler
|
dw xop_pcom_uw_instruction-instruction_handler
|
||||||
db 'vphminposuw',41h
|
db 'vphminposuw',41h
|
||||||
dw avx_single_source_128bit_instruction_38-instruction_handler
|
dw avx_single_source_instruction_38-instruction_handler
|
||||||
db 'vpunpckhqdq',6Dh
|
db 'vpunpckhqdq',6Dh
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
db 'vpunpcklqdq',6Ch
|
db 'vpunpcklqdq',6Ch
|
||||||
dw avx_128bit_instruction-instruction_handler
|
dw avx_pd_instruction-instruction_handler
|
||||||
instructions_12:
|
instructions_12:
|
||||||
|
db 'pclmulhqhqdq',10001b
|
||||||
|
dw pclmulqdq_instruction-instruction_handler
|
||||||
db 'pclmulhqlqdq',1
|
db 'pclmulhqlqdq',1
|
||||||
dw pclmulqdq_instruction-instruction_handler
|
dw pclmulqdq_instruction-instruction_handler
|
||||||
|
db 'pclmullqhqdq',10000b
|
||||||
|
dw pclmulqdq_instruction-instruction_handler
|
||||||
db 'pclmullqlqdq',0
|
db 'pclmullqlqdq',0
|
||||||
dw pclmulqdq_instruction-instruction_handler
|
dw pclmulqdq_instruction-instruction_handler
|
||||||
db 'vbroadcastsd',0
|
db 'vbroadcastsd',19h
|
||||||
dw avx_broadcastsd_instruction-instruction_handler
|
dw avx_broadcastsd_instruction-instruction_handler
|
||||||
db 'vbroadcastss',0
|
db 'vbroadcastss',18h
|
||||||
dw avx_broadcastss_instruction-instruction_handler
|
dw avx_broadcastss_instruction-instruction_handler
|
||||||
db 'vcmpneq_oqpd',0Ch
|
db 'vcmpneq_oqpd',0Ch
|
||||||
dw avx_cmp_pd_instruction-instruction_handler
|
dw avx_cmp_pd_instruction-instruction_handler
|
||||||
@ -3131,6 +3211,8 @@ instructions_12:
|
|||||||
dw avx_cmp_ss_instruction-instruction_handler
|
dw avx_cmp_ss_instruction-instruction_handler
|
||||||
db 'vextractf128',19h
|
db 'vextractf128',19h
|
||||||
dw avx_extractf128_instruction-instruction_handler
|
dw avx_extractf128_instruction-instruction_handler
|
||||||
|
db 'vextracti128',39h
|
||||||
|
dw avx_extractf128_instruction-instruction_handler
|
||||||
db 'vfnmadd132pd',9Ch
|
db 'vfnmadd132pd',9Ch
|
||||||
dw fma_instruction_pd-instruction_handler
|
dw fma_instruction_pd-instruction_handler
|
||||||
db 'vfnmadd132ps',9Ch
|
db 'vfnmadd132ps',9Ch
|
||||||
@ -3179,6 +3261,14 @@ instructions_12:
|
|||||||
dw fma_instruction_sd-instruction_handler
|
dw fma_instruction_sd-instruction_handler
|
||||||
db 'vfnmsub231ss',0BFh
|
db 'vfnmsub231ss',0BFh
|
||||||
dw fma_instruction_ss-instruction_handler
|
dw fma_instruction_ss-instruction_handler
|
||||||
|
db 'vpbroadcastb',78h
|
||||||
|
dw avx_pbroadcastb_instruction-instruction_handler
|
||||||
|
db 'vpbroadcastd',58h
|
||||||
|
dw avx_pbroadcastd_instruction-instruction_handler
|
||||||
|
db 'vpbroadcastq',59h
|
||||||
|
dw avx_pbroadcastq_instruction-instruction_handler
|
||||||
|
db 'vpbroadcastw',79h
|
||||||
|
dw avx_pbroadcastw_instruction-instruction_handler
|
||||||
db 'vpclmulhqhdq',10001b
|
db 'vpclmulhqhdq',10001b
|
||||||
dw avx_pclmulqdq_instruction-instruction_handler
|
dw avx_pclmulqdq_instruction-instruction_handler
|
||||||
db 'vpclmullqhdq',10000b
|
db 'vpclmullqhdq',10000b
|
||||||
@ -3225,7 +3315,9 @@ instructions_13:
|
|||||||
db 'vpclmullqlqdq',0
|
db 'vpclmullqlqdq',0
|
||||||
dw avx_pclmulqdq_instruction-instruction_handler
|
dw avx_pclmulqdq_instruction-instruction_handler
|
||||||
instructions_14:
|
instructions_14:
|
||||||
db 'vbroadcastf128',0
|
db 'vbroadcastf128',1Ah
|
||||||
|
dw avx_broadcastf128_instruction-instruction_handler
|
||||||
|
db 'vbroadcasti128',5Ah
|
||||||
dw avx_broadcastf128_instruction-instruction_handler
|
dw avx_broadcastf128_instruction-instruction_handler
|
||||||
db 'vcmpfalse_ospd',1Bh
|
db 'vcmpfalse_ospd',1Bh
|
||||||
dw avx_cmp_pd_instruction-instruction_handler
|
dw avx_cmp_pd_instruction-instruction_handler
|
||||||
|
@ -117,12 +117,16 @@ jump_type db ?
|
|||||||
push_size db ?
|
push_size db ?
|
||||||
value_size db ?
|
value_size db ?
|
||||||
address_size db ?
|
address_size db ?
|
||||||
|
label_size db ?
|
||||||
size_declared db ?
|
size_declared db ?
|
||||||
|
|
||||||
value_undefined db ?
|
value_undefined db ?
|
||||||
|
value_constant db ?
|
||||||
value_type db ?
|
value_type db ?
|
||||||
|
value_sign db ?
|
||||||
fp_sign db ?
|
fp_sign db ?
|
||||||
fp_format db ?
|
fp_format db ?
|
||||||
|
address_sign db ?
|
||||||
compare_type db ?
|
compare_type db ?
|
||||||
logical_value_wrapping db ?
|
logical_value_wrapping db ?
|
||||||
next_pass_needed db ?
|
next_pass_needed db ?
|
||||||
@ -130,8 +134,11 @@ output_format db ?
|
|||||||
labels_type db ?
|
labels_type db ?
|
||||||
code_type db ?
|
code_type db ?
|
||||||
virtual_data db ?
|
virtual_data db ?
|
||||||
|
org_origin_sign db ?
|
||||||
|
adjustment_sign db ?
|
||||||
|
|
||||||
macro_status db ?
|
macro_status db ?
|
||||||
|
default_argument_value db ?
|
||||||
prefixed_instruction db ?
|
prefixed_instruction db ?
|
||||||
formatter_symbols_allowed db ?
|
formatter_symbols_allowed db ?
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
; flat assembler version 1.69
|
; flat assembler version 1.70
|
||||||
; Copyright (c) 1999-2012, Tomasz Grysztar.
|
; Copyright (c) 1999-2012, Tomasz Grysztar.
|
||||||
; All rights reserved.
|
; All rights reserved.
|
||||||
;
|
;
|
||||||
@ -33,7 +33,7 @@
|
|||||||
; cannot simply be copied and put under another distribution licence
|
; cannot simply be copied and put under another distribution licence
|
||||||
; (including the GNU Public Licence).
|
; (including the GNU Public Licence).
|
||||||
|
|
||||||
VERSION_STRING equ "1.69.36"
|
VERSION_STRING equ "1.70.01"
|
||||||
|
|
||||||
VERSION_MAJOR = 1
|
VERSION_MAJOR = 1
|
||||||
VERSION_MINOR = 69
|
VERSION_MINOR = 70
|
||||||
|
@ -76,10 +76,9 @@ int_instruction:
|
|||||||
cmp al,'('
|
cmp al,'('
|
||||||
jne invalid_operand
|
jne invalid_operand
|
||||||
call get_byte_value
|
call get_byte_value
|
||||||
cmp [next_pass_needed],0
|
|
||||||
jne int_imm_ok
|
|
||||||
test eax,eax
|
test eax,eax
|
||||||
js value_out_of_range
|
jns int_imm_ok
|
||||||
|
call recoverable_overflow
|
||||||
int_imm_ok:
|
int_imm_ok:
|
||||||
mov ah,al
|
mov ah,al
|
||||||
mov al,0CDh
|
mov al,0CDh
|
||||||
@ -160,11 +159,7 @@ basic_instruction:
|
|||||||
jae long_immediate_not_encodable
|
jae long_immediate_not_encodable
|
||||||
jmp basic_mem_imm_32bit_ok
|
jmp basic_mem_imm_32bit_ok
|
||||||
basic_mem_imm_nosize:
|
basic_mem_imm_nosize:
|
||||||
cmp [error_line],0
|
call recoverable_unknown_size
|
||||||
jne basic_mem_imm_8bit
|
|
||||||
mov eax,[current_line]
|
|
||||||
mov [error_line],eax
|
|
||||||
mov [error],operand_size_not_specified
|
|
||||||
basic_mem_imm_8bit:
|
basic_mem_imm_8bit:
|
||||||
call get_byte_value
|
call get_byte_value
|
||||||
mov byte [value],al
|
mov byte [value],al
|
||||||
@ -373,6 +368,14 @@ basic_instruction:
|
|||||||
add [base_code],5
|
add [base_code],5
|
||||||
call store_instruction_code
|
call store_instruction_code
|
||||||
jmp basic_store_imm_32bit
|
jmp basic_store_imm_32bit
|
||||||
|
recoverable_unknown_size:
|
||||||
|
cmp [error_line],0
|
||||||
|
jne ignore_unknown_size
|
||||||
|
push [current_line]
|
||||||
|
pop [error_line]
|
||||||
|
mov [error],operand_size_not_specified
|
||||||
|
ignore_unknown_size:
|
||||||
|
ret
|
||||||
single_operand_instruction:
|
single_operand_instruction:
|
||||||
mov [base_code],0F6h
|
mov [base_code],0F6h
|
||||||
mov [postbyte_register],al
|
mov [postbyte_register],al
|
||||||
@ -392,11 +395,7 @@ single_operand_instruction:
|
|||||||
inc [base_code]
|
inc [base_code]
|
||||||
jmp instruction_ready
|
jmp instruction_ready
|
||||||
single_mem_nosize:
|
single_mem_nosize:
|
||||||
cmp [error_line],0
|
call recoverable_unknown_size
|
||||||
jne single_mem_8bit
|
|
||||||
mov eax,[current_line]
|
|
||||||
mov [error_line],eax
|
|
||||||
mov [error],operand_size_not_specified
|
|
||||||
single_mem_8bit:
|
single_mem_8bit:
|
||||||
jmp instruction_ready
|
jmp instruction_ready
|
||||||
single_reg:
|
single_reg:
|
||||||
@ -575,11 +574,7 @@ mov_instruction:
|
|||||||
call store_instruction_with_imm16
|
call store_instruction_with_imm16
|
||||||
jmp instruction_assembled
|
jmp instruction_assembled
|
||||||
mov_mem_imm_nosize:
|
mov_mem_imm_nosize:
|
||||||
cmp [error_line],0
|
call recoverable_unknown_size
|
||||||
jne mov_mem_imm_32bit
|
|
||||||
mov eax,[current_line]
|
|
||||||
mov [error_line],eax
|
|
||||||
mov [error],operand_size_not_specified
|
|
||||||
mov_mem_imm_32bit:
|
mov_mem_imm_32bit:
|
||||||
call operand_32bit
|
call operand_32bit
|
||||||
call get_dword_value
|
call get_dword_value
|
||||||
@ -920,37 +915,6 @@ mov_instruction:
|
|||||||
cmp ah,8
|
cmp ah,8
|
||||||
je mov_xrx_store
|
je mov_xrx_store
|
||||||
jmp invalid_operand_size
|
jmp invalid_operand_size
|
||||||
cmov_instruction:
|
|
||||||
mov [base_code],0Fh
|
|
||||||
mov [extended_code],al
|
|
||||||
lods byte [esi]
|
|
||||||
call get_size_operator
|
|
||||||
cmp al,10h
|
|
||||||
jne invalid_operand
|
|
||||||
lods byte [esi]
|
|
||||||
call convert_register
|
|
||||||
mov [postbyte_register],al
|
|
||||||
lods byte [esi]
|
|
||||||
cmp al,','
|
|
||||||
jne invalid_operand
|
|
||||||
lods byte [esi]
|
|
||||||
call get_size_operator
|
|
||||||
cmp al,'['
|
|
||||||
je cmov_reg_mem
|
|
||||||
cmp al,10h
|
|
||||||
jne invalid_operand
|
|
||||||
cmov_reg_reg:
|
|
||||||
lods byte [esi]
|
|
||||||
call convert_register
|
|
||||||
mov bl,al
|
|
||||||
mov al,ah
|
|
||||||
call operand_autodetect
|
|
||||||
jmp nomem_instruction_ready
|
|
||||||
cmov_reg_mem:
|
|
||||||
call get_address
|
|
||||||
mov al,[operand_size]
|
|
||||||
call operand_autodetect
|
|
||||||
jmp instruction_ready
|
|
||||||
test_instruction:
|
test_instruction:
|
||||||
mov [base_code],84h
|
mov [base_code],84h
|
||||||
lods byte [esi]
|
lods byte [esi]
|
||||||
@ -1020,11 +984,7 @@ test_instruction:
|
|||||||
call store_instruction_with_imm16
|
call store_instruction_with_imm16
|
||||||
jmp instruction_assembled
|
jmp instruction_assembled
|
||||||
test_mem_imm_nosize:
|
test_mem_imm_nosize:
|
||||||
cmp [error_line],0
|
call recoverable_unknown_size
|
||||||
jne test_mem_imm_32bit
|
|
||||||
mov eax,[current_line]
|
|
||||||
mov [error_line],eax
|
|
||||||
mov [error],operand_size_not_specified
|
|
||||||
test_mem_imm_32bit:
|
test_mem_imm_32bit:
|
||||||
call operand_32bit
|
call operand_32bit
|
||||||
call get_dword_value
|
call get_dword_value
|
||||||
@ -1243,11 +1203,7 @@ push_instruction:
|
|||||||
je push_mem_32bit
|
je push_mem_32bit
|
||||||
cmp ah,8
|
cmp ah,8
|
||||||
je push_mem_64bit
|
je push_mem_64bit
|
||||||
cmp [error_line],0
|
call recoverable_unknown_size
|
||||||
jne push_mem_store
|
|
||||||
mov eax,[current_line]
|
|
||||||
mov [error_line],eax
|
|
||||||
mov [error],operand_size_not_specified
|
|
||||||
jmp push_mem_store
|
jmp push_mem_store
|
||||||
push_mem_16bit:
|
push_mem_16bit:
|
||||||
test ah,not 2
|
test ah,not 2
|
||||||
@ -1509,11 +1465,7 @@ pop_instruction:
|
|||||||
je pop_mem_32bit
|
je pop_mem_32bit
|
||||||
cmp ah,8
|
cmp ah,8
|
||||||
je pop_mem_64bit
|
je pop_mem_64bit
|
||||||
cmp [error_line],0
|
call recoverable_unknown_size
|
||||||
jne pop_mem_store
|
|
||||||
mov eax,[current_line]
|
|
||||||
mov [error_line],eax
|
|
||||||
mov [error],operand_size_not_specified
|
|
||||||
jmp pop_mem_store
|
jmp pop_mem_store
|
||||||
pop_mem_16bit:
|
pop_mem_16bit:
|
||||||
test ah,not 2
|
test ah,not 2
|
||||||
@ -1689,11 +1641,7 @@ inc_instruction:
|
|||||||
mov [postbyte_register],al
|
mov [postbyte_register],al
|
||||||
jmp instruction_ready
|
jmp instruction_ready
|
||||||
inc_mem_nosize:
|
inc_mem_nosize:
|
||||||
cmp [error_line],0
|
call recoverable_unknown_size
|
||||||
jne inc_mem_8bit
|
|
||||||
mov eax,[current_line]
|
|
||||||
mov [error_line],eax
|
|
||||||
mov [error],operand_size_not_specified
|
|
||||||
inc_mem_8bit:
|
inc_mem_8bit:
|
||||||
mov al,0FEh
|
mov al,0FEh
|
||||||
xchg al,[base_code]
|
xchg al,[base_code]
|
||||||
@ -2028,11 +1976,7 @@ sh_instruction:
|
|||||||
mov [base_code],0D3h
|
mov [base_code],0D3h
|
||||||
jmp instruction_ready
|
jmp instruction_ready
|
||||||
sh_mem_cl_nosize:
|
sh_mem_cl_nosize:
|
||||||
cmp [error_line],0
|
call recoverable_unknown_size
|
||||||
jne sh_mem_cl_8bit
|
|
||||||
mov eax,[current_line]
|
|
||||||
mov [error_line],eax
|
|
||||||
mov [error],operand_size_not_specified
|
|
||||||
sh_mem_cl_8bit:
|
sh_mem_cl_8bit:
|
||||||
mov [base_code],0D2h
|
mov [base_code],0D2h
|
||||||
jmp instruction_ready
|
jmp instruction_ready
|
||||||
@ -2059,11 +2003,7 @@ sh_instruction:
|
|||||||
mov [base_code],0D1h
|
mov [base_code],0D1h
|
||||||
jmp instruction_ready
|
jmp instruction_ready
|
||||||
sh_mem_imm_nosize:
|
sh_mem_imm_nosize:
|
||||||
cmp [error_line],0
|
call recoverable_unknown_size
|
||||||
jne sh_mem_imm_8bit
|
|
||||||
mov eax,[current_line]
|
|
||||||
mov [error_line],eax
|
|
||||||
mov [error],operand_size_not_specified
|
|
||||||
sh_mem_imm_8bit:
|
sh_mem_imm_8bit:
|
||||||
cmp byte [value],1
|
cmp byte [value],1
|
||||||
je sh_mem_1_8bit
|
je sh_mem_1_8bit
|
||||||
@ -2277,11 +2217,7 @@ movx_instruction:
|
|||||||
call operand_autodetect
|
call operand_autodetect
|
||||||
jmp instruction_ready
|
jmp instruction_ready
|
||||||
movx_unknown_size:
|
movx_unknown_size:
|
||||||
cmp [error_line],0
|
call recoverable_unknown_size
|
||||||
jne movx_mem_store
|
|
||||||
mov eax,[current_line]
|
|
||||||
mov [error_line],eax
|
|
||||||
mov [error],operand_size_not_specified
|
|
||||||
jmp movx_mem_store
|
jmp movx_mem_store
|
||||||
movx_reg:
|
movx_reg:
|
||||||
lods byte [esi]
|
lods byte [esi]
|
||||||
@ -2400,11 +2336,7 @@ bt_instruction:
|
|||||||
call store_instruction_with_imm8
|
call store_instruction_with_imm8
|
||||||
jmp instruction_assembled
|
jmp instruction_assembled
|
||||||
bt_mem_imm_nosize:
|
bt_mem_imm_nosize:
|
||||||
cmp [error_line],0
|
call recoverable_unknown_size
|
||||||
jne bt_mem_imm_store
|
|
||||||
mov eax,[current_line]
|
|
||||||
mov [error_line],eax
|
|
||||||
mov [error],operand_size_not_specified
|
|
||||||
jmp bt_mem_imm_store
|
jmp bt_mem_imm_store
|
||||||
bt_reg:
|
bt_reg:
|
||||||
lods byte [esi]
|
lods byte [esi]
|
||||||
@ -2457,6 +2389,16 @@ bt_instruction:
|
|||||||
bs_instruction:
|
bs_instruction:
|
||||||
mov [extended_code],al
|
mov [extended_code],al
|
||||||
mov [base_code],0Fh
|
mov [base_code],0Fh
|
||||||
|
call get_reg_mem
|
||||||
|
jc bs_reg_reg
|
||||||
|
mov al,[operand_size]
|
||||||
|
call operand_autodetect
|
||||||
|
jmp instruction_ready
|
||||||
|
bs_reg_reg:
|
||||||
|
mov al,ah
|
||||||
|
call operand_autodetect
|
||||||
|
jmp nomem_instruction_ready
|
||||||
|
get_reg_mem:
|
||||||
lods byte [esi]
|
lods byte [esi]
|
||||||
call get_size_operator
|
call get_size_operator
|
||||||
cmp al,10h
|
cmp al,10h
|
||||||
@ -2470,20 +2412,19 @@ bs_instruction:
|
|||||||
lods byte [esi]
|
lods byte [esi]
|
||||||
call get_size_operator
|
call get_size_operator
|
||||||
cmp al,10h
|
cmp al,10h
|
||||||
je bs_reg_reg
|
je get_reg_reg
|
||||||
cmp al,'['
|
cmp al,'['
|
||||||
jne invalid_argument
|
jne invalid_argument
|
||||||
call get_address
|
call get_address
|
||||||
mov al,[operand_size]
|
clc
|
||||||
call operand_autodetect
|
ret
|
||||||
jmp instruction_ready
|
get_reg_reg:
|
||||||
bs_reg_reg:
|
|
||||||
lods byte [esi]
|
lods byte [esi]
|
||||||
call convert_register
|
call convert_register
|
||||||
mov bl,al
|
mov bl,al
|
||||||
mov al,ah
|
stc
|
||||||
call operand_autodetect
|
ret
|
||||||
jmp nomem_instruction_ready
|
|
||||||
imul_instruction:
|
imul_instruction:
|
||||||
mov [base_code],0F6h
|
mov [base_code],0F6h
|
||||||
mov [postbyte_register],5
|
mov [postbyte_register],5
|
||||||
@ -2503,11 +2444,7 @@ imul_instruction:
|
|||||||
inc [base_code]
|
inc [base_code]
|
||||||
jmp instruction_ready
|
jmp instruction_ready
|
||||||
imul_mem_nosize:
|
imul_mem_nosize:
|
||||||
cmp [error_line],0
|
call recoverable_unknown_size
|
||||||
jne imul_mem_8bit
|
|
||||||
mov eax,[current_line]
|
|
||||||
mov [error_line],eax
|
|
||||||
mov [error],operand_size_not_specified
|
|
||||||
imul_mem_8bit:
|
imul_mem_8bit:
|
||||||
jmp instruction_ready
|
jmp instruction_ready
|
||||||
imul_reg:
|
imul_reg:
|
||||||
@ -2892,11 +2829,7 @@ jmp_instruction:
|
|||||||
je jmp_mem_far
|
je jmp_mem_far
|
||||||
cmp [jump_type],2
|
cmp [jump_type],2
|
||||||
je jmp_mem_near
|
je jmp_mem_near
|
||||||
cmp [error_line],0
|
call recoverable_unknown_size
|
||||||
jne jmp_mem_near
|
|
||||||
mov eax,[current_line]
|
|
||||||
mov [error_line],eax
|
|
||||||
mov [error],operand_size_not_specified
|
|
||||||
jmp_mem_near:
|
jmp_mem_near:
|
||||||
cmp [code_type],16
|
cmp [code_type],16
|
||||||
je jmp_mem_16bit
|
je jmp_mem_16bit
|
||||||
@ -3007,6 +2940,10 @@ jmp_instruction:
|
|||||||
jmp_imm_32bit_store:
|
jmp_imm_32bit_store:
|
||||||
mov edx,eax
|
mov edx,eax
|
||||||
sub edx,3
|
sub edx,3
|
||||||
|
jno jmp_imm_32bit_ok
|
||||||
|
cmp [code_type],64
|
||||||
|
je relative_jump_out_of_range
|
||||||
|
jmp_imm_32bit_ok:
|
||||||
mov al,[base_code]
|
mov al,[base_code]
|
||||||
stos byte [edi]
|
stos byte [edi]
|
||||||
mov eax,edx
|
mov eax,edx
|
||||||
@ -3021,7 +2958,7 @@ jmp_instruction:
|
|||||||
mov ecx,edx
|
mov ecx,edx
|
||||||
cdq
|
cdq
|
||||||
cmp edx,ecx
|
cmp edx,ecx
|
||||||
jne value_out_of_range
|
jne relative_jump_out_of_range
|
||||||
call check_for_short_jump
|
call check_for_short_jump
|
||||||
jnc jmp_imm_32bit_store
|
jnc jmp_imm_32bit_store
|
||||||
jmp_short:
|
jmp_short:
|
||||||
@ -3202,7 +3139,7 @@ conditional_jump:
|
|||||||
mov ecx,edx
|
mov ecx,edx
|
||||||
cdq
|
cdq
|
||||||
cmp edx,ecx
|
cmp edx,ecx
|
||||||
jne value_out_of_range
|
jne relative_jump_out_of_range
|
||||||
call check_for_short_jump
|
call check_for_short_jump
|
||||||
jnc conditional_jump_32bit_store
|
jnc conditional_jump_32bit_store
|
||||||
conditional_jump_short:
|
conditional_jump_short:
|
||||||
@ -3307,7 +3244,7 @@ loop_instruction:
|
|||||||
mov ecx,edx
|
mov ecx,edx
|
||||||
cdq
|
cdq
|
||||||
cmp edx,ecx
|
cmp edx,ecx
|
||||||
jne value_out_of_range
|
jne relative_jump_out_of_range
|
||||||
jmp make_loop_jump
|
jmp make_loop_jump
|
||||||
loop_jump_16bit:
|
loop_jump_16bit:
|
||||||
call get_address_word_value
|
call get_address_word_value
|
||||||
@ -3393,11 +3330,7 @@ movs_instruction:
|
|||||||
je simple_instruction_64bit
|
je simple_instruction_64bit
|
||||||
or bl,bl
|
or bl,bl
|
||||||
jnz invalid_operand_size
|
jnz invalid_operand_size
|
||||||
cmp [error_line],0
|
call recoverable_unknown_size
|
||||||
jne simple_instruction
|
|
||||||
mov ebx,[current_line]
|
|
||||||
mov [error_line],ebx
|
|
||||||
mov [error],operand_size_not_specified
|
|
||||||
jmp simple_instruction
|
jmp simple_instruction
|
||||||
lods_instruction:
|
lods_instruction:
|
||||||
lods byte [esi]
|
lods byte [esi]
|
||||||
@ -3935,11 +3868,7 @@ basic_fpu_instruction:
|
|||||||
je basic_fpu_mem_64bit
|
je basic_fpu_mem_64bit
|
||||||
or al,al
|
or al,al
|
||||||
jnz invalid_operand_size
|
jnz invalid_operand_size
|
||||||
cmp [error_line],0
|
call recoverable_unknown_size
|
||||||
jne basic_fpu_mem_32bit
|
|
||||||
mov eax,[current_line]
|
|
||||||
mov [error_line],eax
|
|
||||||
mov [error],operand_size_not_specified
|
|
||||||
basic_fpu_mem_32bit:
|
basic_fpu_mem_32bit:
|
||||||
jmp instruction_ready
|
jmp instruction_ready
|
||||||
basic_fpu_mem_64bit:
|
basic_fpu_mem_64bit:
|
||||||
@ -4007,11 +3936,7 @@ fi_instruction:
|
|||||||
je fi_mem_32bit
|
je fi_mem_32bit
|
||||||
or al,al
|
or al,al
|
||||||
jnz invalid_operand_size
|
jnz invalid_operand_size
|
||||||
cmp [error_line],0
|
call recoverable_unknown_size
|
||||||
jne fi_mem_32bit
|
|
||||||
mov eax,[current_line]
|
|
||||||
mov [error_line],eax
|
|
||||||
mov [error],operand_size_not_specified
|
|
||||||
fi_mem_32bit:
|
fi_mem_32bit:
|
||||||
mov [base_code],0DAh
|
mov [base_code],0DAh
|
||||||
jmp instruction_ready
|
jmp instruction_ready
|
||||||
@ -4036,11 +3961,7 @@ fld_instruction:
|
|||||||
je fld_mem_80bit
|
je fld_mem_80bit
|
||||||
or al,al
|
or al,al
|
||||||
jnz invalid_operand_size
|
jnz invalid_operand_size
|
||||||
cmp [error_line],0
|
call recoverable_unknown_size
|
||||||
jne fld_mem_32bit
|
|
||||||
mov eax,[current_line]
|
|
||||||
mov [error_line],eax
|
|
||||||
mov [error],operand_size_not_specified
|
|
||||||
fld_mem_32bit:
|
fld_mem_32bit:
|
||||||
mov [base_code],0D9h
|
mov [base_code],0D9h
|
||||||
jmp instruction_ready
|
jmp instruction_ready
|
||||||
@ -4086,11 +4007,7 @@ fild_instruction:
|
|||||||
je fild_mem_64bit
|
je fild_mem_64bit
|
||||||
or al,al
|
or al,al
|
||||||
jnz invalid_operand_size
|
jnz invalid_operand_size
|
||||||
cmp [error_line],0
|
call recoverable_unknown_size
|
||||||
jne fild_mem_32bit
|
|
||||||
mov eax,[current_line]
|
|
||||||
mov [error_line],eax
|
|
||||||
mov [error],operand_size_not_specified
|
|
||||||
fild_mem_32bit:
|
fild_mem_32bit:
|
||||||
mov [base_code],0DBh
|
mov [base_code],0DBh
|
||||||
jmp instruction_ready
|
jmp instruction_ready
|
||||||
@ -5648,7 +5565,7 @@ pmovsxdq_instruction:
|
|||||||
jne invalid_operand
|
jne invalid_operand
|
||||||
call get_address
|
call get_address
|
||||||
cmp [operand_size],0
|
cmp [operand_size],0
|
||||||
je mmx_imm8
|
je instruction_ready
|
||||||
mov al,[mmx_size]
|
mov al,[mmx_size]
|
||||||
cmp al,[operand_size]
|
cmp al,[operand_size]
|
||||||
jne invalid_operand_size
|
jne invalid_operand_size
|
||||||
@ -5854,7 +5771,7 @@ movntdqa_instruction:
|
|||||||
mov [opcode_prefix],66h
|
mov [opcode_prefix],66h
|
||||||
mov [base_code],0Fh
|
mov [base_code],0Fh
|
||||||
mov [extended_code],38h
|
mov [extended_code],38h
|
||||||
mov [supplemental_code],2Ah
|
mov [supplemental_code],al
|
||||||
lods byte [esi]
|
lods byte [esi]
|
||||||
call get_size_operator
|
call get_size_operator
|
||||||
cmp al,10h
|
cmp al,10h
|
||||||
@ -5979,11 +5896,7 @@ crc32_instruction:
|
|||||||
crc32_reg32_mem_store:
|
crc32_reg32_mem_store:
|
||||||
jmp instruction_ready
|
jmp instruction_ready
|
||||||
crc32_unknown_size:
|
crc32_unknown_size:
|
||||||
cmp [error_line],0
|
call recoverable_unknown_size
|
||||||
jne crc32_reg32_mem_store
|
|
||||||
mov eax,[current_line]
|
|
||||||
mov [error_line],eax
|
|
||||||
mov [error],operand_size_not_specified
|
|
||||||
jmp crc32_reg32_mem_store
|
jmp crc32_reg32_mem_store
|
||||||
crc32_reg32_reg:
|
crc32_reg32_reg:
|
||||||
lods byte [esi]
|
lods byte [esi]
|
||||||
@ -6301,6 +6214,8 @@ rdrand_instruction:
|
|||||||
call operand_autodetect
|
call operand_autodetect
|
||||||
jmp nomem_instruction_ready
|
jmp nomem_instruction_ready
|
||||||
rdfsbase_instruction:
|
rdfsbase_instruction:
|
||||||
|
cmp [code_type],64
|
||||||
|
jne illegal_instruction
|
||||||
mov [opcode_prefix],0F3h
|
mov [opcode_prefix],0F3h
|
||||||
mov [base_code],0Fh
|
mov [base_code],0Fh
|
||||||
mov [extended_code],0AEh
|
mov [extended_code],0AEh
|
||||||
@ -6318,6 +6233,70 @@ rdfsbase_instruction:
|
|||||||
call operand_autodetect
|
call operand_autodetect
|
||||||
jmp nomem_instruction_ready
|
jmp nomem_instruction_ready
|
||||||
|
|
||||||
|
xabort_instruction:
|
||||||
|
lods byte [esi]
|
||||||
|
call get_size_operator
|
||||||
|
cmp ah,1
|
||||||
|
ja invalid_operand_size
|
||||||
|
cmp al,'('
|
||||||
|
jne invalid_operand
|
||||||
|
call get_byte_value
|
||||||
|
mov dl,al
|
||||||
|
mov ax,0F8C6h
|
||||||
|
stos word [edi]
|
||||||
|
mov al,dl
|
||||||
|
stos byte [edi]
|
||||||
|
jmp instruction_assembled
|
||||||
|
xbegin_instruction:
|
||||||
|
lods byte [esi]
|
||||||
|
cmp al,'('
|
||||||
|
jne invalid_operand
|
||||||
|
mov al,[code_type]
|
||||||
|
cmp al,64
|
||||||
|
je xbegin_64bit
|
||||||
|
cmp al,32
|
||||||
|
je xbegin_32bit
|
||||||
|
xbegin_16bit:
|
||||||
|
call get_address_word_value
|
||||||
|
add edi,4
|
||||||
|
call calculate_relative_offset
|
||||||
|
sub edi,4
|
||||||
|
shl eax,16
|
||||||
|
mov ax,0F8C7h
|
||||||
|
stos dword [edi]
|
||||||
|
jmp instruction_assembled
|
||||||
|
xbegin_32bit:
|
||||||
|
call get_address_dword_value
|
||||||
|
jmp xbegin_address_ok
|
||||||
|
xbegin_64bit:
|
||||||
|
call get_address_qword_value
|
||||||
|
xbegin_address_ok:
|
||||||
|
add edi,5
|
||||||
|
call calculate_relative_offset
|
||||||
|
sub edi,5
|
||||||
|
mov edx,eax
|
||||||
|
cwde
|
||||||
|
cmp eax,edx
|
||||||
|
jne xbegin_rel32
|
||||||
|
mov al,66h
|
||||||
|
stos byte [edi]
|
||||||
|
mov eax,edx
|
||||||
|
shl eax,16
|
||||||
|
mov ax,0F8C7h
|
||||||
|
stos dword [edi]
|
||||||
|
jmp instruction_assembled
|
||||||
|
xbegin_rel32:
|
||||||
|
sub edx,1
|
||||||
|
jno xbegin_rel32_ok
|
||||||
|
cmp [code_type],64
|
||||||
|
je relative_jump_out_of_range
|
||||||
|
xbegin_rel32_ok:
|
||||||
|
mov ax,0F8C7h
|
||||||
|
stos word [edi]
|
||||||
|
mov eax,edx
|
||||||
|
stos dword [edi]
|
||||||
|
jmp instruction_assembled
|
||||||
|
|
||||||
convert_register:
|
convert_register:
|
||||||
mov ah,al
|
mov ah,al
|
||||||
shr ah,4
|
shr ah,4
|
||||||
@ -6456,11 +6435,7 @@ get_address:
|
|||||||
cdq
|
cdq
|
||||||
cmp edx,[address_high]
|
cmp edx,[address_high]
|
||||||
je address_high_ok
|
je address_high_ok
|
||||||
cmp [error_line],0
|
call recoverable_overflow
|
||||||
jne address_high_ok
|
|
||||||
mov ebx,[current_line]
|
|
||||||
mov [error_line],ebx
|
|
||||||
mov [error],value_out_of_range
|
|
||||||
address_high_ok:
|
address_high_ok:
|
||||||
mov edx,eax
|
mov edx,eax
|
||||||
ror ecx,16
|
ror ecx,16
|
||||||
@ -6559,7 +6534,7 @@ store_instruction_code:
|
|||||||
cmp [code_type],64
|
cmp [code_type],64
|
||||||
jne invalid_operand
|
jne invalid_operand
|
||||||
test al,0B0h
|
test al,0B0h
|
||||||
jnz prefix_conflict
|
jnz disallowed_combination_of_registers
|
||||||
stos byte [edi]
|
stos byte [edi]
|
||||||
rex_prefix_ok:
|
rex_prefix_ok:
|
||||||
mov al,[base_code]
|
mov al,[base_code]
|
||||||
@ -6617,13 +6592,11 @@ store_instruction:
|
|||||||
test bx,8080h
|
test bx,8080h
|
||||||
jz address_value_ok
|
jz address_value_ok
|
||||||
address_value_out_of_range:
|
address_value_out_of_range:
|
||||||
cmp [error_line],0
|
call recoverable_overflow
|
||||||
jne address_value_ok
|
|
||||||
mov edx,[current_line]
|
|
||||||
mov [error_line],edx
|
|
||||||
mov [error],value_out_of_range
|
|
||||||
address_value_ok:
|
address_value_ok:
|
||||||
call store_segment_prefix_if_necessary
|
call store_segment_prefix_if_necessary
|
||||||
|
test [vex_required],4
|
||||||
|
jnz address_vsib
|
||||||
or bx,bx
|
or bx,bx
|
||||||
jz address_immediate
|
jz address_immediate
|
||||||
cmp bx,0F800h
|
cmp bx,0F800h
|
||||||
@ -6733,6 +6706,22 @@ store_instruction:
|
|||||||
or al,cl
|
or al,cl
|
||||||
stos byte [edi]
|
stos byte [edi]
|
||||||
ret
|
ret
|
||||||
|
address_vsib:
|
||||||
|
mov al,bl
|
||||||
|
shr al,4
|
||||||
|
cmp al,0Ch
|
||||||
|
je vector_index_ok
|
||||||
|
cmp al,0Dh
|
||||||
|
jne invalid_address
|
||||||
|
vector_index_ok:
|
||||||
|
mov al,bh
|
||||||
|
shr al,4
|
||||||
|
cmp al,4
|
||||||
|
je postbyte_32bit
|
||||||
|
cmp [code_type],64
|
||||||
|
je address_prefix_ok
|
||||||
|
test al,al
|
||||||
|
jnz invalid_address
|
||||||
postbyte_32bit:
|
postbyte_32bit:
|
||||||
call address_32bit_prefix
|
call address_32bit_prefix
|
||||||
jmp address_prefix_ok
|
jmp address_prefix_ok
|
||||||
@ -6779,6 +6768,7 @@ store_instruction:
|
|||||||
or ah,bl
|
or ah,bl
|
||||||
and bh,111b
|
and bh,111b
|
||||||
or ah,bh
|
or ah,bh
|
||||||
|
sib_ready:
|
||||||
test ch,44h
|
test ch,44h
|
||||||
jnz sib_address_32bit_value
|
jnz sib_address_32bit_value
|
||||||
test ch,88h
|
test ch,88h
|
||||||
|
Loading…
Reference in New Issue
Block a user