15 KiB
title | TARGET DECK | FILE TAGS | tags | |
---|---|---|---|---|
Memory Access | Obsidian::STEM | 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%%