AssemblerCapitulo I Ciclo 2009-II

19
1 CAPITULO I INTRODUCCION 1.1. Arquitectura de computadoras La arquitectura de computadoras tiene dos enfoques (A) La arquitectura de Software. Es el diseño conceptual y la estructura operacional fundamental de un sistema de computadora cuando ejecuta un programa. Es decir, es un modelo y una descripción funcional de los requerimientos y las implementaciones de diseño para varias partes de una computadora, con especial interés en la forma en que la unidad central de proceso (CPU) trabaja internamente y accede a las direcciones de memoria. (B) La arquitectura de Hardware En este caso suele definirse como la forma de seleccionar e interconectar componentes de hardware para crear computadoras según los requerimientos de funcionalidad, rendimiento y costo .

Transcript of AssemblerCapitulo I Ciclo 2009-II

Page 1: AssemblerCapitulo I Ciclo 2009-II

1

CAPITULO I INTRODUCCION1.1. Arquitectura de computadorasLa arquitectura de computadoras tiene dos enfoques(A) La arquitectura de Software. Es el diseño conceptual y la estructura operacionalfundamental de un sistema de computadora cuando ejecuta un programa. Es decir, es unmodelo y una descripción funcional de los requerimientos y las implementaciones de diseño paravarias partes de una computadora, con especial interés en la forma en que la unidad central deproceso (CPU) trabaja internamente y accede a las direcciones de memoria.

MICROPROCESADORES YCONTROL DE PERIFÉRICOS

(B) La arquitectura de Hardware En este caso suele definirse como la forma deseleccionar e interconectar componentes de hardware para crear computadoras según losrequerimientos de funcionalidad, rendimiento y costo.

Page 2: AssemblerCapitulo I Ciclo 2009-II

2

1.2. LA COMPUTADORA ES UNA MAQUINA DE PROGRAMA ALMACENADO

PREMISA:“Todas las computadoras sean grandes o pequeñas, solamente funcionan conprogramas y el hombre es quien hace estos programas. La computadorasin programas no es nada, sería un montón de fierrosinútiles”.

Por tanto, surge la pregunta: “¿Qué es un programa de computadora digital?”. Acontinuación damos resùesta a esta pregunta.

¿Qué es una computadora digital y qué es un programa de computadoradigital?

EL HOMBRE Y LA COMPUTADORA SON MAQUINAS DE PROCESO DE DATOSCada proceso de la información tiene como meta la transformación de datos; esto es válidoindependientemente de que el proceso de la información sea manual a través de una personacompetente o automático cuando se utiliza una máquina.

Estos datos Datos deben tener un Datos valor específico de entrada de salida para el usuario

Una computadora digital es una máquina que explora secuencialmente una informaciónalmacenada en su memoria, llamada programa, y lo ejecuta siguiendo el principio de VonNeumann. Las computadoras digitales para ejecutar un programa tienen que cargarloíntegramente en la memoria antes de correrlo. Aclaremos este concepto: las computadoras osistemas de proceso de datos se caracterizan por el proceso digital de la información, así comopor la diferenciación en instrucciones (programas) y datos de la información ambosrepresentados digitalmente en la memoria principal.

El principio de Von Neumann

El cientifico húngaro-estadounidense John Von Neumann concibió la computadora digital, comouna máquina que cargaba en memoria un programa y lo ejecutaba instrucción por instrucción.Según el principio de Von Neumann, la ejecución de cada instrucción comprendía dos tiempos:

Leer la instrucción de memoria que apunta el registro IP

Tiempo de instrucciónDecodificarla, esto es interpretarqué significa cada instrucción

InstrucciónEjecutar la instrucción

Tiempo de ejecuciónGuardar los resultados en memoria

En consideración a este principio a las computadoras digitales también se les llama“Máquinas de Programa Almacenado”.

Hombre o máquina

Page 3: AssemblerCapitulo I Ciclo 2009-II

3

¿Qué es un programa de computadora digital?

“LOS ALGORITMOS SON LA ESENCIA DE LOS PROGRAMAS”

Todo programa tiene dos componentes o partes:

El primer componente es el algoritmo y El segundo componente son los datos.

El profesor Niklaus Wirth --inventor del Pascal y Modula 2—tituló a uno de sus más famosos libros:

"Algoritmos + Estructuras de datos = Programas"

Según esta ecuación primero diseñamos el algoritmo que resuelva el problema, y despuéspasamos a definir la estructura de datos utilizando un lenguaje de programación.

Estos dos componentes juntos el lógico: el algoritmo más el físico: la estructura de datos, seconvierten en un programa de computadora.

Los algoritmos tienen estas otras propiedades:

Sin el algoritmo no puede existir el programa Los algoritmos son independientes tanto del lenguaje de programación como de la

computadora que los ejecuta En esencia la solución de todo problema se puede describir por medio de un

algoritmo

PROGRAMACIÓN PROCEDURAL La primera parte de un curso de programación debe estardirigida a: "el aprendizaje y diseño de algoritmos". Pero... ¿Qué es un algoritmo?ALGORITMO:"Un algoritmo es un método para resolver un problema en un número finito depasos"

SENTENCIA O INSTRUCCION

Cada paso de un algoritmo se llama sentencia o instrucción. Cada instrucción comienza con un verbo. Los matemáticos son los más grandes constructores de algoritmos, y no solo eso,

siempre tratan de conseguir el camino más fácil para resolver un problema y estánpermanentemente buscando la verdad de las proposiciones a través de demostraciones(teoremas) y nunca se cansan de construir nuevos y mejores métodos para resolverproblemas.

La palabra algoritmo tiene relación con el estudio de la matemática, por eso provienede MAHAMMED AL-KHOWARIZMI, nombre de un matemático persa, que vivió durante elsiglo X y alcanzó renombre por ser el primer matemático que enunció las reglas paso a pasopara sumar, restar, multiplicar y dividir números decimales; la traducción al latín delapellido "AL-KHOWARIZMI" es decir algorismus, devino posteriormente en algoritmo, palabraque se ha hecho de uso tan popular en la informática.

Euclides el gran matemático griego (siglo IV antes de Cristo) creador de la geometríaEuclidiana, también inventó un método para encontrar el máximo común divisor de dosnúmeros, por eso podemos considerarlo como otro gran padre de la ciencia de losalgoritmos o algoritmia.

Page 4: AssemblerCapitulo I Ciclo 2009-II

4

Todo algoritmo debe describir tres partes:

- Entrada- Proceso- Salida

CARACTERISTICAS DE UN ALGORITMO

1.) Un algoritmo debe ser preciso e indicar el orden de realización de cada paso2.) Un algoritmo debe estar definido. Si se sigue un algoritmo dos veces se debe obtener el

mismo resultado3.) El algoritmo debe terminar en algún momento o sea debe tener un número finito de pasos.

¿CÓMO SE EJECUTA UN PROGRAMA DE COMPUTADORA DIGITAL?

Como hemos mencionado anteriorment a las computadoras digitales también se les llamacomputadoras de programa almacenado porque para ejecutar un programa tienen quecargarlo íntegramente en la memoria antes de correrlo. Un programa es una secuencia deinstrucciones dadas por una persona (programador) a una maquina (computadora),indicandole a esta ultima con detalle y precision cómo tiene que actuar para obtener lasolucion de un problema, cuyos datos van incluidos en el programa. Es decir se le indica a lamaquina, exacta y totalmente que es lo que tiene que hacer, mediante una secuenciade instrucciones, que se supone, la maquina obedece ciegamente. Empieza con la primerainstrucción y termina cuando encuentra una instrucción que le indica terminar.

MEMORIA secuencias de 1’s y 0’s

Se carga en memoria

Programa almacenado en disco

Para ejecutarse, el programa almacenado en disco, se carga en memoria

COMPUTADORAS Y PROGRAMAS: ¿LA COMPUTADORA UNA MAQUINA MARAVILLOSA?

El hombre moderno tiene la idea de que las máquinas le disminuyen una parte de sutrabajo. Esto es realmente cierto porque la generalidad de las máquinas tienen comofinalidad inmediata mover o transformar objetos físicos. La utilización de las máquinas enforma intensiva ha ocasionado un avance insospechado de nuestra civilización, por eso sehabla de la Era Industrial que corresponde a la etapa en que el hombre intensificó el usode las máquinas.

A partir del siglo XVIII, la revolución industrial generó un cambio en los sistemas deproducción, e introdujo un nuevo sistema de fabricación mediante máquinas impulsadas poruna nueva fuerza: el vapor. Hasta entonces los artículos se habían fabricado a mano porlos artesanos en los talleres. De aquella revolución surge el mundo industrial moderno y naceuna nueva clase: el obrero industrial, que trabaja en las fábricas bajo nuevas y difícilescondiciones. Se inventaron máquinas de procedimientos mecánicos, surgieron nuevosmétodos de producción logrando así fabricar mayor cantidad de artículos a menor precio y

Programa

Datos

Page 5: AssemblerCapitulo I Ciclo 2009-II

5

con mayor rapidez. Hoy día se hace esto automáticamente casi sin la intervención humana y loque se busca antes que nada es la calidad de lo que se produce.

En la década de los 50 el hombre inventa otro tipo de máquinas, que no realizan trabajofísico pero tienen la capacidad de procesar información; estas máquinas han resultadotan importantes que a la presente era se le llama “Era de la Información” yrecientemente ”Era del Conocimiento”. Estas máquinas se llaman computadoras uordenadores.

Lo único que hacen es recibir datos, llamados datos de entrada y producen datos de salida quetienen mayor valor que los datos de entrada. A partir de estos datos de salida el hombremoderno toma decisiones que de alguna manera pueden contribuir al movimiento o a lamodificación de objetos físicos.

La computadora, como hemos puntualizado anteriormente, es una máquina que no realizaningún trabajo físico, pero sin embargo ha contribuido a crear nuevos paradigmas en todo elquehacer humano, desplazando el punto central de los recursos del capital hacia los recursoshumanos y de información.

Las computadoras han logrado conformar un nuevo paradigma en la situación geopolítica delmundo que a su vez ha generado un nuevo paradigma en el ambiente internacional denegocios.

Las computadoras y las redes de computadoras han logrado el ascenso de la nuevaempresa abierta e interconectada que constituye un nuevo paradigma organizacional.

¿CÓMO SE CONSTRUYEN LOS PROGRAMAS DECOMPUTADORA DIGITAL?Los programas de computadora digital se construyen utilizando lenguajes de programación. Unlenguaje de programación es un conjunto de símbolos y reglas sintácticas y semánticas quedefinen su estructura y el significado de sus elementos y expresiones. Es utilizado para controlarel comportamiento físico y lógico de una máquina.

Un lenguaje de programación permite a uno o más programadores especificar de maneraprecisa sobre qué datos debe operar una computadora, y cómo estos datos deben seralmacenados o transmitidos y qué acciones debe tomar bajo una variada gama decircunstancias. Todo esto, a través de un lenguaje que intenta estar relativamente próximo allenguaje humano o natural, tal como sucede con el lenguaje Léxico. Los procesadores usadosen las computadoras son capaces de entender y actuar según lo indican programas escritos enun lenguaje fijo llamado lenguaje de máquina. Por eso es imperativo que todo programa escritoen cualquier lenguaje de programación sea traducido a otro escrito en lenguaje de máquina. Aese proceso se lo llama compilar y al programa traductor se le denomina compilador.Para crear un programa en cualquier lenguaje de programación deben seguirse los siguientespasos:

1. Edición2. Compilación3. Enlace o Linkeo4. Ejecución

Todo esto se aprecia en el siguiente diagrama conjunto:

Page 6: AssemblerCapitulo I Ciclo 2009-II

6

Diagrama conjunto de los pasos para editar, ensamblar , enlazar y crear elejecutable de un programa en el sistema operativo Windows

pantalla

teclado

editor.exe en memoria el editor

Nombre.ext ext = extensión ( asm, c, cpp, cob, … etc )

Compilador.exe en memoria el Compilador del lenguaje

Librería Nombre.obj programa.objeto de Objetos

LINK.EXE en memoria el enlazador

Nombre.exe programa ejecutable (codigo nativo o .exe)

Ejecución del programaDisco disquete pantalla/teclado

ENTRADAS Datos de entrada

Nombre.exe programa ejecutable en codigo nativo (.exe)

SALID

Datos de salida pantalla Disco disquete impresora

Page 7: AssemblerCapitulo I Ciclo 2009-II

7

GENERACIONES DE COMPUTADORAS Y LENGUAJES DEPROGRAMACION

GENERACIONCOMPUTAD HARDARE

COMPUTAD (Computadoras)SOFTWARE

(Lenguajes de Programacion)

1ra.Tubos al vacio Computadora

ENIAC 1949

Lenguaje de Máquina

Cadenas de 1’s y 0’s

2da. Transistores

Lenguaje Asembler

Escritos en mnemónicos

3ra. LSI

(Large

ScaleIntegrated)

Lenguajes de Alto Nivel

Funcionales o algorítmicosFORTRAN, COBOL, PL/1

Conversacionales o dialógicos

Pascal, Basic, C, C++, etc

4ta. VLSI

(Very Large

ScaleIntegrated)

Lenguajes de Cuarta Generación(4GL’s)

Visuales

Trabajan con Bases de DatosRelacionales

Visual Basic, Visual C++, Delphi,Power Builder, etc.

5ta. ULSI

(UltramicroscopicLarge

ScaleIntegrated)

(1) Lenguajes de Quinta

Generación (5GL’s)

Programación Orientada aObjetos

Programación Web

Java, Visual Basic .NET VisualC++. NET, C#

(2) Lenguajes de MarcadoGML --> SGML --> HTML --> XML

--> Dialectos XML(3) Lenguajes de Scripting

ASP, JavaScrpt, Perl, PHP,VBScript, Servlets, JSP, ASPX

Page 8: AssemblerCapitulo I Ciclo 2009-II

8

LA PRIMERA GENERACIÓN (1945-1957)

El ENIAC (Electronic Numerical Integrator and Computer) diseñado por John Mauchly y JohnEckert en la Universidad de Pennsylvania, fue el primer computador electrónico. Esta máquinaera de gran tamaño, pesaba 30 toneladas, ocupaba 15000 pies cuadrados, contenía más de18000 tubos de vacío, consumía 140 kilowatios, efectuaba 5000 sumas por segundo. Era unamáquina decimal.

QUINTA GENERACIÓN (1978-????)

A fines de los 70 se incrementa la densidad de transistores arriba de los 100,000 (VLSI)llegando a pasar del millón de transistores a fines de siglo.

En esta generación se desarrollan los microprocesadores de gran poder y a partir de ladécada de los 80, las computadoras personales o PC’s invaden el mercado sustituyendosignificativos aparatos domésticos y de oficina en un lapso de 20 años: la máquina deescribir, la calculadora de mesa, el fax, los receptores y reproductores de video y de audio, elservicio de correo tradicional, etc.

Las computadoras son dotadas de medios de comunicación, trabajo en red e inteligenciaartificial.

NanotecnologíaUno de los avances más espectaculares llevados a cabo en la física y laingeniería es sin duda laNanotecnologia. Se le conoce como la habilidad de diseñar, controlar y modificar materiales aescala microscopica con el fin de producir dispositivos “inteligentes” para todo tipo deaplicaciones.

Uno de los campos más desarrollados en esta materia ha sido el de la tecnología de lainformación. Hoy día el ser humano es capaz de crear dispositivos electrónicos tan diminutoscomo la célula humana.

Intel Corporation, el mayor fabricante de chips y procesadores en el mundo, produce transistorescuyas dimensiones son 50 veces menores que cualquier elemento vivo existente en lanaturaleza. Tan es así, que muchos de los dispositivos que utilizan las modernas Pentium IVtienen la mitad del tamaño de la Influenza A o B, del virus que produce la gripe

EL ENIAC

Page 9: AssemblerCapitulo I Ciclo 2009-II

9

GENERACION COMPUTADORAS HARDWARE SOFTWARE PERFORMANCE

1 ENIAC, UNIVAC I,IBM 700

Tubos, tamboresmagnetico

Codigo de maquina,programa enmemoria

2 Kb de memoria,10 KIPS

2 IBM 7094 Transistores,memoria de ferrita

Lenguajes de altonivel

32 Kb de memoria,200 KIPS

3 IBM 360 Y 370,PDP11

CI’s, memoria desemiconductores,microprocesadores

Graficos, programasestructurados

2Mb de memoria,5 MIPS

4 IBM 3090, CrayXMP IBM PC

VLSI, redes,discos opticos

Lenguajes orientadoa objetos, sistemasexpertos

8 Mb de memoria,30 MIPS

5 SUN SPARC,INTEL Paragon

ULSI, sistemasparalelos

Lenguajes paralelos,procesamientosimbolico

64 Mb de memoria10 GFLOPS

Page 10: AssemblerCapitulo I Ciclo 2009-II

10

1.3. DESDE EL PUNTO DE VISTA DE UN PROGRAMADOR QUE TIENE QUE DISEÑAR UNALGORITMO PARA DESPUES CONSTRUIR EL PROGRAMA ¿QUE PUEDE HACERUNA COMPUTADORA DIGITAL ?

A las computadoras se les asignan muchas propiedades poderosas y asombrosas. Sinembargo, todas las computadoras, sean ellas las más grandes o las más pequeñas,internamente son simples colecciones de componentes electrónicos que tienen cuatrocapacidades básicas y en cualquier lenguaje de programación se traduce a un códigoque combina, de la forma más optima posible, la utilización de los siguientes cuatro recursos :

(1) Memoria

(2) Registros

(3) Interrupciones

(4) Instrucciones de Máquina.

1.3.1. PRIMERA CAPACIDAD BASICA

Cada computadora tiene circuitos electrónicos que permiten almacenar y recuperar datos en sumemoria en forma directa, utilizando expresiones que se llaman instrucciones de asignación.¿Qué tipos de datos puede almacenar y recuperar?. Solamente datos numéricos binarios,compuestos de dígitos 1’s y 0’s. De ahí el nombre de computadoras digitales

Si un programador quiere guardar la letra “A” en la memoria de la computadora, utiliza el númerobinario 010000012 o su equivalente hexadecimal 4116, o también 41h –la h significa que estárepresentado en el sistema hexadecimal y el nombre de una variable, que es un nombre quecomienza con una letra, por ejemplo X:

Si recurre al lenguaje Cobol tiene que escribir: move “A” to X,

En lenguaje C, C++, Java: X = ‘A’.

En Object Pascal: X := ‘A’

y en Assembler: mov X, 41h

que debemos leer “almacena 41h en la dirección de la memoria a la que apunta X”, o en formamás simple para no mencionar la memoria, almacena 41h en X, o mejor todavía asigna 41h aX o esta otra mueve 41h a X.

¿En que parte de la memoria, se almacena el valor 41h que contiene X?. Para el programador deun lenguaje de alto nivel como el COBOL o el C, eso no importa, el sistema operativo se encargade verificar en que parte de la memoria almacena el resultado.

A expresiones del tipo “mov X,41h”, en las que a la izquierda de la coma aparece una variable,que es un nombre que comienza con una letra, y a la derecha de la coma aparece un número,de ahora en adelante las llamaremos instrucciones de asignación.

Page 11: AssemblerCapitulo I Ciclo 2009-II

11

SEGUNDA CAPACIDAD BASICA

Cada computadora tiene circuitos electrónicos que son diferentes a la memoria y que seencuentran en la CPU, que se llaman registros y que sirven para hacer aritmética. ¿Qué clase dearitmética pueden hacer?. Solamente aritmética simple: las cuatro clases de operacionesaritméticas: +, -, *, /. Esto es suma, resta, multiplicación y división. Las cuatro operaciones lasrealiza en el sistema binario, y para ejecutar estas cuatro operaciones tiene que utilizar losllamados registros (AX, BX, CX, DX, SI, etc.) que son componentes electrónicos imprescindiblesen toda computadora y las instrucciones de máquina requeridas que estudiaremos más adelante.

TERCERA CAPACIDAD BASICA

Esta capacidad se llama capacidad de interface de entrada/salida y se ejecuta medianteinstrucciones de entrada/salida. Cada computadora tiene un medio de comunicarse con Ud. ocon la persona que la utiliza. De todas maneras, si nosotros no pudiéramos introducir números yobtener resultados, estas máquinas no tendrían mucho uso ¿no es cierto?.

Pero es muy importante aclarar que la computadora digital solamente puede leer y escribir uncaracter ASCII o cadenas de caracteres ASCII. Este concepto es muy importante cuandoestudiemos la int 21h.

La forma más común de suministrar información a la computadora es por medio del teclado y losdatos de respuesta los visualizamos en la pantalla. El teclado sirve para leer un dato ASCII ocadenas de caracteres ASCII y poder guardarlos en la memoria de la computadora en el sistemabinario. En forma opuesta la pantalla sirve solamente para mostrar en pantalla un carácter ASCIIo cadenas de caracteres ASCII. Aunque no sea del todo claro, por ahora, si la computadoratiene almacenado en memoria un número en el sistema binario, para poder escribirlo en pantallatiene que convertirlo a su valor ASCII correspondiente. Tanto el teclado como la pantalla estánconectados a la computadora y se les denomina periféricos de entrada y salida.

Todos los lenguajes de programación tienen instrucciones propias para leer datos ASCII deteclado y escribir datos ASCII en la pantalla.

Los lenguajes de Máquina y Assembler realizan las operaciones de entrada y salida utilizandollamadas a interrupciones del sistema operativo. La más conocida de estas es la interrupción denombre int 21h, que utilizaremos profusamente en nuestros programas.

CUARTA CAPACIDAD BASICA

Las computadoras tienen circuitos electrónicos que pueden tomar decisiones simples. La clasede decisiones que pueden hacer los circuitos no es del tipo: "¿Quién ganará el partido de fútbolque se juega esta noche?" o "¿Cuál es la ciudad más grande del Perú?". Desafortunadamentelas computadoras sólo pueden decidir la verdad o falsedad de la comparación de dos números.Los dos números que se comparan pueden estar almacenados en dos registros o tambien unnumero en un registro y el otro en memoria, pero no pueden compararse dos números queambos esten almacenados en memoria. Después de comparar los dos números la computadoratiene instrucciones de máquina para bifurcar a la linea de código del programa que se le indique.

¿Y para que nos sirve realizar comparaciones de dos números?. La respuesta es simple: paracontrolar la ejecución del programa; por ejemplo para lograr que un grupo de instruccionesse repita un numero determinado de veces. Esto se estudiará más adelante con todo detalle.Ya hemos indicado que una vez que todas las instrucciones de programa han sido cargados enmemoria, la computadora empieza a ejecutar una instrucción cada vez, desde la primera hasta

Page 12: AssemblerCapitulo I Ciclo 2009-II

12

la ultima, que en lenguaje de máquina debe ser una instrucción “int 20h”, y en lenguajeAssembler el conjunto de instrucciones: “mov ah,4ch” e “int 21h”. Para hacerlo la computadoratiene un dispositivo de almacenamiento magnético, llamado registro IP, que está en la CPU,fuera de la memoria, cuyo contenido indica la dirección de memoria donde está almacenada lainstrucción que proximamente se va a ejecutar. Cada vez que se ejecuta una instrucción, elvalor de IP se incrementa automáticamente para apuntar a la siguiente instrucción a ejecutar.

1.4. ¿Porqué usamos las computadoras?. El Principio computacional.Desde que todas las computadoras solamente tienen estas cuatro capacidades básicas, tanelementales: (1) capacidad de guardar datos en memoria, (2) hacer aritmética simple, (3) ejecutarentrada/salida de datos, y (4) tomar decisiones triviales, entonces, si pensamos un poco, nosdamos cuenta que también el hombre tiene estas capacidades básicas, pero también resultanatural preguntarse lo siguiente:

¿Porqué usamos las computadoras?.El Pensamiento ComputacionalEl uso de la computadora recurriendo a sus cuatro capacidades básicas nos permiten diseñar métodos ymodelos computacionales para resolver problemas y diseñar sistemas que ninguno de nosotros podríaenfrentar solo. Este pensamiento no es otra cosa que aquello que representa una actitud universalmenteaplicable y un conjunto de habilidades que toda persona, no solamente informáticos o científicos decomputación, deben estar dispuesta a aprender y usar. El pensamiento computacional se construyesobre la capacidad y límites de los procesos computacionales, sean ejecutados por humanos omáquinas, y puede aplicarse para resolver problemas de la vida real en cualquiera de las áreas delconocimiento y de la ciencias.

El pensamiento computacional nos enfrenta al acertijo de la inteligencia mecánica:

¿qué cosas pueden hacer los humanos mejor que las computadoras? y

¿qué cosas pueden hacer las computadoras mejor que los humanos?

Más fundamentalmente se trata la pregunta: ¿qué es computable?.

El pensamiento computacional es una habilidad fundamental para toda persona, no solamentepara científicos de computación. A la lectura, escritura y aritmética que se enseña en la escuela,debiéramos añadir el pensamiento computacional como habilidad analítica de todo niño.

El pensamiento computacional involucra resolver problemas, diseñar sistemas y entender elcomportamiento humano basándose en los conceptos fundamentales de las ciencias de lacomputación.

El pensamiento computacional incluye un rango de herramientas mentales que reflejan laamplitud de las ciencias de la computación. Teniendo que resolver un problema particular, nospodemos preguntar: ¿cuán difícil es resolverlo? y ¿cuál es la mejor forma de resolverlo? Lasciencias de la computación se basan en fundamentos teóricos sólidos para responder a esaspreguntas con precisión.

El pensamiento computacional es reformular un problema aparentemente difícil en uno quesabemos resolver, tal vez por reducción, transformación o simulación. Es usar el razonamientoheurístico para descubrir una solución. Es planificar, aprender, actuar en la presencia deincertidumbre. Es buscar, buscar y seguir buscando, hasta obtener la solución. El pensamientocomputacional habrá calado en la vida de todos cuando palabras como algoritmos oprecondiciones sean parte del vocabulario de cualquier persona.

Page 13: AssemblerCapitulo I Ciclo 2009-II

13

Aplicando el pensamiento computacional se han logrado avances sorprendentes en diversos campos delconocimiento humano; por ejemplo:

El interés reciente de los científicos de computación en la biología, para representaralgorítmicamente las estructuras proteicas en formas que aclaren su función.

La nanocomputación y la computación cuántica están cambiando la forma de pensar de losquímicos y físicos.

La Nanotecnología, que trata de la fabricación molecular hecha por el hombre. Las Redesneuronales artificiales que es un procesamiento automático inspirado en la forma en quefunciona el sistema nervioso y el cerebro humano.

La Robótica es una ciencia o rama de la tecnología, que estudia el diseño yconstrucción de máquinas semejantes a nosotros, que nos reemplacen eficientementeen tareas que podríamos calificar como inhumanas. Un periódico de Pittsburg USA,publica (Universidad de Carnegie Mellon USA, 20/11/2006) lo siguiente: “Un vehículosin chofer humano, en el tráfico urbano de una ciudad, manejado por un conjunto decomputadoras usando un software de última generación, dispositivos de radar,sensores, lasers, cámaras y sistemas de posicionamiento global y otras cosas más, halogrado un viaje de 50 millas “a ciegas” de un total de 100 millas del trayecto. Se trata deevitar accidentes de transito en las calles de las ciudades de EEUU, donde 42,000personas murieron el año 2005 por esta causa.

También es el caso que los sistemas de software intensivo han posibilitado y aceleradola investigación científica. Por ejemplo el genoma humano está compuesto por 24secuencias cromosómicas distintas (22 autosomas + 2 cromosomas sexuales: X, Y) conun tamaño total aproximado de 3200 millones de pares de bases de ADN y todo esto hasido llevado a cabo con software de computadora. Por cierto, hay otro tema ético eneste campo que se refiere a la identificación de secuencias genéticas, que ahorasabemos que se pueden hacer mediante software.

Para hacer una tomografía computarizada, es bueno recordar que en la mayoría de loscasos una tomografía se basa en un procedimiento matemático realizado mediante unalgoritmo de computadora llamado algoritmo de reconstrucción tomográfica.

Un periódico de Pittsburg USA, publica (Universidad de Carnegie Mellon USA, 20/11/06)lo siguiente: “Un vehículo sin chofer humano, en el tráfico urbano de una ciudad,manejado por un conjunto de computadoras usando un software de última generación,dispositivos de radar, sensores, lasers, cámaras y sistemas de posicionamiento global yotras cosas más, ha logrado un viaje de 50 millas “a ciegas” de un total de 100 millasdel trayecto. Se trata de evitar accidentes de transito en las calles de las ciudades deEEUU, donde 42,000 personas murieron el año 2005 por esta causa. Se deberíapermitir patentar este tipo de cosas, porque el mérito de los Ingenieros de Software dedesarrollar los algoritmos con el que se llega a estas investigaciones queda siempre enel anonimato.

La importancia de los Sistemas de Información: El software de computadora, es elproducto que construyen los ingenieros de sistemas, y que se ha convertido en el almamater, de casi toda actividad humana, porque los sistemas de información conducena la toma de decisiones comerciales. Es el factor clave que diferencia los productos yservicios modernos. Está inmerso en sistemas de todo tipo: de transportes, médicos, detelecomunicaciones, militares, procesos industriales, entretenimientos, productos deoficina, etc., y podemos decir que la lista es interminable. El software es casi ineludibleen un mundo moderno. A medida que nos adentremos en el siglo XXI, el software seráel que nos conduzca a nuevos avances en todo. Podemos afirmar sin equivocarnos que

Page 14: AssemblerCapitulo I Ciclo 2009-II

14

el patrimonio más valioso de una empresa moderna son sus Archivos o Bases de Datos.Sin ellos, por ejemplo, no podrían existir los bancos comerciales.

En computación en las décadas de los 60’s y 70’s éramos parte de la “Sociedad de losDatos”. Ahora ya estamos inmersos en la “Sociedad de la Información” y estamosingresando a la “Sociedad del Conocimiento”. Podríamos seguir dando innumerables ysorprendentes ejemplos de los éxitos logrados con las computadoras digitales

.Procedemos ahora a dar respuesta a la pregunta formulada anteriormente:

¿porqué usamos las computadoras? :

Existen quizás tres buenas razones para usar estas máquinas a pesar de sus limitadascapacidades:

1.-) LAS USAMOS POR SU VELOCIDAD

Las computadoras son capaces de hacer estas cuatro capacidadesbásicas (almacenar datos en memoria, aritmética simple, tomar decisionessimples, operaciones de entrada/salida, a tremendas velocidades. Paraapreciar esto digamos que el número de sumas que ejecuta lacomputadora en un segundo, probablemente requeriría a una personatrabajando 40 horas semanales durante unos veinte años. Velocidadespara hacer otros tipos de operaciones aritméticas y tomar decisionessimples son comparables a la indicada para las sumas. Sin embargo lasoperaciones de entrada/salida que envuelven movimientos decomponentes mecánicos de máquinas como las impresoras o los discosduros resultan mucho más lentas. En un sistema de computación típico conuna impresora de alta velocidad se pueden imprimir miles de líneas porminuto y en una impresora conectada a una PC unos 300 caracteres porsegundo.

2.-) LAS USAMOS POR SU EXACTITUD Y CONFIABILIDAD

Las computadoras son exactas y confiables. Todo lo que hacen lo hacen agran velocidad y sin equivocarse. Como son máquinas fabricadas por loshombres ocasionalmente pueden malograrse y tienen que ser reparadas.Cuando en un proceso con la computadora se comete un error estesiempre se debe al hombre.

3.-) LAS USAMOS POR LA CAPACIDAD DEL HOMBRE DEDESCOMPONER UN PROBLEMA GRANDE EN UN CONJUNTO DEPEQUEÑOS PROBLEMAS

La razón más importante de usar las computadoras está dada por el hechode que el hombre puede resolver muchos problemas utilizando programasde computadora debido a su capacidad de enfrentar la complejidad noresolviendo directamente los problemas difíciles, sino por el contrariosolucionando equivalentemente un conjunto de pequeños problemas -uno después de otro-; con la aclaración de que las soluciones a estospequeños problemas pueden ser obtenidos usando las limitadascapacidades que poseen todas las computadoras.

INHERENTES

A

LA

MAQUINA

AL

HOMBRE

Page 15: AssemblerCapitulo I Ciclo 2009-II

15

Desde que las computadoras pueden hacer todas estas cosas con exactitud y a altasvelocidades, la razón para utilizarlas es obvia.Podemos resumir entonces que:

LA COMPUTADORA ES: EL HOMBRE ES:

Extremadamente rápida. Increíblemente lento para manejar información.

Precisa, nunca se equivoca. Impreciso, es propenso a cometer errores.

Estúpida, es una esclava repetidora. Brillante, porque tiene la facultad de crear, poreso es el amo.

ADEMAS:

La computadora trabaja con datos. El hombre trabaja con información.

Cuando la computadora lee transfiere Cuando el hombre lee, adquiere información datos de un medio electromagnético (disco, interpretando un conjunto de datos. La lectura pantalla,etc.)a otro medio electromagnético es un fenómeno extraordinariamente complejo. llamado memoria

Cuando la computadora escribe transfiere Unicamente el hombre escribe plasmando un datos de la memoria a otro medio pensamiento en un lenguaje. electromagnético (disco, pantalla, etc.)

Ambos constituyen un binomio de una riqueza incalculable

“El conocimiento es poder y la computadora es una máquina amplificadora de ese poder,es una innovadora vital y fructífera. La computadora crea valor mediante latransformación del poder cerebral de los trabajadores del conocimiento, con poco consumode energía y materiales nuevos”.

1.5 UN EJEMPLO ILUSTRATIVO

PROBLEMA.

( A ) Escribir un algoritmo que calcule la siguiente expresión en números hexadecimales:

DX = 1 + 2 + 3 + . . . + 6416 ( 6416 = 10010)NOTA: Calculando manualmente esta suma se obtiene 13BA16 que es igual a 505010

( B ) Codificar el algoritmo en leguaje C++ y en lenguaje de máquina

SOLUCION

(A) Diseño del algoritmo

(A1) Versión 1.0 (Algoritmo prosa)

* CALCULA DX = 1 + 2 + 3 + . . . + 6416Paso01: Mueve 0 a DXPaso02: Mueve 1 a AXPaso03: Calcula el valor de la expresión DX + AX, y mueve el resultado a DXpaso03: Suma 1 a AX y mueve el resultado a AXPaso04: ¿Es verdad que AX <= 6416? Si es verdad bifurcar a Paso03 y si es falso continuar con Paso05Paso05: Escribe en pantalla el valor contenido en DXPaso06: Termina

Page 16: AssemblerCapitulo I Ciclo 2009-II

16

(A2) VERSIÓN 2.0 (ALGORITMO SEUDOCODIGO)

CALCULA DX = 1 + 2 + 3 + . . . + 6416

Paso01: DX = 0 (Léase: mueve 0 a DX)Paso02: AX = 1 (Léase: mueve 1 a AX)Paso03: DX = DX + AX (Léase: calcula el valor de la expresión DX + AX, y mueve el resultado a DX)paso03: AX = AX + 1 (Léase: calcula el valor de la expresión AX + 1, y mueve el resultado a AX)Paso04: if (AX <= 6416) goto Paso03Paso05: Escribe(pantalla), DXPaso06: Termina

(B) Programa

(B1) Solución en lenguaje C++

Con el editor del lenguaje Turbo C++ se crea el siguiente programa fuente “SUMAC.CPP”

y si lo corremos obtenemos el valor de la suma pedida igual al número hexadecimal 13BA, cuyo valor en base decimal es el siguiente: 13BA = 1 * 163 + 3 * 162 + 11 * 161 + 10 * 160 = 5050

Page 17: AssemblerCapitulo I Ciclo 2009-II

17

(B2) Solución en lenguaje de Máquina

Se ejecutan los siguientes comandos:

(1) Inicio Ejecutar en la casilla abrir se digita “cmd” Pulsar la tecla <<Aceptar>>

y se ingresa al modo consola (modo DOS o de comandos)

(2) En la consola se digita: debug y se pulsa la tecla <enter> y se ingresa al lenguaje de máquina

(3) En la pantalla aparece un guión (el signo “–“ )

(4) A la derecha del guión se digita la letra “A” o “a” y se pulsa la tecla <<entrada>>

(5) Se digita el siguiente código: (los símbolos “;” significan comentario en lenguaje de máquina Los números hexadecimales 100, 103, etc se generan automáticamente y no es necesario digitarlos.

100 MOV DX,0 ; DX=0103 MOV AX,1 ; AX=1

106 ADD DX,AX ; DX=DX+AX 108 ADD AX,1 ; AX = AX + 1 10B CMP AX,64 ; Compara AX con 64 (numero hexadecimal igual a 100)

10E JLE 106 ; Significa jump to 109 106 if les sor equal110 INT 20H ; La int 20h termina el programa

Para terminar el ingreso del programa pulsar dos veces la tecla <<entrada>>

(6) Para correr el programa a la derecha del signo menos digitar “G 110”

El resultado se puede ver que en el registro DX se encuentra el valor hexadecimal 13BA quecomo hemos calculado anteriormente equivale al número decimal 5050.

:

(7) Para salir del programa debug,exe, se digita la letra Q (que significa Quit) y se pulsa la tecla<<entrada>>

Page 18: AssemblerCapitulo I Ciclo 2009-II

18

1.6 ¿Por qué programar en lenguaje de Máquina o en lenguaje Assembler?En la programación de computadoras existe un axioma:

“Primero consigue que un programa trabaje bien y.... después haz que trabaje más rápido”

y ¿qué pasa si no puedo hacer que mi programa sea más rápido?. Entonces sólo queda una solasolución: codificarlo en lenguaje Assembler. Un programa escrito en lenguaje Assembler requiereconsiderablemente menos memoria y tiempo de ejecución que un programa escrito en unlenguaje de alto nivel.

Sin embargo el lenguaje Assembler tiene una gran desventaja: es difícil de aprender por que comoel lenguaje C++ utiliza punteros o sea direcciones a memoria y además requiere mucho código,que se traduce en realizar más trabajo que el habitual en comparación con los lenguajes de altonivel, y por tanto consume mayor tiempo de programación.

Para los informáticos la productividad siempre ha sido algo muy importante, los sistemas deinformación tienen que desarrollarse en el menor tiempo posible, y esto ha ocasionado que loslenguajes hayan evolucionado desde los lenguajes de máquina, pasando por el lenguajeAssembler, seguir con los lenguajes de alto nivel, hasta llegar a los lenguajes visuales de quintageneración actuales.

En los inicios de la computación en las décadas de los 50’s y 60’s, se empezó programando enlenguaje de máquina, es decir con 1’s y 0’s; se continuó programando en lenguaje Assembler quesustituyó los números binarios por mnemónicos que son las instrucciones del Assembler, y en estabúsqueda incensante de aumentar la productividad de los programadores, aparecen los lenguajesde alto nivel y entre ellos el lenguaje C, que evolucionó hasta llegar al C++, que en la actualidad seha constituido en el lenguaje académico en las universidades; es el lenguaje que más rápidocambia, por eso lo han dotado de capacidades para trabajar en el nivel más alto y más bajoposible, y sus diseñadores han conseguido que su código sea muy rápido y eficiente;prácticamente ha desplazado en mucho al lenguaje Assembler.

Hace poco muchos productos para mostrar su calidad se jactaban de decir “hecho íntegramente enlenguaje Assembler”. Con la aparición del lenguaje C++, podemos afirmar que casi todos lossistemas operativos, protocolos de redes, utilitarios de los sistemas, compiladores de lenguajes,etc., están construidos utilizando el lenguaje C++.

Sin embargo, siempre existen módulos que a pesar de estar hechos con C++, siguen siendolentos. Ahí entra a tallar el lenguaje Assembler. Por eso, el binomio: “C++ & Assembler” resultainsustituible, es la herramienta más poderosa que existe para programar la computadora.

Debido a su código eficiente, la mayoría de libros de Assembler afirman que el lenguajeEnsamblador se aprende por las siguientes razones:

1. Conocer en mayor profundidad el funcionamiento básico de la máquina.2. Ganar rapidez en la ejecución de los programas.3. Tener acceso a posibilidades de la máquina que son inaccesibles desde otros lenguajes.4. Entender mejor cómo funciona un lenguaje de alto nivel.5. Utilizar las posibilidades de la máquina desde los propios lenguajes de alto nivel con

interface de estos lenguajes con el Assembler.

Sin embargo, existe otra razón muy poderosa para aprender a programar en lenguaje Assembler:este lenguaje es formativo. Ningún lenguaje de programación, con excepción del Assembler,

Page 19: AssemblerCapitulo I Ciclo 2009-II

19

muestra al programador, cómo trabaja internamente la computadora; ésta es una máquinaestática, que se convierte en una caja negra a la que se le ingresan datos para obtener resultados.¿Cómo lo hace?. Como es una máquina que no se mueve, aparentemente su funcionamiento esun misterio.

El Assembler es el único lenguaje de programación que no tiene librerías, y si no las tiene, noqueda otra salida: hay que construirlas; por que sin librerías, programar en Assembler es muytedioso, se requiere escribir mucho código, y esto desanima a cualquiera en seguir programandoen este lenguaje. El esfuerzo de construir estas librerías es muy grande, y lo lograrán solamentequienes lleguen a niveles avanzados de programación en Assembler, cuya curva de aprendizajetiene una pendiente muy elevada.

La actividad de programar, cualquiera que sea el lenguaje elegido, en general es un arte. Sinembargo, cuando se trata del ensamblador se convierte en un arte de maestros. Cuando sellega a entender la filosofía de cómo trabaja el procesador internamente, este lenguaje de locomplicado y difícil que parece a un comienzo se va transformando en sencillo, claro, puro y vadirecto al grano. Es cómo encontrar las respuestas a las siguientes preguntas en forma consciente:

1. ¿Cuál es el objetivo?2. ¿Cómo logro el objetivo?3. ¿Cómo optimizo lo logrado?

Ponderemos un poco lo anterior siguiendo una lógica secuencial, en la que cada paso dependa delanterior. Finalmente, de los tres pasos el más difícil es el tercero, y ahí es donde entra en escena ellenguaje ensamblador.

Una forma de probar cómo funciona el tiempo de instrucción del principio de Von Neumann,es ejecutar el programa debug.exe y digitar el comando U 100 y dar entrada y obtendrá losiguiente:

Observe cómo el procesador utilizando el tiempo de instrucción de Von Neumann, decodificatodos los 1’s y 0’s contenidos en la memoria y los interpreta como instrucciones de máquina. Enla figura anterior esta decodificación abarca, desde el desplazamiento 0100 hasta el 011C. Lasinstrucciones de máquina que usted ve en pantalla, serían las instrucciones que se ejecutaríansi se corre el programa con el comando –G (que significa en ingles Go). Por eso un programa enlenguaje de máquina, obligatoriamente tiene que tener una instrucción “int 20”, para terminar elprograma, caso contrario seguiría decodificando–ejecutantando todos los 1’s y 0’s de lamemoria RAM.