Algoritmos y Lenguaje de Programación 2008-1 Primer programa en C Cómo se ejecuta un programa • Primer programa clásico )Almacenado en archivo hello.c #include <stdio.h> Mario Medina C. [email protected] int main() { printf(“hello, world\n”); } Programa fuente Código ASCII • Compuesto por cadenas de caracteres • Almacenado en la memoria del computador como una secuencia de bytes • Texto es almacenado en ASCII )ASCII: American Standard Code for Information Interchange )Representa mayúsculas, minúsculas, números y caracteres de control usando 7 bits )Memoria es vector lineal de bytes )1 byte = 8 bits (bit = dígito binario) • Codificado en ASCII extendido )Cada byte tiene un valor numérico ` Tabla ASCII ` Expresado en bases 10, 16 y 8 ` 128 caracteres • Extendido a 8 bits por IBM, Apple, etc. )Representación de lenguajes europeos • Representación en 16 bits (Unicode) Tabla ASCII Programa fuente en memoria • 7 bits: b7b6b5b4b3b2b1 • Byte: 8 bits # i n c l u d e )Normalmente, bit 8 es 0 • Ejemplos )M: 10011012, 7710, 4D16, 1158 )j: 11010102, 10610, 6A16, 1528 )DEL: 11111112, 12710, 7F16, 1778 • ASCII 0010 a 3110 son caracteres especiales ©Mario Medina C. 35 105 h > 117 100 32 < s t d i o . 110 99 108 \n \n i n t SP m a i n ( ) \n { 32 109 10 123 116 101 SP 60 46 10 10 105 110 SP SP SP p r i n t f ( " h e l 10 32 32 32 32 112 101 108 l o , SP w o r l d \ n " ) ; \n } 108 32 119 10 125 111 44 111 114 108 100 92 102 110 40 34 34 41 111 62 116 40 105 SP 110 110 100 \n 105 105 116 104 114 97 115 41 104 59 1 Algoritmos y Lenguaje de Programación 2008-1 Programa fuente Cómo ve la memoria la CPU • Detalles: • CPU ve la memoria como un vector lineal de bytes Un byte )Valores ASCII dados en decimal )SP indica espacio )\n indica caracter de control de avance de línea (newline) )No confundir con \ n, que son dos caracteres diferentes Dir. 0 Dir. 1 Dir. 2 )Cada byte tiene una dirección asociada )Es la unidad mínima direccionable ` No es posible direccionar un bit Dir. 2n-1 Memoria (2n bytes) Información = bits + contexto El Computador CPU • La secuencia de bits 00110101 11011001 11011110 11000010 puede representar: )Un número entero )Un número decimal )Una secuencia de 4 caracteres )Una instrucción de código de máquina )Una imagen en blanco y negro • Toda información se almacena como bits Registros PC ALU Bus de sistema Bus de Memoria Memoria RAM Puente I/O Interfaz de Bus Bus de E/S Controlador USB Mouse Teclado Adaptador Gráfico Controlador Disco Programa ejecutable Pantalla )Significado depende del contexto Elementos de un Computador Ranuras de Expansión Disco Leyendo el Teclado CPU Registros • CPU )Unidad Aritmética/Lógica (ALU) )Registros )Contador de Programa (PC) • Memoria RAM )Transferencia de datos sólo entre CPU y RAM • Buses • Entrada/Salida PC ` Mouse ` Teclado Bus de sistema Bus de Memoria Memoria RAM Puente I/O Interfaz de Bus )Tarjeta Gráfica “hello” ` Pantalla )Controlador de disco ` Discos magnéticos ` Discos ópticos )Interfaz Redes Bus de E/S Controlador USB Mouse Teclado Usuario escribe “hello” ©Mario Medina C. ALU )Controlador USB Adaptador Gráfico Controlador Disco Pantalla Disco Ranuras de Expansión Programa Ejecutable “hello” 2 Algoritmos y Lenguaje de Programación 2008-1 Leyendo el teclado Carga del programa CPU Registros • Usuario escribe “hello” • Intérprete de comandos recibe los caracteres y los carga en registros de CPU • Luego, los caracteres son almacenados en memoria RAM • La tecla “enter” indica al intérprete que se terminó de escribir un comando PC ALU Bus de sistema Bus de Memoria Memoria RAM Puente I/O Interfaz de Bus Bus de E/S Controlador USB Adaptador Gráfico Controlador Disco Ranuras de Expansión Programa Ejecutable “hello” Pantalla Mouse Teclado Disco Carga del programa “hello” Escribiendo a pantalla CPU Registros • El intérprete de comandos solicita al sistema operativo la ejecución del programa “hello” • El sistema operativo localiza el programa en disco y lo carga en memoria RAM PC ALU Bus de sistema Memoria RAM Puente I/O Interfaz de Bus )No hay intervención de la CPU )Transferencia de datos via DMA “hello” Bus de E/S Controlador USB Adaptador Gráfico Controlador Disco Pantalla Mouse Teclado “hello, world\n” Escribiendo a pantalla En resumen • La CPU lee secuencialmente el programa “hello” en memoria RAM, y ejecuta las instrucciones leídas • La ejecución del programa consiste en desplegar el mensaje “hello, world\n” en la pantalla, por lo que la CPU envía los caracteres correspondientes al adaptador gráfico • Archivos se almacenan en disco ©Mario Medina C. Bus de Memoria )Discos magnéticos )Discos ópticos )Memorias flash • Programas se ejecutan en memoria )Transferencias disco ⇔ memoria )Cargador (loader) Disco Ranuras de Expansión Programa Ejecutable “hello” • Sistema operativo )Windows, Linux, Mac OS X )Interpreta comandos del usuario )Invoca aplicaciones ` Compilador ` Editor ` Cargador )Interactúa con el hardware 3