Caso de Estudio - INTEL v1.2
Caso de Estudio - INTEL v1.2
Caso de Estudio - INTEL v1.2
U4 - CASO DE
ESTUDIO
INTEL
1
Caso de estudio Intel
Agenda
● ISA (Instruction Set Architecture)
○ Registros
○ Direccionamiento
○ Tipos de dato
○ Memoria
○ Endiannes
● Ensamblador NASM (Netwide Assembler)
○ Directivas/Pseudo-instrucciones
○ Estructura de un programa
○ Definición y reserva de campos de memoria
○ Macros e Inclusión de archivos
○ Instrucciones
● Conceptos generales
○ Tablas
○ Validación 2
Caso de estudio Intel
Agenda
● ISA (Instruction Set Architecture)
○ Registros
○ Direccionamiento
○ Tipos de dato
○ Memoria
○ Endiannes
● Ensamblador NASM (Netwide Assembler)
○ Directivas/Pseudo-instrucciones
○ Estructura de un programa
○ Definición y reserva de campos de memoria
○ Macros e Inclusión de archivos
○ Instrucciones
● Conceptos generales
○ Tablas
○ Validación 3
Detalle de la Arquitectura de Programación
ISA (Instruction Set Architecture)
● Registros
○ Generales
○ Índices
○ Pila
○ Instrucción
○ Control
4
Registros Generales
64 bits
32 bits
16 bits
8 bits 8 bits
Acumulador RAX
EAX
operando de instrucciones AH
aritméticas y lógicas AX AL
Base RBX
EBX
direccionamiento de
BH BX BL
operandos
Contador RCX
ECX
operaciones aritméticas o de
CH CX CL
string
Data RDX
operaciones que requieren EDX
duplas de registros DH DX DL
5
Registros Generales
64 bits
32 bits
16 bits
8 bits
R8
R8D
R8W
R8B
R9
R9D
R9W
R9B
....
R15
R15D
R15W
R15B
6
Registros Indice
64 bits
32 bits
16 bits
8 bits
Source RSI
operaciones de manejo de ESI
cadenas para apuntar al SI
SIL
operando “origen”
Destination
RDI
operaciones de manejo de EDI
cadenas para apuntar al DI
operando “destino” DIL
Registros de Pila
Memoria programa
- dir
Pila (Stack)
ultimo
elem
1er elem
+ dir 64 bits
32 bits
16 bits
8 bits
Instruction Pointer
Actúa como registro contador RIP
de programa (PC) y contiene la EIP
dirección efectiva de la IP
instrucción siguiente que se ha
de ejecutar
64 bits
32 bits
16 bits
Flags
se usa para almacenar el RFlags
estado general de la CPU; EFlags
indica el resultado de la Flags
ejecución de cada instrucción
Registro de Control (Flags) - Detalle
Caso de estudio Intel
Agenda
● ISA (Instruction Set Architecture)
○ Registros
○ Direccionamiento
○ Tipos de dato
○ Memoria
○ Endiannes
● Ensamblador NASM (Netwide Assembler)
○ Directivas/Pseudo-instrucciones
○ Estructura de un programa
○ Definición y reserva de campos de memoria
○ Macros e Inclusión de archivos
○ Instrucciones
● Conceptos generales
○ Tablas
○ Validación 11
Modos de Direccionamiento
⦿ Implícito: El dato está implícito en el código de operación.
Ej. CBW
⦿ Registro: El dato está en un registro.
Ej. MOV RAX,5
⦿ Inmediato: El dato está dentro de la instrucción
Ej. MOV RAX,5
⦿ Directo: El dato está en memoria referenciado por el nombre de un
campo
Ej. MOV RAX,[VARIABLE]
MOV RAX,[VARIABLE + 2]
⦿ Registro Indirecto: El dato está en memoria apuntado por un
registro base o índice.
Ej. MOV EAX,[EBX]
MOV EAX,[ESI]
12
Modos de Direccionamiento
13
Caso de estudio Intel
Agenda
● ISA (Instruction Set Architecture)
○ Registros
○ Direccionamiento
○ Tipos de dato
○ Memoria
○ Endiannes
● Ensamblador NASM (Netwide Assembler)
○ Directivas/Pseudo-instrucciones
○ Estructura de un programa
○ Definición y reserva de campos de memoria
○ Macros e Inclusión de archivos
○ Instrucciones
● Conceptos generales
○ Tablas
○ Validación 14
Tipos de dato
Memoria
15
Caso de estudio Intel
Agenda
● ISA (Instruction Set Architecture)
○ Registros
○ Direccionamiento
○ Tipos de dato
○ Memoria
○ Endiannes
● Ensamblador NASM (Netwide Assembler)
○ Directivas/Pseudo-instrucciones
○ Estructura de un programa
○ Definición y reserva de campos de memoria
○ Macros e Inclusión de archivos
○ Instrucciones
● Conceptos generales
○ Tablas
○ Validación 16
Endiannes
Existen 2 métodos:
⚫ Big-Endian: determina que el orden en la memoria coindice con
el orden lógico del dato.
“el dato final en la mayor dirección”
Ej. IBM Mainframe
⚫ Little-Endian : es a la inversa, el dato inicial para la lógica se
coloca en la mayor dirección y el dato final en la menor.
“el dato final en la menor dirección”
Ej. Intel
17
Endiannes - Ejemplos
48 4F 4C 41
1A1 1A2 1A3 1A4
18
Endiannes - Ejemplos
⦿ Caso 2: Definición de un área de memoria con contenido inicial
definido en formato numérico
num2 dd 12345678h
78 56 34 12
1A7 1A8 1A9 1AA
19
Endiannes - Ejemplos
⦿ Caso 3: Se ejecuta una copia de memoria a registro
RBX 12 3A 3A 12
mov BX,[num1]
1A5 1A6
20
Caso de estudio Intel
Agenda
● ISA (Instruction Set Architecture)
○ Registros
○ Direccionamiento
○ Tipos de dato
○ Memoria
○ Endiannes
● Ensamblador NASM (Netwide Assembler)
○ Directivas/Pseudo-instrucciones
○ Estructura de un programa
○ Definición y reserva de campos de memoria
○ Macros e Inclusión de archivos
○ Instrucciones
● Conceptos generales
○ Tablas
○ Validación 21
Directivas al ensamblador / Pseudo-instrucciones
Son instrucciones para que el ensamblador tome alguna acción durante
el proceso de ensamblado. No se traducen a código máquina.
db, dw, dd,dq, dt sirven para definir áreas de memoria (variables) con contenido
inicial
resb, resw, resd, resq, rest sirven para definir áreas de memoria (variables) sin contenido
inicial
%macro %endmacro indican el inicio y final de un bloque para definir una macro
22
Caso de estudio Intel
Agenda
● ISA (Instruction Set Architecture)
○ Registros
○ Direccionamiento
○ Tipos de dato
○ Memoria
○ Endiannes
● Ensamblador NASM (Netwide Assembler)
○ Directivas/Pseudo-instrucciones
○ Estructura de un programa
○ Definición y reserva de campos de memoria
○ Macros e Inclusión de archivos
○ Instrucciones
● Conceptos generales
○ Tablas
○ Validación 23
Estructura de un programa
24
Caso de estudio Intel
Agenda
● ISA (Instruction Set Architecture)
○ Registros
○ Direccionamiento
○ Tipos de dato
○ Memoria
○ Endiannes
● Ensamblador NASM (Netwide Assembler)
○ Directivas/Pseudo-instrucciones
○ Estructura de un programa
○ Definición y reserva de campos de memoria
○ Macros e Inclusión de archivos
○ Instrucciones
● Conceptos generales
○ Tablas
○ Validación 25
Definición y reserva de campos en memoria
26
Definición y reserva de campos en memoria
⦿ Ejemplos (1/4)
Definición Bytes reservados
campo1 resb 1 1
campo2 resb 2 2
campo3 resw 1 2
campo4 resw 2 4
campo5 resd 1 4
campo4 resd 2 8
campo5 resq 1 8
campo6 resq 2 16
decimal2 dw -11 2 F5 FF
decimal3 dd 12345 4 39 30 00 00
decimal4 dq -1 8 FF FF FF FF FF FF FF FF
hexa1 db -0Bh 1 F5
hexa2 dw 0Ch 2 0C 00
hexa3 dd FFFFh 4 FF FF 00 00
hexa4 dq 96B43Fh 8 3F B4 96 00 00 00 00 00
28
Definición y reserva de campos en memoria
⦿ Ejemplos (3/4)
Definicion Bytes reservados Contenido memoria
octal1 db 13o 1 0B
octal2 dw 71o 2 39 00
octal3 dd 10o 4 08 00 00 00
binario1 db 1011b 1 0B
binario2 dw 1011b 2 0B 00
binario3 dd -1000b 4 F8 FF FF FF
29
Definición y reserva de campos en memoria
⦿ Ejemplos (4/4)
Definicion Bytes reservados Contenido memoria
letra db ‘A’ 1 41
letra2 dw ‘A’ 2 41 20
letra3 db ‘a’ 1 61
cadena db ‘hola’ 4 68 6F 6C 61
cadena2 dw ‘ola’ 4 6F 6C 61 20
numero db ‘12’ 2 31 32
30
Caso de estudio Intel
Agenda
● ISA (Instruction Set Architecture)
○ Registros
○ Direccionamiento
○ Tipos de dato
○ Memoria
○ Endiannes
● Ensamblador NASM (Netwide Assembler)
○ Directivas/Pseudo-instrucciones
○ Estructura de un programa
○ Definición y reserva de campos de memoria
○ Macros e Inclusión de archivos
○ Instrucciones
● Conceptos generales
○ Tablas
○ Validación 31
Macros
32
Macros
33
Inclusión de archivos
%include “file_name”
34
Inclusión de archivos
35
Caso de estudio Intel
Agenda
● ISA (Instruction Set Architecture)
○ Registros
○ Direccionamiento
○ Tipos de dato
○ Memoria
○ Endiannes
● Ensamblador NASM (Netwide Assembler)
○ Directivas/Pseudo-instrucciones
○ Estructura de un programa
○ Definición y reserva de campos de memoria
○ Macros e Inclusión de archivos
○ Instrucciones
● Conceptos generales
○ Tablas
○ Validación 36
Instrucciones - Transferencia y Copia
MOV op1,op2
Copia el valor del 2do operando en el primer operando.
Combinaciones Ejemplos en NASM
MOV <reg>,<reg> MOV AH,BL
MOV AX,BX
MOV ECX, EAX
MOV RDX,RCX
MOV op1,op2
38
39
Caso de estudio Intel
Agenda
● ISA (Instruction Set Architecture)
○ Registros
○ Direccionamiento
○ Tipos de dato
○ Memoria
○ Endiannes
● Ensamblador NASM (Netwide Assembler)
○ Directivas/Pseudo-instrucciones
○ Estructura de un programa
○ Definición y reserva de campos de memoria
○ Macros e Inclusión de archivos
○ Instrucciones
● Conceptos generales
○ Tablas
○ Validación 40
Instrucciones - Comparación
CMP op1,op2
Compara el contenido del op1 contra el op2 mediante la resta
entre los dos operando sin modificarlos.
41
Instrucciones - Comparación
CMP op1,op2
Combinaciones Ejemplos en NASM
CMP <reg>,<inm> CMP CH,10o
CMP CX,2Ah
CMP EAX,1000
CMP RBX,432h
42
Instrucciones - Saltos/Bifurcaciones
JMP op
Bifurca a la dirección indicada del operando.
Jcc op
Bifurca a la dirección indicada del operando si se cumple la
condición.
Combinaciones Ejemplos en NASM
JMP <etiqueta> JMP finalizar
43
Instrucciones - Saltos/Bifurcaciones
Condicionales generales
44
Instrucciones - Saltos/Bifurcaciones
Condicionales con signo
45
Instrucciones - Saltos/Bifurcaciones
Condicionales sin signo
46
Instrucciones - Aritmeticas
Suma
ADD op1,op2
Suma los valores de los dos operando (binarios de punto fijo con
signo) dejando el resultado en el primero.
47
Instrucciones - Aritmeticas
Suma (continuación)
ADD op1,op2
Combinaciones Ejemplos en NASM
ADD <reg>,<inm> ADD DL,10b
ADD AX,10h
ADD ECX,1234
ADD RCX,1234h
49
Instrucciones - Aritméticas
Resta (continuación)
SUB op1,op2
Combinaciones Ejemplos en NASM
SUB <reg>,<inm> SUB DL,10b
SUB AX,10h
SUB ECX,1234
SUB RDX,1234h
DEC byte[VAR_8B]
DEC word[VAR_16B] 🡪 VAR_16B = VAR_16B - 1
DEC dword[VAR_32B]
DEC qword[VAR_64B] 51
Instrucciones - Aritmeticas
Multiplicación - Formato 1 operando
IMUL op
Si longitud de op es 8 bits:
Multiplica AL * op y deja el resultado en AX
Si longitud de op es 16 bits:
Multiplica AX * op y deja el resultado en DX:AX
Si longitud de op es 32 bits:
Multiplica EAX * op y deja el resultado en EDX:EAX
Si longitud de op es 64 bits:
Multiplica RAX * op y deja el resultado en RDX:RAX
Los operandos son interpretados como binario de punto fijo CON signo
MUL op
Igual que IMUL pero los operandos son interpretados como binario de
punto fijo SIN signo
52
Instrucciones - Aritméticas
Multiplicación - Formato 1 operando (cont)
IMUL op
MUL op
Combinaciones Ejemplos en NASM
MUL/IMUL <reg> MUL/IMUL BH 🡪 AX = (AL)*(BH)
MUL/IMUL BX 🡪 DX:AX = (AX)*(BX)
MUL/IMUL EBX 🡪 EDX:EAX = (EAX)*(EBX)
MUL/IMUL RCX 🡪 RDX:RAX = (RAX)*(RCX)
53
Instrucciones - Aritméticas
Multiplicación - Formato 2 operandos
IMUL op1,op2
Multiplica el contenido de los operandos y almacena el resultado en el
primero.
Ambos operandos deben tener la misma longitud
Si el resultado no entra en el operando 1, se trunca.
Los operandos son interpretados como binario de punto fijo CON signo
MUL op1,op2
Igual que IMUL pero los operandos son interpretados como binario de
punto fijo SIN signo
54
Instrucciones - Aritméticas
Multiplicación - Formato 2 operandos (cont)
IMUL op1,op2
MUL op1,op2
55
Instrucciones - Aritméticas
Multiplicación - Formato 3 operandos
IMUL op1,op2,op3
Multiplica el contenido de los operandos 2 y 3 y almacena el resultado
en el operando 1.
El operando 1 es siempre un registro y el operando 3 siempre un valor
inmediato.
Si el resultado no entra en el operando 1, se trunca.
Los operandos son interpretados como binario de punto fijo CON signo
MUL op1,op2,op3
Igual que IMUL pero los operandos son interpretados como binario de
punto fijo SIN signo
56
Instrucciones - Aritméticas
Multiplicación - Formato 3 operandos (cont)
IMUL op1,op2,op3
MUL op1,op2,op3
57
Instrucciones - Aritméticas
División
IDIV op
Si longitud de op es 8 bits:
AX/op resto en AH y cociente en AL
Si longitud de op es 16 bits:
DX:AX/op resto en DX y cociente en AX
Si longitud de op es 32 bits:
EDX:EAX/op resto en EDX y cociente en EAX
Si longitud de op es 64 bits:
RDX:RAX/op resto en RDX y cociente en RAX
Los operandos son interpretados como binario de punto fijo CON signo
DIV op
Igual que IDIV pero los operandos son interpretados como binario de
punto fijo SIN signo
58
Instrucciones - Aritméticas
División (cont)
IDIV op
DIV op
Combinaciones Ejemplos en NASM
61
62
Caso de estudio Intel
Agenda
● ISA (Instruction Set Architecture)
○ Registros
○ Direccionamiento
○ Tipos de dato
○ Memoria
○ Endiannes
● Ensamblador NASM (Netwide Assembler)
○ Directivas/Pseudo-instrucciones
○ Estructura de un programa
○ Definición y reserva de campos de memoria
○ Macros e Inclusión de archivos
○ Instrucciones
● Conceptos generales
○ Tablas
○ Validación 63
Instrucciones - Saltos/Bifurcaciones
Loop
LOOP op
Resta 1 al contenido del registro RCX y si el resultado es 0, bifurca al
punto indicado por el operando, sino continua la ejecución en la
instrucción siguiente.
El desplazamiento al punto indicado debe estar en un rango entre -128
a 127 bytes (near jump)
mov rcx,5
inicio:
. . .
. . .
loop inicio
. . .
64
Instrucciones - Saltos/Bifurcaciones
Llamada y Retorno de procedimiento
CALL op
Almacena en la pila la dirección de la instrucción siguiente a la call y bifurca
al punto indicado por el operando.
RET
Toma el elemento del tope de la pila que debe ser una dirección de
memoria (generalmente cargada por una call) y bifurca hacia la misma.
call rutina
. . .
. . .
. . .
. . .
rutina:
. . .
ret
65
Instrucciones - Saltos/Bifurcaciones
Rutinas externas (1/2)
66
Instrucciones - Saltos/Bifurcaciones
Rutinas externas (2/2)
67
Caso de estudio Intel
Agenda
● ISA (Instruction Set Architecture)
○ Registros
○ Direccionamiento
○ Tipos de dato
○ Memoria
○ Endiannes
● Ensamblador NASM (Netwide Assembler)
○ Directivas/Pseudo-instrucciones
○ Estructura de un programa
○ Definición y reserva de campos de memoria
○ Macros e Inclusión de archivos
○ Instrucciones
● Conceptos generales
○ Tablas
○ Validación 68
Tablas
Tira de bytes en memoria destinada a usar como una estructura de
Vector o Matriz
longitdFila= longitudElemento*cantidadColumnas
69
Caso de estudio Intel
Agenda
● ISA (Instruction Set Architecture)
○ Registros
○ Direccionamiento
○ Tipos de dato
○ Memoria
○ Endiannes
● Ensamblador NASM (Netwide Assembler)
○ Directivas/Pseudo-instrucciones
○ Estructura de un programa
○ Definición y reserva de campos de memoria
○ Macros e Inclusión de archivos
○ Instrucciones
● Conceptos generales
○ Tablas
○ Validación 70
Validación
Código destinado a verificar que los datos de un programa provenientes
del exterior (teclado, archivos) cumplen las condiciones esperadas y/o
necesarias.
74
Instrucciones - Lógicas
Or
OR op1,op2
Ejecuta la operación lógica OR entre el operando 1 y 2 dejando el
resultado en el 1
Combinaciones Ejemplos en NASM
OR <reg>,<reg> OR AH,BL / OR AX,BX / OR ECX,EAX
OR <reg>,<long><mem> OR AL,byte[VAR_8B]
OR ECX,dword[VAR_32B]
OR <long><mem>,<reg> OR byte[VAR_8B],BL
OR dword[VAR_32B],EAX
75
Instrucciones - Lógicas
Exclusive or
XOR op1,op2
Ejecuta la operación lógica EXCLUSIVE OR entre el operando 1 y 2
dejando el resultado en el 1
Combinaciones Ejemplos en NASM
XOR <reg>,<reg> XOR AH,BL / XOR AX,BX / XOR ECX,EAX
76
Instrucciones - Lógicas
Not
NOT op
Ejecuta la operación lógica NOT en el operando
77
Instrucciones - Transferencia y Copia
LEA op1,op2
Copia en el operando 1 (un registro) la dirección de memoria del
operando 2.
es equivalente a hacer
MOV RAX,VARIABLE ;notar q aca NO hay corchetes
78
Instrucciones - Transferencia y Copia
Copia de strings
MOVSB
Copia el contenido de memoria apuntado por RSI (origen/source)
al apuntado por RDI (destino/destination). Copia tantos bytes
como los indicados en el registro RCX
Memoria programa
RCX
ORIGEN
RSI
DESTINO
RDI
79
Instrucciones - Transferencia y Copia
Copia de strings (cont)
MOVSB
. . .
MOV RCX,4
LEA RSI,[MSGORI]
LEA RDI,[MSGDES]
REP MOVSB
. . .
80
Instrucciones - Comparación
Comparación de strings
CMPSB
Compara el contenido de memoria apuntado por RSI
(origen/source) con el apuntado por RDI (destino/destination).
Compara tantos bytes como los indicados en el registro RCX
. . .
MOV RCX,4
LEA RSI,[MSG1]
LEA RDI,[MSG2]
REPE CMPSB
JE IGUALES
. . .
81
Instrucciones - Transferencia y Copia
Manejo de la pila (stack)
PUSH op
Inserta el operando (de 64 bits) en la pila. Decrementa (resta 1)
el contenido del registro RSP
POP op
Elimina el último elemento insertado en la pila (de 64 bits) y lo
copia en el operando. Incrementa (suma 1) al contenido del
registro RSP
82
⦿ Manejo de Pila
⚫ La pila es usada para almacenar transitoriamente datos,
direcciones de retornos de subrutinas o pasar parámetros
a funciones o subrutinas.
⚫ El ultimo que entra es el primero que sale 🡪 LIFO.
⚫ PUSH sirve para poner el dato en la pila mientras que
POP se usa para recuperar el dato.
⚫ El stack Pointer (SP) se incrementa con el POP y se
decrementa con el PUSH.
⚫ El operando puede ser un registro o posición de
memoria(ambos 64bits).
83
84