Actualizado el 20 de Mayo del 2018 (Publicado el 7 de Mayo del 2018)
825 visualizaciones desde el 7 de Mayo del 2018
856,8 KB
44 paginas
Creado hace 13a (13/12/2010)
Tema 5:
Lenguajes del computador:
alto nivel, ensamblador y máquina
Departamento de Ingeniería y
Tecnología de Computadores
diciembre de 2010
Índice
Índice
5.1 Introducción
5.1.1 Programas e instrucciones
5.1.2 Codificación de las instrucciones
5.1.3 Tratamiento de las instrucciones
5.1.4 Tipos de instrucciones
5.2 Jerarquía de traducción
5.2.1 Lenguajes de alto nivel
5.2.2 Compiladores y ensambladores
5.2.3 Código objeto
5.2.4 Librerías
5.2.5 Enlazadores y cargadores
5.2.6 Visión global de la jerarquía de traducciones
5.3 Introducción al ISA Intel IA32
5.3.1 Ensamblador del IA32
5.3.2 Operandos de las instrucciones IA32
5.3.3 Repertorio de instrucciones IA32
5.4. Codificación de las instrucciones
5.4.1 Formato y codificación de instrucciones
5.4.2 Ejemplos de codificación en IA32
5.4.3 Reubicación de código
5.4.4 Espacio virtual de direccionamiento
Tema 5: Lenguajes del computador
diciembre de 2010 - 2
Índice
Índice
5.1 Introducción
5.1.1 Programas e instrucciones
5.1.2 Codificación de las instrucciones
5.1.3 Tratamiento de las instrucciones
5.1.4 Tipos de instrucciones
5.2 Jerarquía de traducción
5.2.1 Lenguajes de alto nivel
5.2.2 Compiladores y ensambladores
5.2.3 Código objeto
5.2.4 Librerías
5.2.5 Enlazadores y cargadores
5.2.6 Visión global de la jerarquía de traducciones
5.3 Introducción al ISA Intel IA32
5.3.1 Ensamblador del IA32
5.3.2 Operandos de las instrucciones IA32
5.3.3 Repertorio de instrucciones IA32
5.4. Codificación de las instrucciones
5.4.1 Formato y codificación de instrucciones
5.4.2 Ejemplos de codificación en IA32
5.4.3 Reubicación de código
5.4.4 Espacio virtual de direccionamiento
Tema 5: Lenguajes del computador
diciembre de 2010 - 3
Programas e instrucciones
5.1 Introducción 5.1.1 Programas e instrucciones
• Instrucción ” Conjunto de símbolos que representa
una orden de operación o tratamiento para el
computador.
• Programa ” Conjunto ordenado de instrucciones
que debe ejecutar el computador sobre los datos
para procesarlos y obtener un resultado.
• Las instrucciones se almacenan en memoria
principal en un orden determinado, y se van
ejecutando en secuencia
• La secuencia sólo se rompe por posibles
instrucciones de salto (bucles, condiciones if, saltos
a funciones, etc.)
Tema 5: Lenguajes del computador
diciembre de 2010 - 4
Codificación de las instrucciones
5.1 Introducción 5.1.2 Codificación de las instrucciones
• Cada instrucción indica una acción determinada a
realizar por la CPU. P.e.:
– Traer un dato de memoria a un registro de la CPU (o
viceversa),
– sumar dos registros y colocar el resultado en otro,
– comparar dos registros y, dependiendo del resultado,
saltar a otro lugar del programa o continuar
secuencialmente,
– Etc.
• Como todo en un computador (datos numéricos,
caracteres, imágenes, etc.), las instrucciones en
última instancia se codifican como ristras de bits
– (de longitud fija o variable, dependiendo de la
arquitectura).
Tema 5: Lenguajes del computador
diciembre de 2010 - 5
Codificación de las instrucciones
5.1 Introducción 5.1.2 Codificación de las instrucciones
• Para codificar toda la información necesaria, las instrucciones
se organizan en campos de bits.
• P.e., para una instrucción de suma acumulativa de un registro
sobre otro, el formato podría ser:
Código operación
Registro 1
Registro 2
(6 bits)
(5 bits)
(5 bits)
• La unidad de control (UC) de la CPU analizará e interpretará
los distintos campos para saber:
– La operación que debe llevar a cabo.
– Los operandos de entrada.
– El lugar en el que dejar el resultado.
• En este ejemplo, se permitirían hasta 64 códigos de operación
distintos, y 32 posibles registros fuente/destino.
• Obviamente, distintos tipos de instrucciones (aritmético-
lógicas, movimiento de datos, salto, etc.) utilizarán distintos
formatos (puesto que necesitan codificar información distinta).
Tema 5: Lenguajes del computador
diciembre de 2010 - 6
Tratamiento de las instrucciones
5.1 Introducción 5.1.3 Tratamiento de las instrucciones
• En todo momento, la UC mantiene:
– Contador de programa (PC): contiene la dirección de la
instrucción a ejecutar.
• Tanto para ejecución secuencial (ver dirección de la
instrucción siguiente) como para los saltos (condicionales o
no), su constante actualización corresponde a la UC.
– Registro de instrucción (RI): contiene la instrucción a
ejecutar.
MEMORIA
RAM
INSTRUCCIONES
10100110
11101100
10110000
. . .
DATOS
00101100
11111110
11111110
. . .
Dirección de
instrucción
Instrucción
a ejecutar
Dirección de
datos (L/E)
Lectura de
operandos
Escritura de
resultados
CPU
UNIDAD DE CONTROL
PC
RI
Decodificación de
instrucciones
Señales
de control
0
1
...
0
CAMINO DE DATOS
Operadores
Tema 5: Lenguajes del computador
diciembre de 2010 - 7
Tipos de instrucciones
5.1 Introducción 5.1.4 Tipos de instrucciones
• A mayor número de instrucciones:
– Más complejidad de la UC.
– Mayor número de bits requeridos por el campo código de
operación.
• Dos tendencias a este respecto:
– RISC: pocas instrucciones, sencillas y se ejecutan en pocos
ciclos.
– CISC: muchas instrucciones, complejas y muchos ciclos de reloj.
• Tipos de instrucciones:
– Instrucciones de movimiento de datos:
• A/desde/entre registros CPU/direcciones de memoria.
– Instrucciones aritmético-lógicas.
• Suma, resta, multiplicación, división, and, or, desplazamientos, ...
• Operaciones punto flotante.
– Instrucciones de salto
• Condicionales
• Incondicionales
• Manejo de subrutinas
Tema 5: Lenguajes del computador
diciembre de 2010 - 8
Índice
Índice
5.1 Introducción
5.1.1 Programas e instrucciones
5.1.2 Codificación de las instrucciones
5.1.3 Tratamiento de las instrucciones
5.1.4 Tipos de instrucciones
5.2 Jerarquía de traducción
5.2.1 Lenguajes de alto nivel
5.2.2 Compiladores y ensambladores
5.2.3 Código objeto
5.2.4 Librerías
5.2.5 Enlazadores y cargadores
5.2.6 Visión global de la jerarquía de traducciones
5.3 Introducción al ISA Intel IA32
5.3.1 Ensamblador del IA32
5.3.2 Operandos de las instrucciones IA32
5.3.3 Repertorio de instrucciones IA32
5.4. Codificación de las instrucciones
5.4.1 Formato y codificación de instrucciones
5.4.2 Ejemplos de codificación en IA32
5.4.3 Reubicación de código
5.4.4 Espacio virtual de direccionamiento
Tema 5: Lenguajes del computador
diciembre de 2010 - 9
5.2 Jerarquía de traducción 5.2.1 Lenguajes de alto nivel
Lenguajes de alto nivel
• Las instrucciones que procesa la CPU están almacenadas en
memoria principal en binario (0 y 1):
– Se dice que son instrucciones máquina.
– Programar directamente de esa forma sería posible, pero muy
difícil, propenso a errores y lejos del modo de pensar humano.
• Lenguajes de programación: instrucciones representadas
simbólicamente (mediante palabras, abreviaturas, etc.).
Ejemplo ensamblador Intel-IA32:
“fuente”
00000001 11010000 == add %edx, %eax
“Sumar”
“Cada registro un nombre”
“fuente y destino”
– Problema: el procesador no entiende “add”.
– Solución: usar la máquina para traducir a lenguaje binario
(código máquina): programa traductor.
• Tipos de lenguajes de programación:
– Lenguaje ensamblador (de bajo nivel).
– Lenguaje de alto nivel (LAN): Java, C, C++, etc.
Tema 5: Lenguajes del computador
diciembre de 2010 - 10
5.2 Jerarquía de traducción 5.2.1 Lenguajes de alto nivel
Lenguajes de alto nivel
• Permiten al programador expresar sus programas en un
lenguaje formal, relativamente cercano a su forma de pensar:
– Variables, tipos de datos, funciones/procedimientos, asignación
de variables, condiciones, bucles, etc.
• Multitud de paradigmas (imperativo, orientado a objetos,
funcional, ...) y de lenguajes concretos (C, C++, Java,
Haskell, etc.)
• Ilustraremos nuestros ejemplos con C:
– Alto nivel, pero más cercano a la máquina.
– Lenguaje de programación nativo de Unix/Linux
• Ejemplo:
#include<stdio.h>
int array[10] = {10,9,8,7,6,5,4,3,2,1};
int i = 0;
int main() {
for(i=0;i<10;i++) /* Recalcula array */
array[i] = array[i]*i;
for(i=0;i<10;i++) /* Imprime array */
printf("%d ",array[i]);
printf("\n");
}
Tema 5: Lenguajes del computador
diciembre de 2010 - 11
5.2 Jerarquía de traducción 5.2.1 Lenguajes de alto nivel
Lenguajes de alto nivel
• El programa anterior declara un vector (array) de 10 datos
de tipo entero, y una variable entera (i).
• Después, tiene una función principal (main), que va
recorriendo el array (bucle for).
• En cada paso del bucle se lee una posición del array, se hace
una operación sobre él, y se almacena el resultado en la
misma posición (array[i] = array[i]*i;).
• Finalmente, se vuelve a recorrer el vector para imprimir sus
contenidos (función printf, de la librería stdio.h)
#include<stdio.h>
int array[10] = {10,9,8,7,6,5,4,3,2,1};
int i = 0;
int main() {
for(i=0;i<10;i++) /* Recalcula array */
array[i] = array[i]*i;
for(i=0;i<10;i++) /* Imprime array */
printf("%d ",array[i]);
printf("\n");
}
Tema 5: Lenguajes del computador
diciembre de 2010 - 12
5.2 Jerarquía de traducción 5.2.2 Compiladores y ensambladores
Compiladores y ensambladores
• Compilador:
– Transforma el código en lenguaje de alto nivel (en texto ASCII) a
ensamblador (lenguaje ya “pegado” a la máquina, pero aún
expresado en texto ASCII).
• Ensamblador:
– Convierte el programa ensamblador en un fichero objeto, que ya
contiene datos binarios.
• Contenido de un fichero objeto:
– Instrucciones en lenguaje máquina.
– Datos (ya en formatos de almacenamiento interno: enteros en
C2, reales en punto flotante, texto en ASCII, etc.)
– Información de reubicación (para accesos a memoria, saltos,
etc.) :
• Necesaria porque los programas se dividen en módulos objeto
compilados por separado...
• ...que luego en enlazador (linker) juntará en uno sólo.
• En ese momento, se “pegarán todos los módulos”, se fijarán las
referencias cruzadas entre ell
Comentarios de: Tema 5: Lenguajes del computador: alto nivel, ensamblador y máquina (0)
No hay comentarios