rework flags in opcode table
This commit is contained in:
@@ -1083,9 +1083,7 @@ get_ModRM:
|
||||
;
|
||||
; returned:
|
||||
; al = opcode; the rest of rax is zeroed.
|
||||
; dl = lower 3 bits: op flag, if applicable.
|
||||
; 4th bit: 0x0F prefix flag
|
||||
; the rest of rdx is zeroed.
|
||||
; dl = flags
|
||||
; ------------------------------------------------------------------------------
|
||||
|
||||
get_opcode:
|
||||
@@ -1114,7 +1112,7 @@ get_opcode:
|
||||
|
||||
.maybe_found:
|
||||
shl eax, 4
|
||||
mov cl, [opcodes.by_id + 11 + eax]
|
||||
mov cl, [opcodes.by_id + 15 + eax]
|
||||
shr eax, 4
|
||||
cmp cl, bl
|
||||
je .found
|
||||
@@ -1127,18 +1125,9 @@ get_opcode:
|
||||
ret
|
||||
.found:
|
||||
shl eax, 4
|
||||
push rsi
|
||||
shr esi, 1
|
||||
mov dl, [esi + 8 + opcodes.by_id + eax]
|
||||
pop rsi
|
||||
|
||||
test esi, 1 ; check if offset is odd
|
||||
jz .found_continue
|
||||
shr edx, 4 ; if so, upper part of dl byte
|
||||
.found_continue:
|
||||
mov al, [esi + 2 + opcodes.by_id + eax]
|
||||
and eax, 0xFF
|
||||
and edx, 0x0F
|
||||
ret
|
||||
|
||||
; ------------------------------------------------------------------------------
|
||||
@@ -2800,23 +2789,18 @@ opcodes:
|
||||
db 0x83 ; r/m <- imm8
|
||||
dw 0x0000
|
||||
|
||||
dd 0x00006600 ; 00:
|
||||
; 6: r/m <- imm16/32 op flag
|
||||
; 6: r/m <- imm8 op flag
|
||||
; 0x0000:
|
||||
dw 0x0000
|
||||
db 0x06 ; 6: r/m <- imm16/32 op flag
|
||||
db 0x06 ; 6: r/m <- imm8 op flag
|
||||
|
||||
dd 0x00000000 ; reserved
|
||||
dd 0x00000000
|
||||
|
||||
; inc
|
||||
dw 0x0054
|
||||
db 0xFF ; r/m
|
||||
db 0x00
|
||||
|
||||
dd 0x00000000
|
||||
|
||||
dd 0x00000000 ; 0: r/m op flag
|
||||
; 0000000:
|
||||
|
||||
dd 0x00000000
|
||||
dd 0x00000000
|
||||
|
||||
; dec
|
||||
@@ -2826,8 +2810,10 @@ opcodes:
|
||||
|
||||
dd 0x00000000
|
||||
|
||||
dd 0x00000001 ; 1: r/m op flag
|
||||
; 0000000:
|
||||
db 0x01 ; r/m op byte
|
||||
db 0x00
|
||||
dw 0x0000
|
||||
|
||||
dd 0x00000000
|
||||
|
||||
; mov
|
||||
@@ -2839,10 +2825,7 @@ opcodes:
|
||||
db 0x00
|
||||
dw 0x0000
|
||||
|
||||
dd 0x00000000 ; 00:
|
||||
; 0: r/m <- imm16/32 op flag
|
||||
; 00000:
|
||||
|
||||
dd 0x00000000
|
||||
dd 0x00000000
|
||||
|
||||
; mov bit8
|
||||
@@ -2854,13 +2837,12 @@ opcodes:
|
||||
db 0xC6 ; r/m8 <- imm8
|
||||
dw 0x0000
|
||||
|
||||
dd 0x01000000 ; 000:
|
||||
; 0: r/m8 <- imm8 op flag
|
||||
; 00:
|
||||
; 01: bit8 flag
|
||||
|
||||
dd 0x00000000
|
||||
|
||||
dw 0x0000
|
||||
db 0x00
|
||||
db 0x01 ; bit8 flag
|
||||
|
||||
; add
|
||||
dw 0x0057
|
||||
db 0x01 ; r/m <- r
|
||||
@@ -2870,11 +2852,7 @@ opcodes:
|
||||
db 0x83 ; r/m <- imm8
|
||||
dw 0x0000
|
||||
|
||||
dd 0x00000000 ; 00:
|
||||
; 0: r/m <- imm16/32 op flag
|
||||
; 0: r/m <- imm8 op flag
|
||||
; 0000:
|
||||
|
||||
dd 0x00000000
|
||||
dd 0x00000000
|
||||
|
||||
; sub
|
||||
@@ -2886,10 +2864,9 @@ opcodes:
|
||||
db 0x83 ; r/m <- imm8
|
||||
dw 0x0000
|
||||
|
||||
dd 0x00005500 ; 00:
|
||||
; 5: r/m <- imm16/32 op flag
|
||||
; 5: r/m <- imm8 op flag
|
||||
; 0000:
|
||||
dw 0x0000
|
||||
db 0x05 ; 5: r/m <- imm16/32 op flag
|
||||
db 0x05 ; 5: r/m <- imm8 op flag
|
||||
|
||||
dd 0x00000000
|
||||
|
||||
@@ -2902,8 +2879,9 @@ opcodes:
|
||||
db 0xE8 ; rel16/32
|
||||
db 0x00
|
||||
|
||||
dd 0x00000002 ; 2: r/m op flag
|
||||
; 0000000:
|
||||
db 0x02 ; 2: r/m op flag
|
||||
db 0x00
|
||||
dw 0x0000
|
||||
|
||||
dd 0x00000000
|
||||
|
||||
@@ -2924,10 +2902,9 @@ opcodes:
|
||||
db 0x83 ; r/m <- imm8
|
||||
dw 0x0000
|
||||
|
||||
dd 0x00007700 ; 00:
|
||||
; 7: r/m <- imm16/32 op flag
|
||||
; 7: r/m <- imm8 op flag
|
||||
; 0000:
|
||||
dw 0x0000
|
||||
db 0x07 ; 7: r/m <- imm16/32 op flag
|
||||
db 0x07 ; 7: r/m <- imm8 op flag
|
||||
|
||||
dd 0x00000000
|
||||
|
||||
@@ -2940,27 +2917,26 @@ opcodes:
|
||||
db 0x80 ; r/m8 <- imm8
|
||||
dw 0x0000
|
||||
|
||||
dd 0x01007000 ; 000:
|
||||
; 7: r/m8 <- imm8 op flag
|
||||
; 00:
|
||||
; 01: bit8 flag
|
||||
dw 0x0000
|
||||
db 0x00
|
||||
db 0x07 ; 7: r/m8 <- imm8 op flag
|
||||
|
||||
dd 0x00000000
|
||||
dw 0x0000
|
||||
db 0x00
|
||||
db 0x01 ; bit8 flag
|
||||
|
||||
; jmp
|
||||
dw 0x005C
|
||||
db 0xFF ; r/m
|
||||
db 0xFF ; r/m
|
||||
db 0x00
|
||||
|
||||
dw 0x0000
|
||||
db 0xE9 ; rel16/32
|
||||
db 0xEB ; rel8
|
||||
db 0xE9 ; rel16/32
|
||||
db 0xEB ; rel8
|
||||
|
||||
dd 0x00000004 ; 4: r/m
|
||||
; 000:
|
||||
; 0: rel16/32
|
||||
; 0: rel8
|
||||
; 00:
|
||||
db 0x04 ; r/m
|
||||
db 0x00
|
||||
dw 0x0000
|
||||
|
||||
dd 0x00000000
|
||||
|
||||
@@ -2972,26 +2948,26 @@ opcodes:
|
||||
db 0x84 ; rel16/32
|
||||
db 0x74 ; rel8
|
||||
|
||||
dd 0x00080000 ; 0000:
|
||||
; 8: rel16/32 0x0F flag
|
||||
; 000:
|
||||
|
||||
dd 0x00000000
|
||||
|
||||
db 0x08 ; 8: rel16/32 0x0F flag
|
||||
db 0x00
|
||||
dw 0x0000
|
||||
|
||||
; jne
|
||||
dw 0x005E
|
||||
dw 0x0000
|
||||
|
||||
dw 0x0000
|
||||
db 0x00 ; TODO figure out the 0x0F prefix this will need
|
||||
db 0x85 ; rel16/32
|
||||
db 0x75 ; rel8
|
||||
|
||||
dd 0x00000000 ; 00000:
|
||||
; 0: rel8
|
||||
; 00:
|
||||
|
||||
dd 0x00000000
|
||||
|
||||
db 0x08 ; 8: rel16/32 0x0F flag
|
||||
db 0x00
|
||||
dw 0x0000
|
||||
|
||||
; push
|
||||
; TODO add support for the +r variation
|
||||
dw 0x005F
|
||||
@@ -3002,11 +2978,9 @@ opcodes:
|
||||
db 0x6A ; imm8
|
||||
dw 0x0000
|
||||
|
||||
dd 0x00000006 ; 6: r/m
|
||||
; 0:
|
||||
; 0: imm16/32
|
||||
; 0: imm8
|
||||
; 0000:
|
||||
db 0x06 ; 6: r/m
|
||||
db 0x00
|
||||
dw 0x0000
|
||||
|
||||
dd 0x00000000
|
||||
|
||||
@@ -3015,12 +2989,8 @@ opcodes:
|
||||
dw 0x0060
|
||||
db 0x8F ; r/m
|
||||
db 0x00
|
||||
|
||||
dd 0x00000000
|
||||
|
||||
dd 0x00000000 ; 0: r/m
|
||||
; 0000000:
|
||||
|
||||
dd 0x00000000
|
||||
dd 0x00000000
|
||||
|
||||
; out
|
||||
|
||||
Reference in New Issue
Block a user