diff --git a/notes/.obsidian/plugins/obsidian-to-anki-plugin/data.json b/notes/.obsidian/plugins/obsidian-to-anki-plugin/data.json index a1f9c30..691eb99 100644 --- a/notes/.obsidian/plugins/obsidian-to-anki-plugin/data.json +++ b/notes/.obsidian/plugins/obsidian-to-anki-plugin/data.json @@ -308,9 +308,9 @@ "_journal/2024-03-22.md": "8da8cda07d3de74f7130981a05dce254", "_journal/2024-03/2024-03-21.md": "cd465f71800b080afa5c6bdc75bf9cd3", "x86-64/declarations.md": "75bc7857cf2207a40cd7f0ee056af2f2", - "x86-64/instructions.md": "240b4ceddf174f48207ba6bed4d25246", + "x86-64/instructions.md": "78a8bf469e9ac3404bb2baadba8d45d7", "git/refs.md": "954fc69004aa65b358ec5ce07c1435ce", - "set/trees.md": "0e2d146f7e952aa4575e4daa82301ecd", + "set/trees.md": "f0e179ee573a344b6eb7624bdf4f0539", "_journal/2024-03-24.md": "1974cdb9fc42c3a8bebb8ac76d4b1fd6", "_journal/2024-03/2024-03-23.md": "ad4e92cc2bf37f174a0758a0753bf69b", "_journal/2024-03/2024-03-22.md": "a509066c9cd2df692549e89f241d7bd9", @@ -343,7 +343,9 @@ "_journal/2024-04/2024-04-11.md": "5baeb12bc5cc5492af766def8f849fb4", "_journal/2024-04-14.md": "b51ad215e566bd96617d2817484232eb", "_journal/2024-04/2024-04-13.md": "92db6bcb162a85fb0a4afd51999b6318", - "_journal/2024-04/2024-04-12.md": "1ec32792d88d470c2d517e5caf64fd6f" + "_journal/2024-04/2024-04-12.md": "1ec32792d88d470c2d517e5caf64fd6f", + "_journal/2024-04-15.md": "c08bd7258def0c2a6b78039bb4aa03b9", + "_journal/2024-04/2024-04-14.md": "4fad809a30a8e69b615326ca14d0d4be" }, "fields_dict": { "Basic": [ diff --git a/notes/_journal/2024-04-14.md b/notes/_journal/2024-04/2024-04-14.md similarity index 56% rename from notes/_journal/2024-04-14.md rename to notes/_journal/2024-04/2024-04-14.md index 6c4f976..403c92a 100644 --- a/notes/_journal/2024-04-14.md +++ b/notes/_journal/2024-04/2024-04-14.md @@ -2,10 +2,12 @@ title: "2024-04-14" --- -- [ ] Anki Flashcards -- [ ] KoL +- [x] Anki Flashcards +- [x] KoL - [ ] Sheet Music (10 min.) - [ ] Go (1 Life & Death Problem) - [ ] Korean (Read 1 Story) - [ ] Interview Prep (1 Practice Problem) -- [ ] Log Work Hours (Max 3 hours) \ No newline at end of file +- [ ] Log Work Hours (Max 3 hours) + +* Read chapter on "Grokking the System Design Interview". \ No newline at end of file diff --git a/notes/_journal/2024-04/2024-04-15.md b/notes/_journal/2024-04/2024-04-15.md new file mode 100644 index 0000000..805ec78 --- /dev/null +++ b/notes/_journal/2024-04/2024-04-15.md @@ -0,0 +1,15 @@ +--- +title: "2024-04-15" +--- + +- [x] Anki Flashcards +- [x] KoL +- [ ] Sheet Music (10 min.) +- [ ] Go (1 Life & Death Problem) +- [ ] Korean (Read 1 Story) +- [x] Interview Prep (1 Practice Problem) +- [x] Log Work Hours (Max 3 hours) + +* Notes on the different operand forms x86-64 instructions can take on. +* Setup room config for hide-and-seek application. This will drive the next bout of work. +* Reviewed GraphQL concepts. \ No newline at end of file diff --git a/notes/set/trees.md b/notes/set/trees.md index 16a2178..735587b 100644 --- a/notes/set/trees.md +++ b/notes/set/trees.md @@ -1010,15 +1010,6 @@ Reference: Thomas H. Cormen et al., _Introduction to Algorithms_, Fourth edition END%% -%%ANKI -Basic -What recursive definition describes the number of nodes in each levelof a complete $k$-ary tree? -Back: $a_n = k \cdot a_{n-1}$ with $a_0 = 1$ -Reference: Thomas H. Cormen et al., _Introduction to Algorithms_, Fourth edition (Cambridge, Massachusett: The MIT Press, 2022). -Tags: algebra::sequence - -END%% - %%ANKI Basic What recursive definition describes the number of nodes in each level of a complete $k$-ary tree? diff --git a/notes/x86-64/instructions.md b/notes/x86-64/instructions.md index c866425..91b2bf6 100644 --- a/notes/x86-64/instructions.md +++ b/notes/x86-64/instructions.md @@ -60,6 +60,311 @@ Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Program END%% +## Instruction Classes + +An x86-64 CPU contains a set of 16 general-purpose registers storing 64-bit values. They are used to store integers and pointers. + +1 Byte | 2 Bytes | 4 Bytes | 8 Bytes | Purpose +------- | ------- | ------- | ------- | ------- +`%al` | `%ax` | `%eax` | `%rax` | Return value +`%bl` | `%bx` | `%ebx` | `%rbx` | Callee saved +`%cl` | `%cx` | `%ecx` | `%rcx` | 4th argument +`%dl` | `%dx` | `%edx` | `%rdx` | 3rd argument +`%sil` | `%si` | `%esi` | `%rsi` | 2nd argument +`%dil` | `%di` | `%edi` | `%rdi` | 1st argument +`%bpl` | `%bp` | `%ebp` | `%rbp` | Callee saved +`%spl` | `%sp` | `%esp` | `%rsp` | Stack pointer +`%r8b` | `%r8w` | `%r8d` | `%r8` | 5th argument +`%r9b` | `%r9w` | `%r9d` | `%r9` | 6th argument +`%r10b` | `%r10w` | `%r10d` | `%r10` | Caller saved +`%r11b` | `%r11w` | `%r11d` | `%r11` | Caller saved +`%r12b` | `%r12w` | `%r12d` | `%r12` | Callee saved +`%r13b` | `%r13w` | `%r13d` | `%r13` | Callee saved +`%r14b` | `%r14w` | `%r14d` | `%r14` | Callee saved +`%r15b` | `%r15w` | `%r15d` | `%r15` | Callee saved + +%%ANKI +Basic +How many general-purpose registers are available to x86-64 instructions? +Back: 16 +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Cloze +The x86 64-bit registers all start with prefix {`%r`}. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Cloze +The x86 32-bit registers all start with prefix {`%e`}. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +Instructions that generate 1-byte quantities do what to the remaining bytes of a register? +Back: Leaves them alone. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +Instructions that generate 2-byte quantities do what to the remaining bytes of a register? +Back: Leaves them alone. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +Instructions that generate 4-byte quantities do what to the remaining bytes of a register? +Back: Zeroes them out. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +Instructions that generate 8-byte quantities do what to the remaining bytes of a register? +Back: N/A +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +There are three types of operands: + +* **Immediates**. These denote constant values. In ATT assembly, they are written with a `$` followed by an integer using standard C notation. +* **Registers**. These denote the contents of a register. +* **Memory**. These denote some memory location according to a computed address (i.e. the **effective address**). + +| Type | Form | Operand Value | Name | +| --------- | ---------------- | ---------------------------------- | ------------------- | +| Immediate | $\$Imm$ | $Imm$ | Immediate | +| Register | $r_a$ | $R[r_a]$ | Register | +| Memory | $Imm$ | $M[Imm]$ | Absolute | +| Memory | $(r_a)$ | $M[R[r_a]]$ | Indirect | +| Memory | $Imm(r_b)$ | $M[Imm + R[r_b]]$ | Base + displacement | +| Memory | $(r_b, r_i)$ | $M[R[r_b] + R[r_i]]$ | Indexed | +| Memory | $Imm(r_b, r_i)$ | $M[Imm + R[r_b] + R[r_i]]$ | Indexed | +| Memory | $(,r_i,s)$ | $M[R[r_i] \cdot s]$ | Scaled indexed | +| Memory | $Imm(,r_i,s)$ | $M[Imm + R[r_i] \cdot s]$ | Scaled indexed | +| Memory | $(r_b,r_i,s)$ | $M[R[r_b] + R[r_i] \cdot s]$ | Scaled indexed | +| Memory | $Imm(r_b,r_i,s)$ | $M[Imm + R[r_b] + R[r_i] \cdot s]$ | Scaled indexed | + +%%ANKI +Basic +What are the three types of operands instructions can act on? +Back: Immediates, registers, and memory addresses. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +What are the types of source operands instructions can specify? +Back: Immediates, registers, and memory addresses. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +What are the types of destination operands instructions can specify? +Back: Registers and memory addresses. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +What does an immediate operand denote? +Back: A constant value. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +In ATT syntax, how is an immediate written? +Back: Aa a `$` followed by an integer using standard C notation. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +In ATT syntax, how is a register written? +Back: Aa a `%` followed by the name of the register. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +What is the operand value of form $\$Imm$? +Back: $Imm$ +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +What is the operand value of form $r_a$? +Back: $R[r_a]$ +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +What is the operand value of form $Imm$? +Back: $M[Imm]$ +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +What is the operand value of form $(r_a)$? +Back: $M[R[r_a]]$ +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +What is the operand value of form $Imm(r_b)$? +Back: $M[Imm + R[r_b]]$ +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +What is the operand value of form $(r_b, r_i)$? +Back: $M[R[r_b] + R[r_i]]$ +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +What is the operand value of form $Imm(r_b, r_i)$? +Back: $M[Imm + R[r_b] + R[r_i]]$ +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +What is the operand value of form $(,r_i,s)$? +Back: $M[R[r_i] \cdot s]$ +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +What is the operand value of form $Imm(,r_i,s)$? +Back: $M[Imm + R[r_i] \cdot s]$ +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +What is the operand value of form $(r_b,r_i,s)$? +Back: $M[R[r_b] + R[r_i] \cdot s]$ +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +What is the operand value of form $Imm(r_b,r_i,s)$? +Back: $M[Imm + R[r_b] + R[r_i] \cdot s]$ +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +What distinguishes operand value $r_a$ from $(r_a)$? +Back: The former denotes the register value. The latter denotes the value in memory at the address stored in $r_a$. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +What values can $s$ take on in operand form $Imm(r_b,r_i,s)$? +Back: $1$, $2$, $4$, or $8$. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +What operand form is named "immediate"? +Back: $\$Imm$ +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +What operand form is named "register"? +Back: $r_a$ +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +What operand form is named "absolute"? +Back: $Imm$ +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +What operand form is named "indirect"? +Back: $(r_a)$ +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +What operand form is named "base + displacement"? +Back: $Imm(r_b)$ +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +What is the most general operand form named "indexed" (*not* "scaled indexed")? +Back: $Imm(r_b, r_i)$ +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +%%ANKI +Basic +What is the most general operand form named "scaled indexed" (*not* indexed)? +Back: $Imm(r_b, r_i, s)$ +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + ## Bibliography -* Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. \ No newline at end of file +* Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016.