Instruction suffixes
b byte |
w word (2 bytes) |
l long (4 bytes) |
q quad (8 bytes) |
Data movement
movx |
Src, Dest |
Dest = Src |
movsxy |
Src, Dest |
Dest = Src , sign-extend |
movzxy |
Src, Dest |
Dest = Src , zero-extend |
El "X o XY en el codigo assembler indica que tipo de dato o datos se estan usando
ej: movq se esta moviendo un dato tipo quad
Flags and jumps
cmp a, b |
b-a, set flags |
ZF |
Zero flag |
SF |
Sign flag |
CF |
Carry flag |
OF |
Overflow flag |
|
jmp label |
jump to label (unconditional) |
je label |
jump equal ZF=1 |
jne label |
jump not equal ZF=0 |
js label |
jump negative SF=1 |
jns label |
jump not negative SF=0 |
jg label |
jump > (signed) ZF=0 and SF=OF |
jge label |
jump >= (signed) SF=OF |
jl label |
jump < (signed) SF!=OF |
jle label |
jump <= (signed) ZF=1 or SF!=OF |
Operaciones
add src, dst |
dst += src |
sub src, dst |
dst -= src |
imul src, dst |
dst *= src |
neg dst |
dst = -dst |
sal count, dst |
dst <<= count |
sar count, dst |
dst >>= count (arith shift) |
shr count, dst |
dst >>= count (logical shift) |
and src, dst |
dst &= src |
or src, dst |
dst |= src |
xor src, dst |
dst ^= src |
not dst |
dst = ~dst |
|
|
Registers
%rax |
Return value |
%rbx |
Callee saved |
%rcx |
4th argument |
%rdx |
3rd argument |
%rsi |
2nd argument |
%rdi |
1st argument |
%rbp |
Callee saved |
%rsp |
Stack pointer |
%r8 |
5th argument |
%r9 |
6th argument |
%r10 |
Scratch register |
%r11 |
Scratch register |
%r12 |
Callee saved |
%r13 |
Callee saved |
%r14 |
Callee saved |
%r15 |
Callee saved |
Call y stack
Push |
add to top of stack |
Pop |
dst remove top from stack |
Call |
Push fn |
Push |
Pop fn and return |
OP codes
ADD AL, imm8 |
04 ib |
ADD AX, imm16 |
05 iw |
ADD EAX, imm32 |
05 id |
ADD RAX, imm32 |
REX.W + 05 id |
|
|
Estructure
Bloque de registros de propósito general: Los registros de uso general se utilizan para almacenar datos temporales dentro del microprocesador. Hay 8 registros de propósito general en el microprocesador 8086.
Registros de segmento de bloque:La segmentación es el proceso en el que la memoria principal de la computadora se divide lógicamente en diferentes segmentos y cada segmento tiene su propia dirección base. Básicamente, se utiliza para mejorar la velocidad de ejecución del sistema informático, de modo que el procesador pueda obtener y ejecutar los datos de la memoria de manera fácil y rápida.
Comandos de cola: Cola para habilitar el retraso de la ejecución de comandos, ya sea en orden de prioridad, primero en entrar, primero en salir, o en cualquier orden que sirva al propósito actual.
El sistema de control: Es el encargado de administrar el comportamiento de otro sistema. |
|