vault backup: 2024-01-05 20:37:37

This commit is contained in:
sweetbread
2024-01-05 20:37:37 +03:00
parent 2222f1f0ef
commit 9156c5eb18
11 changed files with 89 additions and 37 deletions
@@ -0,0 +1,94 @@
[Условия](Условия.md)
|Опкод|Инструкция|Op/En|64-битный режим|Легаси|Описание|
|---|---|---|---|---|---|
|0F 47 /r|CMOVA r16, r/m16|RM|Valid|Valid|Move if above (CF=0 and ZF=0).|
|0F 47 /r|CMOVA r32, r/m32|RM|Valid|Valid|Move if above (CF=0 and ZF=0).|
|REX.W + 0F 47 /r|CMOVA r64, r/m64|RM|Valid|N.E.|Move if above (CF=0 and ZF=0).|
|0F 43 /r|CMOVAE r16, r/m16|RM|Valid|Valid|Move if above or equal (CF=0).|
|0F 43 /r|CMOVAE r32, r/m32|RM|Valid|Valid|Move if above or equal (CF=0).|
|REX.W + 0F 43 /r|CMOVAE r64, r/m64|RM|Valid|N.E.|Move if above or equal (CF=0).|
|0F 42 /r|CMOVB r16, r/m16|RM|Valid|Valid|Move if below (CF=1).|
|0F 42 /r|CMOVB r32, r/m32|RM|Valid|Valid|Move if below (CF=1).|
|REX.W + 0F 42 /r|CMOVB r64, r/m64|RM|Valid|N.E.|Move if below (CF=1).|
|0F 46 /r|CMOVBE r16, r/m16|RM|Valid|Valid|Move if below or equal (CF=1 or ZF=1).|
|0F 46 /r|CMOVBE r32, r/m32|RM|Valid|Valid|Move if below or equal (CF=1 or ZF=1).|
|REX.W + 0F 46 /r|CMOVBE r64, r/m64|RM|Valid|N.E.|Move if below or equal (CF=1 or ZF=1).|
|0F 42 /r|CMOVC r16, r/m16|RM|Valid|Valid|Move if carry (CF=1).|
|0F 42 /r|CMOVC r32, r/m32|RM|Valid|Valid|Move if carry (CF=1).|
|REX.W + 0F 42 /r|CMOVC r64, r/m64|RM|Valid|N.E.|Move if carry (CF=1).|
|0F 44 /r|CMOVE r16, r/m16|RM|Valid|Valid|Move if equal (ZF=1).|
|0F 44 /r|CMOVE r32, r/m32|RM|Valid|Valid|Move if equal (ZF=1).|
|REX.W + 0F 44 /r|CMOVE r64, r/m64|RM|Valid|N.E.|Move if equal (ZF=1).|
|0F 4F /r|CMOVG r16, r/m16|RM|Valid|Valid|Move if greater (ZF=0 and SF=OF).|
|0F 4F /r|CMOVG r32, r/m32|RM|Valid|Valid|Move if greater (ZF=0 and SF=OF).|
|REX.W + 0F 4F /r|CMOVG r64, r/m64|RM|V/N.E.|N/A|Move if greater (ZF=0 and SF=OF).|
|0F 4D /r|CMOVGE r16, r/m16|RM|Valid|Valid|Move if greater or equal (SF=OF).|
|0F 4D /r|CMOVGE r32, r/m32|RM|Valid|Valid|Move if greater or equal (SF=OF).|
|REX.W + 0F 4D /r|CMOVGE r64, r/m64|RM|Valid|N.E.|Move if greater or equal (SF=OF).|
|0F 4C /r|CMOVL r16, r/m16|RM|Valid|Valid|Move if less (SF≠ OF).|
|0F 4C /r|CMOVL r32, r/m32|RM|Valid|Valid|Move if less (SF≠ OF).|
|REX.W + 0F 4C /r|CMOVL r64, r/m64|RM|Valid|N.E.|Move if less (SF≠ OF).|
|0F 4E /r|CMOVLE r16, r/m16|RM|Valid|Valid|Move if less or equal (ZF=1 or SF≠ OF).|
|0F 4E /r|CMOVLE r32, r/m32|RM|Valid|Valid|Move if less or equal (ZF=1 or SF≠ OF).|
|REX.W + 0F 4E /r|CMOVLE r64, r/m64|RM|Valid|N.E.|Move if less or equal (ZF=1 or SF≠ OF).|
|0F 46 /r|CMOVNA r16, r/m16|RM|Valid|Valid|Move if not above (CF=1 or ZF=1).|
|0F 46 /r|CMOVNA r32, r/m32|RM|Valid|Valid|Move if not above (CF=1 or ZF=1).|
|REX.W + 0F 46 /r|CMOVNA r64, r/m64|RM|Valid|N.E.|Move if not above (CF=1 or ZF=1).|
|0F 42 /r|CMOVNAE r16, r/m16|RM|Valid|Valid|Move if not above or equal (CF=1).|
|0F 42 /r|CMOVNAE r32, r/m32|RM|Valid|Valid|Move if not above or equal (CF=1).|
|REX.W + 0F 42 /r|CMOVNAE r64, r/m64|RM|Valid|N.E.|Move if not above or equal (CF=1).|
|0F 43 /r|CMOVNB r16, r/m16|RM|Valid|Valid|Move if not below (CF=0).|
|0F 43 /r|CMOVNB r32, r/m32|RM|Valid|Valid|Move if not below (CF=0).|
|REX.W + 0F 43 /r|CMOVNB r64, r/m64|RM|Valid|N.E.|Move if not below (CF=0).|
|0F 47 /r|CMOVNBE r16, r/m16|RM|Valid|Valid|Move if not below or equal (CF=0 and ZF=0).|
|0F 47 /r|CMOVNBE r32, r/m32|RM|Valid|Valid|Move if not below or equal (CF=0 and ZF=0).|
|REX.W + 0F 47 /r|CMOVNBE r64, r/m64|RM|Valid|N.E.|Move if not below or equal (CF=0 and ZF=0).|
|0F 43 /r|CMOVNC r16, r/m16|RM|Valid|Valid|Move if not carry (CF=0).|
|0F 43 /r|CMOVNC r32, r/m32|RM|Valid|Valid|Move if not carry (CF=0).|
|REX.W + 0F 43 /r|CMOVNC r64, r/m64|RM|Valid|N.E.|Move if not carry (CF=0).|
|0F 45 /r|CMOVNE r16, r/m16|RM|Valid|Valid|Move if not equal (ZF=0).|
|0F 45 /r|CMOVNE r32, r/m32|RM|Valid|Valid|Move if not equal (ZF=0).|
|REX.W + 0F 45 /r|CMOVNE r64, r/m64|RM|Valid|N.E.|Move if not equal (ZF=0).|
|0F 4E /r|CMOVNG r16, r/m16|RM|Valid|Valid|Move if not greater (ZF=1 or SF≠ OF).|
|0F 4E /r|CMOVNG r32, r/m32|RM|Valid|Valid|Move if not greater (ZF=1 or SF≠ OF).|
|REX.W + 0F 4E /r|CMOVNG r64, r/m64|RM|Valid|N.E.|Move if not greater (ZF=1 or SF≠ OF).|
|0F 4C /r|CMOVNGE r16, r/m16|RM|Valid|Valid|Move if not greater or equal (SF≠ OF).|
|0F 4C /r|CMOVNGE r32, r/m32|RM|Valid|Valid|Move if not greater or equal (SF≠ OF).|
|REX.W + 0F 4C /r|CMOVNGE r64, r/m64|RM|Valid|N.E.|Move if not greater or equal (SF≠ OF).|
|0F 4D /r|CMOVNL r16, r/m16|RM|Valid|Valid|Move if not less (SF=OF).|
|0F 4D /r|CMOVNL r32, r/m32|RM|Valid|Valid|Move if not less (SF=OF).|
|REX.W + 0F 4D /r|CMOVNL r64, r/m64|RM|Valid|N.E.|Move if not less (SF=OF).|
|0F 4F /r|CMOVNLE r16, r/m16|RM|Valid|Valid|Move if not less or equal (ZF=0 and SF=OF).|
|0F 4F /r|CMOVNLE r32, r/m32|RM|Valid|Valid|Move if not less or equal (ZF=0 and SF=OF).|
|REX.W + 0F 4F /r|CMOVNLE r64, r/m64|RM|Valid|N.E.|Move if not less or equal (ZF=0 and SF=OF).|
|0F 41 /r|CMOVNO r16, r/m16|RM|Valid|Valid|Move if not overflow (OF=0).|
|0F 41 /r|CMOVNO r32, r/m32|RM|Valid|Valid|Move if not overflow (OF=0).|
|REX.W + 0F 41 /r|CMOVNO r64, r/m64|RM|Valid|N.E.|Move if not overflow (OF=0).|
|0F 4B /r|CMOVNP r16, r/m16|RM|Valid|Valid|Move if not parity (PF=0).|
|0F 4B /r|CMOVNP r32, r/m32|RM|Valid|Valid|Move if not parity (PF=0).|
|REX.W + 0F 4B /r|CMOVNP r64, r/m64|RM|Valid|N.E.|Move if not parity (PF=0).|
|0F 49 /r|CMOVNS r16, r/m16|RM|Valid|Valid|Move if not sign (SF=0).|
|0F 49 /r|CMOVNS r32, r/m32|RM|Valid|Valid|Move if not sign (SF=0).|
|REX.W + 0F 49 /r|CMOVNS r64, r/m64|RM|Valid|N.E.|Move if not sign (SF=0).|
|0F 45 /r|CMOVNZ r16, r/m16|RM|Valid|Valid|Move if not zero (ZF=0).|
|0F 45 /r|CMOVNZ r32, r/m32|RM|Valid|Valid|Move if not zero (ZF=0).|
|REX.W + 0F 45 /r|CMOVNZ r64, r/m64|RM|Valid|N.E.|Move if not zero (ZF=0).|
|0F 40 /r|CMOVO r16, r/m16|RM|Valid|Valid|Move if overflow (OF=1).|
|0F 40 /r|CMOVO r32, r/m32|RM|Valid|Valid|Move if overflow (OF=1).|
|REX.W + 0F 40 /r|CMOVO r64, r/m64|RM|Valid|N.E.|Move if overflow (OF=1).|
|0F 4A /r|CMOVP r16, r/m16|RM|Valid|Valid|Move if parity (PF=1).|
|0F 4A /r|CMOVP r32, r/m32|RM|Valid|Valid|Move if parity (PF=1).|
|REX.W + 0F 4A /r|CMOVP r64, r/m64|RM|Valid|N.E.|Move if parity (PF=1).|
|0F 4A /r|CMOVPE r16, r/m16|RM|Valid|Valid|Move if parity even (PF=1).|
|0F 4A /r|CMOVPE r32, r/m32|RM|Valid|Valid|Move if parity even (PF=1).|
|REX.W + 0F 4A /r|CMOVPE r64, r/m64|RM|Valid|N.E.|Move if parity even (PF=1).|
|0F 4B /r|CMOVPO r16, r/m16|RM|Valid|Valid|Move if parity odd (PF=0).|
|0F 4B /r|CMOVPO r32, r/m32|RM|Valid|Valid|Move if parity odd (PF=0).|
|REX.W + 0F 4B /r|CMOVPO r64, r/m64|RM|Valid|N.E.|Move if parity odd (PF=0).|
|0F 48 /r|CMOVS r16, r/m16|RM|Valid|Valid|Move if sign (SF=1).|
|0F 48 /r|CMOVS r32, r/m32|RM|Valid|Valid|Move if sign (SF=1).|
|REX.W + 0F 48 /r|CMOVS r64, r/m64|RM|Valid|N.E.|Move if sign (SF=1).|
|0F 44 /r|CMOVZ r16, r/m16|RM|Valid|Valid|Move if zero (ZF=1).|
|0F 44 /r|CMOVZ r32, r/m32|RM|Valid|Valid|Move if zero (ZF=1).|
|REX.W + 0F 44 /r|CMOVZ r64, r/m64|RM|Valid|N.E.|Move if zero (ZF=1).|
@@ -0,0 +1,37 @@
|Opcode|Instruction|Op/En|64-Bit Mode|Compat/Leg Mode|Description|
|---|---|---|---|---|---|
|88 /r|MOV r/m8, r8|MR|Valid|Valid|Move r8 to r/m8.|
|REX + 88 /r|MOV r/m81, r81|MR|Valid|N.E.|Move r8 to r/m8.|
|89 /r|MOV r/m16, r16|MR|Valid|Valid|Move r16 to r/m16.|
|89 /r|MOV r/m32, r32|MR|Valid|Valid|Move r32 to r/m32.|
|REX.W + 89 /r|MOV r/m64, r64|MR|Valid|N.E.|Move r64 to r/m64.|
|8A /r|MOV r8, r/m8|RM|Valid|Valid|Move r/m8 to r8.|
|REX + 8A /r|MOV r81, r/m81|RM|Valid|N.E.|Move r/m8 to r8.|
|8B /r|MOV r16, r/m16|RM|Valid|Valid|Move r/m16 to r16.|
|8B /r|MOV r32, r/m32|RM|Valid|Valid|Move r/m32 to r32.|
|REX.W + 8B /r|MOV r64, r/m64|RM|Valid|N.E.|Move r/m64 to r64.|
|8C /r|MOV r/m16, Sreg2|MR|Valid|Valid|Move segment register to r/m16.|
|8C /r|MOV r16/r32/m16, Sreg2|MR|Valid|Valid|Move zero extended 16-bit segment register to r16/r32/m16.|
|REX.W + 8C /r|MOV r64/m16, Sreg2|MR|Valid|Valid|Move zero extended 16-bit segment register to r64/m16.|
|8E /r|MOV Sreg, r/m162|RM|Valid|Valid|Move r/m16 to segment register.|
|REX.W + 8E /r|MOV Sreg, r/m642|RM|Valid|Valid|Move lower 16 bits of r/m64 to segment register.|
|A0|MOV AL, moffs83|FD|Valid|Valid|Move byte at (seg:offset) to AL.|
|REX.W + A0|MOV AL, moffs83|FD|Valid|N.E.|Move byte at (offset) to AL.|
|A1|MOV AX, moffs163|FD|Valid|Valid|Move word at (seg:offset) to AX.|
|A1|MOV EAX, moffs323|FD|Valid|Valid|Move doubleword at (seg:offset) to EAX.|
|REX.W + A1|MOV RAX, moffs643|FD|Valid|N.E.|Move quadword at (offset) to RAX.|
|A2|MOV moffs8, AL|TD|Valid|Valid|Move AL to (seg:offset).|
|REX.W + A2|MOV moffs81, AL|TD|Valid|N.E.|Move AL to (offset).|
|A3|MOV moffs163, AX|TD|Valid|Valid|Move AX to (seg:offset).|
|A3|MOV moffs323, EAX|TD|Valid|Valid|Move EAX to (seg:offset).|
|REX.W + A3|MOV moffs643, RAX|TD|Valid|N.E.|Move RAX to (offset).|
|B0+ rb ib|MOV r8, imm8|OI|Valid|Valid|Move imm8 to r8.|
|REX + B0+ rb ib|MOV r81, imm8|OI|Valid|N.E.|Move imm8 to r8.|
|B8+ rw iw|MOV r16, imm16|OI|Valid|Valid|Move imm16 to r16.|
|B8+ rd id|MOV r32, imm32|OI|Valid|Valid|Move imm32 to r32.|
|REX.W + B8+ rd io|MOV r64, imm64|OI|Valid|N.E.|Move imm64 to r64.|
|C6 /0 ib|MOV r/m8, imm8|MI|Valid|Valid|Move imm8 to r/m8.|
|REX + C6 /0 ib|MOV r/m81, imm8|MI|Valid|N.E.|Move imm8 to r/m8.|
|C7 /0 iw|MOV r/m16, imm16|MI|Valid|Valid|Move imm16 to r/m16.|
|C7 /0 id|MOV r/m32, imm32|MI|Valid|Valid|Move imm32 to r/m32.|
|REX.W + C7 /0 id|MOV r/m64, imm32|MI|Valid|N.E.|Move imm32 sign extended to 64-bits to r/m64.|
@@ -0,0 +1,21 @@
|Opcode|Instruction|Op/En|64-Bit Mode|Compat/Leg Mode|Description|
|---|---|---|---|---|---|
|90+rw|XCHG AX, r16|O|Valid|Valid|Exchange r16 with AX.|
|90+rw|XCHG r16, AX|O|Valid|Valid|Exchange AX with r16.|
|90+rd|XCHG EAX, r32|O|Valid|Valid|Exchange r32 with EAX.|
|REX.W + 90+rd|XCHG RAX, r64|O|Valid|N.E.|Exchange r64 with RAX.|
|90+rd|XCHG r32, EAX|O|Valid|Valid|Exchange EAX with r32.|
|REX.W + 90+rd|XCHG r64, RAX|O|Valid|N.E.|Exchange RAX with r64.|
|86 /r|XCHG r/m8, r8|MR|Valid|Valid|Exchange r8 (byte register) with byte from r/m8.|
|REX + 86 /r|XCHG r/m8\*, r8\*|MR|Valid|N.E.|Exchange r8 (byte register) with byte from r/m8.|
|86 /r|XCHG r8, r/m8|RM|Valid|Valid|Exchange byte from r/m8 with r8 (byte register).|
|REX + 86 /r|XCHG r8\*, r/m8\*|RM|Valid|N.E.|Exchange byte from r/m8 with r8 (byte register).|
|87 /r|XCHG r/m16, r16|MR|Valid|Valid|Exchange r16 with word from r/m16.|
|87 /r|XCHG r16, r/m16|RM|Valid|Valid|Exchange word from r/m16 with r16.|
|87 /r|XCHG r/m32, r32|MR|Valid|Valid|Exchange r32 with doubleword from r/m32.|
|REX.W + 87 /r|XCHG r/m64, r64|MR|Valid|N.E.|Exchange r64 with quadword from r/m64.|
|87 /r|XCHG r32, r/m32|RM|Valid|Valid|Exchange doubleword from r/m32 with r32.|
|REX.W + 87 /r|XCHG r64, r/m64|RM|Valid|N.E.|Exchange quadword from r/m64 with r64.|
```
* In 64-bit mode, r/m8 cannot been coded to access the following byte registers if a REX prefix is used: AH, BH, CH, DH.
```