From 2d3f5e0879bee9bdc3b8968c2e52f9e149bff171 Mon Sep 17 00:00:00 2001 From: Joshua Potter Date: Wed, 30 Oct 2024 19:29:59 -0600 Subject: [PATCH] x86-64 stack. --- .../plugins/obsidian-to-anki-plugin/data.json | 29 +- notes/_journal/2024-10-30.md | 9 + notes/_journal/2024-10/2024-10-27.md | 4 +- notes/_journal/2024-10/2024-10-28.md | 12 + notes/_journal/2024-10/2024-10-29.md | 9 + notes/combinatorics/permutations.md | 2 +- notes/encoding/floating-point.md | 2 +- notes/set/functions.md | 2 +- notes/set/graphs.md | 2 +- notes/set/index.md | 8 + notes/set/natural-numbers.md | 66 +++ notes/x86-64/images/arg-build-area.png | Bin 0 -> 24487 bytes notes/x86-64/images/local-variables.png | Bin 0 -> 24986 bytes notes/x86-64/images/saved-registers.png | Bin 0 -> 24656 bytes notes/x86-64/images/stack-frame.png | Bin 0 -> 26608 bytes notes/x86-64/procedures.md | 317 +++++++++++- notes/x86-64/registers.md | 471 +----------------- 17 files changed, 451 insertions(+), 482 deletions(-) create mode 100644 notes/_journal/2024-10-30.md create mode 100644 notes/_journal/2024-10/2024-10-28.md create mode 100644 notes/_journal/2024-10/2024-10-29.md create mode 100644 notes/x86-64/images/arg-build-area.png create mode 100644 notes/x86-64/images/local-variables.png create mode 100644 notes/x86-64/images/saved-registers.png create mode 100644 notes/x86-64/images/stack-frame.png diff --git a/notes/.obsidian/plugins/obsidian-to-anki-plugin/data.json b/notes/.obsidian/plugins/obsidian-to-anki-plugin/data.json index 2bf6845..ec679b4 100644 --- a/notes/.obsidian/plugins/obsidian-to-anki-plugin/data.json +++ b/notes/.obsidian/plugins/obsidian-to-anki-plugin/data.json @@ -215,7 +215,11 @@ "b-tree-initial.png", "b-tree-inserted-b.png", "b-tree-inserted-q.png", - "dfs.gif" + "dfs.gif", + "saved-registers.png", + "local-variables.png", + "arg-build-area.png", + "stack-frame.png" ], "File Hashes": { "algorithms/index.md": "3ac071354e55242919cc574eb43de6f8", @@ -315,7 +319,7 @@ "combinatorics/additive-principle.md": "d036ac511e382d5c1caca437341a5915", "_journal/2024-02-19.md": "30d16c5373deb9cb128d2e7934ae256a", "_journal/2024-02/2024-02-18.md": "67e36dbbb2cac699d4533b5a2eaeb629", - "combinatorics/permutations.md": "d8f81c9e4bf903913aa40bff4851ee71", + "combinatorics/permutations.md": "794822b96aeeadcb31e763f52ffb7b6e", "combinatorics/combinations.md": "396fc32255710eaf33213efaafdc43d4", "_journal/2024-02-20.md": "b85ba0eeeb16e30a602ccefabcc9763e", "_journal/2024-02/2024-02-19.md": "df1a9ab7ab89244021b3003c84640c78", @@ -391,11 +395,11 @@ "_journal/2024-03/2024-03-15.md": "e54b2513beac5f46313b4c37622adf39", "_journal/2024-03-17.md": "72e99c7630085aee2c7f340a06b5ada7", "_journal/2024-03/2024-03-16.md": "ab7629c24ebe70838072cf6acec47cb0", - "encoding/floating-point.md": "90c36f4b93312e28e5cfec3e2a8231f4", + "encoding/floating-point.md": "3331bce1aaf94e0cf5d21d62af386d04", "_journal/2024-03-18.md": "8479f07f63136a4e16c9cd07dbf2f27f", "_journal/2024-03/2024-03-17.md": "23f9672f5c93a6de52099b1b86834e8b", "set/directed-graph.md": "b4b8ad1be634a0a808af125fe8577a53", - "set/index.md": "14daeda39c344ea1d4b8c8eac9fb99b0", + "set/index.md": "29f5f295765101fe11d821faa908b027", "set/graphs.md": "a56f867f51e69cb7438bbdf6215fca36", "_journal/2024-03-19.md": "a0807691819725bf44c0262405e97cbb", "_journal/2024-03/2024-03-18.md": "2c711c50247a9880f7ed0d33b16e1101", @@ -522,7 +526,7 @@ "set/axioms.md": "063955bf19c703e9ad23be2aee4f1ab7", "_journal/2024-05-14.md": "f6ece1d6c178d57875786f87345343c5", "_journal/2024-05/2024-05-13.md": "d549dd75fb42b4280d4914781edb0113", - "x86-64/registers.md": "639225864ca4ab67b8cd82d742662fe1", + "x86-64/registers.md": "89a6a1f731c643b6b72ff6a93e895a10", "_journal/2024-05-15.md": "4e6a7e6df32e93f0d8a56bc76613d908", "_journal/2024-05/2024-05-14.md": "f6ece1d6c178d57875786f87345343c5", "_journal/2024-05-16.md": "580c7ec61ec56be92fa8d6affcf0a5f6", @@ -607,7 +611,7 @@ "_journal/2024-06/2024-06-12.md": "f82dfa74d0def8c3179d3d076f94558e", "_journal/2024-06-14.md": "5d12bc272238ac985a1d35d3d63ea307", "_journal/2024-06/2024-06-13.md": "e2722a00585d94794a089e8035e05728", - "set/functions.md": "fce911b8610d0d00e39ef7fb8489f240", + "set/functions.md": "7c2522a117917e6f96d2c701deee084d", "_journal/2024-06-15.md": "92cb8dc5c98e10832fb70c0e3ab3cec4", "_journal/2024-06/2024-06-14.md": "5d12bc272238ac985a1d35d3d63ea307", "lambda-calculus/beta-reduction.md": "0935987f2bac0e6298735f2b26fd5885", @@ -784,7 +788,7 @@ "_journal/2024-08/2024-08-21.md": "1637b8ec8475cf3eb4f41d1d86cbf5df", "_journal/2024-08/2024-08-20.md": "e8bec308d1b29e411c6799ace7ef6571", "_journal/2024-08-23.md": "3b2feab2cc927e267263cb1e9c173d50", - "set/natural-numbers.md": "3d7dfbf80e38dccccf48f2def485aa80", + "set/natural-numbers.md": "0fb40d1d2f7a0f9976afbacdff1c734b", "_journal/2024-08-24.md": "563fad24740e44734a87d7c3ec46cec4", "_journal/2024-08/2024-08-23.md": "7b5a40e83d8f07ff54cd9708017d029c", "_journal/2024-08/2024-08-22.md": "050235d5dc772b542773743b57ce3afe", @@ -875,7 +879,7 @@ "_journal/2024-10/2024-10-06.md": "65a8e538144f59ee9e7296110cc9aa14", "_journal/2024-10-09.md": "66acb6c8abbf0c860966223f3299c2bc", "_journal/2024-10/2024-10-08.md": "2f737d8198b12bf635808964c4887ae1", - "x86-64/procedures.md": "49d733982a9f9ebf2b1bbe419175afca", + "x86-64/procedures.md": "f3241c5d499467d9332d2bb950a97c3d", "_journal/2024-10-10.md": "29e4be2c164c63f8b7aab56bddee3dd6", "_journal/2024-10/2024-10-09.md": "b718c6f4cfe3069fcc0faf07ec414f73", "_journal/2024-10-15.md": "6e696a8d16ba257ed89e8564b771d290", @@ -897,7 +901,14 @@ "_journal/2024-10-23.md": "51b2ca6edf23b6a64fd7d3638a0b54cb", "_journal/2024-10/2024-10-22.md": "5ff4eb7eba58e77c4fb65b7162a485e6", "_journal/2024-10-24.md": "33ad9c1d21222b4002fb3760f88800a8", - "_journal/2024-10/2024-10-23.md": "919e5b7773f496f89bb9f1b45a99da7b" + "_journal/2024-10/2024-10-23.md": "919e5b7773f496f89bb9f1b45a99da7b", + "_journal/2024-10-28.md": "242d982565f5f41b084d0ae1737ed923", + "_journal/2024-10/2024-10-27.md": "cba851f3ca4482b776b339b792c4c901", + "_journal/2024-10/2024-10-26.md": "e69e361f941c181828c87368b18d1a1c", + "_journal/2024-10/2024-10-25.md": "0597575213a2bb0e15052efa9404dd1b", + "_journal/2024-10/2024-10-24.md": "4493c339209fdd910866d126b8ebe3c6", + "_journal/2024-10-29.md": "19444fb3b9bef82b200c77a6acc33637", + "_journal/2024-10/2024-10-28.md": "95bcec30eda031bf6410ff51a61b0ee3" }, "fields_dict": { "Basic": [ diff --git a/notes/_journal/2024-10-30.md b/notes/_journal/2024-10-30.md new file mode 100644 index 0000000..e26a4f0 --- /dev/null +++ b/notes/_journal/2024-10-30.md @@ -0,0 +1,9 @@ +--- +title: "2024-10-30" +--- + +- [x] Anki Flashcards +- [x] KoL +- [ ] OGS +- [ ] Sheet Music (10 min.) +- [ ] Korean (Read 1 Story) \ No newline at end of file diff --git a/notes/_journal/2024-10/2024-10-27.md b/notes/_journal/2024-10/2024-10-27.md index 3090949..5078f07 100644 --- a/notes/_journal/2024-10/2024-10-27.md +++ b/notes/_journal/2024-10/2024-10-27.md @@ -6,4 +6,6 @@ title: 2024-10-27 - [ ] KoL - [x] OGS - [ ] Sheet Music (10 min.) -- [ ] Korean (Read 1 Story) \ No newline at end of file +- [ ] Korean (Read 1 Story) + +* Finished reading "The Silent Patient" by Alex Michaelides. \ No newline at end of file diff --git a/notes/_journal/2024-10/2024-10-28.md b/notes/_journal/2024-10/2024-10-28.md new file mode 100644 index 0000000..b71fdce --- /dev/null +++ b/notes/_journal/2024-10/2024-10-28.md @@ -0,0 +1,12 @@ +--- +title: "2024-10-28" +--- + +- [x] Anki Flashcards +- [x] KoL +- [x] OGS +- [ ] Sheet Music (10 min.) +- [ ] Korean (Read 1 Story) + +* Notes on [[natural-numbers#Ordering|ordering]] of $\omega$. +* More notes on x86 procedure calls. \ No newline at end of file diff --git a/notes/_journal/2024-10/2024-10-29.md b/notes/_journal/2024-10/2024-10-29.md new file mode 100644 index 0000000..00f6d09 --- /dev/null +++ b/notes/_journal/2024-10/2024-10-29.md @@ -0,0 +1,9 @@ +--- +title: "2024-10-29" +--- + +- [x] Anki Flashcards +- [x] KoL +- [ ] OGS +- [ ] Sheet Music (10 min.) +- [ ] Korean (Read 1 Story) \ No newline at end of file diff --git a/notes/combinatorics/permutations.md b/notes/combinatorics/permutations.md index 01ad3c9..952b144 100644 --- a/notes/combinatorics/permutations.md +++ b/notes/combinatorics/permutations.md @@ -271,7 +271,7 @@ END%% %%ANKI Basic What is the next lexicographic ordering of `[ 4 3 2 1 ]`? -Back: N/A +Back: N/A. Reference: [https://leetcode.com/problems/next-permutation/description/](https://leetcode.com/problems/next-permutation/description/) END%% diff --git a/notes/encoding/floating-point.md b/notes/encoding/floating-point.md index bd97674..06c1651 100644 --- a/notes/encoding/floating-point.md +++ b/notes/encoding/floating-point.md @@ -1318,7 +1318,7 @@ END%% %%ANKI Basic Let $f$ be a special floating-point value. What is its additive inverse? -Back: N/A +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%% diff --git a/notes/set/functions.md b/notes/set/functions.md index 961fe8a..bd54914 100644 --- a/notes/set/functions.md +++ b/notes/set/functions.md @@ -1904,7 +1904,7 @@ END%% %%ANKI Basic Let $C_*$ be the closure of $A$ under $f$ defined in terms of function $h$. What is $h$'s codomain? -Back: Assume $f$ maps $B$ into $B$, Then $h$'s codomain is $B$. +Back: Assume $A \subseteq B$ and $f \colon B \rightarrow B$. Then $h$'s codomain is $B$. Reference: Herbert B. Enderton, *Elements of Set Theory* (New York: Academic Press, 1977). END%% diff --git a/notes/set/graphs.md b/notes/set/graphs.md index 3f972de..261c5b7 100644 --- a/notes/set/graphs.md +++ b/notes/set/graphs.md @@ -928,7 +928,7 @@ END%% %%ANKI Basic What is a trivial cycle of (say) graph $G$? -Back: A cycle of length $0$. +Back: A cycle of length $0$, i.e. a single vertex. Reference: Oscar Levin, *Discrete Mathematics: An Open Introduction*, 3rd ed., n.d., [https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf](https://discrete.openmathbooks.org/pdfs/dmoi3-tablet.pdf). END%% diff --git a/notes/set/index.md b/notes/set/index.md index 64e2fef..b8ca6c0 100644 --- a/notes/set/index.md +++ b/notes/set/index.md @@ -1061,6 +1061,14 @@ Reference: Herbert B. Enderton, *Elements of Set Theory* (New York: Academic Pre END%% +%%ANKI +Basic +Let $A, B$ be sets. How is $A \subset B$ defined in FOL? +Back: $A \subset B \Leftrightarrow A \subseteq B \land A \neq B$. +Reference: Herbert B. Enderton, *Elements of Set Theory* (New York: Academic Press, 1977). + +END%% + ## Axiom of Choice This axiom assumes the existence of some choice function capable of selecting some element from a nonempty set. Note this axiom is controversial because it is non-constructive: there is no procedure we can follow to decide which element was chosen. diff --git a/notes/set/natural-numbers.md b/notes/set/natural-numbers.md index 47c80d0..a5656ea 100644 --- a/notes/set/natural-numbers.md +++ b/notes/set/natural-numbers.md @@ -1305,6 +1305,72 @@ Reference: Herbert B. Enderton, *Elements of Set Theory* (New York: Academic Pre END%% +## Ordering + +For natural numbers $m$ and $n$, define $m$ to be **less than $n$** if and only if $m \in n$. It follows $m \in n \Leftrightarrow m^+ \in n^+$. + +%%ANKI +Basic +Let $m, n \in \omega$. How does Enderton prefer denoting $m$ is less than $n$? +Back: As $m \in n$. +Reference: Herbert B. Enderton, *Elements of Set Theory* (New York: Academic Press, 1977). + +END%% + +%%ANKI +Basic +Let $m, n \in \omega$. What dual meaning does Enderton give $m \in n$? +Back: Set membership and ordering. +Reference: Herbert B. Enderton, *Elements of Set Theory* (New York: Academic Press, 1977). + +END%% + +%%ANKI +Basic +Let $m, n \in \omega$. How does Enderton prefer denoting $m$ is less than or equal to $n$? +Back: As $m \underline\in n$. +Reference: Herbert B. Enderton, *Elements of Set Theory* (New York: Academic Press, 1977). + +END%% + +%%ANKI +Basic +Let $m, n \in \omega$. How is $m \underline\in n$ defined? +Back: As $m \in n \lor m = n$. +Reference: Herbert B. Enderton, *Elements of Set Theory* (New York: Academic Press, 1977). + +END%% + +%%ANKI +Basic +Let $m, n \in \omega$. How is $m = n \lor m \in n$ more compactly denoted? +Back: As $m \underline\in n$. +Reference: Herbert B. Enderton, *Elements of Set Theory* (New York: Academic Press, 1977). + +END%% + +%%ANKI +Cloze +Let $m, n \in \omega$. $m$ {$\in$} $n^+ \Leftrightarrow m$ {$\underline\in$} $n$. +Reference: Herbert B. Enderton, *Elements of Set Theory* (New York: Academic Press, 1977). + +END%% + +%%ANKI +Cloze +Let $m, n \in \omega$. $m$ {$\in$} $n \Leftrightarrow m^+$ {$\in$} $n^+$. +Reference: Herbert B. Enderton, *Elements of Set Theory* (New York: Academic Press, 1977). + +END%% + +%%ANKI +Basic +What does the trichotomy law for $\omega$ state? +Back: For any $m, n \in \omega$ exactly one of $m \in n$, $m = n$, or $n \in m$ holds. +Reference: Herbert B. Enderton, *Elements of Set Theory* (New York: Academic Press, 1977). + +END%% + ## Bibliography * Herbert B. Enderton, *Elements of Set Theory* (New York: Academic Press, 1977). diff --git a/notes/x86-64/images/arg-build-area.png b/notes/x86-64/images/arg-build-area.png new file mode 100644 index 0000000000000000000000000000000000000000..f63bfc6a0fd68e7388a1faa0a094e77c1c9d0887 GIT binary patch literal 24487 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 literal 0 HcmV?d00001 diff --git a/notes/x86-64/images/saved-registers.png b/notes/x86-64/images/saved-registers.png new file mode 100644 index 0000000000000000000000000000000000000000..1239994abd6c47c0e47814519f52e24dad0d7ad2 GIT binary patch literal 24656 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 literal 0 HcmV?d00001 diff --git a/notes/x86-64/procedures.md b/notes/x86-64/procedures.md index 3bc3af0..5162f4d 100644 --- a/notes/x86-64/procedures.md +++ b/notes/x86-64/procedures.md @@ -98,7 +98,43 @@ Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Program END%% -## Control Transfer +%%ANKI +Basic +`Q` is about to call another procedure. What is the highlighted portion of its stack frame for? +![[saved-registers.png]] +Back: Callee-saved registers. +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 +`Q` is about to call another procedure. What is the highlighted portion of its stack frame for? +![[local-variables.png]] +Back: Local variables. +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 +`Q` is about to call another procedure. What is the highlighted portion of its stack frame for? +![[arg-build-area.png]] +Back: Additional integral arguments. +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 must still be added to the stack before `Q` passes control to another procedure? +![[stack-frame.png]] +Back: The return address. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +## CALL and RET Like [[conditions#JMP|JMP]] instructions, `call` allows specifying a direct or indirect operand. `call` pushes the address of the instruction following it onto the stack and updates the PC to the operand. `ret` reverts these steps. @@ -189,11 +225,218 @@ Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Program END%% -## Data Transfer +## Local Storage -The 6 registers used for passing integral arguments are highlighted [[registers#Integral Arguments|here]]. If more than 6 integral arguments are specified to a procedure, the surplus are placed onto the stack in the caller's frame. +### On the Stack -The 7th argument is placed closer to the top of the stack (i.e. with lower address) than subsequent arguments. +x86-64 employs 6 registers for passing integral (i.e. integer and pointer) arguments between caller and callee. + +| Bits | Arg 1 | Arg2 | Arg3 | Arg4 | Arg5 | Arg6 | +| ---- | ------ | ------ | ------ | ------ | ------ | ------ | +| 64 | `%rdi` | `%rsi` | `%rdx` | `%rcx` | `%r8` | `%r9` | +| 32 | `%edi` | `%esi` | `%edx` | `%ecx` | `%r8d` | `%r9d` | +| 16 | `%di` | `%si` | `%dx` | `%cx` | `%r8w` | `%r9w` | +| 8 | `%dil` | `%sil` | `%dl` | `%cl` | `%r8b` | `%r9b` | + +If more than 6 integral arguments are specified to a procedure, the surplus are placed onto the stack in the caller's frame. The 7th argument is placed closer to the top of the stack (i.e. with lower address) than subsequent arguments. + +%%ANKI +Basic +How many registers are available for passing integral arguments between procedures? +Back: `6` +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 +By convention, register {`%rdi`} is used for {the first integral argument}. +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 +Which register should the first integral argument of a procedure be placed in? +Back: `%rdi` +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 +By convention, register {`%rsi`} is used for {the second integral argument}. +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 +Which register should the second integral argument of a procedure be placed in? +Back: `%rsi` +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 +From smallest to largest, list the four "second integral argument" registers. +Back: `%sil`, `%si`, `%esi`, and `%rsi`. +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 +{1:`%rdi`} is to the {2:first} integral argument whereas {2:`%rsi`} is to the {1:second} integral argument. +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 +By convention, register {`%rdx`} is used for {the third integral argument}. +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 +Which register should the third integral argument of a procedure be placed in? +Back: `%rdx` +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 +By convention, register {`%rcx`} is used for {the fourth integral argument}. +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 +Which register should the fourth integral argument of a procedure be placed in? +Back: `%rcx` +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 +Which register should `Q` use to access value `1`? +```c +void P() { + Q(1, 2, 3, 4, 5, 6); +} +``` +Back: `%rdi` +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 +Which register should `Q` use to access value `2`? +```c +void P() { + Q(1, 2, 3, 4, 5, 6); +} +``` +Back: `%rsi` +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 +Which register should `Q` use to access value `3`? +```c +void P() { + Q(1, 2, 3, 4, 5, 6); +} +``` +Back: `%rdx` +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 +Which register should `Q` use to access value `4`? +```c +void P() { + Q(1, 2, 3, 4, 5, 6); +} +``` +Back: `%rcx` +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 +Let $S$ denote `%rsp` before pushing parameter `int a` onto the stack. What is `%rsp` now? +Back: $S - 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 +Let $S$ denote `%rsp` before pushing parameter `short a` onto the stack. What is `%rsp` now? +Back: $S - 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 +Let $S$ denote `%rsp` before pushing parameter `bool a` onto the stack. What is `%rsp` now? +Back: $S - 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 +After calling `Q`, how much space do local parameters occupy in `P`'s stack frame? +```c +void P() { + Q(1, 2, 3, 4, 5, 6); +} +``` +Back: 0 bytes. +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 +After calling `Q`, how much space do local parameters occupy in `P`'s stack frame? +```c +void P() { + Q(1, 2, 3, 4, 5, 6, 7, 8); +} +``` +Back: 16 bytes. +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 +After calling `Q`, how much space do local parameters occupy in `P`'s stack frame? +```c +void P() { + Q(1, 2, 3, 4, 5, 6, true, 8); +} +``` +Back: 16 bytes. +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 @@ -382,6 +625,72 @@ Tags: c17 END%% +%%ANKI +Basic +Which registers are designated for argument passing? +Back: `%rdi`, `%rsi`, `%rdx`, `%rcx`, and `%r8-%r9`. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +### In Registers + +x86-64 employs 6 registers as callee-saved registers. If procedure `P` calls procedure `Q`, `Q` *must* preserve the values of these registers. That is, if `Q` were to modify these registers, `Q` is also responsible for restoring these values before returning back to `P`. + +| Bits | | | | | | | +| ---- | ------ | ------ | ------- | ------- | ------- | ------- | +| 64 | `%rbx` | `%rbp` | `%r12` | `%r13` | `%r14` | `%r15` | +| 32 | `%ebx` | `%ebp` | `%r12d` | `%r13d` | `%r14d` | `%r15d` | +| 16 | `%bx` | `%bp` | `%r12w` | `%r13w` | `%r14w` | `%r15w` | +| 8 | `%bl` | `%bpl` | `%r12b` | `%r13b` | `%r14b` | `%15b` | + +%%ANKI +Basic +Which registers are designated as callee-saved? +Back: `%rbx`, `%rbp`, and `%r12-%r15`. +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 +How many registers are designated as callee-saved? +Back: 6. +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 a callee-saved register? +Back: A register whose value must be preserved by a callee on return. +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 +By convention, register `%rbp` is used for {callee-saved values}. +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 +Suppose `P` calls `Q`. Callee-saved registers are in which stack frame? +Back: `Q`'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 +Suppose `P` calls `Q` with 8 integral arguments. Which of `P`'s callee-saved values or arguments to `Q` are nearer the stack's top? +Back: `P`'s arguments to `Q`. +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. diff --git a/notes/x86-64/registers.md b/notes/x86-64/registers.md index b75f316..7fd84d2 100644 --- a/notes/x86-64/registers.md +++ b/notes/x86-64/registers.md @@ -51,6 +51,13 @@ Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Program END%% +%%ANKI +Cloze +The x86 8-bit registers all end with suffix {1:`l`} or {1:`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 Instructions that generate 1-byte quantities do what to the remaining bytes of a register? @@ -300,470 +307,6 @@ Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Program END%% -## Integral Arguments - -x86-64 employs 6 registers for passing integral (i.e. integer and pointer) arguments between caller and callee. - -| Bits | Arg 1 | Arg2 | Arg3 | Arg4 | Arg5 | Arg6 | -| ---- | ------ | ------ | ------ | ------ | ------ | ------ | -| 64 | `%rdi` | `%rsi` | `%rdx` | `%rcx` | `%r8` | `%r9` | -| 32 | `%edi` | `%esi` | `%edx` | `%ecx` | `%r8d` | `%r9d` | -| 16 | `%di` | `%si` | `%dx` | `%cx` | `%r8w` | `%r9w` | -| 8 | `%dil` | `%sil` | `%dl` | `%cl` | `%r8b` | `%r9b` | - -%%ANKI -Basic -How many registers are available for passing integral arguments between procedures? -Back: `6` -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 -How many bytes make up the `%rdi` register? -Back: $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 -How many bytes make up the `%di` register? -Back: $2$ -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 -How many bytes make up the `%dil` register? -Back: $1$ -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 -How many bytes make up the `%edi` register? -Back: $4$ -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 -By convention, register {`%rdi`} is used for {the first integral argument}. -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 -{1:Words} are to {2:`%di`} whereas {2:double words} are to {1:`%edi`}. -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 -{1:Bytes} are to {2:`%dil`} whereas {2:quad words} are to {1:`%rdi`}. -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 -How do you access the low-order 2 bytes of `%rdi`? -Back: By using `%di`. -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 -How do you access the low-order 4 bytes of `%rdi`? -Back: By using `%edi`. -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 -How do you access the low-order byte of `%rdi`? -Back: By using `%dil`. -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 -Which register should the first integral argument of a procedure be placed in? -Back: `%rdi` -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 -From smallest to largest, list the four "first integral argument" registers. -Back: `%dil`, `%di`, `%edi`, and `%rdi`. -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 -How many bytes make up the `%rsi` register? -Back: $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 -How many bytes make up the `%si` register? -Back: $2$ -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 -How many bytes make up the `%sil` register? -Back: $1$ -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 -How many bytes make up the `%esi` register? -Back: $4$ -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 -By convention, register {`%rsi`} is used for {the second integral argument}. -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 -{1:Words} are to {2:`%si`} whereas {2:double words} are to {1:`%esi`}. -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 -{1:Bytes} are to {2:`%sil`} whereas {2:quad words} are to {1:`%rsi`}. -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 -How do you access the low-order 2 bytes of `%rsi`? -Back: By using `%si`. -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 -How do you access the low-order 4 bytes of `%rsi`? -Back: By using `%esi`. -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 -How do you access the low-order byte of `%rsi`? -Back: By using `%sil`. -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 -Which register should the second integral argument of a procedure be placed in? -Back: `%rsi` -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 -From smallest to largest, list the four "second integral argument" registers. -Back: `%sil`, `%si`, `%esi`, and `%rsi`. -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 -{1:`%rdi`} is to the {2:first} integral argument whereas {2:`%rsi`} is to the {1:second} integral argument. -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 -How many bytes make up the `%rdx` register? -Back: $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 -How many bytes make up the `%dx` register? -Back: $2$ -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 -How many bytes make up the `%dl` register? -Back: $1$ -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 -How many bytes make up the `%edx` register? -Back: $4$ -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 -By convention, register {`%rdx`} is used for {the third integral argument}. -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 -{1:Words} are to {2:`%dx`} whereas {2:double words} are to {1:`%edx`}. -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 -{1:Bytes} are to {2:`%dl`} whereas {2:quad words} are to {1:`%rdx`}. -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 -How do you access the low-order 2 bytes of `%rdx`? -Back: By using `%dx`. -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 -How do you access the low-order 4 bytes of `%rdx`? -Back: By using `%edx`. -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 -How do you access the low-order byte of `%rdx`? -Back: By using `%dl`. -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 -Which register should the third integral argument of a procedure be placed in? -Back: `%rdx` -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 -From smallest to largest, list the four "third integral argument" registers. -Back: `%dl`, `%dx`, `%edx`, and `%rdx`. -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 -{1:`%dil`} is to the {2:first} integral argument whereas {2:`%dl`} is to the {1:third} integral argument. -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 -How many bytes make up the `%rcx` register? -Back: $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 -How many bytes make up the `%ecx` register? -Back: $4$ -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 -How many bytes make up the `%cx` register? -Back: $2$ -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 -How many bytes make up the `%cl` register? -Back: $1$ -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 -By convention, register {`%rcx`} is used for {the fourth integral argument}. -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 -{1:Words} are to {2:`%cx`} whereas {2:quad words} are to {1:`%rcx`}. -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 -{1:Bytes} are to {2:`%cl`} whereas {2:double words} are to {1:`%ecx`}. -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 -How do you access the low-order 2 bytes of `%rcx`? -Back: By using `%cx`. -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 -How do you access the low-order 4 bytes of `%rcx`? -Back: By using `%ecx`. -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 -How do you access the low-order byte of `%rcx`? -Back: By using `%cl`. -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 -Which register should the fourth integral argument of a procedure be placed in? -Back: `%rcx` -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 -From smallest to largest, list the four "fourth integral argument" registers. -Back: `%cl`, `%cx`, `%ecx`, and `%rcx`. -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 -{1:`%di`} is to the {2:first} integral argument whereas {2:`%cx`} is to the {1:fourth} integral argument. -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 -Which register should `Q` use to access value `1`? -```c -void P() { - Q(1, 2, 3, 4, 5, 6); -} -``` -Back: `%rdi` -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 -Which register should `Q` use to access value `2`? -```c -void P() { - Q(1, 2, 3, 4, 5, 6); -} -``` -Back: `%rci` -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 -Which register should `Q` use to access value `3`? -```c -void P() { - Q(1, 2, 3, 4, 5, 6); -} -``` -Back: `%rdx` -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 -Which register should `Q` use to access value `4`? -```c -void P() { - Q(1, 2, 3, 4, 5, 6); -} -``` -Back: `%rcx` -Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. - -END%% - ## Condition Codes The CPU also maintains a set of single-bit **condition code** registers describing attributes of the most recent arithmetic or logical operation.