--- title: Registers TARGET DECK: Obsidian::STEM FILE TAGS: x86-64 tags: - x86-64 --- ## Overview 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%% %%ANKI Basic How many bytes make up the `%rax` 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 `%ax` 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 `%al` 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 `%eax` 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 {1:Double words} are to {2:`%eax`} whereas {2:quad words} are to {1:`%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 Cloze {1:Words} are to {2:`%ax`} whereas {2:bytes} are to {1:`%al`}. 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 `%rax`? Back: By using `%ax`. 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 `%rax`? Back: By using `%eax`. 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 `%rax`? Back: By using `%al`. 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 {`%rax`} is used for {return 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 How many bytes make up the `%rsp` 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 `%sp` 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 `%spl` 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 `%esp` 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 {1:Words} are to {2:`%sp`} whereas {2:double words} are to {1:`%esp`}. 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:`%spl`} whereas {2:quad words} are to {1:`%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 do you access the low-order 2 bytes of `%rsp`? Back: By using `%sp`. 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 `%rsp`? Back: By using `%esp`. 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 `%rsp`? Back: By using `%spl`. 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 {`%rsp`} is used for {the stack pointer}. 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 Which register should I use for an 2 byte return value? Back: `%ax` 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 Which register should I use for a 1 byte stack pointer? Back: `%spl` 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 Which register should I use for a 4 byte stack pointer? Back: `%esp` 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 Which register should I use for an 8 byte return value? 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 From smallest to largest, list the four "return value" registers. Back: `%al`, `%ax`, `%eax`, and `$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 From smallest to largest, list the four "stack pointer" registers. Back: `%spl`, `%sp`, `%esp`, and `$rsp`. 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. Code | Name | Description -----| ------------- | ----------- `CF` | Carry flag | The most recent operation generated a carry out of the most significant bit. `ZF` | Zero flag | The most recent operation yielded zero. `SF` | Sign flag | The most recent operation yielded a negative value. `OF` | Overflow flag | The most recent operation caused a two's-complement overflow. %%ANKI Basic Condition code registers describe attributes of what kind of operations? Back: Arithmetic and logical. 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 {Condition code} registers describe attributes of the most recent arithmetic/logical operation. 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 large is a condition code register? Back: A single bit. 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 `CF` and `SF` are examples of what? Back: Condition codes. 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 Condition code `CF` is an acronym for what? Back: **C**arry **f**lag. 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 Condition code `ZF` is an acronym for what? Back: **Z**ero **f**lag. 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 When is the `ZF` condition code set? Back: When the most recent operation yielded a zero. 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 Condition code `SF` is an acronym for what? Back: **S**ign **f**lag. 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 When is the `SF` condition code set? Back: When the most recent operation yielded a negative 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 Condition code `OF` is an acronym for what? Back: **O**verflow **f**lag. 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 condition code is checked for unsigned overflow? Back: `CF` 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 When is the `CF` condition code set? Back: When the most recent operation generated a carry out of the most significant bit. 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 condition code is checked for two's-complement positive overflow? Back: `OF` 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 When is the `OF` condition code set? Back: When the most recent operation caused a two's-complement overflow. 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 condition code is checked for two's-complement negative overflow? Back: `OF` 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 Evaluate `int t = a + b` for `int` `a` and `b`. When is `CF` set? Back: When `(unsigned) t < (unsigned) a`. Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. Tags: c17 END%% %%ANKI Basic Evaluate `int t = a + b` for `int` `a` and `b`. When is `ZF` set? Back: When `t == 0`. Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. Tags: c17 END%% %%ANKI Basic Evaluate `int t = a + b` for `int` `a` and `b`. When is `SF` set? Back: When `t < 0`. Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. Tags: c17 END%% %%ANKI Basic Evaluate `int t = a + b` for `int` `a` and `b`. When is `OF` set? Back: When `(t <= 0 && a > 0 && b > 0) || (t >= 0 && a < 0 && b < 0)`. Reference: Bryant, Randal E., and David O'Hallaron. *Computer Systems: A Programmer's Perspective*. Third edition, Global edition. Always Learning. Pearson, 2016. Tags: c17 END%% %%ANKI Basic Which "arithmetic" instruction does not alter condition codes? Back: `leaq` 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 *Why* doesn't `leaq` alter condition codes? Back: It is intended for address computation. 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.