Lenguajes de la maquinaProceso de traduccion
Laboratorio de OptimizacionProceso de traduccion
Oscar Alvarado Nava
Departamento de ElectronicaDivision de Ciencias Basicas e Ingenierıa
Universidad Autonoma Metropolitana, Unidad Azcapotzalco
17-Otono, septiembre de 2017
Oscar Alvarado Nava UAM Azcapotzalco Proceso de traduccion 1/35
Lenguajes de la maquinaProceso de traduccion
Contenido
1 Lenguajes de la maquinaBajo nivelAlto nivel
2 Proceso de traduccionTraduccion con GCCCompilacion
Oscar Alvarado Nava UAM Azcapotzalco Proceso de traduccion 2/35
Lenguajes de la maquinaProceso de traduccion
Bajo nivelAlto nivel
Maquina multinivel
Físico:transistores, cables, etc.
Lógico:compuertas, unidades funcionales
Micro arquitectura:ruta de datos, control, memoria
Arquitectura:conjunto de instrucciones
Sistemaoperativo:
procesos, hilos,bibliotecas
Lenguajes ytraductores:
mediano,alto, interpretado
Aplicaciones:científico, negocios, oficina, juegos
Oscar Alvarado Nava UAM Azcapotzalco Proceso de traduccion 3/35
Lenguajes de la maquinaProceso de traduccion
Bajo nivelAlto nivel
Mecanismo de ejecucion
HD
RAM
CPU
sistemaoperativo
pc
ir
aluen
cabez
ado
101010101110
111000011111
001010100110
001111100010
100101100110
111110100000
100010100111
101010101110
111000011111
001010100110
001111100010
100101100110
111110100000
100010100111
001010100110
Oscar Alvarado Nava UAM Azcapotzalco Proceso de traduccion 4/35
Lenguajes de la maquinaProceso de traduccion
Bajo nivelAlto nivel
Componentes del mecanismo de ejecucion
Arquitectura de Von Neumman
Unidad de procesamiento, unidad de memoria, perifericosEl programa y los datos son almacenados en la memoria yllevados al CPU
PC (Program Counter), contador de programa
IR (Instruction Register), registro de instruccion
Oscar Alvarado Nava UAM Azcapotzalco Proceso de traduccion 5/35
Lenguajes de la maquinaProceso de traduccion
Bajo nivelAlto nivel
Lenguaje maquina, Intel x86
0 010101010000000000000000000000004 100010011110010100000000000000008 10000011111011000001000000000000c 11000111010001011111110000001111
10 1100011101000101111110000000100114 1100011101000101111101000000000018 100010110100010111111000000000001c 1000101101010101111111000000000020 0000000111010000000000000000000024 1000101101000101111101000000000028 101110000000000000000000000000002c 1100100100000000000000000000000030 11000011000000000000000000000000
Oscar Alvarado Nava UAM Azcapotzalco Proceso de traduccion 6/35
Lenguajes de la maquinaProceso de traduccion
Bajo nivelAlto nivel
Lenguaje maquina, Intel x86, en bytes
0 01010101 00000000 00000000 000000004 10001001 11100101 00000000 000000008 10000011 11101100 00010000 00000000c 11000111 01000101 11111100 00001111
10 11000111 01000101 11111000 0000100114 11000111 01000101 11110100 0000000018 10001011 01000101 11111000 000000001c 10001011 01010101 11111100 0000000020 00000001 11010000 00000000 0000000024 10001011 01000101 11110100 0000000028 10111000 00000000 00000000 000000002c 11001001 00000000 00000000 0000000030 11000011 00000000 00000000 00000000
Oscar Alvarado Nava UAM Azcapotzalco Proceso de traduccion 7/35
Lenguajes de la maquinaProceso de traduccion
Bajo nivelAlto nivel
Lenguaje maquina, Intel x86
0 0101 0101 0000 0000 0000 0000 0000 00004 1000 1001 1110 0101 0000 0000 0000 00008 1000 0011 1110 1100 0001 0000 0000 0000c 1100 0111 0100 0101 1111 1100 0000 1111
10 1100 0111 0100 0101 1111 1000 0000 100114 1100 0111 0100 0101 1111 0100 0000 000018 1000 1011 0100 0101 1111 1000 0000 00001c 1000 1011 0101 0101 1111 1100 0000 000020 0000 0001 1101 0000 0000 0000 0000 000024 1000 1011 0100 0101 1111 0100 0000 000028 1011 1000 0000 0000 0000 0000 0000 00002c 1100 1001 0000 0000 0000 0000 0000 000030 1100 0011 0000 0000 0000 0000 0000 0000
Oscar Alvarado Nava UAM Azcapotzalco Proceso de traduccion 8/35
Lenguajes de la maquinaProceso de traduccion
Bajo nivelAlto nivel
Lenguaje maquina, Intel x86, en hexadecimal
0 55 00 00 004 85 e5 00 008 83 ec 10 00c c7 45 fc 0f
10 c7 45 f8 0914 c7 45 f4 0018 8b 45 f8 001c 8b 55 fc 0020 01 d0 00 0024 8b 45 f4 0028 b8 00 00 002c c9 00 00 0030 c3 00 00 00
Oscar Alvarado Nava UAM Azcapotzalco Proceso de traduccion 9/35
Lenguajes de la maquinaProceso de traduccion
Bajo nivelAlto nivel
Lenguaje ensamblador: Intel x86
1 .file “suma.c” ;archivo2 .text ;seccion de texto3 .globl main ;simbolo global4 main: .cfi startproc5 push %ebp ;libera pila6 mov %esp, %ebp7 sub $16, %esp8 movl $15, -4( %ebp)9 movl $9, -8( %ebp)
10 movl $0, -12( %ebp)11 mov -8( %ebp), %eax ;carga op112 mov -4( %ebp), %edx ;carga op213 add %edx, %eax ;suma de datos14 mov %eax, -12( %ebp) ;almacena resultado15 mov $0, %eax ;valor de regreso16 leave ;fin de modulo17 .cfi restore18 ret
Oscar Alvarado Nava UAM Azcapotzalco Proceso de traduccion 10/35
Lenguajes de la maquinaProceso de traduccion
Bajo nivelAlto nivel
Lenguaje maquina del ARC
00000800 1100001000000000001010000001010000000804 1100010000000000001010000001100000000808 100001101000000001000000000000100000080c 1100011000100000001010000001110000000810 1000000111000011111000000000010000000814 0000000000000000000000000000111100000818 000000000000000000000000000010010000081c 00000000000000000000000000000000
Oscar Alvarado Nava UAM Azcapotzalco Proceso de traduccion 11/35
Lenguajes de la maquinaProceso de traduccion
Bajo nivelAlto nivel
Lenguaje ensamblador del ARC
1 !suma de dos numeros2 .begin !inicia ensamblado3 .org 2048 !inicia bloque en la dir 20484 main: ld [x], %r1 !carga el contenido de x en r15 ld [y], %r2 !carga el contenido de y en r26 addcc %r1, %r2, %r3 !suma con codigos de condicion7 st %r3, [z] !almacena el contenido de r3 en z8 jmpl %r15+4, %r0 !salta y vincula (return)9 x:15 !inicializa x
10 y:9 !inicializa y11 z:0 !inicializa z12 .end !fin de ensamblado
Oscar Alvarado Nava UAM Azcapotzalco Proceso de traduccion 12/35
Lenguajes de la maquinaProceso de traduccion
Bajo nivelAlto nivel
Lenguaje C
1 /* Arquitectura de Computadoras
2 * Oscar Alvarado Nava
3 */
45 int main()
6 {
7 int x=15;
8 int y=9;
9 int z=0;
1011 z = x + y;
1213 return 0;
14 }
Oscar Alvarado Nava UAM Azcapotzalco Proceso de traduccion 13/35
Lenguajes de la maquinaProceso de traduccion
Bajo nivelAlto nivel
Lenguaje de alto nivel
Un lenguaje de programacion de alto nivel se caracteriza porexpresar los algoritmos de una manera adecuada a lacapacidad cognitiva humana
El programador no tiene que pensar en terminos de comofunciona la maquinaEl codigo es mas sencillo y comprensible
El codigo fuente de un programa hecho en un lenguaje de altonivel es portable
Sera necesario compilarlo para la maquina a la cual se deseaejecutarSi lo hay, se debe considerar el sistema operativo
Oscar Alvarado Nava UAM Azcapotzalco Proceso de traduccion 14/35
Lenguajes de la maquinaProceso de traduccion
Bajo nivelAlto nivel
Algunos lenguajes de alto nivel
Ada Fortran 90ALGOL JavaBASIC LispC Modula-2C++ PascalC# PerlC Objective PHPCOBOL PythonFortran Ruby
Algunos lenguajes son utilizados en uno o dos paradigmas deprogramacion
Imperativa, estructurada, orientada a objetos, etc.
Algunos lenguajes son conocidos como lenguajes deprogramacion interpretados
Oscar Alvarado Nava UAM Azcapotzalco Proceso de traduccion 15/35
Lenguajes de la maquinaProceso de traduccion
Traduccion con GCCCompilacion
Proceso de traduccion con GNU-GCC en Linux
fuente.i
compilador
ensamb.s
ensamblador
objeto.o
ejecutable
enlazador
extern voidmain(){printf();}
.dataMOVEADDIF A,0x32
----------------0101010---1110001---0100010---0100101---1100111
libm.a
fuente.c
#includemain(){printf();}
pre-procesador
----------------0101010---1110001---0100010---0100101---1100111----------------0101010---1110001---0100010---0100101---1100111
----------------0101010---1110001---0100010---0100101---1100111----------------0101010---1110001---0100010---0100101---1100111----------------0101010---1110001---0100010---0100101---1100111
Oscar Alvarado Nava UAM Azcapotzalco Proceso de traduccion 16/35
Lenguajes de la maquinaProceso de traduccion
Traduccion con GCCCompilacion
Suma de dos numeros y una constante
1 /* Arquitectura de Computadoras
2 * Oscar Alvarado Nava
3 */
456 #define PI 3.14159
789 int main()
10 {
11 int x=15;
12 int y=9;
13 int z=0;
1415 z = x + y + PI;
161718 return 0;
19 }
Oscar Alvarado Nava UAM Azcapotzalco Proceso de traduccion 17/35
Lenguajes de la maquinaProceso de traduccion
Traduccion con GCCCompilacion
Funcion de biblioteca
1 /* Arquitectura de Computadoras
2 * Oscar Alvarado Nava
3 */
4 #include <stdio.h>
56 #define PI 3.14159
789 int main()
10 {
11 int x=15;
12 int y=9;
13 int z=0;
1415 z = x + y + PI;
16 printf("la suma es %d\n",z);
1718 return 0;
19 }
Oscar Alvarado Nava UAM Azcapotzalco Proceso de traduccion 18/35
Lenguajes de la maquinaProceso de traduccion
Traduccion con GCCCompilacion
Variable global inicializada
1 /* Arquitectura de Computadoras
2 * Oscar Alvarado Nava
3 */
4 #include <stdio.h>
56 #define PI 3.14159
7 float x=1.1;
89 int main()
10 {
11 int x=15;
12 int y=9;
13 int z=0;
1415 z = x + y + PI + x;
16 printf("la suma es %d\n",z);
1718 return 0;
19 }
Oscar Alvarado Nava UAM Azcapotzalco Proceso de traduccion 19/35
Lenguajes de la maquinaProceso de traduccion
Traduccion con GCCCompilacion
Traduccion y ejecucion
Se llevan a cabo todas las fases del proceso de traduccion
Pre-procesamiento, compilacion, ensamblado y enlazado
El archivo final esta compuesto de modulos (objetos) delenguaje maquina enlazado con modulos de biblioteca y estalisto para ser cargado y ejecutado
oskr@kro:∼$ gcc fuente.c -o ejecutable
oskr@kro:∼$ ./ejecutable
Oscar Alvarado Nava UAM Azcapotzalco Proceso de traduccion 20/35
Lenguajes de la maquinaProceso de traduccion
Traduccion con GCCCompilacion
Fases del proceso de traduccion
Con el modificador -v le pedimos al comando gcc quemuestre todas las fases de traduccion
oskr@kro:∼$ gcc -v fuente.c -o ejecutable
Oscar Alvarado Nava UAM Azcapotzalco Proceso de traduccion 21/35
Lenguajes de la maquinaProceso de traduccion
Traduccion con GCCCompilacion
Opciones y modificadores
Como cualquier comando en Linux, gcc tiene un manual quepuede ser accedido desde la lınea de comandos
En el manual se puede consultar las opciones y modificadoresnecesarios
oskr@kro:∼$ man gcc
Oscar Alvarado Nava UAM Azcapotzalco Proceso de traduccion 22/35
Lenguajes de la maquinaProceso de traduccion
Traduccion con GCCCompilacion
Pre-procesador (preprocessor)
Solo se lleva a cabo la fase pre-procesado
El pre-procesador cpp ubica sus directivas (#) y las resuelveEl archivo final contiene lenguaje C “puro”
oskr@kro:∼$ gcc -E fuente.c -o cPuro.i
oskr@kro:∼$ cat cPuro.i
Oscar Alvarado Nava UAM Azcapotzalco Proceso de traduccion 23/35
Lenguajes de la maquinaProceso de traduccion
Traduccion con GCCCompilacion
Compilador (compiler)
Se completan las fases pre-procesado y compilacion
El compilador cc1 realiza los analisis correspondientes de lassentenciasEl archivo final contiene lenguaje ensamblador de laarquitectura en la que se esta compilando
oskr@kro:∼$ gcc -S fuente.c -o ensamblador.s
oskr@kro:∼$ cat ensamblador.s
Oscar Alvarado Nava UAM Azcapotzalco Proceso de traduccion 24/35
Lenguajes de la maquinaProceso de traduccion
Traduccion con GCCCompilacion
Ensamblador (assembler)
Se completan las fases pre-procesado, compilacion yensamblado
El ensamblador as realiza la traduccion de instrucciones alenguaje maquinaEl archivo final contiene lenguaje maquina, tambien conocidocomo codigo objeto, el cual es lenguaje maquina
oskr@kro:∼$ gcc -c fuente.c -o objeto.o
oskr@kro:∼$ od -c objeto.o
oskr@kro:∼$ nm objeto.o
oskr@kro:∼$ size objeto.o
oskr@kro:∼$ readelf objeto.o
oskr@kro:∼$ objdump -Dslx objeto.o
Oscar Alvarado Nava UAM Azcapotzalco Proceso de traduccion 25/35
Lenguajes de la maquinaProceso de traduccion
Traduccion con GCCCompilacion
Enlazador (linker)
El enlazador ld enlaza el codigos objetos desarrollados por elprogramador, con objetos almacenados en archivos bibliotecas
Si los encabezados y/o las bibliotecas no estan en la rutaestandar, se debera indicar-I indica la ruta de los encabezados y -L la ruta de losarchivos biblioteca
oskr@kro:∼$ gcc fuente.c -o ejecutable -I./include -L./lib -lac
Oscar Alvarado Nava UAM Azcapotzalco Proceso de traduccion 26/35
Lenguajes de la maquinaProceso de traduccion
Traduccion con GCCCompilacion
Archivos ejecutables
El archivo final del proceso de compilacion es un archivoejecutable
De acuerdo al sistema operativo se tienen varios formatos
COM (Command file) para DOSa.out para UNIXCOFF (Common Object-File Format), para winbugsELF (Executable and Linking Format), para Linux
oskr@kro:∼$ od -c ejecutable
oskr@kro:∼$ nm ejecutable
oskr@kro:∼$ size ejecutable
oskr@kro:∼$ readelf ejecutable
oskr@kro:∼$ objdump -Dslx ejecutable
Oscar Alvarado Nava UAM Azcapotzalco Proceso de traduccion 27/35
Lenguajes de la maquinaProceso de traduccion
Traduccion con GCCCompilacion
Secciones ELF
.init Inicializacion
.text Cadena
.fini Finalizacion
.rodata Datos solo lectura
.data Datos inicializados
.tdata Datos inicializados de hilos
.tbss Datos no inicializados de hilos
.ctors Constructores
.dtors Destructores
.got Tabla global de indices
.bss Block Started by Symbol
Oscar Alvarado Nava UAM Azcapotzalco Proceso de traduccion 28/35
Lenguajes de la maquinaProceso de traduccion
Traduccion con GCCCompilacion
Fase de compilacion
swap(int v[], int k) {int temp; temp = v[k]; v[k] = v[k+1]; v[k+1] = temp; }
swap: muli $2, $5,4 add $2, $4,$2 lw $15, 0($2) lw $16, 4($2) sw $16, 0($2) sw $15, 4($2) jr $31
00000000101000010000000000011000 00000000100011100001100000100001 10001100011000100000000000000000 10001100111100100000000000000100 10101100111100100000000000000000 10101100011000100000000000000100 00000011111000000000000000001000
Binary machine language program (for MIPS)
C compiler
Assembler
Assembly language program (for MIPS)
High-level language program (in C)
Oscar Alvarado Nava UAM Azcapotzalco Proceso de traduccion 29/35
Lenguajes de la maquinaProceso de traduccion
Traduccion con GCCCompilacion
Compilacion
Proceso de traduccion de un lenguaje de alto nivel a otrofuncionalmente equivalente, tıpicamente expresado enlenguaje ensamblador de una arquitectura especıfica
Sentencia Instrucciones
{ld [B], %r1
A = B + 4; add %r1, 4, %r2
st %r2, [A]
Oscar Alvarado Nava UAM Azcapotzalco Proceso de traduccion 30/35
Lenguajes de la maquinaProceso de traduccion
Traduccion con GCCCompilacion
Analisis
Lexicografico: Reduccion del texto del programa encomponentes lexicos o tokens: secuencia de caracteres quetienen un significado, como identificadores, separadores,operadores, constantes, etc.
Analisis de un texto para ver si esta bien escrito de acuerdo alas reglas de un lenguaje
Sintactico: Analisis (parser) de sımbolos para reconocer laestructura de programa
indentificador = expresionindentificador + constante
Semantico: Asociacion de identificadores con zonas dememoria, asociacion de tipos de datos
Oscar Alvarado Nava UAM Azcapotzalco Proceso de traduccion 31/35
Lenguajes de la maquinaProceso de traduccion
Traduccion con GCCCompilacion
Sıntesis
Generacion de codigo: Asociacon de sentencias con secuenciasde instrucciones
Optimizacion de codigo: Busqueda para obtener un codigo lomas eficiente posible
Asignacion optima de registros y memoriaReduccion de secuencias de instrucciones
Oscar Alvarado Nava UAM Azcapotzalco Proceso de traduccion 32/35
Lenguajes de la maquinaProceso de traduccion
Traduccion con GCCCompilacion
Mapeo
El compilador debera de conocer la informacion de laarquitectura del procesador
Numero de bytes para un enteroReferencia a operandos
Oscar Alvarado Nava UAM Azcapotzalco Proceso de traduccion 33/35
Lenguajes de la maquinaProceso de traduccion
Traduccion con GCCCompilacion
Compilador cruzado
Si un compilador es capaz de compilar un programa para unaarquitectura diferente en la que se esta ejecutando, se diceque es un compilador cruzado (cross compiler)
Muestra la opciones y parametros para el proceso de traduccion
oskr@kro:∼$ gcc -dumpmachine
i486-linux-gnu
Oscar Alvarado Nava UAM Azcapotzalco Proceso de traduccion 34/35
Lenguajes de la maquinaProceso de traduccion
Traduccion con GCCCompilacion
Fase de ensamblado
swap(int v[], int k) {int temp; temp = v[k]; v[k] = v[k+1]; v[k+1] = temp; }
swap: muli $2, $5,4 add $2, $4,$2 lw $15, 0($2) lw $16, 4($2) sw $16, 0($2) sw $15, 4($2) jr $31
00000000101000010000000000011000 00000000100011100001100000100001 10001100011000100000000000000000 10001100111100100000000000000100 10101100111100100000000000000000 10101100011000100000000000000100 00000011111000000000000000001000
Binary machine language program (for MIPS)
C compiler
Assembler
Assembly language program (for MIPS)
High-level language program (in C)
Oscar Alvarado Nava UAM Azcapotzalco Proceso de traduccion 35/35