diff --git a/.obsidian/app.json b/.obsidian/app.json index b63b287..bbfb0f4 100644 --- a/.obsidian/app.json +++ b/.obsidian/app.json @@ -22,6 +22,12 @@ "editor:toggle-keyboard", "editor:configure-toolbar", "editor:fold-less", - "editor:fold-more" - ] + "editor:fold-more", + "table-editor-obsidian:format-table" + ], + "newLinkFormat": "relative", + "useMarkdownLinks": true, + "livePreview": false, + "defaultViewMode": "preview", + "showLineNumber": true } \ No newline at end of file diff --git a/.obsidian/graph.json b/.obsidian/graph.json index c889a51..c9472ff 100644 --- a/.obsidian/graph.json +++ b/.obsidian/graph.json @@ -7,16 +7,16 @@ "showOrphans": true, "collapse-color-groups": true, "colorGroups": [], - "collapse-display": false, + "collapse-display": true, "showArrow": true, "textFadeMultiplier": 0, "nodeSizeMultiplier": 1.52787610619469, "lineSizeMultiplier": 5, - "collapse-forces": false, - "centerStrength": 0.0714285714285714, - "repelStrength": 0.771175726927939, - "linkStrength": 1, - "linkDistance": 250, - "scale": 1.5884613927474214, - "close": true + "collapse-forces": true, + "centerStrength": 0, + "repelStrength": 9.92414664981037, + "linkStrength": 0.486093552465234, + "linkDistance": 383, + "scale": 0.7401932494444989, + "close": false } \ No newline at end of file diff --git a/.obsidian/plugins/obsidian-git/data.json b/.obsidian/plugins/obsidian-git/data.json index 9afd3b4..4807d60 100644 --- a/.obsidian/plugins/obsidian-git/data.json +++ b/.obsidian/plugins/obsidian-git/data.json @@ -1,7 +1,7 @@ { "commitMessage": "vault backup: {{date}}", "commitDateFormat": "YYYY-MM-DD HH:mm:ss", - "autoSaveInterval": 0, + "autoSaveInterval": 10, "autoPushInterval": 0, "autoPullInterval": 0, "autoPullOnBoot": true, diff --git a/.obsidian/workspace-mobile.json b/.obsidian/workspace-mobile.json index 609c624..ee049a2 100644 --- a/.obsidian/workspace-mobile.json +++ b/.obsidian/workspace-mobile.json @@ -4,18 +4,18 @@ "type": "split", "children": [ { - "id": "68d7c37b4d7272bb", + "id": "38ced402f0e058bc", "type": "tabs", "children": [ { - "id": "de27de3851d40181", + "id": "d3c4775ae208c831", "type": "leaf", "state": { "type": "markdown", "state": { - "file": "X86/Общего назначения.md", - "mode": "source", - "source": false + "file": "Оглавление.md", + "mode": "preview", + "source": true } } } @@ -85,7 +85,7 @@ "state": { "type": "backlink", "state": { - "file": "X86/Общего назначения.md", + "file": "Оглавление.md", "collapseAll": false, "extraContext": false, "sortOrder": "alphabetical", @@ -102,7 +102,7 @@ "state": { "type": "outgoing-link", "state": { - "file": "X86/Общего назначения.md", + "file": "Оглавление.md", "linksCollapsed": true, "unlinkedCollapsed": false } @@ -114,7 +114,7 @@ "state": { "type": "outline", "state": { - "file": "X86/Общего назначения.md" + "file": "Оглавление.md" } } }, @@ -126,7 +126,8 @@ "state": {} } } - ] + ], + "currentTab": 3 }, "left-ribbon": { "hiddenItems": { @@ -140,17 +141,30 @@ "homepage:Open homepage": false } }, - "active": "de27de3851d40181", + "active": "d3c4775ae208c831", "lastOpenFiles": [ - "X86/Общего назначения/Условия.md", - "X86/Общего назначения/Передачи данных/CMOVxx.md", "X86/Общего назначения.md", - "X86.md", + "X86/Общего назначения/Передачи данных/IN.md", + "X86/Общего назначения/Передачи данных/POPA(D).md", + "X86/Общего назначения/Передачи данных/PUSHA(D).md", + "Общего назначения/Передачи данных/PUSHA(D).md", + "Общего назначения", + "Общего назначения/Передачи данных", + "X86/Общего назначения/Untitled.md", + "X86/Общего назначения/Передачи данных/CMPXCHG8(16)B.md", + "X86/Общего назначения/Передачи данных/POP.md", + "X86/Общего назначения/Передачи данных/PUSH.md", "Оглавление.md", - "Команды.md", - "FASM.md", + "X86/Общего назначения/Передачи данных/CMPXCHG.md", "X86/Общего назначения/Передачи данных/XCHG.md", + "X86/Общего назначения/Передачи данных/CMOVxx.md", "X86/Общего назначения/Передачи данных/MOV.md", + "X86/Общего назначения/Передачи данных/XADD.md", + "X86.md", + "FASM.md", + "X86/Общего назначения/Передачи данных/BSWAP.md", + "X86/Общего назначения/Условия.md", + "Команды.md", "Команды 1.md", "Команды%2FОбщего назначения%2FПередачи данных%2FXCHG.md", "Untitled", diff --git a/FASM.md b/FASM.md deleted file mode 100644 index e69de29..0000000 diff --git a/X86/Общего назначения.md b/X86/Общего назначения.md index f33d333..a6ae7cf 100644 --- a/X86/Общего назначения.md +++ b/X86/Общего назначения.md @@ -1,22 +1,39 @@ ## Команды передачи данных -| Команды | Описание | -|-------------:|:----------------------------------------------------- | -| [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 | Присвоить и расширить нулевым значением | +| Команды | Описание | +| -------------------------------------------------------------------------------:|:----------------------------------------------------- | +| [MOV](Общего%20назначения/Передачи%20данных/MOV.md) | Присваивание | +| [CMOVxx](Общего%20назначения/Передачи%20данных/CMOVxx.md) | Условное присваивание | +| [XCHG](Общего%20назначения/Передачи%20данных/XCHG.md) | Обмен значений | +| [BSWAP](Общего%20назначения/Передачи%20данных/BSWAP.md) | Перестановка байтов | +| [XADD](Общего%20назначения/Передачи%20данных/XADD.md) | Обмен и сложение | +| [CMPXCHG](Общего%20назначения/Передачи%20данных/CMPXCHG.md) | Сравнение и обмен | +| [CMPXCHG8B, CMPXCHG16B](Общего%20назначения/Передачи%20данных/CMPXCHG8(16)B.md) | Сравнение и обмен 8/16 байтов | +| [PUSH](Общего%20назначения/Передачи%20данных/PUSH.md) | Поместить значение в стек | +| [POP](Общего%20назначения/Передачи%20данных/POP.md) | Взять значение из стека | +| [PUSHA/PUSHAD](Общего%20назначения/Передачи%20данных/PUSHA(D).md) | Поместить значения регистров общего назначения в стек | +| [POPA/POPAD](Общего%20назначения/Передачи%20данных/POPA(D).md) | Взять значения регистров общего назначения из стека | +| IN | Прочитать значение из порта ввода/вывода | +| OUT | Записать значение в порт ввода/вывода | +| CWD | Преобразовать Word в DWord | +| CDQ | Преобразовать DWord в QWord | +| CBW | Преобразовать Byte в Word | +| CWDE | Преобразовать Word в DWord в регистре eax | +| MOVSX | Присвоить и расширить с учетом знака | +| MOVZX | Присвоить и расширить нулевым значением | + +## Двоичные арифметические команды + +| Команды | Описание | +| -------:|:--------------------- | +| ADD | Сложение | +| ADC | Сложение с переносом | +| SUB | Вычитание | +| SBB | Вычитание с заемом | +| IMUL | Знаковое умножение | +| MUL | Беззнаковое умножение | +| IDIV | Знаковое деление | +| DIV | Беззнаковое деление | +| INC | Инкремент | +| DEC | Декремент | +| NEG | Смена знака | +| CMP | Сравнение | \ No newline at end of file diff --git a/X86/Общего назначения/Передачи данных/BSWAP.md b/X86/Общего назначения/Передачи данных/BSWAP.md new file mode 100644 index 0000000..588d86e --- /dev/null +++ b/X86/Общего назначения/Передачи данных/BSWAP.md @@ -0,0 +1,4 @@ +| Opcode | Instruction | Op/En | 64-bit Mode | Compat/Leg Mode | Description | +| ------------------ | ----------- | ----- | ----------- | --------------- | --------------------------------------------- | +| 0F C8+_rd_ | BSWAP _r32_ | O | Valid | Valid | Reverses the byte order of a 32-bit register. | +| REX.W + 0F C8+_rd_ | BSWAP _r64_ | O | Valid | N.E. | Reverses the byte order of a 64-bit register. | \ No newline at end of file diff --git a/X86/Общего назначения/Передачи данных/CMOVxx.md b/X86/Общего назначения/Передачи данных/CMOVxx.md index 7de8217..f8fa83e 100644 --- a/X86/Общего назначения/Передачи данных/CMOVxx.md +++ b/X86/Общего назначения/Передачи данных/CMOVxx.md @@ -1,94 +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).| \ No newline at end of file +| Опкод | Инструкция | 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). | \ No newline at end of file diff --git a/X86/Общего назначения/Передачи данных/CMPXCHG.md b/X86/Общего назначения/Передачи данных/CMPXCHG.md new file mode 100644 index 0000000..8a1e72f --- /dev/null +++ b/X86/Общего назначения/Передачи данных/CMPXCHG.md @@ -0,0 +1,9 @@ +| Opcode/Instruction | Op/En | 64-Bit Mode | Compat/Leg Mode | Description | +| ---------------------------------- | ----- | ----------- | --------------- | ----------------------------------------------------------------------------------------------------------------- | +| 0F B0/r CMPXCHG r/m8, r8 | MR | Valid | Valid | Compare AL with r/m8. If equal, ZF is set and r8 is loaded into r/m8. Else, clear ZF and load r/m8 into AL. | +| REX + 0F B0/r CMPXCHG r/m8*,r8 | MR | Valid | N.E. | Compare AL with r/m8. If equal, ZF is set and r8 is loaded into r/m8. Else, clear ZF and load r/m8 into AL. | +| 0F B1/r CMPXCHG r/m16, r16 | MR | Valid | Valid | Compare AX with r/m16. If equal, ZF is set and r16 is loaded into r/m16. Else, clear ZF and load r/m16 into AX. | +| 0F B1/r CMPXCHG r/m32, r32 | MR | Valid | Valid | Compare EAX with r/m32. If equal, ZF is set and r32 is loaded into r/m32. Else, clear ZF and load r/m32 into EAX. | +| REX.W + 0F B1/r CMPXCHG r/m64, r64 | MR | Valid | N.E. | Compare RAX with r/m64. If equal, ZF is set and r64 is loaded into r/m64. Else, clear ZF and load r/m64 into RAX. | + +> * 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. \ No newline at end of file diff --git a/X86/Общего назначения/Передачи данных/CMPXCHG8(16)B.md b/X86/Общего назначения/Передачи данных/CMPXCHG8(16)B.md new file mode 100644 index 0000000..4c8d3c0 --- /dev/null +++ b/X86/Общего назначения/Передачи данных/CMPXCHG8(16)B.md @@ -0,0 +1,4 @@ +| Opcode/Instruction | Op/En | 64-Bit Mode | Compat/Leg Mode | Description | +| -------------------------------- | ----- | ----------- | --------------- | ------------------------------------------------------------------------------------------------------------------ | +| 0F C7 /1 CMPXCHG8B m64 | M | Valid | Valid | Compare EDX:EAX with m64. If equal, set ZF and load ECX:EBX into m64. Else, clear ZF and load m64 into EDX:EAX. | +| REX.W + 0F C7 /1 CMPXCHG16B m128 | M | Valid | N.E. | Compare RDX:RAX with m128. If equal, set ZF and load RCX:RBX into m128. Else, clear ZF and load m128 into RDX:RAX. | \ No newline at end of file diff --git a/X86/Общего назначения/Передачи данных/IN.md b/X86/Общего назначения/Передачи данных/IN.md new file mode 100644 index 0000000..bb44e9d --- /dev/null +++ b/X86/Общего назначения/Передачи данных/IN.md @@ -0,0 +1,8 @@ +| Opcode | Instruction | Op/En | 64-Bit Mode | Compat/Leg Mode | Description | +| ------ | ------------ | ----- | ----------- | --------------- | ------------------------------------------------ | +| E4 ib | IN AL, imm8 | I | Valid | Valid | Input byte from imm8 I/O port address into AL. | +| E5 ib | IN AX, imm8 | I | Valid | Valid | Input word from imm8 I/O port address into AX. | +| E5 ib | IN EAX, imm8 | I | Valid | Valid | Input dword from imm8 I/O port address into EAX. | +| EC | IN AL,DX | ZO | Valid | Valid | Input byte from I/O port in DX into AL. | +| ED | IN AX,DX | ZO | Valid | Valid | Input word from I/O port in DX into AX. | +| ED | IN EAX,DX | ZO | Valid | Valid | Input doubleword from I/O port in DX into EAX. | \ No newline at end of file diff --git a/X86/Общего назначения/Передачи данных/MOV.md b/X86/Общего назначения/Передачи данных/MOV.md index be6944d..3974376 100644 --- a/X86/Общего назначения/Передачи данных/MOV.md +++ b/X86/Общего назначения/Передачи данных/MOV.md @@ -1,37 +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.| \ No newline at end of file +| 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. | \ No newline at end of file diff --git a/X86/Общего назначения/Передачи данных/POP.md b/X86/Общего назначения/Передачи данных/POP.md new file mode 100644 index 0000000..d031c76 --- /dev/null +++ b/X86/Общего назначения/Передачи данных/POP.md @@ -0,0 +1,17 @@ +| Opcode | Instruction | Op/En | 64-Bit Mode | Compat/Leg Mode | Description | +| ------ | ----------- | ----- | ----------- | --------------- | -------------------------------------------------------------------------------------- | +| 8F /0 | POP r/m16 | M | Valid | Valid | Pop top of stack into m16; increment stack pointer. | +| 8F /0 | POP r/m32 | M | N.E. | Valid | Pop top of stack into m32; increment stack pointer. | +| 8F /0 | POP r/m64 | M | Valid | N.E. | Pop top of stack into m64; increment stack pointer. Cannot encode 32-bit operand size. | +| 58+ rw | POP r16 | O | Valid | Valid | Pop top of stack into r16; increment stack pointer. | +| 58+ rd | POP r32 | O | N.E. | Valid | Pop top of stack into r32; increment stack pointer. | +| 58+ rd | POP r64 | O | Valid | N.E. | Pop top of stack into r64; increment stack pointer. Cannot encode 32-bit operand size. | +| 1F | POP DS | ZO | Invalid | Valid | Pop top of stack into DS; increment stack pointer. | +| 07 | POP ES | ZO | Invalid | Valid | Pop top of stack into ES; increment stack pointer. | +| 17 | POP SS | ZO | Invalid | Valid | Pop top of stack into SS; increment stack pointer. | +| 0F A1 | POP FS | ZO | Valid | Valid | Pop top of stack into FS; increment stack pointer by 16 bits. | +| 0F A1 | POP FS | ZO | N.E. | Valid | Pop top of stack into FS; increment stack pointer by 32 bits. | +| 0F A1 | POP FS | ZO | Valid | N.E. | Pop top of stack into FS; increment stack pointer by 64 bits. | +| 0F A9 | POP GS | ZO | Valid | Valid | Pop top of stack into GS; increment stack pointer by 16 bits. | +| 0F A9 | POP GS | ZO | N.E. | Valid | Pop top of stack into GS; increment stack pointer by 32 bits. | +| 0F A9 | POP GS | ZO | Valid | N.E. | Pop top of stack into GS; increment stack pointer by 64 bits. | \ No newline at end of file diff --git a/X86/Общего назначения/Передачи данных/POPA(D).md b/X86/Общего назначения/Передачи данных/POPA(D).md new file mode 100644 index 0000000..568b275 --- /dev/null +++ b/X86/Общего назначения/Передачи данных/POPA(D).md @@ -0,0 +1,4 @@ +| Opcode | Instruction | Op/En | 64-Bit Mode | Compat/Leg Mode | Description | +| ------ | ----------- | ----- | ----------- | --------------- | ------------------------------------------ | +| 61 | POPA | ZO | Invalid | Valid | Pop DI, SI, BP, BX, DX, CX, and AX. | +| 61 | POPAD | ZO | Invalid | Valid | Pop EDI, ESI, EBP, EBX, EDX, ECX, and EAX. | \ No newline at end of file diff --git a/X86/Общего назначения/Передачи данных/PUSH.md b/X86/Общего назначения/Передачи данных/PUSH.md new file mode 100644 index 0000000..94f43bc --- /dev/null +++ b/X86/Общего назначения/Передачи данных/PUSH.md @@ -0,0 +1,17 @@ +| Opcode | Instruction | Op/En | 64-Bit Mode | Compat/Leg Mode | Description | +| ------ | ----------- | ----- | ----------- | --------------- | ----------- | +| FF /6 | PUSH r/m16 | M | Valid | Valid | Push r/m16. | +| FF /6 | PUSH r/m32 | M | N.E. | Valid | Push r/m32. | +| FF /6 | PUSH r/m64 | M | Valid | N.E. | Push r/m64. | +| 50+rw | PUSH r16 | O | Valid | Valid | Push r16. | +| 50+rd | PUSH r32 | O | N.E. | Valid | Push r32. | +| 50+rd | PUSH r64 | O | Valid | N.E. | Push r64. | +| 6A ib | PUSH imm8 | I | Valid | Valid | Push imm8. | +| 68 iw | PUSH imm16 | I | Valid | Valid | Push imm16. | +| 68 id | PUSH imm32 | I | Valid | Valid | Push imm32. | +| 0E | PUSH CS | ZO | Invalid | Valid | Push CS. | +| 16 | PUSH SS | ZO | Invalid | Valid | Push SS. | +| 1E | PUSH DS | ZO | Invalid | Valid | Push DS. | +| 06 | PUSH ES | ZO | Invalid | Valid | Push ES. | +| 0F A0 | PUSH FS | ZO | Valid | Valid | Push FS. | +| 0F A8 | PUSH GS | ZO | Valid | Valid | Push GS. | \ No newline at end of file diff --git a/X86/Общего назначения/Передачи данных/PUSHA(D).md b/X86/Общего назначения/Передачи данных/PUSHA(D).md new file mode 100644 index 0000000..312c110 --- /dev/null +++ b/X86/Общего назначения/Передачи данных/PUSHA(D).md @@ -0,0 +1,4 @@ +| Opcode | Instruction | Op/En | 64-Bit Mode | Compat/Leg Mode | Description | +| ------ | ----------- | ----- | ----------- | --------------- | --------------------------------------------------------- | +| 60 | PUSHA | ZO | Invalid | Valid | Push AX, CX, DX, BX, original SP, BP, SI, and DI. | +| 60 | PUSHAD | ZO | Invalid | Valid | Push EAX, ECX, EDX, EBX, original ESP, EBP, ESI, and EDI. | \ No newline at end of file diff --git a/X86/Общего назначения/Передачи данных/XADD.md b/X86/Общего назначения/Передачи данных/XADD.md new file mode 100644 index 0000000..588d86e --- /dev/null +++ b/X86/Общего назначения/Передачи данных/XADD.md @@ -0,0 +1,4 @@ +| Opcode | Instruction | Op/En | 64-bit Mode | Compat/Leg Mode | Description | +| ------------------ | ----------- | ----- | ----------- | --------------- | --------------------------------------------- | +| 0F C8+_rd_ | BSWAP _r32_ | O | Valid | Valid | Reverses the byte order of a 32-bit register. | +| REX.W + 0F C8+_rd_ | BSWAP _r64_ | O | Valid | N.E. | Reverses the byte order of a 64-bit register. | \ No newline at end of file diff --git a/X86/Общего назначения/Передачи данных/XCHG.md b/X86/Общего назначения/Передачи данных/XCHG.md index 9f3557b..12f5c9e 100644 --- a/X86/Общего назначения/Передачи данных/XCHG.md +++ b/X86/Общего назначения/Передачи данных/XCHG.md @@ -1,21 +1,20 @@ -|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. -``` \ No newline at end of file +| 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. \ No newline at end of file