General Registers
EAX |
Accumulator |
EBX |
Base |
ECX |
Counter |
EDX |
Data |
Pointer Registers
ESP |
Stack Pointer, “top” of the current stack frame (lower memory) |
EBP |
Base Pointer, “bottom” of the current stack frame (higher memory) |
EIP |
Instruction Pointer, pointer to the next instruction to be executed by the CPU |
Index Registers
ESI |
Source Index, it is used as source index for string operations |
EDI |
Destination Index, it is used as destination index for string operations |
Flags Registers (EFLAGS)
ZF |
Zero Flag, set when result of an operation equals zero |
CF |
Carry Flag, set when the result of an operation is too large/small |
SF |
Sign Flag, set when the result of an operation is negative |
Stack
Stack is a LIFO-Storage (Last In First Out)
|
|
Moving Data
mov ebx, eax |
Move the value in EAX to EBX |
mov eax, 0xDEADBEEF |
Move 0xDEADBEEF into EAX |
mov edx, DWORD PTR [0x41424344] |
Move the 4-byte value at address 0x41424344 into EDX |
mov ecx, DWORD PTR [edx] |
Move the 4-byte value at the address in EDX, into ECX |
mov eax, DWORD PTR [ecx+esi*8] |
Move the value at the address ECX+ESI*8 into EAX |
mov bx, 0C3EEh |
Sign bit of BL is now 1: BH == 1100 0011, BL == 1110 1110 |
movsx ebx, bx |
Load signed 16-bit value into 32-bit register and sign-extend |
movzx dx, bl |
Load unsigned 8-bit value into 16-bit register and zero-extend |
lea edi, [esi+0Bh] |
Add 11 to ESI and store the result in EDI |
eax is the value stored in eax
[eax] is the value pointed to by eax
Data Types
BYTE |
1 Byte (8 bits) |
WORD |
2 Bytes (16 bits) |
DOUBLE WORD |
4 Bytes (32 bits) |
QUAD WORD |
8 Bytes (64 bits) |
|
|
Frequent Instructions
mov |
MOV is the instruction used for assignment. MOV can move data between a register and memory. |
movsx |
move with Sign Extension. The data is moved from a smaller register into a bigger register, and the sign is preserved. |
movzx |
move with Zero Extension. The data is moved from a smaller register into a bigger register, and the sign is ignored. |
lea |
Similar to MOV, except that math can be done on the original value before it is used. The [ and ] characters always surround the second parameter, but in this case they do not indicate dereferencing. |
push |
Decrements the stack pointer by the size of the operand, then saves the operand to the new address. Equivalent to sub esp, 4 | mov DWORD PTR [esp], ebx
|
pop |
Sets the operand to the value on the stack, then increments the stack pointer by the size of the operand. Equivalent to mov ebx, DWORD PTR [esp] | add esp, 4
|
cmp |
Compares two operands and sets or unsets flags in the flags register based on the result. |
test |
Bitwise AND. |
rep, repnz, repz |
Repeat while Equal/Non Zero/Zero. |
|