vault backup: 2024-01-05 20:37:37
This commit is contained in:
@@ -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 | "есть знак" |
|
||||
Reference in New Issue
Block a user