notebook/notes/x86-64/instructions/access.md

15 KiB

title TARGET DECK FILE TAGS tags
Memory Access Obsidian::STEM x86-64
x86-64

MOV

The MOV instruction class has four primary variants: movb, movw, movl, and movq. There also exist zero extension and sign extension variations in the forms of MOVS and MOVZ.

Instruction Operands Effect Description
mov[bwlq] S, D D <- S Move byte/word/double word/quad word
movabsq I, R R <- I Move quad word
movzb[wlq] S, R R <- ZE(S) Move zero-extended byte
movzw[lq] S, R R <- ZE(S) Move zero-extended word
movsb[wlq] S, R R <- SE(S) Move sign-extended byte
movsw[lq] S, R R <- SE(S) Move sign-extended word
movslq S, R R <- SE(S) Move sign-extended double word
cltq %rax <- SE(%eax) Sign-extend %eax to %rax

Notice there is no movzlq instruction. movl covers this functionality since, by convention, instructions moving double words into a 64-bit register automatically zeroes out the upper 32 bits.

%%ANKI Basic What four variants does MOV instructions take on in x86-64? Back: movb, movw, movl, movq 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 does a movb instruction operate on? Back: One. 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 does a movw instruction operate on? Back: Two. 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 does a movl instruction operate on? Back: Four. 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 does a movq instruction operate on? Back: Eight. 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 combination of source and destination types is prohibited in MOV instructions? Back: A source and destination memory 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 Basic What is the result of %rax after instruction movl $0x4050,%eax? Back: Upper 32-bits is 0 and lower 32-bits is 0x4050. 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 result of %rax after instruction movq $0x4050,%rax? Back: The 64-bit value is 0x4050. 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 result of %rax after instruction movw $0x4050,%ax? Back: The upper 48 bits are unchanged and the lower 16 bits are 0x4050. 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 result of %rax after instruction movb $0x4050,%al? Back: The upper 56 bits are unchanged and the lower 8 bits are 0x50. 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 result of %rax after instruction movw $0x4050,%al? Back: N/A. Invalid operand for 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 caveat is applied to the source operand of movq? Back: Immediates are 32-bit two's-complement numbers sign extended to 64-bits. 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 mov instruction is needed when working with 64-bit immediate sources? Back: movabsq 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 purpose does movabsq solve that movq does not? Back: movabsq can have an arbitrary 64-bit immediate source. 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 result of %rax after the following instructions?

movabsq $0x0011223344556677, %rax
movb    $-1, %al

Back: 0x00112233445566FF 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 result of %rax after the following instructions?

movabsq $0x0011223344556677, %rax
movw    $-1, %ax

Back: 0x001122334455FFFF 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 result of %rax after the following instructions?

movabsq $0x0011223344556677, %rax
movl    $-1, %eax

Back: 0x00000000FFFFFFFF 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 result of %rax after the following instructions?

movabsq $0x0011223344556677, %rax
movq    $-1, %rax

Back: 0xFFFFFFFFFFFFFFFF 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 MOVZ instruction class? Back: MOV instructions that zero extend the source to fit into the destination. 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 MOVS instruction class? Back: MOV instructions that sign extend the source to fit into the destination. 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 movzbw instruction do? Back: Moves a zero-extended byte to a word. 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 movslq instruction do? Back: Moves a sign-extended double word to a quad word. 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 movslb instruction do? Back: N/A. This instruction does not exist. 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 combinatorial argument explains the number of MOVS instructions? Back: There exists an instruction for each smaller declaration to larger declaration. 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 MOVZ instruction is "missing"? Back: movzlq 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 does there not exist a movzlq instruction? Back: Because movl already zeroes out the upper bits of a destination 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 result of %rax after the following instructions?

movabsq $0x0011223344556677, %rax
movb    $0xAA, %dl
movb    %dl,%al

Back: 0x00112233445566AA 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 result of %rax after the following instructions?

movabsq $0x0011223344556677, %rax
movb    $0xAA, %dl
movsbq  %dl,%rax

Back: 0xFFFFFFFFFFFFFFAA 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 result of %rax after the following instructions?

movabsq $0x0011223344556677, %rax
movb    $0xAA, %dl
movzbq  %dl,%rax

Back: 0x00000000000000AA 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 {pointer} in C is a {memory address} in x86. 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 Dereferencing a pointer in C equates to what two operations in x86? Back: Copying the pointer into a register and then using the register in a memory reference. 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%%

PUSH and POP

Instruction Operands Effect Description
pushq S R[%rsp] <- R[%rsp] - 8
M[R[%rsp]] <- S
Push quad word
popq D D <- M[R[%rsp]]
R[%rsp] <- R[%rsp] + 8
Pop quad word

In x86 processors, the stack grows downward, with the "top" of the stack corresponding to lower addresses.

%%ANKI Basic In what direction do x86-64 stacks grow? Back: Downward. 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 stack grows such that the top element has the {lowest} address of all stack elements. 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 instruction is used to push elements onto the stack? Back: pushq 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 instruction is used to pop elements off of the stack? Back: 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 How is pushq %rbp equivalently written using a pair of instructions? Back:

subq $8,%rsp
movq %rbp,(%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 popq %rax equivalently written using a pair of instructions? Back:

movq (%rsp),%rax
addq $8,%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 Cloze {1:pushq} is to {2:subq} as {2:popq} is to {1:addq}. 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 If %rsp has value 0x108, what value does it have after a pushq instruction? Back: 0x100 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 If %rsp has value 0x108, what value does it have after a popq instruction? Back: 0x110 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 contains a pointer to the top of the stack? Back: %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 What is the %rsp register typically used for? Back: 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%%