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
+22
View File
@@ -0,0 +1,22 @@
## Команды передачи данных
| Команды | Описание |
|-------------:|:----------------------------------------------------- |
| [MOV](MOV.md) | Присваивание |
| [CMOVxx](CMOVxx.md) | Условное присваивание |
| [XCHG](XCHG.md) | Обмен значений |
| BSWAP | Перестановка байтов |
| XADD | Обмен и сложение |
| CMPXCHG | Сравнение и обмен |
| CMPXCHG8B | Сравнение и обмен 8 байтов |
| PUSH | Поместить значение в стек |
| POP | Взять значение из стека |
| PUSHA/PUSHAD | Поместить значения регистров общего назначения в стек |
| POPA/POPAD | Взять значения регистров общего назначения из стека |
| IN | Прочитать значение из порта ввода/вывода |
| OUT | Записать значение в порт ввода/вывода |
| CWD | Преобразовать Word в DWord |
| CDQ | Преобразовать DWord в QWord |
| CBW | Преобразовать Byte в Word |
| CWDE | Преобразовать Word в DWord в регистре eax |
| MOVSX | Присвоить и расширить с учетом знака |
| MOVZX | Присвоить и расширить нулевым значением |
@@ -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.
```
@@ -0,0 +1,19 @@
| **Обозначение в командах** | **Флаги** | **Условие** |
| --------------------------:|:--------------:| ------------------------------------------------- |
| a / nbe | CF=0 и ZF=0 | "выше" или "не ниже или равно" (беззнаковый тип) |
| ae / nb / nc | CF=0 | "выше или равно" или "не ниже" или "нет переноса" |
| b / nae / c | CF=1 | "ниже" или "не выше или равно" или "есть перенос" |
| be / na | CF=1 или ZF=1 | "ниже или равно" или "не выше" |
| e / z | ZF=1 | "равно" или "ноль" |
| ne / nz | ZF=0 | "не равно" или "не ноль" |
| g / nle | ZF=0 и SF=OF | "больше" или "не меньше или равно" |
| ge / nl | SF=OF | "больше или равно" или "не меньше" |
| l / nge | SF≠OF | "меньше" или "не больше или равно" |
| le / ng | ZF=0 или SF≠OF | "меньше или равно" или "не больше" |
| no | OF=0 | "нет переполнения" |
| o | OF=1 | "есть переполнение" |
| np / po | PF=0 | "нет четности" или "нечетное" |
| p / pe | PF=1 | "есть четность" или "четное" |
| ns | SF=0 | "нет знака" |
| s | SF=1 | "есть знак" |