vault backup: 2024-01-05 23:00:41

This commit is contained in:
sweetbread
2024-01-05 23:00:41 +03:00
parent 9aa10fb36c
commit ff9b6251e5
11 changed files with 122 additions and 45 deletions
@@ -23,4 +23,4 @@
| 13 /r | ADC r32, r/m32 | RM | Valid | Valid | Add with CF r/m32 to r32. |
| REX.W + 13 /r | ADC r64, r/m64 | RM | Valid | N.E. | Add with CF r/m64 to r64. |
> *In 64-bit mode, r/m8 can not be encoded to access the following byte registers if a REX prefix is used: AH, BH, CH, DH.
> \*In 64-bit mode, r/m8 can not be encoded to access the following byte registers if a REX prefix is used: AH, BH, CH, DH.
@@ -23,4 +23,4 @@
| 03 /r | ADD r32, r/m32 | RM | Valid | Valid | Add r/m32 to r32. |
| REX.W + 03 /r | ADD r64, r/m64 | RM | Valid | N.E. | Add r/m64 to r64. |
> *In 64-bit mode, r/m8 can not be encoded to access the following byte registers if a REX prefix is used: AH, BH, CH, DH.
> \*In 64-bit mode, r/m8 can not be encoded to access the following byte registers if a REX prefix is used: AH, BH, CH, DH.
@@ -0,0 +1,9 @@
| Opcode | Instruction | Op/En | 64-Bit Mode | Compat/Leg Mode | Description |
| ------------- | ----------- | ----- | ----------- | --------------- | ------------------------------------------------------------------------------------------ |
| F6 /6 | DIV r/m8 | M | Valid | Valid | Unsigned divide AX by r/m8, with result stored in AL := Quotient, AH := Remainder. |
| REX + F6 /6 | DIV r/m8\* | M | Valid | N.E. | Unsigned divide AX by r/m8, with result stored in AL := Quotient, AH := Remainder. |
| F7 /6 | DIV r/m16 | M | Valid | Valid | Unsigned divide DX:AX by r/m16, with result stored in AX := Quotient, DX := Remainder. |
| F7 /6 | DIV r/m32 | M | Valid | Valid | Unsigned divide EDX:EAX by r/m32, with result stored in EAX := Quotient, EDX := Remainder. |
| REX.W + F7 /6 | DIV r/m64 | M | Valid | N.E. | Unsigned divide RDX:RAX by r/m64, with result stored in RAX := Quotient, RDX := Remainder. |
> \*In 64-bit mode, r/m8 can not be encoded to access the following byte registers if a REX prefix is used: AH, BH, CH, DH.
@@ -0,0 +1,9 @@
| Opcode | Instruction | Op/En | 64-Bit Mode | Compat/Leg Mode | Description |
| ------------- | ----------- | ----- | ----------- | --------------- | ---------------------------------------------------------------------------------------- |
| F6 /7 | IDIV r/m8 | M | Valid | Valid | Signed divide AX by r/m8, with result stored in: AL := Quotient, AH := Remainder. |
| REX + F6 /7 | IDIV r/m8\* | M | Valid | N.E. | Signed divide AX by r/m8, with result stored in AL := Quotient, AH := Remainder. |
| F7 /7 | IDIV r/m16 | M | Valid | Valid | Signed divide DX:AX by r/m16, with result stored in AX := Quotient, DX := Remainder. |
| F7 /7 | IDIV r/m32 | M | Valid | Valid | Signed divide EDX:EAX by r/m32, with result stored in EAX := Quotient, EDX := Remainder. |
| REX.W + F7 /7 | IDIV r/m64 | M | Valid | N.E. | Signed divide RDX:RAX by r/m64, with result stored in RAX := Quotient, RDX := Remainder. |
> \*In 64-bit mode, r/m8 can not be encoded to access the following byte registers if a REX prefix is used: AH, BH, CH, DH.
@@ -0,0 +1,17 @@
| Opcode | Instruction | Op/En | 64-Bit Mode | Compat/Leg Mode | Description |
| ---------------- | ---------------------- | ----- | ----------- | --------------- | ------------------------------------------------------------ |
| F6 /5 | IMUL r/m8\* | M | Valid | Valid | AX:= AL r/m byte. |
| F7 /5 | IMUL r/m16 | M | Valid | Valid | DX:AX := AX r/m word. |
| F7 /5 | IMUL r/m32 | M | Valid | Valid | EDX:EAX := EAX r/m32. |
| REX.W + F7 /5 | IMUL r/m64 | M | Valid | N.E. | RDX:RAX := RAX r/m64. |
| 0F AF /r | IMUL r16, r/m16 | RM | Valid | Valid | word register := word register r/m16. |
| 0F AF /r | IMUL r32, r/m32 | RM | Valid | Valid | doubleword register := doubleword register r/m32. |
| REX.W + 0F AF /r | IMUL r64, r/m64 | RM | Valid | N.E. | Quadword register := Quadword register r/m64. |
| 6B /r ib | IMUL r16, r/m16, imm8 | RMI | Valid | Valid | word register := r/m16 sign-extended immediate byte. |
| 6B /r ib | IMUL r32, r/m32, imm8 | RMI | Valid | Valid | doubleword register := r/m32 sign-extended immediate byte. |
| REX.W + 6B /r ib | IMUL r64, r/m64, imm8 | RMI | Valid | N.E. | Quadword register := r/m64 sign-extended immediate byte. |
| 69 /r iw | IMUL r16, r/m16, imm16 | RMI | Valid | Valid | word register := r/m16 immediate word. |
| 69 /r id | IMUL r32, r/m32, imm32 | RMI | Valid | Valid | doubleword register := r/m32 immediate doubleword. |
| REX.W + 69 /r id | IMUL r64, r/m64, imm32 | RMI | Valid | N.E. | Quadword register := r/m64 immediate doubleword. |
> \*In 64-bit mode, r/m8 can not be encoded to access the following byte registers if a REX prefix is used: AH, BH, CH, DH.
@@ -0,0 +1,9 @@
| Opcode | Instruction | Op/En | 64-Bit Mode | Compat/Leg Mode | Description |
| ------------- | ----------- | ----- | ----------- | --------------- | ------------------------------------------- |
| F6 /4 | MUL r/m8 | M | Valid | Valid | Unsigned multiply (AX := AL r/m8). |
| REX + F6 /4 | MUL r/m8\* | M | Valid | N.E. | Unsigned multiply (AX := AL r/m8). |
| F7 /4 | MUL r/m16 | M | Valid | Valid | Unsigned multiply (DX:AX := AX r/m16). |
| F7 /4 | MUL r/m32 | M | Valid | Valid | Unsigned multiply (EDX:EAX := EAX r/m32). |
| REX.W + F7 /4 | MUL r/m64 | M | Valid | N.E. | Unsigned multiply (RDX:RAX := RAX r/m64). |
> \*In 64-bit mode, r/m8 can not be encoded to access the following byte registers if a REX prefix is used: AH, BH, CH, DH.
@@ -0,0 +1,26 @@
| Opcode | Instruction | Op/En | 64-Bit Mode | Compat/Leg Mode | Description |
| ---------------- | ---------------- | ----- | ----------- | --------------- | --------------------------------------------------------------- |
| 1C ib | SBB AL, imm8 | I | Valid | Valid | Subtract with borrow imm8 from AL. |
| 1D iw | SBB AX, imm16 | I | Valid | Valid | Subtract with borrow imm16 from AX. |
| 1D id | SBB EAX, imm32 | I | Valid | Valid | Subtract with borrow imm32 from EAX. |
| REX.W + 1D id | SBB RAX, imm32 | I | Valid | N.E. | Subtract with borrow sign-extended imm.32 to 64-bits from RAX. |
| 80 /3 ib | SBB r/m8, imm8 | MI | Valid | Valid | Subtract with borrow imm8 from r/m8. |
| REX + 80 /3 ib | SBB r/m8\*, imm8 | MI | Valid | N.E. | Subtract with borrow imm8 from r/m8. |
| 81 /3 iw | SBB r/m16, imm16 | MI | Valid | Valid | Subtract with borrow imm16 from r/m16. |
| 81 /3 id | SBB r/m32, imm32 | MI | Valid | Valid | Subtract with borrow imm32 from r/m32. |
| REX.W + 81 /3 id | SBB r/m64, imm32 | MI | Valid | N.E. | Subtract with borrow sign-extended imm32 to 64-bits from r/m64. |
| 83 /3 ib | SBB r/m16, imm8 | MI | Valid | Valid | Subtract with borrow sign-extended imm8 from r/m16. |
| 83 /3 ib | SBB r/m32, imm8 | MI | Valid | Valid | Subtract with borrow sign-extended imm8 from r/m32. |
| REX.W + 83 /3 ib | SBB r/m64, imm8 | MI | Valid | N.E. | Subtract with borrow sign-extended imm8 from r/m64. |
| 18 /r | SBB r/m8, r8 | MR | Valid | Valid | Subtract with borrow r8 from r/m8. |
| REX + 18 /r | SBB r/m8\*, r8 | MR | Valid | N.E. | Subtract with borrow r8 from r/m8. |
| 19 /r | SBB r/m16, r16 | MR | Valid | Valid | Subtract with borrow r16 from r/m16. |
| 19 /r | SBB r/m32, r32 | MR | Valid | Valid | Subtract with borrow r32 from r/m32. |
| REX.W + 19 /r | SBB r/m64, r64 | MR | Valid | N.E. | Subtract with borrow r64 from r/m64. |
| 1A /r | SBB r8, r/m8 | RM | Valid | Valid | Subtract with borrow r/m8 from r8. |
| REX + 1A /r | SBB r8\*, r/m8\* | RM | Valid | N.E. | Subtract with borrow r/m8 from r8. |
| 1B /r | SBB r16, r/m16 | RM | Valid | Valid | Subtract with borrow r/m16 from r16. |
| 1B /r | SBB r32, r/m32 | RM | Valid | Valid | Subtract with borrow r/m32 from r32. |
| REX.W + 1B /r | SBB r64, r/m64 | RM | Valid | N.E. | Subtract with borrow r/m64 from r64. |
> \*In 64-bit mode, r/m8 can not be encoded to access the following byte registers if a REX prefix is used: AH, BH, CH, DH.
@@ -5,7 +5,7 @@
| 2D id | SUB EAX, imm32 | I | Valid | Valid | Subtract imm32 from EAX. |
| REX.W + 2D id | SUB RAX, imm32 | I | Valid | N.E. | Subtract imm32 sign-extended to 64-bits from RAX. |
| 80 /5 ib | SUB r/m8, imm8 | MI | Valid | Valid | Subtract imm8 from r/m8. |
| REX + 80 /5 ib | SUB r/m81, imm8 | MI | Valid | N.E. | Subtract imm8 from r/m8. |
| REX + 80 /5 ib | SUB r/m8\*, imm8 | MI | Valid | N.E. | Subtract imm8 from r/m8. |
| 81 /5 iw | SUB r/m16, imm16 | MI | Valid | Valid | Subtract imm16 from r/m16. |
| 81 /5 id | SUB r/m32, imm32 | MI | Valid | Valid | Subtract imm32 from r/m32. |
| REX.W + 81 /5 id | SUB r/m64, imm32 | MI | Valid | N.E. | Subtract imm32 sign-extended to 64-bits from r/m64. |
@@ -13,14 +13,14 @@
| 83 /5 ib | SUB r/m32, imm8 | MI | Valid | Valid | Subtract sign-extended imm8 from r/m32. |
| REX.W + 83 /5 ib | SUB r/m64, imm8 | MI | Valid | N.E. | Subtract sign-extended imm8 from r/m64. |
| 28 /r | SUB r/m8, r8 | MR | Valid | Valid | Subtract r8 from r/m8. |
| REX + 28 /r | SUB r/m81, r81 | MR | Valid | N.E. | Subtract r8 from r/m8. |
| REX + 28 /r | SUB r/m8\*, r8\* | MR | Valid | N.E. | Subtract r8 from r/m8. |
| 29 /r | SUB r/m16, r16 | MR | Valid | Valid | Subtract r16 from r/m16. |
| 29 /r | SUB r/m32, r32 | MR | Valid | Valid | Subtract r32 from r/m32. |
| REX.W + 29 /r | SUB r/m64, r64 | MR | Valid | N.E. | Subtract r64 from r/m64. |
| 2A /r | SUB r8, r/m8 | RM | Valid | Valid | Subtract r/m8 from r8. |
| REX + 2A /r | SUB r81, r/m81 | RM | Valid | N.E. | Subtract r/m8 from r8. |
| REX + 2A /r | SUB r8\*, r/m8\* | RM | Valid | N.E. | Subtract r/m8 from r8. |
| 2B /r | SUB r16, r/m16 | RM | Valid | Valid | Subtract r/m16 from r16. |
| 2B /r | SUB r32, r/m32 | RM | Valid | Valid | Subtract r/m32 from r32. |
| REX.W + 2B /r | SUB r64, r/m64 | RM | Valid | N.E. | Subtract r/m64 from r64. |
> *In 64-bit mode, r/m8 can not be encoded to access the following byte registers if a REX prefix is used: AH, BH, CH, DH.
> \*In 64-bit mode, r/m8 can not be encoded to access the following byte registers if a REX prefix is used: AH, BH, CH, DH.