Fundamentos de Arquitectura y C´
odigo M´
aquina
Lecci´on 3Ing. Jorge Castro-God´ınez
MT7003 Microprocesadores y Microcontroladores ´
Area de Ingenier´ıa Mecatr´onica
Instituto Tecnol´ogico de Costa Rica
Contenido
1 Generaci´on de c´odigo ejecutable
2 Arquitectura del conjunto de instrucciones
¿En qu´
e se parecen estos bloques?
(1)
if (x != 0) y = (y+z)/x;
cmpl $0, -4(%ebp) je .L2
movl -12(%ebp), %eax movl -8(%ebp), %edx leal (%edx, %eax), %eax movl %eax, %edx sarl $31, %edx idivl -4(%ebp) movl %eax, -8(%ebp)
1000001101111100001001000001110000000000 0111010000011000 10001011010001000010010000010100 10001011010001100010010100010100 100011010000010000000010 1000100111000010 110000011111101000011111 11110111011111000010010000011100 10001001010001000010010000011000
¿En qu´
e se parecen estos bloques?
(2)
if (x != 0) y = (y+z)/x;!
*
"#
#
$
*
cmpl $0, -4(%ebp) je .L2movl -12(%ebp), %eax movl -8(%ebp), %edx leal (%edx, %eax), %eax movl %eax, %edx sarl $31, %edx idivl -4(%ebp) movl %eax, -8(%ebp)
1000001101111100001001000001110000000000 0111010000011000 10001011010001000010010000010100 10001011010001100010010100010100 100011010000010000000010 1000100111000010 110000011111101000011111 11110111011111000010010000011100 10001001010001000010010000011000
Realmente se trata de una misma l´ınea de c´odigo.
El HW entiende en 1’s y 0’s. Sin embargo no es un lenguaje “amigable” para el ser humano.
Interfaz HW/SW: Perspectiva hist´
orica
El HW inicialmente fue muy primitivo.
Dise˜nos de HW eran costosos. Las instrucciones deb´ıan ser muy simples.
E.g., una sola instrucci´on para sumar dos enteros. El SW tambi´en era bastante primitivo.
Las primitivas de SW reflejaban el HW de una manera muy cercana.
Hardware
Interfaz HW/SW: Ensambladores
Los ensambladores facilitaron la vida, por mucho... 1 instrucci´on en ensamblador = 1 instrucci´on en lenguaje m´aquina
Las instrucciones en ensamblador son cadenas de caracteres. M´as f´acil de leer y escribir para los humanos.
Uso de nombres simb´olicos.
Hardware
User program in asmAssembler specification
Assembler
Interfaz HW/SW: Lenguajes de alto nivel
Un mayor nivel de abstracci´on
La complejidad de los programas creci´o.
1 l´ınea de c´odigo en un lenguaje de alto nivel podr´ıa ser compilado en muchas l´ıneas de lenguaje ensamblador.
Hardware User program in C
C language specification
Assembler C compilerInterfaz HW/SW: escritura, compilaci´
on y ejecuci´
on
Hardware User program in C Assembler C compiler :+6%*>#=%* :+=?#2%*>#=%* R4"*>#=%* .exe file .c fileRendimiento en la traducci´
on de programas
¿De que depende el tiempo requerido para traducir un programa?
Del programamismo, por ejemplo si est´a escrito en C. Del compilador: cu´al es el conjunto (set) de instrucciones traduce del programa en C.
De la arquitectura del conjunto de instrucciones (ISA, Instruction Set Architecture): cu´al es el conjunto de instrucciones disponible para el compilador.
Laimplementaci´on de hardware: cuanto tiempo toma ejecutar las instrucciones.
Arquitectura del Conjunto de Instrucciones
ElISA define:
El estado del sistema: registros, memoria, contador de programa.
Las instrucciones que el CPU puede ejecutar.
El efecto que cada una de las instrucciones tiene en el estado del sistema.
CPU
Memory
PCDesiciones de dise˜
no de los ISA
Instrucciones
¿Qu´e instrucciones estar´an disponibles? ¿Qu´e hacen estas instrucciones?
¿C´omo estar´an codificadas estas instrucciones? Registros
¿Cu´antos registros habr´an?
¿Qu´e tama˜no tendr´an los registros? Memoria
x86
Aquellos procesadores que implementan el ISA de x86 completamente, dominan el mercado de los servidores, las pc de escritorio y laptop.
Dise˜no evolucionario:
Compatibilidad hacia atr´as hasta 8086 (de 1978)
Cada vez se han agregado m´as funcionalidades en el tiempo. CISC: Complex Instruction Set Computer
Muchas diferentes instrucciones con muchos diferentes formatos.
Solo un conjunto peque˜no de estas instrucciones se encuentran en programas en Linux.
Instrucciones m´as complejas pero capaces de realizar cosas complejas.
Evoluci´
on de x86
Nombre A˜no Transistores MHz
8086 1978 29k 5-10
386 1985 275k 16-33
Pentium 4F 2005 230M 2800-3800
Evoluci´on de 16, 32 y 64 bits.
Capacidades para emplear sistemas operativos complejos, como los basados en Unix, fue posible.
Procesadores x86
(1)
486 1989 1.9M Pentium 1993 3.1M Pentium/MMX 1997 4.5M Pentium Pro 1995 6.5M Pentium III 1999 8.2M Pentium IV 2001 42M Core 2 Duo 2006 291M Core i7 2008 731MFuncionalidades se han agregado en el tiempo.
Instrucciones para soportar funcionalidades multimedias. Operaciones en paralelo de 1, 2 y 4 bytes de datos. Instrucciones para mejorar la eficiencia de operaciones condicionales.
Evoluci´
on de los Procesadores
1 5 9 13 18 24 51 80 117 183 280 481 649 993 1,267 1,779 3,016 4,195 6,043 6,681 7,108 11,86514,387 19,48421,871 24,129 1 10 100 1000 10,000 100,000 1978 1980 1982 1984 1986 1988 1990 1992 1994 1996 1998 2000 2002 2004 2006 2008 2010 2012 Performance (vs. VAX-11/780) 25%/year 52%/year 22%/year IBM POWERstation 100, 150 MHz Digital Alphastation 4/266, 266 MHz Digital Alphastation 5/300, 300 MHz Digital Alphastation 5/500, 500 MHz AlphaServer 4000 5/600, 600 MHz 21164 Digital AlphaServer 8400 6/575, 575 MHz 21264Professional Workstation XP1000, 667 MHz 21264AIntel VC820 motherboard, 1.0 GHz Pentium III processor IBM Power4, 1.3 GHz
Intel Xeon EE 3.2 GHz AMD Athlon, 2.6 GHz Intel Core 2 Extreme 2 cores, 2.9 GHz
Intel Core Duo Extreme 2 cores, 3.0 GHz Intel Core i7 Extreme 4 cores 3.2 GHz (boost to 3.5 GHz)
Intel Xeon 4 cores, 3.3 GHz (boost to 3.6 GHz) Intel Xeon 6 cores, 3.3 GHz (boost to 3.6 GHz)
Intel D850EMVR motherboard (3.06 GHz, Pentium 4 processor with Hyper-Threading Technology)
1.5, VAX-11/785 AMD Athlon 64, 2.8 GHz Digital 3000 AXP/500, 150 MHz HP 9000/750, 66 MHz IBM RS6000/540, 30 MHz MIPS M2000, 25 MHz MIPS M/120, 16.7 MHz Sun-4/260, 16.7 MHz VAX 8700, 22 MHz AX-11/780, 5 MHz
Clones de x86: AMD
Historicamente AMD (Advanced Micro Devices) ha seguido de cerca a Intel.
Un poco m´as lentos, pero mucho m´as baratos
En su momento contrataron dise˜nadores de circuitos de Digital Equipment y otras compa˜nias.
Fabricaron el Opteron: fuerte competidor del Pentium 4 Desarrollaron x86-64, su propia extensi´on de x86 a 64 bits.
Definiciones
ArquitecturaTambi´en se conoce como ISA o arquitectura abstracta. Las partes del dise˜no del procesador que deben ser
comprendidas para escribir c´odigo en lenguaje ensamblador. ¿Qu´e es visible para el SW?
Microarquitectura
Es la impementaci´on de la arquitectura o arquitectura abstracta.
Arquitectura concreta.
¿Es el tama˜no de la memoria cach´e parte de la arquitectura? ¿La frecuencia de operaci´on de n´ucleo?
Perspectiva del programador de ensamblador
(1)
CPU
PC RegistersMemory
Object Code Program Data OS Data Addresses Data InstructionsStack
Condition CodesPerspectiva del programador de ensamblador
(2)
Estado visible al programador.
PC: Program Counter(Contador de programa). Direcci´on de la siguiente instrucci´on a ser ejecutada. Llamado EIP (IA32) o RIP (x86-64)
Archivo de registros
Altamente usados por los programas para procesar datos. C´odigos de condici´on
Almacena la informaci´on del estado de las operaciones arim´eticas y l´ogicas recientemente usadas.
Perspectiva del programador de ensamblador
(3)
Memoria
Arreglos direccionables por bytes. C´odigo/programa, datos, datos del SO.
Incluye el uso de la pila (stack) usada para soportar procedimientos.
Convertir un archivo de C en C´
odigo Objeto
Suponga c´odigo en archivos p1.c yp2.c
Comando de compilaci´on: gcc -O1 p1.c p2.c -o p
Optimizaciones b´asicas (-O1) El resultado queda enp text text binary binary Compiler (gcc -S) Assembler (gccor as) Linker (gccor ld) C program (p1.c p2.c) Asm program (p1.s p2.s)
Object program (p1.o p2.o)
Executable program (p)
Static libraries (.a)
Convertir un archivo de C en Ensamblador
gcc -O1 -S code.c
Produce un archivo code.s
C Code
int sum(int x, int y) {
int t = x+y; return t; }
Generated IA32 Assembly sum: pushl %ebp movl %esp,%ebp movl 12(%ebp),%eax addl 8(%ebp),%eax movl %ebp,%esp popl %ebp ret
Disassembly
“Desensamblar”
objdump -d program
Es una herramienta ´util para examinar el c´odigo objeto. Puede ser ejecutado sobre archivos .oo binarios finales.
Disassembled 00401040 <_sum>: 0: 55 push %ebp 1: 89 e5 mov %esp,%ebp 3: 8b 45 0c mov 0xc(%ebp),%eax 6: 03 45 08 add 0x8(%ebp),%eax 9: 89 ec mov %ebp,%esp b: 5d pop %ebp c: c3 ret
Tipos b´
asicos de instrucciones
Realizar funciones aritm´eticas empleando registros o datos en memoria.
Transferir/mover informaci´on entre registos y memoria Cargar datos de memoria a registros.
Almacenar datos de los registros a la memoria. Transferencia de control
Saltos incondicionales desde o hacia procedimientos. Saltos condicionales.
¿Qu´
e es un registro?
Es una ubicaci´on dentro del CPU que almacena una peque˜na cantidad de datos, los cuales pueden ser accesados muy r´apidamente (una vez cada ciclo de reloj).
Entre m´as peque˜no m´as r´apido.
Registros constituyen el coraz´on/centro de la programaci´on en ensamblador
Registros Enteros IA32
%eax %ecx %edx %ebx %esi %edi %esp %ebp g e n e ral p u rpo se accumulate counter data base source index destination index stack pointer base pointerRegistros Enteros IA32
%eax %ecx %edx %ebx %esi %edi %esp %ebp %ax %cx %dx %bx %si %di %sp %bp %ah %ch %dh %bh %al %cl %dl %bl16-bit virtual registers (backwards compatibility) g e n e ral p u rpo se accumulate counter data base source index destination index stack pointer base pointer