From ff9b6251e58307eb21beef30db3a9058ce317507 Mon Sep 17 00:00:00 2001 From: sweetbread Date: Fri, 5 Jan 2024 23:00:41 +0300 Subject: [PATCH] vault backup: 2024-01-05 23:00:41 --- .obsidian/graph.json | 21 +++++++++-- .obsidian/workspace-mobile.json | 36 ++++++++----------- X86/Общего назначения.md | 28 +++++++-------- .../Двоичные арифметические/ADC.md | 2 +- .../Двоичные арифметические/ADD.md | 2 +- .../Двоичные арифметические/DIV.md | 9 +++++ .../Двоичные арифметические/IDIV.md | 9 +++++ .../Двоичные арифметические/IMUL.md | 17 +++++++++ .../Двоичные арифметические/MUL.md | 9 +++++ .../Двоичные арифметические/SBB.md | 26 ++++++++++++++ .../Двоичные арифметические/SUB.md | 8 ++--- 11 files changed, 122 insertions(+), 45 deletions(-) create mode 100644 X86/Общего назначения/Двоичные арифметические/DIV.md create mode 100644 X86/Общего назначения/Двоичные арифметические/IDIV.md create mode 100644 X86/Общего назначения/Двоичные арифметические/IMUL.md create mode 100644 X86/Общего назначения/Двоичные арифметические/MUL.md create mode 100644 X86/Общего назначения/Двоичные арифметические/SBB.md diff --git a/.obsidian/graph.json b/.obsidian/graph.json index c9472ff..de849a1 100644 --- a/.obsidian/graph.json +++ b/.obsidian/graph.json @@ -5,8 +5,23 @@ "showAttachments": false, "hideUnresolved": false, "showOrphans": true, - "collapse-color-groups": true, - "colorGroups": [], + "collapse-color-groups": false, + "colorGroups": [ + { + "query": "path:\"X86/Общего назначения/Передачи данных\" ", + "color": { + "a": 1, + "rgb": 14701138 + } + }, + { + "query": "path:\"X86/Общего назначения/Двоичные арифметические\" ", + "color": { + "a": 1, + "rgb": 14725458 + } + } + ], "collapse-display": true, "showArrow": true, "textFadeMultiplier": 0, @@ -17,6 +32,6 @@ "repelStrength": 9.92414664981037, "linkStrength": 0.486093552465234, "linkDistance": 383, - "scale": 0.7401932494444989, + "scale": 0.5602434643767382, "close": false } \ No newline at end of file diff --git a/.obsidian/workspace-mobile.json b/.obsidian/workspace-mobile.json index ed8e670..35f37c3 100644 --- a/.obsidian/workspace-mobile.json +++ b/.obsidian/workspace-mobile.json @@ -4,19 +4,15 @@ "type": "split", "children": [ { - "id": "0a9a3914929b7205", + "id": "516a54f9621a92fe", "type": "tabs", "children": [ { - "id": "6a0ff7f9aaa2f335", + "id": "d2bffea13176633c", "type": "leaf", "state": { - "type": "markdown", - "state": { - "file": "Оглавление.md", - "mode": "preview", - "source": true - } + "type": "graph", + "state": {} } } ] @@ -85,7 +81,6 @@ "state": { "type": "backlink", "state": { - "file": "Оглавление.md", "collapseAll": false, "extraContext": false, "sortOrder": "alphabetical", @@ -102,7 +97,6 @@ "state": { "type": "outgoing-link", "state": { - "file": "Оглавление.md", "linksCollapsed": true, "unlinkedCollapsed": false } @@ -113,9 +107,7 @@ "type": "leaf", "state": { "type": "outline", - "state": { - "file": "Оглавление.md" - } + "state": {} } }, { @@ -141,12 +133,17 @@ "homepage:Open homepage": false } }, - "active": "6a0ff7f9aaa2f335", + "active": "d2bffea13176633c", "lastOpenFiles": [ - "Оглавление.md", - "X86/Общего назначения/Двоичные арифметические/SUB.md", - "X86/Общего назначения/Двоичные арифметические/ADC.md", "X86/Общего назначения.md", + "X86/Общего назначения/Двоичные арифметические/DIV.md", + "X86/Общего назначения/Двоичные арифметические/IDIV.md", + "X86/Общего назначения/Двоичные арифметические/MUL.md", + "X86/Общего назначения/Двоичные арифметические/SUB.md", + "X86/Общего назначения/Двоичные арифметические/SBB.md", + "X86/Общего назначения/Двоичные арифметические/ADC.md", + "X86/Общего назначения/Двоичные арифметические/IMUL.md", + "Оглавление.md", "X86/Общего назначения/Двоичные арифметические/ADD.md", "X86/Общего назначения/Двоичные арифметические", "X86/Общего назначения/Передачи данных/MOVZX.md", @@ -167,11 +164,6 @@ "X86/Общего назначения/Передачи данных/POP.md", "X86/Общего назначения/Передачи данных/PUSH.md", "X86/Общего назначения/Передачи данных/CMPXCHG.md", - "X86/Общего назначения/Передачи данных/XCHG.md", - "X86/Общего назначения/Передачи данных/CMOVxx.md", - "X86/Общего назначения/Передачи данных/MOV.md", - "X86/Общего назначения/Передачи данных/XADD.md", - "X86/Общего назначения/Передачи данных/BSWAP.md", "Untitled", "Общегоы/Общего назначения", "Общегоы", diff --git a/X86/Общего назначения.md b/X86/Общего назначения.md index e5154c1..d8f222f 100644 --- a/X86/Общего назначения.md +++ b/X86/Общего назначения.md @@ -23,17 +23,17 @@ ## Двоичные арифметические команды -| Команды | Описание | -| -----------------------------------------------------------:|:--------------------- | -| [ADD](Общего%20назначения/Двоичные%20арифметические/ADD.md) | Сложение | -| [ADC](Общего%20назначения/Двоичные%20арифметические/ADC.md) | Сложение с переносом | -| SUB | Вычитание | -| SBB | Вычитание с заемом | -| IMUL | Знаковое умножение | -| MUL | Беззнаковое умножение | -| IDIV | Знаковое деление | -| DIV | Беззнаковое деление | -| INC | Инкремент | -| DEC | Декремент | -| NEG | Смена знака | -| CMP | Сравнение | \ No newline at end of file +| Команды | Описание | +| -------------------------------------------------------------:|:--------------------- | +| [ADD](Общего%20назначения/Двоичные%20арифметические/ADD.md) | Сложение | +| [ADC](Общего%20назначения/Двоичные%20арифметические/ADC.md) | Сложение с переносом | +| [SUB](Общего%20назначения/Двоичные%20арифметические/SUB.md) | Вычитание | +| [SBB](Общего%20назначения/Двоичные%20арифметические/SBB.md) | Вычитание с заемом | +| [IMUL](Общего%20назначения/Двоичные%20арифметические/IMUL.md) | Знаковое умножение | +| [MUL](Общего%20назначения/Двоичные%20арифметические/MUL.md) | Беззнаковое умножение | +| [IDIV](Общего%20назначения/Двоичные%20арифметические/IDIV.md) | Знаковое деление | +| [DIV](Общего%20назначения/Двоичные%20арифметические/DIV.md) | Беззнаковое деление | +| INC | Инкремент | +| DEC | Декремент | +| NEG | Смена знака | +| CMP | Сравнение | \ No newline at end of file diff --git a/X86/Общего назначения/Двоичные арифметические/ADC.md b/X86/Общего назначения/Двоичные арифметические/ADC.md index f4d3b6b..2bec4c1 100644 --- a/X86/Общего назначения/Двоичные арифметические/ADC.md +++ b/X86/Общего назначения/Двоичные арифметические/ADC.md @@ -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. \ No newline at end of file +> \*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/Общего назначения/Двоичные арифметические/ADD.md b/X86/Общего назначения/Двоичные арифметические/ADD.md index 94cab36..042c08b 100644 --- a/X86/Общего назначения/Двоичные арифметические/ADD.md +++ b/X86/Общего назначения/Двоичные арифметические/ADD.md @@ -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. \ No newline at end of file +> \*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/Общего назначения/Двоичные арифметические/DIV.md b/X86/Общего назначения/Двоичные арифметические/DIV.md new file mode 100644 index 0000000..f624b00 --- /dev/null +++ b/X86/Общего назначения/Двоичные арифметические/DIV.md @@ -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. \ No newline at end of file diff --git a/X86/Общего назначения/Двоичные арифметические/IDIV.md b/X86/Общего назначения/Двоичные арифметические/IDIV.md new file mode 100644 index 0000000..8d719d5 --- /dev/null +++ b/X86/Общего назначения/Двоичные арифметические/IDIV.md @@ -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. \ No newline at end of file diff --git a/X86/Общего назначения/Двоичные арифметические/IMUL.md b/X86/Общего назначения/Двоичные арифметические/IMUL.md new file mode 100644 index 0000000..d5e098a --- /dev/null +++ b/X86/Общего назначения/Двоичные арифметические/IMUL.md @@ -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. \ No newline at end of file diff --git a/X86/Общего назначения/Двоичные арифметические/MUL.md b/X86/Общего назначения/Двоичные арифметические/MUL.md new file mode 100644 index 0000000..f592713 --- /dev/null +++ b/X86/Общего назначения/Двоичные арифметические/MUL.md @@ -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. \ No newline at end of file diff --git a/X86/Общего назначения/Двоичные арифметические/SBB.md b/X86/Общего назначения/Двоичные арифметические/SBB.md new file mode 100644 index 0000000..3623437 --- /dev/null +++ b/X86/Общего назначения/Двоичные арифметические/SBB.md @@ -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. \ No newline at end of file diff --git a/X86/Общего назначения/Двоичные арифметические/SUB.md b/X86/Общего назначения/Двоичные арифметические/SUB.md index e8718af..326a432 100644 --- a/X86/Общего назначения/Двоичные арифметические/SUB.md +++ b/X86/Общего назначения/Двоичные арифметические/SUB.md @@ -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. \ No newline at end of file +> \*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