CS 208 w20 reference sheet
Assembly Instructions
mov a, b 
Copy from a to b . 
movs a, b 
Copy from a to be with sign extension. Needs two width specifiers. 
movz a, b 
Copy from a to be with zero extension. Needs two width specifiers. 
lea a, b 
Compute address and store in b . Note: the scaling parameter of memory operands can only be 1, 2, 4, or 8. 
push src 
Push src onto the stack and decrement stack pointer. 
pop dst 
Pop from the stack into dst and increment stack pointer. 
call <func> 
Push return address onto stack and jump to a procedure. 
ret 
Pop return address and jump there. 
add a, b 
Add a to b and store in b (and set condition codes). 
sub a, b 
Subtract a from b (compute b  a ) and store in b (and set condition codes). 
imul a, b 
Multiply a and b and store in b (and set condition codes). 
neg a 
Compute a according to 2's complement and store in a (and set condition codes). 
and a, b 
Bitwise AND of a and b, store in b (and set condition codes). 
or a, b 
Bitwise OR of a and b, store in b (and set condition codes). 
xor a, b 
Bitwise XOR of a and b, store in b (and set condition codes). 
sar a, b 
Shift value of b right (arithmetic) by a bits, store in b (and set condition codes). 
shr a, b 
Shift value of b right (logical) by a bits, store in b (and set condition codes). 
shl a, b 
Shift value of b left by a bits, store in b (and set condition codes). 
cmp a, b 
Compare b with a (compute b  a ), set condition codes based on result (result is not stored). 
test a, b 
Bitwise AND of a and b , set condition codes based on result (result is not stored). 
jmp <label> 
Unconditional jump to address. 
jCOND <label> 
Considtion jump based on condition codes . 
setCOND a 
Set byte a to 0 or 1 based on condition codes. 
Conditionals
Instruction  (op) s, d 
test a, b 
cmp a, b 


je 
sete 
"Equal"  d (op) s == 0 
b & a == 0 
b == a 
jne 
setne 
"Not equal"  d (op) s != 0 
b & a != 0 
b != a 
js 
sets 
"Sign" (negative)  d (op) s < 0 
b & a < 0 
b  a < 0 
jns 
setns 
(nonnegative)  d (op) s >= 0 
b & a >= 0 
b  a >= 0 
jg 
setg 
"Greater"  d (op) s > 0 
b & a > 0 
b > a 
jge 
setge 
"Greater or equal"  d (op) s >= 0 
b & a >= 0 
b >= a 
jl 
setl 
"Less"  d (op) s < 0 
b & a < 0 
b < a 
jle 
setle 
"Less or equal"  d (op) s <= 0 
b & a <= 0 
b <= a 
ja 
seta 
"Above" (unsigned >)  d (op) s > 0U 
b & a > 0U 
b  a > 0U 
jb 
setb 
"Below" (unsigned <)  d (op) s < 0U 
b & a < 0U 
b  a < 0U 
Registers and Sizes
Name  Convention  Lowest 4 bytes  Lowest 2 bytes  Lowest byte 

%rax 
Return value  %eax 
%ax 
%al 
%rbx 
%ebx 
%bx 
%bl 

%rcx 
Argument #4  %ecx 
%cx 
%cl 
%rdx 
Argument #3  %edx 
%dx 
%dl 
%rsi 
Argument #2  %esi 
%si 
%sil 
%rdi 
Argument #1  %edi 
%di 
%dil 
%rsp 
Stack pointer  %esp 
%sp 
%spl 
%rbp 
%ebp 
%bp 
%bpl 

%r8 
Argument #5  %r8d 
%r8w 
%r8b 
%r9 
Argument #6  %r9d 
%r9w 
%r9b 
%r10 
%r10d 
%r10w 
%r10b 

%r11 
%r11d 
%r11w 
%r11b 

%r12 
%r12d 
%r12w 
%r12b 

%r13 
%r13d 
%r13w 
%r13b 

%r14 
%r14d 
%r14w 
%r14b 

%r15 
%r15d 
%r15w 
%r15b 
C type  x8664 suffix  Size in bytes 

char 
b 
1 
short 
w 
2 
int 
l 
4 
long 
q 
8 