Está en la página 1de 102

PROGRAMACIN EN LENGUAJE

ENSAMBLADOR IA-32
Intel Architecture Software Developers Vol 1 y 2
Manual de NASM ( http://nasm.sourceforge.net)
Carter P. Lenguaje ensamblador para PC (http://www.paulcarter.com)
septiembre de 2013 ENSAMBLADOR IA-32 2
Evolucin histrica de los
microprocesadores Intel 80x86
septiembre de 2013 ENSAMBLADOR IA-32 3
Pentium IV: Entorno bsico
Memoria
Registros propsito general
Registros de segmento
Registros FPU
Registros MMX
Registros XMM
Registro EFLAGS
septiembre de 2013 ENSAMBLADOR IA-32 4
Memoria
septiembre de 2013 ENSAMBLADOR IA-32 5
Registros de propsito general
septiembre de 2013 ENSAMBLADOR IA-32 6
Registros de segmento
septiembre de 2013 ENSAMBLADOR IA-32 7
EFLAGS
septiembre de 2013 ENSAMBLADOR IA-32 8
REGISTRO DE SEALIZADORES
Bit 0 CF Acarreo (1 indica acarreo)
Bit 2 PF Paridad (1 indica paridad impar)
Bit 4 AF Acarreo auxiliar
Bit 6 ZF Cero (1 indica resultado nulo)
Bit 7 SF Signo ( 1 indica resultado negativo)
Bit 9 IF Habilitacin de interrupciones
Bit 10 DF Sentido de recorrido de las cadenas
Bit 11 OF Overflow
septiembre de 2013 ENSAMBLADOR IA-32 9
Modos de direccionamiento
Inmediato mov EAX,0x01234567
Registro mov EAX,EBX
Directo mov EAX,[Tabla]
Indirecto mov EAX,[EBX+desp]
Relativo mov EAX,[ESI+desp]
septiembre de 2013 ENSAMBLADOR IA-32 10
Modos de direccionamiento II
Offset = Base + ndice* factor de
escala + Desplazamiento
mov EAX,[EBX+ESI*4+desp]
septiembre de 2013 ENSAMBLADOR IA-32 11
NASM: Estructura general de un
programa
segment .data
datos estticos
segment .bss
variables
segment .text
global _start
_start:
instrucciones
septiembre de 2013 ENSAMBLADOR IA-32 12
NASM: directivas de datos I
L1 db 25
L2 db Hola,10
L3 dw 25,26
L4 dd 25
L5 dd 25.0
L7 dq 25
L8 dq 25.0
L9 dt 37
septiembre de 2013 ENSAMBLADOR IA-32 13
NASM:directivas de datos II
times n de veces tipo valor
times 100 db 0
septiembre de 2013 ENSAMBLADOR IA-32 14
NASM: directivas de datos III
L1 resb 25
L2 resw 1
L3 resd 1
L4 resq 2
L5 rest 1
septiembre de 2013 ENSAMBLADOR IA-32 15
NASM: Directivas de datos IV
Definicin de constantes : EQU
Etiqueta EQU valor
mensaje db Hola
long equ $-mensaje
septiembre de 2013 ENSAMBLADOR IA-32 16
NASM : Operadores
Lgicos :
&(and)
| (or)
^ (xor)
! (not)
Aritmticos
+,- ,*,/,//
%,%%
Desplazamiento
<< , >>
septiembre de 2013 ENSAMBLADOR IA-32 17
NASM: Tamao de los datos
NASM no recuerda el tamao de los
datos que se hayan definido
mov [var], 5 ERROR
mov dword [var],5
septiembre de 2013 ENSAMBLADOR IA-32 18
NASM: Entrada y salida
Controlado a travs de las llamadas al
kernel Linux
El acceso a los servicios del sistema
se hace a travs de la int 80h
La lista completa de llamadas al
sistema
/usr/src/linux/include/asm/unisted.h
Utiliza los registros generales para
pasar parmetros
septiembre de 2013 ENSAMBLADOR IA-32 19
NASM: Leer de teclado
Mov eax,3
Mov ebx,0
Mov ecx,buffer
Mov edx, 80
Int 80h
septiembre de 2013 ENSAMBLADOR IA-32 20
NASM: Escribir en pantalla
Mov eax,4
Mov ebx,1
Mov ecx, cadena
Mov edx, 50
Int 80h
septiembre de 2013 ENSAMBLADOR IA-32 21
NASM: salida del programa
Mov eax,1
Mov ebx,0
Int 80h
septiembre de 2013 ENSAMBLADOR IA-32 22
Ejemplo de programa
segment .data
mensaje db hola ,10
long equ $-mensaje
segment .text
global _start
_start:
mov eax,4
mov ebx,1
mov ecx, mensaje
mov edx, long
int 80h
mov eax,1
mov ebx,0
int 80h
septiembre de 2013 ENSAMBLADOR IA-32 23
Fases en el desarrollo de un
programa
Edicin
Compilacin
Linkado
Ejecucin
Depuracin
Ejecucin
Edicin
Compilacin
Linkado
septiembre de 2013 ENSAMBLADOR IA-32 24
Compilacin bajo NASM
nasm f elf programa.asm l
programa.txt
Formato del objeto ELF, ELF32, ELF64
Genera un programa objeto
Directivas global y extern
septiembre de 2013 ENSAMBLADOR IA-32 25
Generando el ejecutable
ld o nombre nombre.o
./nombre
septiembre de 2013 ENSAMBLADOR IA-32 26
Corrigiendo errores
Listar el fichero de listado
Volver a editar
Uso de depuradores
septiembre de 2013 ENSAMBLADOR IA-32 27
Depurador ald
ald nombre_ejecutable
run
step
examine n n bytes s tamao datos o
formato salida dir inicio
enter
help
break
quit
septiembre de 2013 ENSAMBLADOR IA-32 28
Instrucciones de movimiento de datos
MOV destino, fuente ;mov EAX,[Tabla]
LEA destino , fuente ;lea EAX,[Tabla]
CMOVcc destino,fuente
septiembre de 2013 ENSAMBLADOR IA-32 29
Instrucciones de movimiento condicional
septiembre de 2013 ENSAMBLADOR IA-32 30
Instrucciones de intercambio
XCHG destino, fuente
BSWAP
XADD
CMPXCHG /CMPXCHG8B
septiembre de 2013 ENSAMBLADOR IA-32 31
Instrucciones de uso de la pila
PUSH fuente
POP destino
PUSHA /POPA
PUSHAD/POPAD
septiembre de 2013 ENSAMBLADOR IA-32 32
Instrucciones de conversin de tipo
CBW
CWD /CWDE
CDQ
MOVSX /MOVZX destino, fuente
septiembre de 2013 ENSAMBLADOR IA-32 33
Instrucciones aritmticas (1)
ADD/ADC destino, fuente
SUB/SBB destino, fuente
MUL/IMUL fuente
DIV/IDIV fuente
septiembre de 2013 ENSAMBLADOR IA-32 34
Instrucciones aritmticas (2)
INC/DEC operando
CMP destino, fuente
NEG operando
septiembre de 2013 ENSAMBLADOR IA-32 35
Instrucciones de ajuste decimal
DAA/DAS
AAA/AAS/AAM/AAD
septiembre de 2013 ENSAMBLADOR IA-32 36
Instrucciones lgicas
AND destino, fuente
OR destino, fuente
XOR destino, fuente
NOT operando
septiembre de 2013 ENSAMBLADOR IA-32 37
Instrucciones de desplazamiento y
rotacin
SAL/SAR/SHL/SHR destino, n bits
SHLD/SHRD destino,fuente , n bits
ROL/ROR/RCL/RCR destino, n bits
septiembre de 2013 ENSAMBLADOR IA-32 38
Instrucciones de bit y byte
BT/BTS/BTR/BTC operando, n bit
BSF/BSR destino,origen
SETcc destino
TEST destino, fuente
septiembre de 2013 ENSAMBLADOR IA-32 39
Instrucciones de transferencia
incondicional
JUMP (short near far) etiqueta
CALL/RET etiqueta
INT/IRET
septiembre de 2013 ENSAMBLADOR IA-32 40
Instrucciones de salto condicional
septiembre de 2013 ENSAMBLADOR IA-32 41
Instrucciones de bucles
LOOP etiqueta
LOOPE/LOOPZ/LOOPNE/LOOPNZ etiq
JECXZ etiqueta
septiembre de 2013 ENSAMBLADOR IA-32 42
Instrucciones sobre cadenas de
caracteres
MOVS/MOVSB/MOVSW/MOVSD
CMPS/CMPSB/CMPSW/CMPSD
LODS/LODSB/LODSW/LODSD
SCAS/SCASB/SCASW/SCASD
STOS/STOSB/STOSW/STOSD
septiembre de 2013 ENSAMBLADOR IA-32 43
Prefijos de repeticin
REP
REPE/REPZ
REPNE/REPNZ
septiembre de 2013 ENSAMBLADOR IA-32 44
Instrucciones de entrada y salida
IN registro, n puerto
OUT n puerto, registro
INS/OUTS
septiembre de 2013 ENSAMBLADOR IA-32 45
Instrucciones de EFLAGS
STC/CLC/CMC
STD/CLD
STI/CLI
LAHF/SAHF
PUSHF/POPF
septiembre de 2013 ENSAMBLADOR IA-32 46
Instrucciones de miscelnea
XLAT/XLATB
CPUID
NOP
septiembre de 2013 ENSAMBLADOR IA-32 47
El entorno de ejecucin FPU-32
Pila de registros
Registro de estado
Registro de control
Registro de tag
Registro puntero al ultimo operando
Registro puntero a la ltima
instruccin
Registro de cdigo de operacin
septiembre de 2013 ENSAMBLADOR IA-32 48
Pila de registros x87 FPU
septiembre de 2013 ENSAMBLADOR IA-32 49
Registro de control x87 FPU
septiembre de 2013 ENSAMBLADOR IA-32 50
Registro de estado x87 FPU
septiembre de 2013 ENSAMBLADOR IA-32 51
Registro de tag x87 FPU
septiembre de 2013 ENSAMBLADOR IA-32 52
Tipos de datos FPU
Enteros de 16,32,64 bits en
complemento a dos
Reales de 32,64,80 bits
Signo
Exponente 8, 11, 15 bits
Mantisa de 23, 52, 64 bits
BCD de 80 bits
septiembre de 2013 ENSAMBLADOR IA-32 53
Instrucciones de transferencia de
datos (1)
FLD origen_real
FST destino_real
FXCH registro x87
FCMOVcc registro x87
septiembre de 2013 ENSAMBLADOR IA-32 54
Instrucciones de transferencia de
datos (2)
FILD entero
FIST entero
FISTP entero
FBLD decimal
FBSTP decimal
septiembre de 2013 ENSAMBLADOR IA-32 55
Instrucciones de carga de
constantes
FLDZ +0.0
FLD1 +1.0
FLDPI (pi)
FLDL2T log
2
10
FLDL2E log
2
e
FLDLG2 log
10
2
FLDLN2 log
e
2
septiembre de 2013 ENSAMBLADOR IA-32 56
Instrucciones aritmticas x87 (1)
FADD/FADDP/FIADD
FSUB/FSUBP/FISUB
FSUBR/FSUBRP/FISUBR
septiembre de 2013 ENSAMBLADOR IA-32 57
Instrucciones aritmticas x87 (2)
FMUL/FMULP/FIMUL
FDIV/FDIVP/FIDIV
FDIVR/FDIVRP/FIDIVR
septiembre de 2013 ENSAMBLADOR IA-32 58
Instrucciones aritmticas x87 (3)
FABS
FCHS
FSQRT
FPREM/FPREM1
FRNDINT
FXTRACT
septiembre de 2013 ENSAMBLADOR IA-32 59
Instrucciones de comparacin x87
FCOM/FCOMP/FCOMPP
septiembre de 2013 ENSAMBLADOR IA-32 60
Instrucciones de comparacin x87
FCOMI/FCOMIP
septiembre de 2013 ENSAMBLADOR IA-32 61
Otras instrucciones de comparacin
x87
FUCOM/FUCOMP
FICOM/FICOMP
FUCOMI/FUCOMIP
septiembre de 2013 ENSAMBLADOR IA-32 62
Instrucciones de clasificacin:
FXAM
septiembre de 2013 ENSAMBLADOR IA-32 63
Otra instruccin de comparacin:
FTST
septiembre de 2013 ENSAMBLADOR IA-32 64
Instrucciones trigonomtricas
FSIN
FCOS
FSINCOS
FPTAN
FPATAN
septiembre de 2013 ENSAMBLADOR IA-32 65
Instrucciones logartmicas,
exponenciales y de escalado
FYL2X : st0 =st1*log
2
(st0)
FYL2XP1 : st0 = st1*log
2
(st0+1.0)
F2XM1 : st0 = 2
st0
-1
FSCALE st0 = st0 * 2
st1
septiembre de 2013 ENSAMBLADOR IA-32 66
Instrucciones de control x87
FINIT/FNINIT : inicializacin
FLDCW/FSTCW : reg control
FSTSW : reg. Estado
FCLEX : bits excepcin
septiembre de 2013 ENSAMBLADOR IA-32 67
Instrucciones carga y
almacenamiento del entorno
FLDENV
FSTENV/FNSTENV
FSAVE/FNSAVE/FRSTOR
septiembre de 2013 ENSAMBLADOR IA-32 68
Otras instrucciones x87
FWAIT/FNWAIT
FNOP
FFREE
FINCSTP/FDECSTP
septiembre de 2013 ENSAMBLADOR IA-32 69
Tecnologa MMX
8 registros MMX de 64 bits
4 nuevos tipos de datos MMX
Instrucciones MMX
Modo de operacin S.I.M.D.
Aplicaciones multimedia
septiembre de 2013 ENSAMBLADOR IA-32 70
Registros MMX
septiembre de 2013 ENSAMBLADOR IA-32 71
Tipos de datos MMX
septiembre de 2013 ENSAMBLADOR IA-32 72
Operaciones S.I.M.D.
Pseudo vectorial
Aritmtica MMX
Wraparound
Saturacin con signo
Saturacin sin signo
septiembre de 2013 ENSAMBLADOR IA-32 73
Instrucciones MMX
Transferencia de datos
Conversin de datos
Aritmticas
Comparacin
Lgicas
Desplazamiento
EMMS
septiembre de 2013 ENSAMBLADOR IA-32 74
Instrucciones de transferencia de
datos
MOVD destino, origen
Memoria
32
registro general
Parte baja de registro MMX
MOVQ destino, origen
Memoria
64
y registro MMX
septiembre de 2013 ENSAMBLADOR IA-32 75
Instrucciones de conversin de
datos
PACKSSDW/PACKUSDW
PACKSSWB/PACKUSWB
PUNPCKLBW/PUNPCKHBW
PUNPCKLDQ/PUNPCKHDQ
PUNPCKLDW/PUNPCKHDW
septiembre de 2013 ENSAMBLADOR IA-32 76
Instrucciones de empaquetamiento
de datos con signo y saturacin (1)
septiembre de 2013 ENSAMBLADOR IA-32 77
Instrucciones de conversin de
datos con saturacin y signo (2)
septiembre de 2013 ENSAMBLADOR IA-32 78
Instrucciones de conversin de
datos (3)
septiembre de 2013 ENSAMBLADOR IA-32 79
Instrucciones de conversin de
datos (4)
septiembre de 2013 ENSAMBLADOR IA-32 80
Instrucciones de conversin de
datos (5)
septiembre de 2013 ENSAMBLADOR IA-32 81
Instrucciones de conversin de
datos (6)
septiembre de 2013 ENSAMBLADOR IA-32 82
Instrucciones aritmticas (1)
PADDB/PADDW/PADDD
PADDSB/PADDSW
PADDUSB/PADDUSW
septiembre de 2013 ENSAMBLADOR IA-32 83
Instrucciones aritmticas (2)
PSUBB/PSUBW/PSUBD
PSUBSB/PSUBSW
PSUBUSB/PSUBUSW
septiembre de 2013 ENSAMBLADOR IA-32 84
Instrucciones aritmticas (3)
PMULLW
PMULHW/PMULHUW
PMADDWD
septiembre de 2013 ENSAMBLADOR IA-32 85
PMULLW
septiembre de 2013 ENSAMBLADOR IA-32 86
PMULHW/PMULHUW
septiembre de 2013 ENSAMBLADOR IA-32 87
PMADDWD
septiembre de 2013 ENSAMBLADOR IA-32 88
Instrucciones de comparacin (1)
septiembre de 2013 ENSAMBLADOR IA-32 89
Instrucciones de comparacin (2)
septiembre de 2013 ENSAMBLADOR IA-32 90
Instrucciones de comparacin (3)
septiembre de 2013 ENSAMBLADOR IA-32 91
Instrucciones lgicas
PAND destino,fuente
PANDN destino, fuente
Destino = destino and ( not fuente)
POR destino, fuente
PXOR destino,fuente
septiembre de 2013 ENSAMBLADOR IA-32 92
Instrucciones de desplazamiento y
rotacin
PSLLW/PSLLD/PSLLQ
PSLRW/PSLRD/PSLRQ
PSRAW/PSRAD
septiembre de 2013 ENSAMBLADOR IA-32 93
Instrucciones MMX
EMMS
septiembre de 2013 ENSAMBLADOR IA-32 94
Recursos del programador
septiembre de 2013 ENSAMBLADOR IA-32 95
STREAMING SIMD EXTENSIONS
(SSE)
8 registros XMM de 128 bits
Registro de control y de estado MXCSR
Tipo de datos real de 32 bits empaquetado
(128 bits total)
Instrucciones sobre reales empaquetados
septiembre de 2013 ENSAMBLADOR IA-32 96
Registro MXCSR
septiembre de 2013 ENSAMBLADOR IA-32 97
Operaciones con reales
empaquetados
septiembre de 2013 ENSAMBLADOR IA-32 98
Operaciones entre un escalar y un
real empaquetado
septiembre de 2013 ENSAMBLADOR IA-32 99
Instrucciones SSE
Transferencia de datos
Aritmticas
Lgicas
De comparacin
De conversin
Desempaquetamiento
septiembre de 2013 ENSAMBLADOR IA-32 100
Instrucciones SSE de transferencia
de datos
MOVAPS xmm
i
, xmm
j
/mem 128
MOVUPS xmm
i
, xmm
j
/mem 128
MOVSS xmm
i
, xmm
j
/mem 32
MOVLPS xmm, mem 64 viceversa
MOVHPS xmm, mem 64 viceversa
MOVLHPS xmm
i
, xmm
j
MOVHLPS xmm
i
, xmm
j
MOVSS r32, xmm
j
septiembre de 2013 ENSAMBLADOR IA-32 101
Instrucciones SSE aritmticas
ADDPS xmmi, xmmj (mem128)
ADDSS xmmi, xmmj (mem32)
SUBPS xmmi, xmmj (mem128)
SUBSS xmmi, xmmj (mem32)
MULPS xmmi, xmmj (mem128)
MULSS xmmi, xmmj (mem32)
DIVPS xmmi, xmmj (mem128)
DIVSS xmmi, xmmj (mem32)
septiembre de 2013 ENSAMBLADOR IA-32 102
Instrucciones SSE Aritmticas (2)
RCPPS xmmi, xmmj (mem128)
RCPPS xmmi, xmmj (mem32)
SQRTPS xmmi, xmmj (mem128)
SQRTSS xmmi, xmmj (mem32)
RSQRTPS xmmi, xmmj (mem128)
RSQRTSS xmmi, xmmj (mem32)
MAXPS xmmi, xmmj (mem128)
MAXSS xmmi, xmmj (mem32)
MINXPS xmmi, xmmj (mem128)
MINXSS xmmi, xmmj (mem32)

También podría gustarte