From a5b3b4f1af448b2093bd8879f0eb17c8d54be236 Mon Sep 17 00:00:00 2001 From: Joshua Potter Date: Thu, 10 Oct 2024 05:25:27 -0600 Subject: [PATCH] x86-64 procedures. --- .../plugins/obsidian-to-anki-plugin/data.json | 24 +- notes/_journal/2024-10-10.md | 11 + notes/_journal/{ => 2024-10}/2024-10-07.md | 2 +- notes/_journal/2024-10/2024-10-08.md | 11 + notes/_journal/2024-10/2024-10-09.md | 11 + notes/c17/strings.md | 2 +- notes/c17/types/derived.md | 14 - notes/hashing/index.md | 16 - notes/set/natural-numbers.md | 2 +- notes/set/relations.md | 8 - notes/x86-64/images/x86-64-stack.png | Bin 0 -> 32420 bytes notes/x86-64/instructions/access.md | 49 +++ notes/x86-64/procedures.md | 406 ++++++++++++++++++ notes/x86-64/registers.md | 15 + 14 files changed, 522 insertions(+), 49 deletions(-) create mode 100644 notes/_journal/2024-10-10.md rename notes/_journal/{ => 2024-10}/2024-10-07.md (61%) create mode 100644 notes/_journal/2024-10/2024-10-08.md create mode 100644 notes/_journal/2024-10/2024-10-09.md create mode 100644 notes/x86-64/images/x86-64-stack.png create mode 100644 notes/x86-64/procedures.md diff --git a/notes/.obsidian/plugins/obsidian-to-anki-plugin/data.json b/notes/.obsidian/plugins/obsidian-to-anki-plugin/data.json index d62403e..1927571 100644 --- a/notes/.obsidian/plugins/obsidian-to-anki-plugin/data.json +++ b/notes/.obsidian/plugins/obsidian-to-anki-plugin/data.json @@ -326,7 +326,7 @@ "_journal/2024-02/2024-02-21.md": "f423137ae550eb958378750d1f5e98c7", "_journal/2024-02-23.md": "219ce9ad15a8733edd476c97628b71fd", "_journal/2024-02/2024-02-22.md": "312e55d57868026f6e80f7989a889c2b", - "c17/strings.md": "84c9b2b98d58bad9f057596a78901b13", + "c17/strings.md": "e909daa71ad93bcb38edbe30bc0516ac", "c17/index.md": "02722edf46dd45f732996eaa1980944f", "c17/escape-sequences.md": "a8b99070336878b4e8c11e9e4525a500", "c17/declarations.md": "2d7877915bf8a2772d1e4de636ba52a5", @@ -521,7 +521,7 @@ "set/axioms.md": "063955bf19c703e9ad23be2aee4f1ab7", "_journal/2024-05-14.md": "f6ece1d6c178d57875786f87345343c5", "_journal/2024-05/2024-05-13.md": "d549dd75fb42b4280d4914781edb0113", - "x86-64/registers.md": "5f1c601930681df39a0b24b55fa4c593", + "x86-64/registers.md": "35f4e2f7e1a988f98dc0f89f29731f11", "_journal/2024-05-15.md": "4e6a7e6df32e93f0d8a56bc76613d908", "_journal/2024-05/2024-05-14.md": "f6ece1d6c178d57875786f87345343c5", "_journal/2024-05-16.md": "580c7ec61ec56be92fa8d6affcf0a5f6", @@ -532,7 +532,7 @@ "_journal/2024-05/2024-05-16.md": "9fdfadc3f9ea6a4418fd0e7066d6b10c", "_journal/2024-05-18.md": "c0b58b28f84b31cea91404f43b0ee40c", "hashing/direct-addressing.md": "f75cc22e74ae974fe4f568a2ee9f951f", - "hashing/index.md": "f1dbb16667b056f2ea00db8db805c54f", + "hashing/index.md": "6b65a79afe7eac5aa960023f738b8f35", "set/classes.md": "6776b4dc415021e0ef60b323b5c2d436", "_journal/2024-05-19.md": "fddd90fae08fab9bd83b0ef5d362c93a", "_journal/2024-05/2024-05-18.md": "c0b58b28f84b31cea91404f43b0ee40c", @@ -580,7 +580,7 @@ "_journal/2024-06/2024-06-04.md": "52b28035b9c91c9b14cef1154c1a0fa1", "_journal/2024-06-06.md": "3f9109925dea304e7172df39922cc95a", "_journal/2024-06/2024-06-05.md": "b06a0fa567bd81e3b593f7e1838f9de1", - "set/relations.md": "18d3f9a6bec2a23a576910750fd2158d", + "set/relations.md": "2759e68e8dd19f513fca2da8d2506433", "_journal/2024-06-07.md": "795be41cc3c9c0f27361696d237604a2", "_journal/2024-06/2024-06-06.md": "db3407dcc86fa759b061246ec9fbd381", "_journal/2024-06-08.md": "b20d39dab30b4e12559a831ab8d2f9b8", @@ -590,7 +590,7 @@ "x86-64/instructions/condition-codes.md": "9c05ed99f5c96162e25f0ec4db55c656", "x86-64/instructions/logical.md": "49d40018f1fcb4ed1595d9175bbaab57", "x86-64/instructions/arithmetic.md": "df57fdc8d260d0812464b08565ef4c51", - "x86-64/instructions/access.md": "3efe399b89b947ab280dc1e045675390", + "x86-64/instructions/access.md": "e54dfbaf4906886d550baa5736f4731f", "x86-64/instructions/index.md": "72c19067e938ab39ea51d25d6ac2bad9", "_journal/2024-06-09.md": "935b3ddf65c51e680ac5c000c7e380af", "_journal/2024-06/2024-06-08.md": "9e1ebc8882a395b96ca765ad5c982d68", @@ -783,7 +783,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": "72b6ffb986e47609bf8c41d6711d4372", + "set/natural-numbers.md": "fdb3bb9e0fd74f74496e9b03f05d26a2", "_journal/2024-08-24.md": "563fad24740e44734a87d7c3ec46cec4", "_journal/2024-08/2024-08-23.md": "7b5a40e83d8f07ff54cd9708017d029c", "_journal/2024-08/2024-08-22.md": "050235d5dc772b542773743b57ce3afe", @@ -793,7 +793,7 @@ "c17/basic-types.md": "7c6653bf6dc24c2f2aa72fc95c4f7875", "c17/types/simple.md": "502c7a742e8516057f820c75cc7a096e", "c17/types/enumerated.md": "e1f70a30677c776b7b44ac3e0ff4e76d", - "c17/types/derived.md": "4bc5b8d8a8d24a9048f2a0e1c96af8ab", + "c17/types/derived.md": "cd77112313bd0f9cf99b0f224a364179", "c17/types/basic.md": "5064e21e683c0218890058882e06b6f3", "c17/types/index.md": "14b651bcfc8b2d62ffd200a74a9a2a6b", "_journal/2024-08-25.md": "e73a8edbd027d0f1a39289540eb512f2", @@ -868,7 +868,15 @@ "_journal/2024-10-06.md": "851efa5156caadd79c898538a153c0dd", "_journal/2024-10/2024-10-05.md": "88b4c0155583394ece5f16c01e051019", "_journal/2024-10/2024-10-04.md": "6836a9c6eff8b5723ef474f4f4c298ed", - "_journal/2024-10/2024-10-03.md": "3f8c9a05e129ac698bad77873f114fe0" + "_journal/2024-10/2024-10-03.md": "3f8c9a05e129ac698bad77873f114fe0", + "_journal/2024-10-08.md": "213a5f689c450edbbedd0587200d5fd0", + "_journal/2024-10/2024-10-07.md": "a4e7bcbcbf0a02dd810a316023182c51", + "_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": "c36268b99c0681bfca245e0538a302e0", + "_journal/2024-10-10.md": "29e4be2c164c63f8b7aab56bddee3dd6", + "_journal/2024-10/2024-10-09.md": "b718c6f4cfe3069fcc0faf07ec414f73" }, "fields_dict": { "Basic": [ diff --git a/notes/_journal/2024-10-10.md b/notes/_journal/2024-10-10.md new file mode 100644 index 0000000..39986dd --- /dev/null +++ b/notes/_journal/2024-10-10.md @@ -0,0 +1,11 @@ +--- +title: "2024-10-10" +--- + +- [x] Anki Flashcards +- [x] KoL +- [x] OGS +- [ ] Sheet Music (10 min.) +- [ ] Korean (Read 1 Story) + +* Continuing notes on x86 procedures. Control and data transfer. \ No newline at end of file diff --git a/notes/_journal/2024-10-07.md b/notes/_journal/2024-10/2024-10-07.md similarity index 61% rename from notes/_journal/2024-10-07.md rename to notes/_journal/2024-10/2024-10-07.md index 6f3aad2..60b6288 100644 --- a/notes/_journal/2024-10-07.md +++ b/notes/_journal/2024-10/2024-10-07.md @@ -2,7 +2,7 @@ title: "2024-10-07" --- -- [ ] Anki Flashcards +- [x] Anki Flashcards - [x] KoL - [x] OGS - [ ] Sheet Music (10 min.) diff --git a/notes/_journal/2024-10/2024-10-08.md b/notes/_journal/2024-10/2024-10-08.md new file mode 100644 index 0000000..bca247b --- /dev/null +++ b/notes/_journal/2024-10/2024-10-08.md @@ -0,0 +1,11 @@ +--- +title: "2024-10-08" +--- + +- [x] Anki Flashcards +- [x] KoL +- [ ] OGS +- [ ] Sheet Music (10 min.) +- [ ] Korean (Read 1 Story) + +* Read through CS:APP section on procedure calls. Still need to make notes. \ No newline at end of file diff --git a/notes/_journal/2024-10/2024-10-09.md b/notes/_journal/2024-10/2024-10-09.md new file mode 100644 index 0000000..d2f9552 --- /dev/null +++ b/notes/_journal/2024-10/2024-10-09.md @@ -0,0 +1,11 @@ +--- +title: "2024-10-09" +--- + +- [x] Anki Flashcards +- [x] KoL +- [x] OGS +- [ ] Sheet Music (10 min.) +- [ ] Korean (Read 1 Story) + +* Start adding notes on [[procedures]]. \ No newline at end of file diff --git a/notes/c17/strings.md b/notes/c17/strings.md index fe2c707..83ba1b6 100644 --- a/notes/c17/strings.md +++ b/notes/c17/strings.md @@ -44,7 +44,7 @@ END%% %%ANKI Basic -What kind of array has literals? +What kind of array can be expressed as a literal? Back: Strings. Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). diff --git a/notes/c17/types/derived.md b/notes/c17/types/derived.md index 8c75f44..1281af9 100644 --- a/notes/c17/types/derived.md +++ b/notes/c17/types/derived.md @@ -333,20 +333,6 @@ Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co END%% -%%ANKI -Basic -Suppose I pass the following array to a function. What does the parameter look like? -```c -double a[M][N][P]; -``` -Back: -```c -double a[][N][P]; -``` -Reference: Jens Gustedt, _Modern C_ (Shelter Island, NY: Manning Publications Co, 2020). - -END%% - %%ANKI Basic Why shouldn't you use the `sizeof` operator on array parameters to functions? diff --git a/notes/hashing/index.md b/notes/hashing/index.md index 502d991..b5a6c91 100644 --- a/notes/hashing/index.md +++ b/notes/hashing/index.md @@ -26,22 +26,6 @@ Reference: Thomas H. Cormen et al., Introduction to Algorithms, Fourth edition ( END%% -%%ANKI -Basic -Given a hash table with hash function $h$, the element at slot $k$ has what key? -Back: A key $k'$ such that $h(k') = k$. -Reference: Thomas H. Cormen et al., Introduction to Algorithms, Fourth edition (Cambridge, Massachusett: The MIT Press, 2022). - -END%% - -%%ANKI -Basic -Given a hash table with hash function $h$, an element with key $k$ is placed in what slot? -Back: $h(k)$ -Reference: Thomas H. Cormen et al., Introduction to Algorithms, Fourth edition (Cambridge, Massachusett: The MIT Press, 2022). - -END%% - %%ANKI Basic Given a hash table `T[0:m-1]`, what is the domain of a hash function? diff --git a/notes/set/natural-numbers.md b/notes/set/natural-numbers.md index cd53e86..0ff5339 100644 --- a/notes/set/natural-numbers.md +++ b/notes/set/natural-numbers.md @@ -730,7 +730,7 @@ END%% %%ANKI Basic Suppose $A \cap B = A$. What relation immediately follows? -Back: $B = A$ +Back: $A \subseteq B$ Reference: Herbert B. Enderton, *Elements of Set Theory* (New York: Academic Press, 1977). END%% diff --git a/notes/set/relations.md b/notes/set/relations.md index 266a17b..0f1fd89 100644 --- a/notes/set/relations.md +++ b/notes/set/relations.md @@ -703,14 +703,6 @@ Reference: Herbert B. Enderton, *Elements of Set Theory* (New York: Academic Pre END%% -%%ANKI -Basic -Given $R = \{\langle a, a \rangle, \langle b, c \rangle\}$, is $R$ irreflexive on $a$? -Back: N/A. We should ask if $R$ is irreflexive on set $\{a\}$. -Reference: Herbert B. Enderton, *Elements of Set Theory* (New York: Academic Press, 1977). - -END%% - %%ANKI Basic *Why* isn't $R = \{\langle a, a \rangle, \langle b, c \rangle\}$ irreflexive on $\{a\}$? diff --git a/notes/x86-64/images/x86-64-stack.png b/notes/x86-64/images/x86-64-stack.png new file mode 100644 index 0000000000000000000000000000000000000000..7b8c789c5097f7fc10b4c63b7000a3bddd1ab978 GIT binary patch literal 32420 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%0A(WMq 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 B6IB2J literal 0 HcmV?d00001 diff --git a/notes/x86-64/instructions/access.md b/notes/x86-64/instructions/access.md index d9bf724..59300ea 100644 --- a/notes/x86-64/instructions/access.md +++ b/notes/x86-64/instructions/access.md @@ -294,6 +294,55 @@ Tags: c17 END%% +%%ANKI +Basic +Which register does `cltq` target? +Back: `%rax` +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 the `cltq` instruction do? +Back: Sign extends `%eax` to `%rax`. +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 equivalent instruction to the following does x86-64 provide? +```asm +movslq %eax, %rax +``` +Back: `cltq` +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 equivalent instruction to the following does x86-64 provide? +```asm +movzlq %eax, %rax +``` +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%% + +%%ANKI +Basic +How can the following instruction be rewritten using a MOV? +```asm +cltq +``` +Back: `movslq %eax, %rax` +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + ## PUSH and POP | Instruction | Operands | Effect | Description | diff --git a/notes/x86-64/procedures.md b/notes/x86-64/procedures.md new file mode 100644 index 0000000..a688f63 --- /dev/null +++ b/notes/x86-64/procedures.md @@ -0,0 +1,406 @@ +--- +title: Procedures +TARGET DECK: Obsidian::STEM +FILE TAGS: x86-64 +tags: + - x86-64 +--- + +## Overview + +The x86-64 stack grows towards lower addresses. When a procedure is invoked, more spack on the top of the stack is allocated for that procedure to make use of. This portion of the stack is called a **frame**. The general shape of the stack looks as follows: + +![[x86-64-stack.png]] + +Note parts of this diagram are omitted when possible. For instance, a stack frame may not exist at all if all arguments to a **leaf procedure** can be passed through registers. A leaf procedure is a function that does not call another function. + +%%ANKII +Basic +What ADT is used internally in procedure-calling mechanisms? +Back: A stack. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. +END%% + +%%ANKII +Cloze +The x86-64 stack grows towards {lower} 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 is a frame w.r.t. the x86-64 stack? +Back: A region of the stack dedicated to a particular function call. +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 instructions are used to store and retrieve from the x86-64 stack? +Back: `pushq` and `popq`. +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 the "stack pointer" refer to w.r.t. the x86-64 stack? +Back: Register `%rsp`. +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 is the stack pointer manipulated to allocate space on the x86-64 stack? +Back: By decrementing `%rsp` by an appropriate amount. +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 is the stack pointer manipulated to deallocate space on the x86-64 stack? +Back: By incrementing `%rsp` by an appropriate amount. +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 procedure `P` calls `Q`. What data sits at the end of `P`'s frame? +Back: A 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%% + +%%ANKI +Cloze +A {leaf} procedure is a function that {does not call another function}. +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 procedure `P` calls `Q`. The return address belongs to who's frame? +Back: `P` +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 procedure `P` calls `Q`. Why is the return address considered to be in `P`'s frame? +Back: It is state relevant to `P`. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +## Control Transfer + +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. + +| Instruction | Operands | Description | +| ----------- | ----------- | ---------------- | +| `call` | Label | Procedure call | +| `call` | \**Operand* | Procedure call | +| `ret` | | Return from call | + +%%ANKI +Cloze +The {`call`} instruction is the counterpart to the {`ret`} instruction. +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 two things does the `call` instruction do? +Back: It pushes the return address on the stack and updates the PC. +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 two things does the `ret` instruction do? +Back: It pops the return address off the stack and updates the PC. +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 +The operand forms of `call` mirror what other instruction class? +Back: `JMP` +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 +A `call` instruction pushes what address onto the stack? +Back: That of the instruction following the `call` instruction. +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 return address is pushed onto the stack after `call` is run? +```x86 +1: ... +2: callq .L1 +3: ... +``` +Back: `3` +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 address is the PC updated to after `call` is run? +```x86 +1: ... +2: callq .L1 +3: ... +``` +Back: That corresponding to label `.L1`. +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(s) does a `call` instruction update? +Back: `%rsp` and `%rip`. +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(s) does a `ret` instruction update? +Back: `%rsp` and `%rip`. +Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. + +END%% + +## Data Transfer + +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%% + +## 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 e101514..7311c99 100644 --- a/notes/x86-64/registers.md +++ b/notes/x86-64/registers.md @@ -285,6 +285,21 @@ Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Program END%% +%%ANKI +Cloze +By convention, register {`%rip`} is used for {the program counter}. +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 is used to track the instruction to execute next? +Back: `%rip` +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.