Registers
64 bit | 32 bit | 16 bit | 8 bit | |
---|---|---|---|---|
A (accumulator) | RAX | EAX | AX | AL |
B (base, addressing) | RBX | EBX | BX | BL |
C (counter, iterations) | RCX | ECX | CX | CL |
D (data) | RDX | EDX | DX | DL |
RDI | EDI | DI | DIL | |
RSI | ESI | SI | SIL | |
Numbered (n=8.15) | Rn | RnD | RnW | RnB |
Stack pointer | RSP | ESP | SP | SPL |
Frame pointer | RBP | EBP | BP | BPL |
When I made my first steps coding in the programming language Intel Assembly x86 I was looking for a compact list containing all instructions. Because I couldn't find any I created my own cheat sheet: includes most instructions (transfer, arithmetic, logic, jumps.) includes a diagram of the registers (EAX, EDX, ECX, EBX) and flags. NASM Intel x86 Assembly Language Cheat Sheet Instruction Effect Examples Copying Data mov dest,src Copy src to dest mov eax,10 mov eax,2000 Arithmetic add dest,src dest = dest + src add esi,10 sub dest,src dest = dest – src sub eax, ebx mul reg edx:eax = eax. reg mul esi div reg edx = edx:eax mod reg eax = edx:eax reg.
As well as XMM0 . XMM15 for 128 bit floating point numbers.
Calling C
Put function arguments (first to last) in the following registers (64 bitrepresentations): RDI, RSI, RDX, RCX, R8, R9, then push to stack (in reverse,has to be cleaned up by the caller!) XMM0 - XMM7 for floats
Teraterm log file name format. Return values are stored in RAX (int
) or XMM0 (float
)
RBP, RBX, R12, R13, R14, R15 will not be changed by the called function, allothers may be Virtual dj 9 full crack.
Align stack pointer (RSP) to 16 byte, calling pushes 8 bytes!
Keep in mind that strings (in C) are 0-terminated
Like in a normal C program, the label that is (de facto) called first ismain
, with the args argc
(argcount) in RDI, and the char** argv
in RSI(the commandline arguments as in C's main function).
Data
Definition size | Definition instruction |
---|---|
8 bit | db |
16 bit | dw |
32 bit | dd |
64 bit | ddq /do |
float | dd |
double | dq |
extended precision | dt |
Conditionals
cmp op1, op2
-> mimics sub op1, op2
but only changes the zero and carry flagfor comparing.
Prefixes:
j~ x
-> jump to x if ~cmov~ x, y
-> conditional mov x, y if ~setc~ x
-> set x to 1 if ~, x is 8 bit reg
Many suffixes, including:
a
(above, >)ae
(above or equal, >=)b
(below, <)be
(below or equal, <=)e
(equal, =)ne
(not equal, !=)
Program structure
global <entry>
-> exposes entry pointextern <function>
-> declares a function in another linked .o file (e.g. Cfunction, other asm file)section <sectiontype>
-> sets section, usually:.text
-> program code.data
-> data
The program entry point of a standalone program is the label _start
. Whencompiled with gcc, C provides _start
, which inits and then jumps to main
,which should then be implemented by the program.
Syscalls
- put syscall number in EAX (e.g. on Linux: 60 for exit, 1 for write to stdout)
- put arguments in the registers (see above) like when calling a C function
- execute the
syscall
instruction
Assemble
- Assemble:
nasm -felf64 -o <object> <filename>
- Link with ld:
ld -o <output> <object>
- Link with gcc:
gcc -o <output> <object>
Asm Cheat Sheet Oracle
Sources
Oracle Asm Command Cheat Sheet
- Forked from: mpdrescher
- Main: NASM Tutorial
- Registers: Assembly registers
- Conditionals: Jumps and loops (de)