Introducción a la Arquitectura Intel x86 © M.C.C. Sergio Luis Castillo Valerio Esta presentación puede reproducirse libremente siempre y cuando se mantenga.

Slides:



Advertisements
Presentaciones similares
Equipo #3 Unidad III: ALU Efraín Corral Eduardo Castillo Elías Alarcón
Advertisements

Instrucciones de operación sobre datos
UNIVERSIDAD DEL VALLE DE MEXICO CAMPUS CHAPULTEPEC
REGISTROS INTERNOS DEL PROCESADOR.
CLASE 3 SOFTWARE DEL MICROPROCESADOR
CLASE 7 CONJUNTO DE INSTRUCCIONES. TRANSFERENCIA
TEMA 2 Arquitectura de un Ordenador
INSTTUTO TECNOLOGICO DE APIZACO
No. Lista 31 Teresita Ramírez Uribe HORA: 8:00-9:00AM.
N.L 32 ROMERO HERNÁNDEZ GABRIELA VERÓNICA. HORA: 8:00-9:00AM ESQUELETO DE UN PROGRAMA EN ENSAMBLADOR.
Integrantes Carlos Junior Salinas Rivera (ILHUICOATL). Comunidad: coatl (serpiente).
Programación en ensamblador
Introducción al lenguaje ensamblador
ARQUITECTURA INTEL Modos de direccionamiento
Programación en Lenguaje Ensamblador.
PROG. EN ENSAMBLADOR Ing. Pablo Cesar Tapia Catacora.
Composición Interna de un Procesador

Lenguaje Ensamblador integrantes: Esthela Vianey Vázquez Medina No.30
ISA (Instruction Set Architecture)
MODOS DE DIRECCIONAMIENTO No. Lista 21 7am Rivas chacón Ana cristina
MODOS DE DIRECCIONAMIENTO

Arquitectura del 8086/8088 El 8086 Arquitectura de computadoras II
ARQUITECTURA DE LOS MICROPROCESADORES DE 8 BITS
MIPS Intermedio.
Introducción al lenguaje ensamblador
2.2 Registro de Banderas Conjunto de bits que nos dan información sobre el estado del procesador y sobre el resultado de la última operación efectuada.
MODOS DE DIRECCIONAMIENTO
(CC) , José M. Foces-Morán.

Instrucciones Aritméticas Instrucciones Aritméticas Instrucciones Aritméticas Instrucciones Aritméticas Instrucciones Transferencia de Datos Instrucciones.
Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004 Profesora Borensztejn.
Secciones y Segmentos STARTUP
ARQUITECTURA DE COMPUTADORES Semestre A-2009 Clase 13.
Arquitectura del 8086/8088 TEEL 4011
Conceptos Arquitectónicos del computador
IPN Escuela Superior de Cómputo MICROPROCESADORES II.
Tema 1: DATOS Y REGISTROS
Unidad I: Registros e Interrupciones Facilitador: Ing. Eduardo Brando.
Microcomputadores Prof: Tatiana Marín R.. Lenguaje máquina = lenguaje binario InstrucciónLenguaje máquina (binario)OP ( hex)Nemónico Restar F0SUB.

INTRODUCCION AL AMBIENTE DE BAJO NIVEL ® M.C.C. Sergio Luis Castillo Valerio Esta presentación puede reproducirse libremente siempre que se mantengan estos.
MODOS DE DIRECCIONAMIENTO
A este registro se le conoce también como registro de estado. Consta de 16 bits y únicamente 9 de ellos contiene información, indican el estado de la.
introducción al Lenguaje Ensamblador
MODOS Y METODOS DE DIRECCIONAMIENTO
Microprocesador (8086) Universidad Nacional de Ingeniería
PROGRAMACION A BAJO NIVEL
Capítulo 4 CPU y la memoria.
SEMANA 01_2.
Ing. Lionel Hendryk. Sistemas Embebidos Un sistema embebido es un sistema de computación diseñado para realizar una o algunas pocas funciones dedicadas.
No. 26 8:00 a.m. Lenguaje Ensamblador. Segmento de Pila  Model small  stack  Data  Code  mov  mov ds, ax  push ds  …código del programa.
TEMA : ARQUITECTURA DE COMPUTADORAS

introducción al Lenguaje Ensamblador
Maquinas Digitales UNIDADES DE CONTROL.
Principio unidad 1.
Unidad Central de Proceso
CONJUNTO DE INSTRUCCIONES Maquinas Digitales
Aprende el arte de la ingeniería inversa
COMUNIDAD YAQUI! Sikiri#4 Heeka#7 Ba’am#19.
ARQUITECTURA DE COMPUTADORES
MIPS Intermedio.
 PRESENTADO POR : ANDRES MAYORGA DANIELA PAEZ VEGA.
El microprocesador y su arquitectura
Introducción MSc. Rina Arauz.
Lenguaje ensamblador Conceptos introductorios. Formatos de Instrucción. Modos de Direccionamiento. Conjunto de instrucciones básico. Introducción al Lenguaje.
Arquitectura de PCs Lenguaje ASM Intel Lenguaje de máquina y ASM Toda CPU interpreta su código de máquina propio Instrucciones en código de máquina.
Arquitectura de PCs Arquitectura básica del PC. Introducción El PC es el resultado de una especificación técnica de IBM El hardware se organiza de forma.
Transcripción de la presentación:

Introducción a la Arquitectura Intel x86 © M.C.C. Sergio Luis Castillo Valerio Esta presentación puede reproducirse libremente siempre y cuando se mantenga esta leyenda

Arquitectura 80X86 CPU 80X86 Memoria RAM Puertos E/S Bus de Direcciones Bus de Datos Bus de Control

Registros Registro: Conjunto de flip-flops capaz de almacenar, y en algunos casos modificar, información binaria. Dentro de todo CPU existe un conjunto de registros. Algunos tienen un uso específico, otros son de uso general (registros asimétricos). Los registros de uso general normalmente se utilizan para guardar datos y resultados intermedios.

Registros Desde el punto de vista del programador, es muy importante conocer el conjunto de registros internos de un procesador y su uso, cuando se programa en bajo nivel. Esto se debe a que muchas de las instrucciones de lenguaje máquina suponen que los datos están en alguno de los registros o almacenan el resultado en alguno de los registros internos.

Registros de los procesadores 80X86 Registros de Uso General: –EAX:Acumulador –EBX:Base –ECX:Contador –EDX:Datos. –Estos registros pueden guardar datos de 32, 16 u 8 bits. 32 bits 16 bits EAX AX AHAL

Registros de los procesadores 80X86 –ESP: Stack Pointer (Apuntador de Pila) –EBP: Base Pointer (Apuntador Base) –ESI: Source Index (Indice Fuente u Origen) –EDI: Destination Index (Indice Destino) –Estos registros pueden almacenar datos de 32 o 16 bits. 32 bits 16 bits ESP SP

Registros de los procesadores 80X86 Registros de Segmento –CS: Code Segment (Segmento de Código) –DS: Data Segment (Segmento de Datos) –SS: Stack Segment (Segmento de Pila) –ES: Extra Segment (Segmento Extra) –FS: Extra Segment (Segmento Extra) –GS: Extra Segment (Segmento Extra) Son registros de 16 bits. Se utilizan para generar las direcciones que el procesador envía por el bus de direcciones.

Registro de Banderas Conjunto de bits que nos dan información sobre el estado del procesador y sobre el resultado de la última operación efectuada. Es el único registro accesible a nivel de bits. Algunos de estos bits son: –CF: Carry flag- ZF: Zero flag –SF: Sign flag- OF: Overflow flag –IF: Interrupt flag- DF: Direction flag OF DF IF SF ZF CF

Segmentación Técnica utilizada en los procesadores Intel 8088/8086 para generar direcciones de 20 bits usando registros de 16 bits. –Para ilustrar esta técnica, suponga que se desea ubicar la posición de una persona a partir de un punto de referencia, pero utilizando solamente números de 2 dígitos decimales mts

Segmentación Esto se puede realizar si se hace lo siguiente: –Se divide la recta en bloques de 100 metros cada uno. –Se utilizan dos números: Uno para indicar en cuál bloque está la persona Otro para especificar su posición dentro del bloque. –Posición = Bloque:Posición mts 0:50 3:45

Segmentación Para obtener la ubicación real debe realizarse la siguiente operación: – Ubicación = Bloque*100 + Posición Posición1 = 0* = 50 Posición2 = 3* = mts 0:50 3:45 Posición 1 Posición 2

Segmentación En el caso de los procesadores 80X86, los bloques se llaman SEGMENTOS y la posición se llama DESPLAZAMIENTO En modo real, cada una se describe con un número de 16 bits. Operando en modo real –Dirección Real = Segmento*16 + Desplazamiento. La Dirección Real ya es una cantidad de 20 bits. Esto significa que toda dirección tiene 2 partes: Un Segmento y un desplazamiento.

Segmentación en Modo Protegido Es importante recalcar que cuando los procesadores o posteriores operan en modo protegido, la segmentación funciona de manera muy diferente. Cada segmento puede ser de hasta 4 Gbytes. Maneja memoria virtual, lo que implica un esquema de paginación. Maneja también multitarea y un esquema de protección de memoria.

Conjunto de Instrucciones El Conjunto de instrucciones (Instruction Set) de un procesador está formado por aquellas instrucciones en lenguaje máquina que un procesador puede ejecutar. CISC vs. RISC –CISC: Complex Instruction Set Computer –RISC: Reduced Instruction Set Computer Las instrucciones normalmente se agrupan para describirlas.

Conjunto de Instrucciones Los grupos normalmente son: –Transferencia de datos –Aritmética entera binaria –Operaciones lógicas –Desplazamientos y rotaciones –Aritmética BCD –Gestión de cadenas –Control del sistema –Control de flujo del programa –Saltos condicionales

Tamaño de los Datos Byte Palabra (16 bits, 2 bytes) Palabra doble (32 bits, 4 bytes) Palabra cuadrúple (64 bits, 8 bytes) Direccionamiento a bytes Las palabras se leen en direcciones divisibles por su tamaño en bytes en forma little- endian. –Palabras dobles se leen en direciones divisibles por 4.

Tipos de Datos General: Contenido binario arbitrario Entero: Valor binario simple, con signo o sin signo. BCD no empaquetado, 1 dígito por byte. BCD empaquetado, 2 dígitos por byte Apuntador cercano, dirección de 32 bits. Cadena de caracteres (secuencia de bytes ASCII) Punto flotante.

Grupos de Instrucciones Transferencia de datos –mov destino,origen- xchg dest,orig –in origen- out destino Aritmética entera binaria –add dest,orig- sub dest,orig –adc dest,orig- sbb dest,orig –mul orig- div orig –inc dest- dec dest

Grupos de Instrucciones Operaciones lógicas –not dest- and dest,orig –or dest,orig- xor dest,orig Desplazamientos y rotaciones –shl dest,#- shr dest,# –rol dest,#- ror dest,# Aritmética BCD –AAA :Ajuste ASCII suma –DAA :Ajuste decimal suma. –AAM :Ajuste ASCII muliplicación. –AAD :Ajuste ASCII división.

Grupos de Instrucciones Gestión de cadenas –rep: Repetir-lodsb:AL=byte{DS:SI} –stosb: {ES:SI } = AL –cmps: Compara {DS:SI} con {ES:DI} Control del sistema –int #- iret –cli: clear Interruption Flag –sti: set Interruption Flag –clc: clear carry flag –stc: set carry flag

Saltos condicionales Control de flujo del programa –jmp objetivo- test dest,orig –call procedimiento- ret –cmp dest,orig Saltos condicionales basados en: Condiciones sobre indicadores Relaciones aritméticas con signo Relaciones aritméticas sin signo

Saltos condicionales Condiciones sobre indicadores –je/jne obj: jump if equal/not equal –jz/jnz obj: jump if zero/non zero –js/jns obj: jump if sign/no sign Relaciones aritméticas con signo –jg/jl obj: jump if greater/less –jge obj: jump if greater or equal –jle obj: jump if less or equal

Saltos condicionales Relaciones aritméticas sin signo –ja/jb obj: jump if above/below –jae/jbe obj: jump if above/below or equal –jna/jnb obj: jump if not above/below Normalmente se utilizan después de una comparación: Cmp dest,orig jxx objetivo (Donde xx: Condición de salto) Nota: La instucción CMP resta el origen al destino y afecta banderas, no guarda el resultado ni altera los operandos.

Programación estructurada Es posible implementar parcialmente en bajo nivel las estructuras de control que propone la programación estructurada: –If... then –If... then... else –Repeat.... until –While... do –For... do

If... then Ilustraremos estas implementaciones con ejemplos: –En pseudocódigo: –En ensamblador cmp cx,ax; if (cx > ax) jle fin_si dec cx; then dec cx fin_si: If (cx > ax) then dec cx

If... then... else Pseudocódigo: Ensamblador: If (bx < ax) then dec ax else dec bx cmp bx,ax; If (bx < ax) jge else1 dec ax; then dec ax jmp fin_si1 else1:dec bx; else dec bx fin_si1:

Repeat... until Pseudocódigo: Ensamblador: Repeat: inc cx add ax,cx until (cx > 100) Repite1: inc cx add ax,cx cmp cx,100; until (cx > 100) jle Repite1

While... do Pseudocódigo: Ensamblador: While (bx<200) do inc bx add ax,bx end_while while1: cmp bx,200; While (bx<200) jge fin_while1 inc bx add ax,cx jmp while1; end_while fin_while1:

For... do Una implementación utiliza la instrucción loop Sintaxis loop : –loop objetivo Semántica: loop utiliza CX forzosamente Si (CX  0) Dec CX Salta a objetivo Sino Siguiente instrucción

For... do Pseudocódigo: Ensamblador: For (cx=1 hasta 20) do add ax,bx inc bx end_for mov cx,20 do1: add ax,bx inc bx loop do1 Nota: Dentro de la imlementación del for...do no es aconsejable utilizar CX cuando se implementa con loop.

Partes de un programa Todo programa de bajo nivel se compone de tres segmentos (secciones en modo protegido): –Datos (opcional): Contiene la definición y los valores iniciales de las variables que utiliza nuestro programa. –Pila (opcional): Reserva memoria para la pila (stack) –Código: Contiene las instrucciones del programa. El segmento de código se subdivide en procedimientos. Debe haber por lo menos un procedimiento principal.

Definición de segmentos Los segmentos se definen con la directiva segment. Sintáxis: –segment nombre tipo Donde nombre es el nombre del segmento. Este nombre es definido por el programador. Y tipo puede ser: data, stack o code. Por ejemplo: –segment variables data

Definición de segmentos En nuestros programas definiremos los segmentos en el orden siguiente: –segment pila stack –segment datos data –segment programa code Cada segmento termina donde inicia el siguiente. La etiqueta..start: define el procedimiento principal dentro del segmento de código.

Programa ejemplo Programa que suma los primeros 30 enteros. Pseudocódigo: Suma = 0 i = 1 Mientras (i  30) haz suma=suma+i i = i+1 fin_mientras fin.

Programa ejemplo En ensamblador: ; AX = Suma, BX = i segment pila stack; Define segmento de pila resb 256; Reserva 256 bytes segment programa code; Define segmento de código..start:mov ax,0; Suma=0 mov bx,1; i = 1 mientras1:cmp bx,30; Mientras (bx  30) haz jg fin_mientras1 add ax,bx; suma=suma+i inc bx; i = i + 1 jmp mientras1 fin_mientras1: mov ax,4c00h; fin. int 21h

Ejercicio 1 Implementa el siguiente pseudocódigo en ensamblador: x=0 y=1 z=0 Repite: z = x + y x = y y = z Hasta (z > 1000)

Segmento de datos Cuando se programa en bajo nivel en la PC en modo real, nos enfrentamos con algunas características del MS-DOS. Una de ellas es el PSP: Prefix Segment Program. Cuando el MS-DOS carga un ejecutable de tipo EXE, carga a memoria los segmentos de pila, datos y código. Inicializa SS y CS para que apunten a sus respectivos segmentos.

PSP Crea el PSP, que es un bloque de 256 bytes que contiene datos e instrucciones que el SO utiliza para retomar el control del sistema cuando nuestro programa termine su ejecución. Inicializa DS para que apunte al PSP, no a nuestro segmento de datos. Por tanto, siempre que se utiliza un segmento de datos es necesario inicializar DS a nuestro segmento de datos.

Inicialización de DS Para esto, cuando utilicemos un segmento de datos siempre ejecutaremos las siguientes instrucciones: –MOV AX, Nombre_segmento_datos –MOV DS,AX Esto hace que DS apunte a nuestro segmento de datos y que podamos accesar los datos que definamos en nuestro programa.

Formato de instrucción Los procesadores x86 de Intel son del tipo CISC (Complex Instruction Set Computer). Tienen instrucciones de diferentes tamaños. Varios modos de direccionamiento. Instrucciones con varias posibilidades en lenguaje máquina.

Formato de instrucción Código Operación{d,v,s,w}: Si d=1, “a”, si d=0 “de”; Si w=1, instrucción de una palabra, si w=0, instrucción de un byte. Si s:w=01, operando formado por dato inmediato de 16 bits. Si s:w=11, operando de 16 bits formado por un dato inmediato de 1 byte con extensión de signo. Si v=0, “conteo”=1, si v=1, “conteo” en CL. Código Op. ModoByte bajo datoByte alto dato

Formato de instrucción Modo: mod[reg]r/m, donde “mod”: Código Op. ModoByte bajo datoByte alto dato modDesplazamiento DISP=0 (Desplazaminto ausente) 01DISP= Desplazamiento bajo de 16 bits con signo. Desplazamiento alto ausente. 10DISP=Desplazamiento Alto:Desplazamiento Bajo 11r/m se trata como un campo “reg”

Formato de instrucción Modo: mod[reg]r/m, donde “[reg]”: Código Op. ModoByte bajo datoByte alto dato 16 bits (w = 1) 8 bits (w=0) Segmento AX000AL00ES 001CX001CL01CS 010DX010DL10SS 011BX011BL11DS 100SP100AH 101BP101CH 110SI110DH 111DI111BH

Formato de instrucción Modo: Modo: mod[reg]r/m, donde “r/m”: Código Op. ModoByte bajo datoByte alto dato r/mDirección de los operandos BX + SI + Desplazamiento 001BX + DI + Desplazamiento 010BP + SI + Desplazamiento 011BP + DI + Desplazamiento 100SI + Desplazamiento 101DI + Desplazamiento 110BP + Desplazamiento* 111BX + Desplazamiento

Ejemplo Instrucción mov (Mover) -Registro/Memoria a/de registro: dw + mod reg r/m -Inmediato a registro/memoria: w + mod 000 r/m + [byte bajo dato] + [byte alto dato, si w=1] -Inmediato a registro:1011 w reg +[byte bajo dato] + [byte alto dato, si w=1] -Memoria a Acumulador: w + [byte bajo dirección] + [byte alto dirección] -Acumulador a Memoria: w + [byte bajo dirección] + [byte alto dirección] -Registro/Memoria a Registro de Segmentación: mod 0 reg r/m -Registro de Segmentación a registro/memoria: mod 0 reg r/m

Ejemplo Instrucción mov ax,1234h 2 Posibilidades: –Inmediato a registro/memoria –Inmediato a registro -Inmediato a registro/memoria: w + mod 000 r/m + [byte bajo dato] + [byte alto dato, si w=1] -Inmediato a registro: 1011 w reg +[byte bajo dato] + [byte alto dato, si w=1]

Ejemplo Instrucción mov ax,1234h Inmediato a registro/memoria: (w=1)+(mod=11)000 (r/m=000)+ 34h + 12h = = C7C03412h

Ejemplo Instrucción mov ax,1234h Inmediato a registro: 1011 w reg +[byte bajo dato] + [byte alto dato, si w=1] 1011 (W=1)(reg=000) + 34h + 12h = = B83412h