Upload
clauturi-gonzalez
View
6.321
Download
10
Embed Size (px)
Citation preview
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
BREVE RESEÑA DE LA COMPUTACION
Las computadoras de la primera Generación emplearon bulbos para procesar
información. Los operadores ingresaban los datos y programas en código especial
por medio de tarjetas perforadas. El almacenamiento interno se lograba con un
tambor que giraba rápidamente, sobre el cual un dispositivo de lectura/escritura
colocaba marcas magnéticas. Esas computadoras de bulbos eran mucho más
grandes y generaban más calor que los modelos contemporáneos.
Eckert y Mauchly contribuyeron al desarrollo de computadoras de la Primera
Generación formando una compañía privada y construyendo UNIVAC I, que el
Comité del censo utilizó para evaluar el censo de 1950. La IBM tenía el monopolio
de los equipos de procesamiento de datos a base de tarjetas perforadas y estaba
teniendo un gran auge en productos como rebanadores de carne, básculas para
comestibles, relojes y otros artículos; sin embargo no había logrado el contrato
para el Censo de 1950.
Comenzó entonces a construir computadoras electrónicas y su primera entrada fue
con la IBM 701 en 1953. Después de un lento pero excitante comienzo la IBM 701
se convirtió en un producto comercialmente viable. Sin embargo en 1954 fue
introducido el modelo IBM 650, el cual es la razón por la que IBM disfruta hoy de
una gran parte del mercado de las computadoras. La administración de la IBM
asumió un gran riesgo y estimó una venta de 50 computadoras.
Este número era mayor que la cantidad de computadoras instaladas en esa época
en E.U. De hecho la IBM instaló 1000 computadoras. El resto es historia. Aunque
caras y de uso limitado las computadoras fueron aceptadas rápidamente por las
Compañías privadas y de Gobierno. A la mitad de los años 50 IBM y Remington
Rand se consolidaban como líderes en la fabricación de computadoras.
Segunda Generación (1959-1964)Transistor Compatibilidad Limitada:
El invento del transistor hizo posible una nueva Generación de computadoras, más
rápidas, más pequeñas y con menores necesidades de ventilación. Sin embargo el
costo seguía siendo una porción significativa del presupuesto de una Compañía.
Las computadoras de la segunda generación también utilizaban redes de núcleos
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
magnéticos en lugar de tambores giratorios para el almacenamiento primario.
Estos núcleos contenían pequeños anillos de material magnético, enlazados entre
sí, en los cuales podían almacenarse datos e instrucciones.
Los programas de computadoras también mejoraron. El COBOL desarrollado
durante la 1era generación estaba ya disponible comercialmente. Los programas
escritos para una computadora podían transferirse a otra con un mínimo esfuerzo.
El escribir un programa ya no requería entender plenamente el hardware de la
computación.
Las computadoras de la 2da Generación eran sustancialmente más pequeñas y
rápidas que las de bulbos, y se usaban para nuevas aplicaciones, como en los
sistemas para reservación en líneas aéreas, control de tráfico aéreo y simulaciones
para uso general. Las empresas comenzaron a aplicar las computadoras a tareas
de almacenamiento de registros, como manejo de inventarios, nómina y
contabilidad.
La marina de E.U. utilizó las computadoras de la Segunda Generación para crear el
primer simulador de vuelo. (Whirlwind I ). HoneyWell se colocó como el primer
competidor durante la segunda generación de computadoras. Burroughs, Univac,
NCR, CDC, HoneyWell, los más grandes competidores de IBM durante los 60s se
conocieron como el grupo BUNCH.
Tercera Generación (1964-1971)Circuitos Integrados, Compatibilidad con Equipo Mayor, Multiprogramación, Minicomputadora:
Las computadoras de la tercera generación emergieron con el desarrollo de los
circuitos integrados (pastillas de silicio) en las cuales se colocan miles de
componentes electrónicos, en una integración en miniatura. Las computadoras
nuevamente se hicieron más pequeñas, más rápidas, desprendían menos calor y
eran energéticamente más eficientes.
Antes del advenimiento de los circuitos integrados, las computadoras estaban
diseñadas para aplicaciones matemáticas o de negocios, pero no para las dos
cosas. Los circuitos integrados permitieron a los fabricantes de computadoras
incrementar la flexibilidad de los programas, y estandarizar sus modelos.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
La IBM 360 una de las primeras computadoras comerciales que usó circuitos
integrados, podía realizar tanto análisis numéricos como administración ó
procesamiento de archivos. Los clientes podían escalar sus sistemas 360 a
modelos IBM de mayor tamaño y podían todavía correr sus programas actuales.
Las computadoras trabajaban a tal velocidad que proporcionaban la capacidad de
correr más de un programa de manera simultánea (multiprogramación).
Por ejemplo la computadora podía estar calculando la nomina y aceptando pedidos
al mismo tiempo. Minicomputadoras, Con la introducción del modelo 360 IBM
acaparó el 70% del mercado, para evitar competir directamente con IBM la
empresa Digital Equipment Corporation DEC redirigió sus esfuerzos hacia
computadoras pequeñas. Mucho menos costosas de comprar y de operar que las
computadoras grandes, las mini computadoras se desarrollaron durante la
segunda generación pero alcanzaron su mayor auge entre 1960 y 1970.
Cuarta Generación (1971 a la fecha)Microprocesador, Chips de memoria, Microminiaturización:
Dos mejoras en la tecnología de las computadoras marcan el inicio de la cuarta
generación: el reemplazo de las memorias con núcleos magnéticos, por las de
chips de silicio y la colocación de Muchos más componentes en un Chip: producto
de la microminiaturización de los circuitos electrónicos. El tamaño reducido del
microprocesador y de chips hizo posible la creación de las computadoras
personales (PC Personal Computer).
Hoy en día las tecnologías LSI (Integración a gran escala) y VLSI (integración a muy
gran escala) permiten que cientos de miles de componentes electrónicos se
almacenen en un chip. Usando VLSI, un fabricante puede hacer que una
computadora pequeña rivalice con una computadora de la primera generación que
ocupaba un cuarto completo.
IMPACTO DE LA COMPUTADORAS EN LA SOCIEDAD
El mundo moderno le debe parte de su evolución a las computadoras, ya que a través de ellas se ha brindado un mecanismo el cual permite que los niveles de
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
desarrollo tanto económico, electrónico como cultural se acerquen de forma más rápida.
las computadoras están en nuestras vidas, se comienza a notar una dependencia y por lo tanto comienza a surgir una unión necesaria para desarrollar nuestras actividades y para alcanzar nuestras metas; pero además como lo hadicho, ARTHUR SCHLESINGER, en la revista del influyente Council of Foreign Relations, Foreign Affairs en su número de Septiembre/Octubre de 1997, en cuanto a la Democracia también se esperaque pasen cambios, en este sentido establecio que la Democracia moderna en sí misma es el fruto de ñla tecnologia y del capitalismo, furezas que son cosificadas y puestas como variables independientes y dinámicas.
En un cierto sentido, para SCHLEINGER, la tecnología está primero: ella crea el reloj, la imprenta, la brújula, la máquina de vapor….. y esas innovaciones conducen al aparecimiento del capitalismo, y con el tiempo generan el racionalismo, el individualismo….. y la Democracia. El coportamiento de la tecnología se conduce según la ley de la aceleración que en una época sustentó el progreso sobre un vasto multiplicador que dio velocidad a la sociedad de la industrializacion, dejandole algun tiempo para sus ajustes institucionales.
las computadoras han hecho que el individuo adquiera un nivel de racionalidad y por ende de critica, no obstante es de anotar que la vida diaria se mueve muco mas rapido, lo que permite que todo tienda a alinearse, es decir, todo pasa todo fluye sin atender gran parte de lo humano que tiene el ser humano.
Ahora bien el capitalismo ha encontrado en la evolucion de las maquinas su mejor refugio y permitido que en la sociedad se creen espacios que de una u otra forma permita una discriminacion, ya que no todo el mundo tiene acceso a la Red, de forma tal que que unos y otros vivan en mindos en mundos aparte en donde ya no es la Red lo que los une sino lo que los aparta. Es necesario hacer un esfuerzo grande para que ojala todas las personas podamos acceder a la Red, y de esta forma ese impacto social pueda cesar.
Al tema viene la pregunta ¿ el mundo de las computadoras o de los hombres ? y con ella se nos advierte que aunque las computadoras nos han permitido hacer la vida mas facil, es importante que el dominio por parte del hombre no decline, porque de lo contrario las computadoras nos harian parte de su vida. Ahora bien lo intereasnte es que aunque las computadoras sean de vital importancia no se permita que perdamos la naturaleza de lo humano y nos volvamos mecanicos de la naturaleza, al fin y al cabo desconocer la importnacia de la tecnolgia es como desconocer el trancurso de la historia, porque la tecnoligia es fruto del deasrrollo de los pueblos; entonces tanto el uno como el otro estan ligados por el desarrllo.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
La tecnologia de la informacion es una de las disciplinas que rapidamente ha pasado del plano estrictamente cientifico al mundo cotidiano. Cada vez y con mayor frecuencia el hombre incorpora a su vida cotidiana una serie de instrumentos de naturaleza electornica que tienen como referncia obligada el acopio, proceasmiento om uso de datos, en su campo vital.
Además es de anotar que la comoutadora tambien puede ser considrada como mlla representacion fisica del cambio tecnologico, ella favorece su desarrllo e impulsa con ello, una gran variedad de procesos; los cambios sufridoa por las computadoras obedecieron en gran medida a transformaciones simlutaneas en los procesos decisorios desarrllados en las organizaciones por lo tanto estos cambios implican que las organizaciones se han transformado en entidades sociales que trasacienden el tiempo y el espacio incorporandoesn a un mundo virtual, una hiper realidad que difumina y acelera los hechos alejandolos en este procesode su esencia original. las computadoras ademas de camniar nuestras vidas han cambido el mundo. ---Estoy invitando a todos los maestros y profesionales de esta area y/o carrera a colaborar construyendo este sitio dedicado a esta hermosa y util profesion aportando el material apropiado a cada uno de los mas de 1,000 temas que lo componen.
Tambien los invito a aportar material a los mas de 30,000 temas que constituyen las 30 carreras profesionales que se imparten en los Institutos Tecnologicos de Mexico y se encuentran en este sitio.
www.MiTecnologico.com es un esfuerzo personal y de muchos amigos de MEXICO y el Mundo Hispano por devolver algo de lo mucho que hemos recibido en el proceso de la educacion superior, saludos Prof Lauro Soto, Ensenada, BC, Mexico
DEFINICIONES
LENGUAJE DE ALTO NIVEL,BAJO NIVEL, ENSAMBLADOR Y MAQUINA
Un lenguaje de programación de alto nivel se caracteriza por expresar los algoritmos de una
manera adecuada a la capacidad cognitiva humana, en lugar de a la capacidad ejecutora de las
máquinas.
Los lenguajes de alto nivel logran la independencia del tipo de máquina y se aproximan al lenguaje natural. Se puede decir que el principal problema que presentan los lenguajes de alto nivel es la gran cantidad de ellos que existen actualmente en uso.
Los lenguajes de alto nivel, también denominados lenguajes evolucionados, surgen con posterioridad a los anteriores, con los siguientes objetivos, entre otros:
Lograr independencia de la máquina, pudiendo utilizar un mismo programa en diferentes equipos con la única condición de disponer de un programa traductor o compilador, que lo
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
suministra el fabricante, para obtener el programa ejecutable en lenguaje binario de la máquina que se trate. Además, no se necesita conocer el hardware específico de dicha máquina.
Aproximarse al lenguaje natural, para que el programa se pueda escribir y leer de una forma más sencilla, eliminando muchas de las posibilidades de cometer errores que se daban en el lenguaje máquina, ya que se utilizan palabras (en inglés) en lugar de cadenas de símbolos sin ningún significado aparente.
Incluir rutinas de uso frecuente como son las de entrada/salida, funciones matemáticas, manejo de tablas, etc, que figuran en una especie de librería del lenguaje, de tal manera que se pueden utilizar siempre que se quieran sin necesidad de programarlas cada vez.
Se puede decir que el principal problema que presentan los lenguajes de alto nivel es la gran cantidad de ellos que existen actualmente en uso (FORTRAN, LISP, ALGOL, COBOL, APL, SNOBOL, PROLOG, MODULA2, ALGOL68, PASCAL, SIMULA67, ADA, C++, LIS, EUCLID, BASIC), además de las diferentes versiones o dialectos que se han desarrollado de algunos de ellos.
En los primeros lenguajes de alto nivel la limitación era que se orientaban a un área específica y
sus instrucciones requerían de una sintaxis predefinida. Se clasifican como lenguajes
procedimentales.
Otra limitación de los lenguajes de alto nivel es que se requiere de ciertos conocimientos de
programación para realizar las secuencias de instrucciones lógicas. Los lenguajes de alto nivel se
crearon para que el usuario común pudiese solucionar un problema de procesamiento de datos de
una manera más fácil y rápida.
Por esta razón, a finales de los años 1950 surgió un nuevo tipo de lenguajes de programación que
evitaba estos inconvenientes, a costa de ceder un poco en las ventajas. Estos lenguajes se
llaman de tercera generación o de alto nivel, en contraposición a los de bajo nivel o de nivel
próximo a la máquina.
[editar]Ventajas e inconvenientes
Ventajas
Genera un código más sencillo y comprensible.
Escribir un código válido para diversas máquinas y, posiblemente, sistemas operativos.
Inconvenientes
Reducción de velocidad al ceder el trabajo de bajo nivel a la máquina.
Algunos requieren que la máquina cliente posea una determinada plataforma.
[editar]Principales lenguajes de alto nivel
Ada
ALGOL
BASIC
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
C++
C#
COBOL
Fortran
Java
Lisp
Modula-2
Pascal
Perl
PHP
PL/SQL
Python
Lenguaje de bajo nivelUn lenguaje de programación de bajo nivel es el que proporciona un set de instrucciones
aritmeticológicas sin la capacidad de encapsular dichas instrucciones en funciones que no estén ya
contempladas en la arquitectura del hardware
Contenido
[ocultar]
1 Complejidad Vs Dificultad
2 Interacción Máquina Vs Humano
3 Primera generación
4 Segunda generación
5 Véase también
[editar]Complejidad Vs Dificultad
Dicho lenguaje es muy simple o nada complicado, pero estructurar programas a ese nivel es muy difícil.
Dado que este lenguaje viene dado por las especificaciones técnicas del hardware, no permite una
abstracción fuera de lo estipulado para el microprocesador de un ordenador. Consecuentemente, es
fácilmente trasladado a lenguaje de máquina.
La estructura de los lenguajes son como sigue:
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
1. Lenguaje Máquina - Las invocaciones a memoria, como los procesos aritmético lógicos son
posiciones literales de conmutadores físicos del hardware en su representación booleana.
Estos lenguajes son literales de tareas.
2. Lenguajes de bajo nivel - Son instrucciones que ensamblan los grupos de conmutadores
necesarios para expresar una mínima lógica aritmética. Están intimamente vinculados al
hardware. Por norma general están disponibles a nivel firmware, cmos o chip set. Estos
lenguajes estan orientados a procesos. Los procesos se componen de tareas. Contienen
tantas instrucciones como la arquitectura del hardware así haya sido diseñada.
Por ejemplo: La arquitectura CISC contiene muchas mas instrucciones a este nivel, que la
RISC.
Son denominados como ensambladores de un hardware concreto.
1. Lenguajes de medio nivel - Son aquellos que, basandose en los juegos de instrucciones
disponibles (chip set), permiten el uso de funciones a nivel aritmético, pero a nivel lógico
dependen de literales en esamblador. Estos lenguajes estan orientados a procedimientos.
Los procedimientos se componen de procesos.
Ejemplos: C, Basic.
1. Lenguajes de alto nivel - Son aquellos que permiten una máxima flexibilidad al
programador a la hora de abstraerse o de ser literal. Permiten un camino
bidireccional entre el lenguaje máquina y una expresión casi oral entre la escritura
del programa y su posterior compilación. Estos lenguajes estan orientado a objetos.
Los objetos se componen de propiedades cuya naturaleza emerge de
procedimientos.
Ejemplos: C++, Fortran, Cobol, Lisp.
1. Lenguajes de aplicaciones - Son aquellos que no permiten una
bidireccionalidad conceptual entre el lenguaje máquina y los lenguajes de alto
nivel, ni tampoco la literalidad a la hora de invocar conceptos lógicos. Se
basan en librerias creadas en lenguajes de alto nivel. Pueden permitir la
creacion de nuevas librerias, pero son propietarias y dependientes de las
suministradas por la aplicación. Estos lenguajes estan orientados a eventos.
Los eventos acontecen cuando las propiedades de un objeto interactuan con
otro.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
Ejemplos: Visual Basic para aplicaciones.
1. Lenguajes de redes - Son aquellos que se basan en un convenio de
instrucciones totalmente independientes de la máquina, y
completamente dependientes de la red a la que están orientadas. Se
dividen en descriptivos (HTML, XML, VML), de cliente-Servidor (Java,
PHP) y de script.
La palabra bajo no implica que el lenguaje sea inferior a un lenguaje de alto nivel; se refiere
a la reducida abstracción entre el lenguaje y el hardware. Por ejemplo, se utiliza este tipo
de lenguajes para programar controladores de dispositivos.
[editar]Interacción Máquina Vs Humano
En este tipo de lenguajes se trabaja a nivel de instrucciones, es decir, su
programación es al más fino detalle, además, está completamente
orientado a la máquina.
Adaptación - Máxima entre programación y aprovechamiento del
recurso de la máquina.
Velocidad - Máxima al contar con un acceso directo a los recursos, sin
capas intermedias.
Portabilidad - Mínima por estar restringido a las especificaciones del
fabricante.
Abstracción - Mínima por depender completamente de la técnica del
hardware.
Uso - Requiere de la máxima atención y de una organización
estructurada en base a los planos del hardware y del objetivo del
software.
[editar]Primera generación
El lenguaje de programación de primera generación (por sus siglas en
inglés: 1GL), es el lenguaje de código máquina. Es el único lenguaje que un
microprocesador entiende de forma nativa. El lenguaje máquina no puede
ser escrito o leído usando un editor de texto, y por lo tanto es raro que una
persona lo use directamente.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
[editar]Segunda generación
El lenguaje de programación de segunda generación (por sus siglas en
inglés: 2GL), es el lenguaje ensamblador. Se considera de segunda
generación porque, aunque no es lenguaje nativo del microprocesador, un
programador de lenguaje ensamblador debe conocer la arquitectura del
microprocesador (como por ejemplo las particularidades de sus registros o
su conjunto de instrucciones).
Lenguaje ensambladorUno o varios wikipedistas están trabajando actualmente en extender este
artículo o sección.Es posible que a causa de ello haya lagunas de contenido o deficiencias de formato. Si quieres puedes ayudar y editar, pero por favor antes de realizar correcciones mayores contáctalos en
sus páginas de discusión, o en la página de discusión del artículo para poder coordinar la redacción.
Para otros usos de este término, véase Ensamblador (desambiguación).
También ver: Ensamblador
Lenguaje de máquina del Intel 8088. El código de máquina en hexadecimal se resalta en rojo, el equivalente
en lenguaje assembler en magenta, y las direcciones de memoria donde se encuentra el código, en azul.
Abajo se ve un texto en hexadecimal y ASCII.
El lenguaje ensamblador, o assembler (assembly language en inglés ) es un lenguaje de
programación debajo nivel para los computadores, microprocesadores, microcontroladores, y
otros circuitos integradosprogramables. Implementa una representación simbólica de los códigos
de máquina binarios y otras constantes necesarias para programar una arquitectura dada
de CPU y constituye la representación más directa del código máquina específico para cada
arquitectura legible por un programador. Esta representación es usualmente definida por el
fabricante de hardware, y está basada en los mnemónicos que simbolizan los pasos de
procesamiento (las instrucciones), los registros del procesador, las posiciones de memoria, y otras
características del lenguaje. Un lenguaje ensamblador es por lo tanto específico a
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
cierta arquitectura de computador física (o virtual). Esto está en contraste con la mayoría de los
lenguajes de programación de alto nivel, que, idealmente son portables.
Un programa utilitario llamado ensamblador es usado para traducir sentencias del lenguaje
ensamblador al código de máquina del computador objetivo. El ensamblador realiza una
traducción más o menos isomorfa (un mapeo de uno a uno) desde las sentencias mnemónicas a
las instrucciones y datos de máquina. Esto está en contraste con los lenguajes de alto nivel, en los
cuales una sola declaración generalmente da lugar a muchas instrucciones de máquina.
Muchos sofisticados ensambladores ofrecen mecanismos adicionales para facilitar el desarrollo del
programa, controlar el proceso de ensamblaje, y la ayuda de depuración. Particularmente, la
mayoría de los ensambladores modernos incluyen una facilidad de macro (descrita más abajo), y
son llamados macro ensambladores.
Fue usado principalmente en los inicios del desarrollo de software, cuando aún no se contaba con
potentes lenguajes de alto nivel y los recursos eran limitados. Actualmente se utiliza con
frecuencia en ambientes académicos y de investigación, especialmente cuando se requiere la
manipulación directa de hardware, altos rendimientos, o un uso de recursos controlado y reducido.
Muchos dispositivos programables (como los microcontroladores) aún cuentan con el ensamblador
como la única manera de ser manipulados.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
Contenido
[ocultar]
1 Características
2 Programa ensamblador
o 2.1 Número de pasos
o 2.2 Ensambladores de alto nivel
o 2.3 Uso del término
3 Lenguaje
o 3.1 Instrucciones de CPU
o 3.2 Ensamblado
o 3.3 Ejemplo
4 Diseño del lenguaje
o 4.1 Elementos básicos
4.1.1 Mnemónicos de opcode y mnemónicos extendidos
4.1.2 Secciones de datos
4.1.3 Directivas del ensamblador
o 4.2 Macros
o 4.3 Soporte para programación estructurada
5 Uso del lenguaje ensamblador
o 5.1 Perspectiva histórica
o 5.2 Uso actual
o 5.3 Aplicaciones típicas
6 Detalles adicionales
7 Ejemplos de lenguaje ensamblador
o 7.1 Ejemplo para la arquitectura x86
o 7.2 Ejemplo para el computador virtual (POCA)
o 7.3 Ejemplo para el µC Intel 8051
o 7.4 Ejemplo para el Microchip PIC16F84
8 Referencias
9 Lectura adicional
10 Véase también
11 Enlaces externos
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
[editar]Características
El código escrito en lenguaje ensamblador posee una cierta dificultad de ser entendido ya que
su estructura se acerca al lenguaje máquina, es decir, es un lenguaje de bajo nivel.
El lenguaje ensamblador es difícilmente portable, es decir, un código escrito para un
microprocesador, puede necesitar ser modificado, para poder ser usado en otra máquina
distinta. Al cambiar a una máquina con arquitectura diferente, generalmente es necesario
reescribirlo completamente.
Los programas hechos, por un programador experto, en lenguaje ensamblador, son
generalmente mucho más rápidos y consumen menos recursos del sistema (memoria RAM y
ROM.) que el programa equivalente compilado desde un lenguaje de alto nivel. Al programar
cuidadosamente en lenguaje ensamblador se pueden crear programas que se ejecutan más
rápidamente y ocupan menos espacio que con lenguajes de alto nivel.
Con el lenguaje ensamblador se tiene un control muy preciso de las tareas realizadas por
un microprocesador por lo que se pueden crear segmentos de código difíciles y/o muy
ineficientes de programar en un lenguaje de alto nivel, ya que, entre otras cosas, en el
lenguaje ensamblador se dispone de instrucciones del CPU que generalmente no están
disponibles en los lenguajes de alto nivel.
También se puede controlar el tiempo en que tarda una rutina en ejecutarse, e impedir que se
interrumpa durante su ejecución.
[editar]Programa ensamblador
Artículo principal: Ensamblador
Típicamente, un programa ensamblador (assembler en inglés) moderno crea código
objeto traduciendo instrucciones mnemónicas de lenguaje ensamblador en opcodes, y resolviendo
los nombres simbólicos para las localizaciones de memoria y otras entidades.1 El uso de
referencias simbólicas es una característica clave del lenguaje ensamblador, evitando tediosos
cálculos y actualizaciones manuales de las direcciones después de cada modificación del
programa. La mayoría de los ensambladores también incluyen facilidades de macros para realizar
sustitución textual - ej. generar cortas secuencias de instrucciones como expansión en línea en
vez de llamar a subrutinas.
Los ensambladores son generalmente más simples de escribir que los compiladores para
los lenguajes de alto nivel, y han estado disponibles desde los años 1950. Los ensambladores
modernos, especialmente para las arquitecturas basadas en RISC, tales como MIPS, Sun SPARC,
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
y HP PA-RISC, así como también para el x86 (-64), optimizan la planificación de
instrucciones para explotar la segmentación del CPU eficientemente.
En los compiladores para lenguajes de alto nivel, son el último paso antes de generar el código
ejecutable.
[editar]Número de pasos
Hay dos tipos de ensambladores basados en cuántos pasos a través de la fuente son necesarios
para producir el programa ejecutable.
Los ensambladores de un solo paso pasan a través del código fuente una vez y asumen que
todos los símbolos serán definidos antes de cualquier instrucción que los refiera.
Los ensambladores del dos paso crean una tabla con todos los símbolos y sus valores en el
primer paso, después usan la tabla en un segundo paso para generar código. El ensamblador
debe por lo menos poder determinar la longitud de cada instrucción en el primer paso para
que puedan ser calculadas las direcciones de los símbolos.
La ventaja de un ensamblador de un solo paso es la velocidad, que no es tan importante como lo
fue en un momento dados los avances en velocidad y capacidades del computador. La ventaja del
ensamblador de dos pasos es que los símbolos pueden ser definidos dondequiera en el código
fuente del programa. Esto permite a los programas ser definidos de maneras más lógicas y más
significativas, haciendo los programas de ensamblador de dos paso más fáciles leer y mantener.2
[editar]Ensambladores de alto nivel
Los más sofisticados ensambladores de alto nivel proporcionan abstracciones del lenguaje tales
como:
Estructuras de control avanzadas
Declaraciones e invocaciones de procedimientos/funciones de alto nivel
Tipos de datos abstractos de alto nivel, incluyendo las estructuras/records, uniones, clases, y
conjuntos
Procesamiento de macros sofisticado (aunque está disponible en los ensambladores ordinarios
desde finales 1960 para el IBM/360, entre otras máquinas)
Características de programación orientada a objetos
[editar]Uso del término
Note que, en el uso profesional normal, el término ensamblador es frecuentemente usado tanto
para referirse al lenguaje ensamblador como también al programa ensamblador (que convierte
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
el código fuente escrito en el lenguaje ensamblador a código objeto que luego será enlazado para
producir lenguaje de máquina). Las dos expresiones siguientes utilizan el término "ensamblador":
"El CP/CMS fue escrito en ensamblador del IBM S/360"
"El ASM-H fue un ensamblador del S/370 ampliamente usado"
La primera se refiere al lenguaje y la segundo se refiere al programa.
[editar]Lenguaje
El lenguaje ensamblador refleja directamente la arquitectura y las instrucciones en lenguaje de
máquina del CPU, y pueden ser muy diferentes de una arquitectura de CPU a otra.
Cadaarquitectura de microprocesador tiene su propio lenguaje de máquina, y en consecuencia su
propio lenguaje ensamblador ya que este se encuentra muy ligado al la estructura del hardware
para el cual se programa. Los microprocesadores difieren en el tipo y número de operaciones que
soportan; también pueden tener diferente cantidad de registros, y distinta representación de los
tipos de datos en memoria. Aunque la mayoría de los microprocesadores son capaces de cumplir
esencialmente las mismas funciones, la forma en que lo hacen difiere y los respectivos lenguajes
ensamblador reflejan tal diferencia.
[editar]Instrucciones de CPU
La mayoría de los CPU tienen más o menos los mismos grupos de instrucciones, aunque no
necesariamente tienen todas las instrucciones de cada grupo. Las operaciones que se pueden
realizar varían de un CPU a otro. Un CPU particular puede tener instrucciones que no tenga otro y
viceversa. Los primeros microprocesadores de 8 bits no tenían operaciones para multiplicar o
dividir números, por ejemplo, y había que hacer subrutinas para realizar esas operaciones. Otros
CPU puede que no tengan operaciones de punto flotante y habría que hacer o conseguir
bibliotecas que realicen esas operaciones.
Las instrucciones del CPU pueden agruparse, de acuerdo a su funcionalidad, en:
Operaciones con enteros: (de 8, 16, 32 y 64 bits dependiendo de la arquitectura del CPU)
Estas son operaciones realizadas por la Unidad aritmético lógica del CPU
Operaciones aritméticas. Como suma, resta, multiplicación, división, módulo, cambio de signo
Operaciones booleanas. Operaciones lógicas bit a bit como AND, OR, XOR, NOT
Operaciones de bits. Como desplazamiento y rotaciones de bits (hacia la derecha o hacia la
izquierda, a través del bit del acarreo o sin él)
Comparaciones
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
Operaciones de mover datos:
Entre los registros y la memoria:
Aunque la instrucción se llama "mover", en el CPU, "mover datos" significa en realidad copiar
datos, desde un origen a un destino, sin que el dato desaparezca del origen.
Se pueden mover valores:
desde un registro a otro
desde un registro a un lugar de la memoria
desde un lugar de la memoria a un registro
desde un lugar a otro de la memoria
un valor inmediato a un registro
un valor inmediato a un lugar de memoria
Operaciones de stack:
PUSH (escribe datos hacia el tope del stack)
POP (lee datos desde el tope del stack)
Operaciones de entrada/salida:
Son operaciones que mueven datos de un registro, desde y hacia un puerto; o de la memoria,
desde y hacia un puerto
INPUT Lectura desde un puerto de entrada
OUTPUT Escritura hacia un puerto de salida
Operaciones para el control del flujo del programa:
Llamadas y retornos de subrutinas
Llamadas y retornos de interrupciones
Saltos condicionales de acuerdo al resultado de
la comparaciones
Saltos incondicionales
Operaciones con números reales:
El estándar para las operaciones con números
reales en los CPU está definido por el IEEE 754.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
Un CPU puede tener operaciones de punto flotante con números reales mediante
el coprocesador numérico (si lo hay), como las siguientes:
Operaciones aritméticas. Suma, resta,
multiplicación, división, cambio de signo, valor
absoluto, parte entera
Operaciones trascendentales
Operaciones trigonométricas. Seno, coseno,
tangente, arcotangente
Operaciones con logaritmos, potencias y
raíces
Otras
El lenguaje ensamblador tiene mnemónicos para cada una de las instrucciones del CPU en adición a
otros mnemónicos a ser procesados por el programa ensamblador (como por ejemplo macros y otras
sentencias en tiempo de ensamblado).
[editar]Ensamblado
La transformación del lenguaje ensamblador en código máquina la realiza un programa ensamblador, y
la traducción inversa la puede efectuar un desensamblador. A diferencia de loslenguajes de alto nivel,
aquí hay usualmente una correspondencia 1 a 1 entre las instrucciones simples del ensamblador y el
lenguaje de máquina. Sin embargo, en algunos casos, un ensamblador puede proveer "pseudo
instrucciones" que se expanden en un código de máquina más extenso a fin de proveer la funcionalidad
necesaria y simplificar la programación. Por ejemplo, para un código máquina condicional como "si X
mayor o igual que", un ensamblador puede utilizar una pseudoinstrucción al grupo "haga si menor que",
y "si = 0" sobre el resultado de la condición anterior. Los Ensambladores más completos también
proveen un rico lenguaje de macros que se utiliza para generar código más complejo y secuencias de
datos.
Para el mismo procesador y el mismo conjunto de instrucciones de CPU, diferentes programas
ensambladores pueden tener, cada uno de ellos, variaciones y diferencias en el conjunto de
mnemónicos o en la sintaxis de su lenguaje ensamblador. Por ejemplo, en un lenguaje ensamblador
para la arquitectura x86, se puede expresar la instrucción para mover 5 al registro AL de la siguiente
manera: MOV AL, 5, mientras que para otro ensamblador para la misma arquitectura se expresaría al
revés: MOV 5, AL. Ambos lenguajes ensambladores harían exactamente lo mismo, solo que está
expresado de manera diferente. El primero usa la sintaxis de Intel, mientras que el segundo usa la
sintaxis de AT&T
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
El uso del ensamblador no resuelve definitivamente el problema de cómo programar un sistema basado
en microprocesador de modo sencillo ya que para hacer un uso eficiente del mismo, hay que conocer a
fondo el microprocesador, los registros de trabajo de que dispone, la estructura de la memoria, y
muchas cosas más referentes a su estructura básica de funcionamiento.
[editar]Ejemplo
Un programa escrito en lenguaje ensamblador consiste en una serie de instrucciones que corresponden
al flujo de órdenes ejecutables por un microprocesador.
Por ejemplo, en el lenguaje ensamblador para un procesador x86:
La sentencia
MOV AL, 061h
Asigna el valor hexadecimal 61 (97 decimal) al registro "AL".
El programa ensamblador lee la sentencia de arriba y produce su equivalente binario en lenguaje de
máquina
Binario: 10110000
01100001 (hexadecimal: B061)
El mnemónico MOV es un código de operación u "opcode". El opcode es seguido por una lista de
argumentos o parámetros, completando una típica instrucción de ensamblador. En el ejemplo, AL es un
registro de 8 bits del procesador, al cual se le asignará el valor hexadecimal 61 especificado.
El código de máquina generado por el ensamblador consiste de 2 bytes. El primer byte contiene
empaquetado la instrucción MOV y el código del registro hacia donde se va a mover el dato:
10110 000 | | | +--- Registro AL +-------- Intrucción MOV
En el segundo byte se especifica el número 61h, escrito en binario como 01100001, que se asignará al
registro AL, quedando la sentencia ejecutable como:
10110000 01100001
La cual puede ser entendida y ejecutada directamente por el procesador.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
[editar]Diseño del lenguaje
[editar]Elementos básicos
Hay un grado grande de diversidad en la manera en que los autores de los ensambladores categorizan
las sentencias y en la nomenclatura que usan. En particular, algunos describen cualquier cosa como
pseudo-operación (pseudo-Op), con excepción del mnemónico de máquina o del mnemónico extendido.
Un típico lenguaje ensamblador consiste en 3 tipos de sentencias de instrucción que son usadas para
definir las operaciones del programa:
Mnemónicos de opcode
Secciones de datos
Directivas de ensamblador
[editar]Mnemónicos de opcode y mnemónicos extendidos
A diferencia de las instrucciones (sentencias) de los lenguajes de alto nivel, instrucciones en el lenguaje
ensamblador son generalmente muy simples. Generalmente, una mnemónico es un nombre simbólico
para una sola instrucción en lenguaje de máquina ejecutable (un opcode), y hay por lo menos un
mnemónico de opcode definido para cada instrucción en lenguaje de máquina. Cada instrucción
consiste típicamente en una operación u opcode más cero o más operandos. La mayoría de las
instrucciones refieren a un solo valor, o a un par de valores. Los operandos pueden ser inmediatos
(típicamente valores de un byte, codificados en la propia instrucción), registros especificados en la
instrucción, implícitos o las direcciones de los datos localizados en otra parte de la memoria. Esto está
determinado por la arquitectura subyacente del procesador, el ensamblador simplemente refleja cómo
trabaja esta arquitectura. Los mnemónicos extendidos son frecuentemente usados para especificar una
combinación de un opcode con un operando específico, ej, el ensamblador del System/360 usa
a B como un mnemónico extendido para el BC con una máscara de 15 y NOP al BC con una máscara de
0.
Los mnemónicos extendidos son frecuentemente usados para soportar usos especializados de
instrucciones, a menudo para propósitos no obvios con respecto al nombre de la instrucción. Por
ejemplo, muchos CPU no tienen una instrucción explícita de NOP (No Operación), pero tienen
instrucciones que puedan ser usadas para tal propósito. En el CPU 8086, la instrucción XCHG
AX,AX (intercambia el registro AX consigo mismo) es usada para el NOP, con NOP siendo un pseudo-
opcode para codificar la instrucción XCHG AX,AX. Algunos desensambladores reconocen esto y
decodificarán la instrucción XCHG AX,AX como NOP. Similarmente, los ensambladores de IBM para
el System/360 usan los mnemónicos extendidos NOP y NOPR con las máscaras cero para BC y BCR.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
Algunos ensambladores también soportan simples macroinstrucciones incorporadas que generan dos o
más instrucciones de máquina. Por ejemplo, con algunos ensambladores para elZ80, la instrucción
LD HL, BC
genera las instrucciones
LD L, C
LD H, B.3
LD HL, BC es un pseudo-opcode, que en este caso simula ser una instrucción de 16 bits, cuando se
expande se producen dos instrucciones de 8 bits que equivalen a la simulada de 16 bits.
[editar]Secciones de datos
Hay instrucciones usadas para definir elementos de datos para manejar datos y variables.
Definen el tipo de dato, la longitud y la alineación de los datos. Estas instrucciones también
pueden definir si los datos están disponibles para programas exteriores (programas
ensamblados separadamente) o solamente para el programa en el cual la sección de datos está
definida. Algunos ensambladores clasifican estas instrucciones como pseudo-ops.
[editar]Directivas del ensamblador
Los directivas del ensamblador, también llamadas los pseudo opcodes, pseudo-operaciones o pseudo-
ops, son instrucciones que son ejecutadas por un ensamblador en el tiempo de ensamblado, no por un
CPU en el tiempo de ejecución. Pueden hacer al ensamblado del programa dependiente de parámetros
entrados por un programador, de modo que un programa pueda ser ensamblado de diferentes maneras,
quizás para diversos aplicaciones. También pueden ser usadas para manipular la presentación de un
programa para hacerlo más fácil leer y mantener.
Por ejemplo, las directivas pudieran ser usadas para reservar áreas de almacenamiento y
opcionalmente su para asignar su contenido inicial. Los nombres de las directivas a menudo comienzan
con un punto para distinguirlas de las instrucciones de máquina.
Los ensambladores simbólicos le permiten a los programadores asociar nombres arbitrarios (etiquetas o
símbolos) a posiciones de memoria. Usualmente, cada constante y variable tiene un nombre para que
las instrucciones pueden referir a esas ubicaciones por nombre, así promoviendo el código
autodocumentado. En el código ejecutable, el nombre de cada subprograma es asociado a su punto de
entrada, así que cualquier llamada a un subprograma puede usar su nombre. Dentro de subprogramas,
a los destinos GOTO se le dan etiquetas. Algunos ensambladores soportan símbolos locales que son
léxicamente distintos de los símbolos normales (ej, el uso de "10$" como un destino GOTO).
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
La mayoríaPlantilla:Dubious de los ensambladores proporcionan un manejo flexible de símbolos,
permitiendo a los programadores manejar diversos espacios de nombres, calcular
automáticamente offsets dentro de estructuras de datos, y asignar etiquetas que refieren a valores
literales o al resultado de cálculos simples realizados por el ensamblador. Las etiquetas también pueden
ser usadas para inicializar constantes y variables con direcciones relocalizables.
Los lenguajes ensambladores, como la mayoría de los otros lenguajes de computador, permiten que
comentarios sean añadidos al código fuente, que son ignorados por el programa ensamblador. El buen
uso de los comentarios es aún más importante con código ensamblador que con lenguajes de alto nivel,
pues el significado y el propósito de una secuencia de instrucciones es más duro de descifrar a partir del
código en sí mismo.
El uso sabio de estas facilidades puede simplificar grandemente los problemas de codificar y mantener
el código de bajo nivel. El código fuente de lenguaje ensamblador crudo generado por compiladores o
desensambladores - código sin ningún comentario, ni símbolos con algún sentido, ni definiciones de
datos - es muy difícil de leer cuando deben hacerse cambios.
[editar]Macros
Muchos ensambladores soportan macros predefinidos, y otras soportan macros definidos (y
repetidamente redefinibles) por el programador que implican secuencias de líneas del texto en las
cuales las variables y las constantes están empotradas. Esta secuencia de líneas de texto puede incluir
opcodes o directivas. Una vez un macro ha sido definido, su nombre puede ser usado en lugar de un
mnemónico. Cuando el ensamblador procesa tal sentencia, reemplaza la sentencia por las líneas del
texto asociadas a ese macro, entonces las procesa como si hubieran existido en el archivo del código
fuente original (incluyendo, en algunos ensambladores, la expansión de cualquier macro que exista en el
texto de reemplazo).
Puesto que las macros pueden tener nombres "cortos" pero se expanden a varias o de hecho muchas
líneas de código, pueden ser usados para hacer que los programas en lenguaje ensamblador parezcan
ser mucho más cortos, requiriendo menos líneas de código fuente, como sucede con los lenguajes de
alto nivel. También pueden ser usados para añadir niveles de estructura más altos a los programas
ensamblador, opcionalmente introducen código de depuración empotrado vía parámetros y otras
características similares.
Muchos ensambladores tienen macros incorporados (o predefinidos) para las llamadas de sistema y
otras secuencias especiales de código, tales como la generación y el almacenamiento de los datos
realizados a través de avanzadas operaciones bitwise y booleanas usadas en juegos, software de
seguridad, gestión de datos, y criptografía.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
Los macro ensambladores a menudo permiten a los macros tomar parámetros. Algunos ensambladores
incluyen lenguajes macro muy sofisticados, incorporando elementos de lenguajes de alto nivel tales
como parámetros opcionales, variables simbólicas, condiciones, manipulaciones de strings operaciones
aritméticas, todos usables durante la ejecución de un macro dado, y permitiendo a los macros guardar el
contexto o intercambiar información. Así un macro puede generar un gran número de instrucciones o
definiciones de datos en lenguaje ensamblador, basadas en los argumentos del macro. Esto pudiera ser
usado para generar, por ejemplo, estructuras de datos de estilo de records o bucles "desenrrollados", o
podría generar algoritmos enteros basados en parámetros complejos. Una organización, usando
lenguaje ensamblador, que ha sido fuertemente extendido usando tal suite de macros, puede ser
considerada que se está trabajando en un lenguaje de alto nivel, puesto que tales programadores no
están trabajando con los elementos conceptuales de más bajo nivel del computador.
Las macros fueron usados para adaptar sistemas de software de gran escala para clientes específicos
en la era del mainframe, y también fueron usados por el personal del cliente para satisfacer las
necesidades de sus patrones haciendo versiones específicas de los sistemas operativos del fabricante.
Esto fue hecho, por ejemplo, por los programadores de sistema que trabajaban con el Conversational
Monitor System / Virtual Machine (CMS/VM) de IBM y con los add-ons "real time transaction processing"
de IBM, CICS, Customer Information Control System, y ACP/TPF, el airline/financial system que
comenzó en los años 1970 y todavía corre con muchos sistemas de reservaciones
computarizados (CRS) y sistemas de tarjeta de crédito de hoy.
También es posible usar solamente las habilidades de procesamiento de macros de un ensamblador
para generar código escrito en lenguajes completamente diferentes, por ejemplo, para generar una
versión de un programa en COBOL usando un programa macro ensamblador puro conteniendo líneas
de código COBOL dentro de operadores de tiempo ensamblaje dando instrucciones al ensamblador
para generar código arbitrario.
Esto era porque, como en los años 1970 fue observado, el concepto de "procesamiento de macro" es
independiente del concepto de "ensamblaje", siendo el anterior, en términos modernos, más un
procesamiento de textos, que una generación de código objeto. El concepto de procesamiento de macro
apareció, y aparece, en el lenguaje de programación C, que soporta "instrucciones de preprocesador"
de fijar variables, y hace pruebas condicionales en sus valores. Observe que a diferencia de ciertos
macroprocesadores previos dentro de los ensambladores, el preprocesador de C no es Turing-
completo porque carecía la capacidad de bucle o "go to", esto último permitiendo a los programas hacer
bucles.
A pesar del poder del procesamiento macro, éste dejó de usarse en muchos lenguajes de alto nivel (una
importante excepción es C/C++) mientras que seguía siendo perenne para los ensambladores. Esto era
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
porque muchos programadores estaban bastante confundidos por la sustitución de parámetros macro y
no distinguían la diferencia entre procesamiento macro, el ensamblaje y la ejecución.Plantilla:Dubious
La sustitución de parámetros macro es estrictamente por nombre: en el tiempo de procesamiento macro,
el valor de un parámetro es sustituido textualmente por su nombre. La clase más famosa
de bugs resultantes era el uso de un parámetro que en sí mismo era una expresión y no un nombre
primario cuando el escritor macro esperaba un nombre. En el macro:
foo: macro a
load a*b
la intención era que la rutina que llama proporcionaría el nombre de una variable, y la variable o
constante "global" b sería usada para multiplicar a "a". Si foo es llamado con el parámetroa-c, ocurre la
expansión macro load a-c*b. Para evitar cualquier posible ambigüedad, los usuarios de macro
procesadores pueden encerrar en paréntesis los parámetros formales dentro de las definiciones de
macros, o las rutinas que llaman pueden envolver en paréntesis los parámetos de entrada.4 Así, el
macro correcto, con los paréntesis, sería:
foo: macro a
load (a)*b
y su expansión, daría como resultado: load (a-c)*b
El PL/I y elC/C++ ofrecen macros, pero la esta facilidad solo puede manipular texto. Por otra parte, los
lenguajes homoicónicos, tales como Lisp, Prolog, y Forth, retienen el poder de los macros de lenguaje
ensamblador porque pueden manipular su propio código como datos.
[editar]Soporte para programación estructurada
Algunos ensambladores han incorporado elementos de programación estructurada para codificar el flujo
de la ejecución. El ejemplo más temprano de este acercamiento estaba en elConcept-14 macro set,
originalmente propuesto por el Dr. H.D. Mills (marzo de 1970), e implementado por Marvin Kessler en la
Federal Systems Division de IBM, que extendió el macro ensamblador del S/360 con bloques de control
de flujo IF/ELSE/ENDIF y similares.5 Esto era una manera de reducir o eliminar el uso de operaciones
GOTO en el código en lenguaje ensamblador, uno de los principales factores que causaban código
espagueti en el lenguaje ensamblador. Este acercamiento fue ampliamente aceptado a principios de los
años 1980 (los últimos días del uso de lenguaje ensamblador en gran escala).
Un curioso diseño fue A-natural, un ensamblador "orientado a la corriente" (stream-oriented) para los
procesadores 8080/Z80[cita requerida] de Whitesmiths Ltd. (desarrolladores del sistema operativo Idris, similar
al Unix), y lo que fue reportado como el primer compilador C comercial). El lenguaje fue clasificado como
un ensamblador, porque trabajaba con elementos de máquina crudos tales como opcodes, registros, y
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
referencias de memoria; pero incorporaba una sintaxis de expresión para indicar el orden de ejecución.
Los paréntesis y otros símbolos especiales, junto con construcciones de programación estructurada
orientadas a bloques, controlaban la secuencia de las instrucciones generadas. A-natural fue construido
como el lenguaje objeto de un compilador C, en vez de la codificación manual, pero su sintaxis lógica
ganó algunos seguidores.
Ha habido poca demanda aparente para ensambladores más sofisticados debido a la declinación del
desarrollo de lenguaje ensamblador de larga escala.6 A pesar de eso, todavía se están desarrollando y
aplicando en casos donde las limitaciones de recursos o las particularidades en la arquitectura de
sistema objetivo previenen el efectivo uso de lenguajes de alto nivel.7
[editar]Uso del lenguaje ensamblador
[editar]Perspectiva histórica
Loslenguajes ensambladores fueron primero desarrollados en los años 1950, cuando fueron referidos
como lenguajes de programación de segunda generación. Por ejemplo, el SOAP (Symbolic Optimal
Assembly Program) era un lenguaje ensamblador de 1957 para el computador IBM 650. Los lenguajes
ensambladores eliminaron mucha de la propensión a errores y del consumo de tiempo de la
programación de los lenguajes de primera generación que se necesitaba con los primeros
computadores, liberando a los programadores del tedio tal como recordar códigos numéricos y cálculo
de direcciones. Una vez fueron ampliamente usados para todo tipo de programación. Sin embargo, por
los años 1980 (1990 en losmicrocomputadores), su uso había sido en gran parte suplantado por
los lenguajes de alto nivel,[cita requerida] en la búsqueda de una mejorada productividad en programación.
Hoy en día, aunque el lenguaje ensamblador es casi siempre manejado y generado por
los compiladores, todavía se usa para la manipulación directa del hardware, acceso a instrucciones
especializadas del procesador, o para resolver problemas de desempeño crítio. Los usos típicos
son drivers de dispositivo, sistemas embebidos de bajo nivel, y sistemas de tiempo real.
Históricamete, un gran número de programas han sido escritos enteramente en lenguaje ensamblador.
Los sistemas operativos fueron casi exclusivamente escritos en lenguaje ensamblador hasta la
aceptación ámplia del lenguaje de programación C en los años 1970 y principios de los 1980. También,
muchas aplicaciones comerciales fueron escritas en lenguaje ensamblador, incluyendo una gran
cantidad del software escrito por grandes corporaciones para mainframes de IBM. Los
lenguajes COBOL y FORTRAN eventualmente desplazaron mucho de este trabajo, aunque un número
de organizaciones grandes conservaran las infraestructuras de aplicaciones en lenguaje ensamblador
hasta bien entrados los años 1990.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
La mayoría de los primeros microcomputadores confiaron en el lenguaje ensamblador codificado a
mano, incluyendo la mayoría de los sistemas operativos y de las aplicaciones grandes. Esto era porque
estos sistemas tenían limitaciones severas de recursos, impusieron idiosincráticas arquitecturas de
memoria y de pantalla, y proporcionaron servicios de sistema limitados y con errores. Quizás más
importante era la falta de compiladores de primera clase de lenguajes de alto nivel adecuados para el
uso en el microcomputador. Un factor psicológico también pudo haber jugado un papel: la primera
generación de programadores de los microcomputadores conservó una actitud de aficionado de
"alambres y alicates".
En un contexto más comercial, las más grandes razones para usar el lenguaje ensamblador era hacer
programas con mínimo tamaño, mínima sobrecarga, mayor velocidad y confiabilidad.
Los típicos ejemplos de programas grandes en lenguaje ensamblador de ese tiempo son los sistemas
operativos IBM PC DOS y aplicaciones tempranas tales como la hoja de cálculo Lotus 1-2-3 , y casi todos
los juegos populares para la familia Atari 800 de computadores personales. Incluso en los años 1990, la
mayoría de los videojuegos de cónsola fueron escritos en ensamblador, incluyendo la mayoría de los
juegos para la Mega Drive/Genesis y el Super Nintendo Entertainment System.[cita requerida] Según algunos
insiders de la industria, el lenguaje ensamblador era el mejor lenguaje de programación a usar para
obtener el mejor desempeño del Sega Saturn, una cónsola para la cual era notoriamente desafiante
desarrollar y programar juegos.8 El popular juego de arcade NBA Jam (1993) es otro ejemplo. El
ensamblador ha sido por largo trecho, el lenguaje de desarrollo primario en los computadores
hogareños Commodore 64, Atari ST, así como el ZX Spectrum. Esto fue así en gran parte porque los
dialectos del BASIC en estos sistemas ofrecieron insuficiente velocidad de ejecución, así como
insuficientes características para aprovechar completamente el hardware disponible. Algunos sistemas,
más notablemente el Amiga, incluso tienen IDEs con características de depuración y macros altamente
avanzados, tales como el freeware ASM-One assembler, comparable a las del Microsoft Visual
Studio (el ASM-Uno precede al Microsoft Visual Studio).
El ensamblador para el VIC-20 fue escrito por Don French y publicado por French Silk. Con 1639 bytes
de longitud, su autor cree que es el más pequeño ensamblador simbólico jamás escrito. El ensamblador
soportaba el direccionamiento simbólico usual y la definición de cadenas de caracteres o cadenas
hexadecimales. También permitía expresiones de direcciones que podían combinarse con las
operaciones de adición, substracción, multiplicación, división, AND lógico, OR lógico, y exponenciación.9
[editar]Uso actual
Han habido siempre debates sobre la utilidad y el desempeño del lenguaje ensamblador relativo a
lenguajes de alto nivel. El lenguaje ensamblador tiene nichos específicos donde es importante; ver
abajo. Pero, en general, los modernos compiladores de optimización[cita requerida] para traducir lenguajes de
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
alto nivel en código que puede correr tan rápidamente como el lenguaje ensamblador escrito a mano, a
pesar de los contraejemplos que pueden ser encontrados.10 11 12 La complejidad de los procesadores
modernos y del subsistema de memoria hace la optimización efectiva cada vez más difícil para los
compiladores, así como para los programadores en ensamblador.13 14 Adicionalmente, y para la
consternación de los amantes de la eficiencia, el desempeño cada vez mayor del procesador ha
significado que la mayoría de los CPU estén desocupados la mayor parte del tiempo, con retardos
causados por embotellamientos predecibles tales como operaciones de entrada/salida y paginación de
memoria. Esto ha hecho la velocidad de ejecución cruda del código un no-problema para muchos
programadores.
Hay algunassituaciones en las cuales los profesionales pudieran elegir utilizar el lenguaje ensamblador.
Por ejemplo cuando:
esrequerido un ejecutable binario independiente (stand-alone), es decir uno que deba ejecutarse sin
recursos a componentes de tiempo de ejecución o a bibliotecas asociadas con un lenguaje de alto nivel;
ésta es quizás la situación más común. Son programas empotrados que solo almacenan una pequeña
cantidad de memoria y el dispositivo está dirigido para hacer tareas para un simple propósito. Ejemplos
consisten en teléfonos, sistemas de combustible e ignición para automóbiles, sistemas de control del
aire acondicionado, sistemas de seguridad, y sensores
interacando directamente con el hardware, por ejemplo en drivers de dispositivo y manejadores de
interrupción
usando instrucciones específicas del procesador no explotadas o disponibles por el compilador. Un
ejemplo común es la instrucción de rotación bitwise en el núcleo de muchos algoritmos de cifrado
creando funciones vectorizadas para programas en lenguajes de alto nivel como C. En el lenguaje de
alto nivel esto es a veces ayudado por funciones intrínsecas del compilador que mapean directamente a
los mnemónicos del SIMD, pero sin embargo resulta en una conversión de ensamblador de uno a uno
para un procesador de vector asociado
es requerida la optimización extrema, ej, en un bucle interno en un algoritmo intensivo en el uso del
procesador. Los programadores de juegos toman ventaja de las habilidades de las características del
hardware en los sistemas, permitiendo a los juegos correr más rápidamente. También las grandes
simulaciones científicas requieren algoritmos altamente optimizados, ej, álgebra lineal con BLAS 10 15 o
la transformada de coseno discreta (ej, la versión SIMD en ensamblador del x264,16 (una biblioteca para
codificar streams de video)
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
un sistema con severas limitaciones de recursos (ej, un sistema empotrado) debe ser codificado
a mano para maximizar el uso de los limitados recursos; pero esto está llegando a ser menos
común a medida que el precio del procesador decrece y el desempeño mejora
no existe ningún lenguaje de alto nivel, en un procesador nuevo o especializado, por ejemplo
escribiendo programas de tiempo real que necesitan sincronización y respuestas precisas, tales
como sistemas de navegación de vuelo, y equipo médico. Por ejemplo, en un sistema fly-by-
wire (vuelo por mandos eléctricos), la telemetría debe ser interpretada y hay que actuar dentro
de limitaciones estrictas
de tiempo. Tales sistemas deben eliminar fuentes de retrasos impredecibles, que pueden ser
creados por (algunos) lenguajes interpretados, recolección de basura automática, operaciones
de paginación, o multitarea preventiva. Sin embargo, algunos lenguajes de alto nivel incorporan
componentes de tiempo de ejecución e interfaces de sistema operativo que pueden introducir
tales retrasos. Elegir el ensamblador o lenguajes de bajo nivel para tales sistemas da a los
programadores mayor visibilidad y control sobre el proceso de los detalles
erequerido control total sobre el ambiente, en situaciones de seguridad extremadamente alta
donde nada puede darse por sentado.
se escriben virus de computadora, bootloaders, ciertos drivers de dispositivo, u otros elementos muy
cerca del hardware o al sistema operativo de bajo nivel
sescriben simuladores del conjunto de instrucciones para monitoreo, trazado y depuración de
errores donde la sobrecarga adicional es mantenida al mínimo
se hace ingeniería inversa en binarios existentes que pueden o no haber sido escritos originalmente en
un lenguaje de alto nivel, por ejemplo al crackear la protección anticopia del software propietario.
se hace ingeniería inversa y modificación de video juegos (también denominado ROM hacking), que es
posible por medio de varios métodos. El más ampliamente implementado es alterando el código del
programa a nivel de lenguaje ensamblador
se escribe código automodificable, algo para lo que el lenguaje ensamblador se presta bien
se escriben juegos y otros softwares para calculadoras gráficas 17
se escribe software compilador que genera código ensamblador, y por lo tanto los desarrolladores
deben ser programadores de lenguaje ensamblador
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
se escriben algoritmos criptográficos que siempre deben tomar estrictamente el mismo tiempo para
ejecutar, previniendo ataques de tiempo
Sin embargo, el lenguaje ensamblador es todavía enseñado en la mayoría de los programas de ciencias
de la computación e ingeniería electrónica. Aunque hoy en día, pocos programadores trabajan
regularmente con el lenguaje ensamblador como una herramienta, los conceptos fundamentales
continúan siendo muy importantes. Tales tópicos fundamentales, como aritmética binaria, asignación de
memoria, procesamiento del stack, codificación de conjunto de caracteres, procesamiento de
interrupciones, y diseño de compiladores, serían duros de estudiar en detalle sin la comprensión de
cómo el computador opera a nivel del hardware. Puesto que el comportamiento del computador es
fundamentalmente definido por su conjunto de instrucciones, la manera lógica de aprender tales
conceptos es estudiar un lenguaje ensamblador. La mayoría de los computadores modernos tienen un
conjunto de instrucciones similares. Por lo tanto, estudiar un solo lenguaje ensamblador es suficiente
para aprender: i) los conceptos básicos; ii) reconocer situaciones donde el uso de lenguaje ensamblador
puede ser apropiado; y iii) ver cómo el código ejecutable eficiente puede ser creado por los lenguajes de
alto nivel18
[editar]Aplicaciones típicas
El lenguaje ensamblador hard-coded es típicamente usado en el ROM de arranque del sistema
(BIOS en los sistemas compatible IBM PC). Este código de bajo nivel es usado, entre otras cosas, para
inicializar y probar el hardware del sistema antes de cargar el sistema operativo, y está almacenado en
el ROM. Una vez que ha tomado lugar un cierto nivel de inicialización del hardware, la ejecución se
transfiere a otro código, típicamente escrito en lenguajes de alto nivel; pero el código corriendo
inmediatamente después de que es aplicada la energía usualmente está escrito en lenguaje
ensamblador. Lo mismo es cierto para los boot loaders.
Muchos compiladores traducen lenguajes de alto nivel a lenguaje ensamblador primero, antes de la
compilación completa, permitiendo que el código en ensamblador sea visto para propósitos
de depuración y optimización. Lenguajes de relativo bajo nivel, como C, con
frecuenciaproveen sintaxis especial para empotrar lenguaje ensamblador en cada plataforma de
hardware. El código portable del sistema entonces puede usar estos componentes específicos a un
procesador a través de una interface uniforme.
El lenguaje ensamblador también es valioso en ingeniería inversa, puesto que muchos programas
solamente son distribuidos en una forma de código de máquina. El código de máquina es usualmente
fácil de trasladar hacia lenguaje ensamblador para luego ser cuidadosamente examinado en esta forma,
pero es muy difícil de trasladar hacia un lenguaje de alto nivel. Herramientas como Interactive
Disassembler, hacen uso extenso del desensamblador para tales propósitos.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
Un nicho que hace uso del lenguaje ensamblador es el demoscene. Ciertas competiciones requieren a
los concursantes restringir sus creaciones a un muy pequeño tamaño (ej, 256bytes, 1 KB, 4 KB ó 64
KB), y el lenguaje ensamblador es el lenguaje de preferencia para alcanzar este objetivo.19 Cuando los
recursos son una preocupación, es una necesidad la codificación en ensamblador, especialmente en
sistemas constreñidos por el procesamiento del CPU, como los primeros modelos del Amiga, y
el Commodore 64. El código optimizado en ensamblador es escrito "a mano" por los programadores en
un intento de minimizar el número de ciclos de CPU usados. Las limitaciones del CPU son tan grandes
que cada ciclo cuenta. Usar tales métodos ha habilitado, a sistemas como el Commodore 64, para
producir gráficos en 3D en tiempo real con efectos avanzados, una hazaña que puede ser considerada
improbable o incluso imposible para un sistema con un procesador de 0.99 MHz.[cita requerida]
[
editar]Dealles adicionales
Para un determinado computador personal, mainframe, sistema empotrado, y cónsola de juegos, tanto
del pasado como del presente, ha sido escrito al menos uno, y posiblemente docenas de
ensambladores. Para algunos ejemplos, vea la lista de ensambladores.
En los sistemas Unix, el ensamblador es llamado tradicionalmente as, aunque no es un simple cuerpo
de código, siendo típicamente escrito uno nuevo por cada port. Un número de variantes de Unix usan
el GAS
Dentro de los grupos de procesadores, cada ensamblador tiene su propio dialecto. A veces, algunos
ensambladores pueden leer el dialecto de otro, por ejemplo, TASM puede leer el viejo código del MASM,
pero no al revés. FASM y NASM tienen una sintaxis similar, pero cada uno soporta diferentes macros
que pueden ser difícil de trasladar de uno al otro. Las cosas básicas son siempre las mismas, pero las
características avanzadas serán diferentes20
También, los lenguajes ensambladores a veces pueden ser portables a través de diferentes sistemas
operativos en el mismo tipo de CPU. Las convenciones de llamadas entre los sistemas operativos con
frecuencia difieren ligeramente o en nada. y con cuidado es posible ganar portabilidad en el lenguaje
ensamblador, usualmente al enlazar con una biblioteca de lenguaje C que no cambia entre sistemas
operativos. Un simulador de conjunto de instrucciones (que idealmente sería escrito en lenguaje
ensamblador) puede, en teoría, procesar elcódigo objeto/binario de cualquier ensamblador) para lograr
la portabilidad incluso a través de plataformas (con una sobrecargue no mayor que la de un
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
interpretador de bytecode típico). Esto es esencialmente lo que logra el microcódigo cuando una
plataforma de hardware cambia internamente.
Por ejemplo, muchas cosas en libc dependen del preprocesador para hacer, al programa antes de
compilar, cosas que son específicas del sistema operativo o específicas del C. De hecho, algunas
funciones y símbolos ni siquiera están garantizados que existan fuera del preprocesador. Peor aún, el
tamaño y el orden de los campos de las estructuras, tanto como el tamaño de
ciertas typedefs como off_t, no están disponibles en lenguaje ensamblador sin la ayuda de un script de
configuración, y difieren incluso entre versiones de Linux, haciendo imposible portar llamadas de
funciones en libc diferentes de los que toman simples enteros o punteros como parámetros. Para
manejar estos problemas, el proyecto FASMLIB provee una biblioteca de lenguaje ensamblador portable
para las plataformas Win32 y Linux, pero todavía está muy incompleta.21
Algunoslenguajes de muy alto nivel, como C y Borland Pascal, soportan ensamblado en línea, donde
relativamente secciones cortas de código en ensamblador puede ser empotradas dentro del código del
lenguaje de alto nivel. El lenguaje Forth comúnmente contiene un ensamblador usado para codificar
palabras.
La mayoría de la gente usa un emulador para depurar sus programas en lenguaje ensamblador.
Importancia del lenguaje ensamblador
La importancia del lenguaje ensamblador radica principalmente que se trabaja directamente con el microprocesador; por lo cual se debe de conocer el funcionamiento interno de este, tiene la ventaja de que en el se puede realizar cualquier tipo de programas que en los lenguajes de alto nivel no lo pueden realizar. Otro punto sería que los programas en ensamblador ocupan menos espacio en memoria.
2. Ventajas y desventajas del Lenguaje Ensamblador
Ventajas1. Velocidad .- Como trabaja directamente con el microprocesador al ejecutar un programa, pues como este lenguaje es el mas cercano a la máquina la computadora lo procesa mas rápido. 2. Eficiencia de tamaño .- Un programa en ensamblador no ocupa mucho espacio en memoria porque no tiene que cargan librerías y demás como son los lenguajes de alto nivel 3. Flexibilidad .- Es flexible porque todo lo que puede hacerse con una máquina, puede hacerse en el lenguaje ensamblador de esta máquina; los lenguajes de alto nivel tienen en una u otra forma limitantes para explotar al máximo los recursos de la máquina. O sea que en lenguaje ensamblador se pueden hacer tareas especificas que en un lenguaje de alto nivel no se pueden llevar acabo porque tienen ciertas limitantes que no se lo permite
DesventajasTiempo de programación .- Como es un lenguaje de bajo nivel
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
requiere más instrucciones para realizar el mismo proceso, en comparación con un lenguaje de alto nivel. Por otro lado, requiere de más cuidado por parte del programador, pues es propenso a que los errores de lógica se reflejen más fuertemente en la ejecución.Programas fuente grandes .- Por las mismas razones que aumenta el tiempo, crecen los programas fuentes; simplemente requerimos más instrucciones primitivas para describir procesos equivalentes. Esto es una desventaja porque dificulta el mantenimiento de los programas, y nuevamente reduce laproductividad de los programadores.Peligro de afectar recursos inesperadamente .- Que todo error que podamos cometer, o todo riesgo que podamos tener, podemos afectar los recursos de la maquina, programar en este lenguaje lo más común que pueda pasar es que la máquina se bloquee o se reinicialize. Porque con este lenguaje es perfectamente posible (y sencillo) realizar secuencias de instrucciones inválidas, que normalmente no aparecen al usar un lenguaje de alto nivel. Falta de portabilidad.- Porque para cada máquina existe un lenguaje ensamblador; por ello, evidentemente no es una selección apropiada de lenguajecuando deseamos codificar en una máquina y luego llevar los programas a otros sistemas operativos o modelos de computadoras.
3. Relación del lenguaje ensamblador con los componentes internos del procesador
En la memoria se almacena la información en celdas especiales llamados registros los cuales tienen un nivel alto y un nivel bajo. Unidad aritmética y lógica es la responsable de realizar como su nombre lo indica operaciones aritméticas y lógicas. Unidad de control Se encarga de coordinar de que los otros componentes ejecuten las operaciones correctamente. Bus interno son los canales por donde pasa la información que la máquina va a procesar (bus de entrada) o procesada (bus de salida).
Registros de uso general AX = Registro acumulador, dividido en AH y AL (8 bits cada uno).- Interviene en las operaciones aritméticas y lógicas, después de la operación arroja un resultado. BX = Registro base, dividido en BH y BL.- Se utiliza en transferencias de datos entre la memoria y el procesador.CX = Registro contador, dividido en CH y CL.- Se utiliza como contador en bucles(LOOP), en operaciones con cadenas(REP), y en desplazamientos(CL).DX = Registro de datos, dividido en DH y DL.- Se utiliza en operaciones de multiplicación y división junto con Ax y en operaciones de entrada y salidade puertos, su mitad inferior DL contiene el número de puertos.
Registros de EstadoHay nueve indicadores de un bit en este registro de 16 bits. Los cuatro bits más significativos están indefinidos, mientras que hay tres bits con valoresdeterminados: los bits 5 y 3 siempre valen cero y el bit 1 siempre vale uno.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
CF (Carry Flag, bit 0): Si vale 1, indica que hubo "arrastre" (en caso de suma) o "préstamo" (en caso de resta). Este indicador es usado por instrucciones que suman o restan números que ocupan varios bytes. Las instrucciones de rotación pueden aislar un bit de la memoria o de un registro poniéndolo en el CF. PF (Parity Flag, bit 2): Si vale uno, el resultado tiene paridad par, es decir, un número par de bits a 1. Este indicador se puede utilizar para detectarerrores en transmisiones. AF (Auxiliary carry Flag, bit 4): Si vale 1, indica que hubo "arrastre" o "préstamo" del nibble (cuatro bits) menos significativo al nibble más significativo. Este indicador se usa con las instrucciones de ajuste decimal. ZF (Zero Flag, bit 6): Si este indicador vale 1, el resultado de la operación es cero.SF (Sign Flag, bit 7): Refleja el bit más significativo del resultado. Como los números negativos se representan en la notación de complemento a dos,este bit representa el signo: 0 si es positivo, 1 si es negativo. TF (Trap Flag, bit 8): Si vale 1, el procesador está en modo paso a paso. En este modo, la CPU automáticamente genera una interrupción interna después de cada instrucción, permitiendo inspeccionar los resultados del programa a medida que se ejecuta instrucción por instrucción. IF (Interrupt Flag, bit 9): Si vale 1, la CPU reconoce pedidos de interrupción externas. Si vale 0, no se reconocen tales interrupciones DF (Direction Flag, bit 10): Si vale 1, las instrucciones con cadenas sufrirán "auto-decremento", esto es, se procesarán las cadenas desde las direcciones más altas de memoria hacia las más bajas. Si vale 0, habrá "auto-incremento", lo que quiere decir que las cadenas se procesarán de "izquierda a derecha".OF (Overflow flag, bit 11): Si vale 1, hubo un desborde en una operación aritmética con signo, esto es, un dígito significativo se perdió debido a que tamaño del resultado es mayor que el tamaño del destino.
4. Relación entre el código binario y el lenguaje ensamblador
En el código binario se utilizan ceros y unos, mientras que el lenguaje ensamblador es una colección de símbolos mnemónicos que representan: operaciones, nombres simbólicos, operadores y símbolos especiales. La relación entre estos dos lenguajes sería que el binario es el lenguaje que la máquina entiende y el ensamblador se acerca mas lenguaje de esta.
Manejo de la memoria: Direccionamiento (interno y externo)El manejo de la memoria depende de que procesador tenga la máquina, entre los cuales a continuación se mencionan los siguientes: Memoria de Programa Memoria Externa de Datos Memoria Interna de Datos Registros de Funciones Especiales Memoria de Bit.
El espacio de la Memoria de Programa contiene todas las instrucciones, datos, tablas y cadenas de caracteres (strings) usadas en los programas. Esta memoria se direcciona principalmente usando el registro de 16 bits llamado Data Pointer. El tamaño máximo de la Memoria de Programa es de 64 Kbytes.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
La Memoria Externa de Datos contiene todas las variables y estructuras de datos que no caben en la memoria interna del Microprocesador. Esta memoria se direcciona principalmente por el registro de 16 bits Data Pointer , aunque también se puede direccionar un banco de Memoria Externa de Datos de 256 bytes usando los dos primeros registros de propósito general .El espacio de Memoria Interna de Datos funcionalmente es la memoria de datos más importante, ya que ahí es donde residen cuatro bancos de registros de propósito general; la pila o stack del programa; 128 bits de los 256 bits de un área de memoria direccionable por bit y todas las variables y estructuras de datos operadas directamente por el programa. El tamaño máximo de la Memoria Interna de Datos es de 256 bytes.Contiene un espacio para los denominados Registros de Funciones Especiales destinado para los puertos de entrada/salida, temporizadores y puertoserie del circuito integrado. Estos registros incluyen al Stack Pointer; al registro de la palabra de estado del programa y al Acumulador. La cantidad máxima de Registros de Funciones Especiales es 128.Todos los Registros de Funciones Especiales tienen direcciones mayores a 127 y se ubican en los 128 bytes superiores de la Memoria Interna de Datos. Estas dos áreas de la Memoria Interna de Datos se diferencian por el modo de direccionamiento usado para accesarlas. Los Registros de Funciones Especiales solo se pueden accesar usando el modo de direccionamiento Directo, mientras que los 128 bytes superiores solo se pueden accesar con el modo de direccionamiento Indirecto. Por otra parte, el espacio de Memoria de Bit se usa para almacenar variables y banderas de un bit. El tamaño máximo de la Memoria de Bit es de 256 bits, 128 de los bits comparten su espacio con 16 bytes del espacio de la Memoria Interna de Datos y los otros 128 bits lo hacen con los Registros de Funciones Especiales.
Lenguaje de máquinaLenguaje de máquina es el sistema de códigos directamente interpretable por un circuito
microprogramable, como el microprocesador de una computadora o el microcontrolador de
un autómata (un PLC) . Este lenguaje está compuesto por un conjunto de instrucciones que determinan
acciones a ser tomadas por la máquina. Un programa de computadora consiste en una cadena de estas
instrucciones de lenguaje de máquina (más los datos). Estas instrucciones son normalmente ejecutadas
en secuencia, con eventuales cambios de flujo causados por el propio programa o eventos externos. El
lenguaje de máquina es específico de cada máquina o arquitectura de la máquina, aunque el conjunto
de instrucciones disponibles pueda ser similar entre ellas.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
Lenguaje de máquina del Intel 8088. El código de máquina en hexadecimal se resalta en rojo, el equivalente
en lenguaje assembler en magenta, y las direcciones de memoria donde se encuentra el código, en azul. Abajo se
ve un texto en hexadecimal y ASCII.
Los circuitos microprogramables son sistemas digitales, lo que significa que trabajan con dos únicos
niveles de tensión. Dichos niveles, por abstracción, se simbolizan con el cero, 0, y el uno, 1, por eso el
lenguaje de máquina sólo utiliza dichos signos. Esto permite el empleo de las teorías del álgebra
booleana y del sistema binario en el diseño de este tipo de circuitos y en su programación.
Una visión típica de la arquitectura de computadores como una serie de capas de
abstracción: hardware, firmware,ensamblador, kernel, sistema operativoy aplicaciones.
Claude Elwood Shannon, en su Analysis of Relay and Switching Circuits, y con sus experiencias en
redes de conmutación, sentó las bases para la aplicación del álgebra de Boole a las redes de
conmutación.
Una red de conmutación es un circuito de interruptores eléctricos que al cumplir ciertas combinaciones
booleanas con las variables de entrada, define el estado de la salida. Este concepto es el núcleo de
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
laspuertas lógicas, las cuales son, por su parte, los ladrillos con que se construyen sistemas
lógicos cada vez más complejos.
Shannon utilizaba el relé como dispositivo físico de conmutación en sus redes. El relé, a igual que una
lámpara eléctrica, posee dos estados: 1 ó 0, esto es, está activado, encendida, o está desactivado,
apagada.
El desarrollo tecnológico ha permitido evolucionar desde las redes de relés electromagnéticos de
Shannon a circuitos con tubos de vacío, luego a redes transistorizadas, hasta llegar a los
modernos circuitos integrados cuyas cúspide lo forman los circuitos microprogramados.
Se denomina lenguaje máquina a la serie de datos que la parte física de la computadora o hardware, es capaz de interpretar.
Una computadora digital o, mejor dicho, su parte física, sólo distingue datos de tipo binario, es decir, constituidos por dos únicos valores a los que se denomina valor 0 y valor 1 y que, físicamente, se materializan con tensiones comprendidas entre 0 y 4.0 voltios y entre 4 y 5 voltios, respectivamente. Para representar datos que contengan una información se utilizan una serie de unos y ceros cuyo conjunto indica dicha información.
La información que hace que el hardware de la computadora realice una determinada actividad de llama instrucción. Por consiguiente una instrucción es un conjunto de unos y ceros. Las instrucciones así formadas equivalen a acciones elementales de la máquina, por lo que al conjunto de dichas instrucciones que son interpretadas directamente por la máquina se denomina lenguaje máquina.
El lenguaje máquina fue el primero que empleo el hombre para la programación de las primeras computadoras. Una instrucción en lenguaje máquina puede representarse de la siguiente forma: 011011001010010011110110.
Esta secuencia es fácilmente ejecutada por la computadora, pero es de difícil interpretación, siendo aun mas difícil la interpretación de un programa (conjunto de instrucciones) escrito de esta forma. Esta dificultad hace que los errores sean frecuentes y la corrección de los mismos costosa, cuando no imposible, al igual que la verificación y modificación de los programas.
La anterior secuencia de dígitos binarios (bits) puede indicar a la computadora que: <<Traslade el contenido de la posición de memoria X a la posición de memoria Y.>>
Si lo vemos escrito de esta forma, lo entenderemos fácilmente, ya que está en nuestro lenguaje natural, pero la máquina elemental será incapaz de entender nada. Vemos, pues, que la forma de indicar a la máquina lo que debe hacer es totalmente diferente de la indicar a un ser humano lo mismo, por lo que deben emplearse sistemas de traducción de una forma a otra.
Ya se ha dicho que en un principio el programador empleaba directamente el lenguaje máquina. En este caso el traductor era el programador; pero vimos también los problemas que esto causaba.
Con la práctica en el manejo de la máquina se cayó en la cuenta de que se podría utilizar la propia máquina para ayudar en la traducción de estos programas. Es decir, que si a una máquina elemental se le dotaba de un programa, también elemental, que tradujera un número determinado de caracteres de caracteres alfabéticos en una secuencia de unos y ceros, se podría escribir un programa constituido por una secuencia de grupos de caracteres alfabéticos, en la que cada uno
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
de los grupos indicaría una acción a realizar por el ordenador y, una vez escrito el programa, sería la propia máquina la que pasaría los grupos de caracteres a bits.
Las ventajas de esto son evidentes, ya que para el hombre resulta mas fácil manipular grupos de caracteres y la traducción se haría de manera automática. Por ejemplo, se podría escribir:
TRASLADAR 11010110, 00011101.
Esto indicaría que el contenido de la posición 11010110 había que pasarlo a la posición 00011101 si se sabe que al grupo alfabético TRASLADAR le corresponde la secuencia de bits 11110101. La máquina traduciría la anterior instrucción como:
11110101 11010110 00011101
Al grupo alfabético se le denomina mnemotécnico, y existirá un mnemotécnico por cada instrucción. Se le da este nombre porque sirve para recordar con mayor facilidad el conjunto de instrucciones de una determinada máquina. De esta forma aparecieron los lenguajes ensambladores (Assembler, en inglés). Poco a poco, con el avance de la programación (Software), estas primeras y sencillas ayudas se fueron haciendo más complejas, permitiendo que, además de los mnemotécnicos correspondientes a la operación a realizar, se pudieran emplear otros para indicar, por ejemplo, los operandos. La anterior instrucción se podría escribir de la siguiente forma:
TRASLADAR POS-A POS-B
Que nos resulta de más fácil comprensión.
También se introdujo la posibilidad de indicar a la computadora la dirección de un salto en la secuencia de ejecución de un programa mediante la utilización de etiquetas.
A los programas que permiten pasar del programa escrito de esta manera (programa fuente, en ensamblador) al lenguaje máquina también se les denomina normalmente ensambladores. Estos traductores, como ya se ha dicho, se fueron complicando cada vez más para que la labor del programador fuera más fácil, incluyendo los denominados directivos del ensamblador, que son órdenes o informaciones que el programador da al traductor, no instrucciones de lenguaje máquina.
Aun con todas estas sofisticaciones y ayudas, el programador de lenguaje ensamblador debe conocer perfectamente el sistema físico (Hardware) de la máquina con que trabaja, pues aunque emplee mnemotécnicos, etiquetas, etc., éstas sirven para indicar una posición de memoria determinada, un registro o cualquier otra parte de la máquina.
Por eso se dice que el lenguaje ensamblador es un lenguaje de bajo nivel, es decir, ligado con el <<hard>> concreto de una determinada máquina. Aquí radica la diferencia importante con los lenguajes más complejos, llamados de alto nivel, como el Basic, Pascal, Cobol, etc., ya que en éstos el programador no tiene porque reconocer el <<hard>> de la máquina. Trabaja con variables, constantes e instrucciones simbólicas, y es el traductor quien las transforma en las direcciones apropiadas.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
Lenguaje compiladoUn lenguaje compilado es término un tanto impreciso para referirse a un lenguaje de
programación que típicamente se implementa mediante un compilador. Esto implica que una vez escrito
el programa, éste se traduce a partir de su código fuente por medio de un compilador en un archivo
ejecutable para una determinada plataforma (por ejemplo Solaris para Sparc,Windows NT para Intel,
etc.).
Los lenguajes compilados son lenguajes de alto nivel en los que las instrucciones se traducen del
lenguaje utilizado a código máquina para una ejecución rápida. Por el contrario unlenguaje
interpretado es aquel en el que las instrucciones se traducen o interpretan una a una siendo típicamente
unas 10 veces más lentos que los programas compilados.
Es teóricamente posible escribir un compilador o un intérprete para cualquier lenguaje, sin embargo en
algunos lenguajes una u otra implementación es más sencilla porque se diseñaron con una
implementación en particular en mente.
Algunos entornos de programación incluyen los dos mecanismos, primero el código fuente se traduce a
un código intermedio que luego se interpreta en una máquina virtual, pero que también puede
compilarse justo antes de ejecutarse. La máquina virtual y los compiladores Just in Time de Java son un
ejemplo de ello.
Algunos ejemplos típicos de lenguajes compilados:
Fortran
La familia de lenguajes de C, incluyendo C++ y Objective C pero no Java.
Ada , Pascal (incluyendo su dialecto Delphi)
Algol
OMPILADORES
Un compilador acepta programas escritos en un lenguaje de alto nivel y los traduce a otro lenguaje, generando un programa equivalente independiente, que puede ejecutarse tantas veces como se quiera. Este proceso de traducción se conoce
como compilación.
• el de los programas de partida (LA)
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
• el de los programas equivalentes traducidos (LB), normalmente el lenguaje de máquina
• el lenguaje en que está escrito el propio compilador (LC), que puede ser igual o diferente a LA. Aumenta la portabilidad del compilador si está escrito en el mismo lenguaje, es decir, se puede compilar a sí mismo.
Los programas interpretados suelen ser más lentos que los compilados, pero los intérpretes son más flexibles como entornos de programación y depuración.
Comparando su actuación con la de un ser humano, un compilador equivale a un traductor profesional que, a partir de un texto, prepara otro independiente traducido a otra lengua, mientras que un intérprete informático corresponde al intérprete humano, que traduce de viva voz las palabras que oye, sin dejar Partes de un compilador
Normalmente los compiladores están divididos en dos partes:
• Front End: es la parte que analiza el código fuente, comprueba su validez, genera el árbol de derivación y rellena los valores de la tabla de símbolos. Esta parte suele ser independiente de la plataforma o sistema para el cual se vaya a compilar.
• Back End: es la parte que genera el código máquina, específico de una plataforma, a partir de los resultados de la fase de análisis, realizada por el Front End.
Esta división permite que el mismo Back End se utilice para generar el código máquina de varios lenguajes de programación distintos y que el mismo Front End que sirve para analizar el código fuente de un lenguaje de programación concreto sirva para la generación de código máquina en varias plataformas distintas.
El código que genera el Back End normalmente no se puede ejecutar directamente, sino que necesita ser enlazado por un programa enlazador (linker).
Tipos de compiladores Esta taxonomía de los tipos de compiladores no es excluyente, por lo que
puede haber compiladores que se adscriban a varias categorías:
• Compiladores cruzados: generan código para un sistema distinto del que están funcionando.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
• Compiladores optimizadores: realizan cambios en el código para mejorar su eficiencia, pero manteniendo la funcionalidad del programa original.
• Compiladores de una sola pasada: generan el código máquina a partir de una única lectura del código fuente.
• Compiladores de varias pasadas: necesitan leer el código fuente varias veces antes de poder producir el código máquina.
• Compiladores JIT (Just In Time): forman parte de un intérprete y compilan partes del código según se necesitan.
Pauta de creación de un compilador: En las primeras épocas de la informática, el software de los compiladores era considerado como uno de los más complejos existentes.
Los primeros compiladores se realizaron programándolos directamente en lenguaje máquina o en ensamblador. Una vez que se dispone de un compilador, se pueden escribir nuevas versiones del compilador (u otros compiladores distintos) en el lenguaje que compila ese compilador.
Actualmente existen herramientas que facilitan la tarea de escribir compiladores ó intérpretes informáticos. Estas herramientas permiten generar el esqueleto del analizador sintáctico a partir de una definición formal del lenguaje de partida, especificada normalmente mediante una gramática formal y barata, dejando únicamente al programador del compilador la tarea de programar las acciones semánticas asociadas.
TRADUCTORES DE LENGUAJE
Traductor de lenguaje. Software de sistemas que convierte un código fuente del programador en su equivalente en lenguaje maquina.
Código fuente. Código de programación de nivel alto escrito por el programador.
Código objeto. Otro nombre para el código de lenguaje maquina. Intérprete. Traductor de lenguajes que convierte, ala vez, una sentencia de
programa a un código de máquina.
Sistema de numeraciónSistemas de numeración
Nociones
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
Número
Cifra
Numeral
Base Notaciones
Posicional
Aditiva Mixta
Numeraciones
Árabe
Armenia
Ática
Babilónica
China
Cirílica
Muisca
Egipcia
Etrusca
Griega
Hebrea
India
Japonesa
Maya
Romana
Un sistema de numeración es un conjunto de símbolos y reglas de generación que permiten construir todos
los números válidos.
Un sistema de numeración puede representarse como
donde:
es el sistema de numeración considerado (p.ej. decimal, binario, etc.).
es el conjunto de símbolos permitidos en el sistema. En el caso del sistema decimal son {0,1,...9}; en el binario son
{0,1}; en el octal son {0,1,...7}; en el hexadecimal son {0,1,...9,A,B,C,D,E,F}.
son las reglas que nos indican qué números son válidos en el sistema, y cuáles no. En un sistema de numeración
posicional las reglas son bastante simples, mientras que la numeración romana requiere reglas algo más elaboradas.
Estas reglas son diferentes para cada sistema de numeración considerado, pero una regla común a todos es que para
construir números válidos en un sistema de numeración determinado sólo se pueden utilizar los símbolos permitidos en ese
sistema.
Para indicar en qué sistema de numeración se representa una cantidad se añade como subíndice a la derecha el número
de símbolos que se pueden representar en dicho sistema.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
Contenido
[ocultar]
1 Ejemplos
2 Clasificación
o 2.1 Sistemas de numeración no posicionales
o 2.2 Sistemas de numeración semi posicionales
o 2.3 Sistemas de numeración posicionales
3 Teorema Fundamental de la numeración
o 3.1 Ejemplo en el sistema decimal
o 3.2 Ejemplo en el sistema binario
4 Sistema de numeración octal
5 Sistema de numeración hexadecimal
6 Operaciones con sistemas de numeración
o 6.1 Suma de números binarios
o 6.2 Resta binaria
o 6.3 Multiplicación binaria
o 6.4 División binaria
7 Tabla de conversión entre decimal, binario, hexadecimal, octal, BCD, Exceso 3 y Gray o Reflejado
8 Véase también
[editar]Ejemplos
el número 135(10) es un número válido en el sistema decimal que utiliza los símbolos (0, 1, 2, 3, 4, 5, 6, 7, 8, 9), pero el
número 12A(10) no lo es, ya que utiliza un símbolo A no válido en este sistema decimal.
el número 35(8) es un número válido en el sistema octal que utiliza los símbolos (0, 1, 2, 3, 4, 5, 6, 7) , pero el
número 39(8) no lo es, ya que el símbolo 9 no es un símbolo válido en este sistema octal.
el número F1E4(16) es un número válido en el sistema hexadecimal que utiliza los símbolos (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A,
B, C, D, E, F), pero el número FKE4(16) no lo es, ya que el símbolo K no es un símbolo válido en este sistema
hexadecimal.
Las lenguas naturales sin ser sistemas formales son sistemas que generalmente cuentan con un procedimiento para
nombrar los numerales. La base de los sistemas encontrados en las lenguas del mundo son la base 10 y la base 20,
ya que dichos sistemas se originaron en el contaje de dedos de manos (y a veces también pies).
[editar]Clasificación
Los sistemas de numeración pueden clasificarse en dos grandes grupos: posicionales y no-posicionales:
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
En los sistemas no-posicionales los dígitos tienen el valor del símbolo utilizado, que no depende de la posición
(columna) que ocupan en el número.
En los sistemas de numeración ponderados o posicionales el valor de un dígito depende tanto del símbolo utilizado,
como de la posición que ése símbolo ocupa en el número.
Por ejemplo, el sistema de numeración egipcio es no posicional, en cambio el babilónico es posicional. Las lenguas
naturales poseen sistemas de numeración posicionales basados en base 10 ó 20, a veces con subsistemas de cinco
elementos. Además, en algunas pocas lenguas los numerales básicos a partir de cuatro tienen nombres basados en
numerales más pequeños.
[editar]Sistemas de numeración no posicionales
Estos son los más primitivos se usaban por ejemplo los dedos de la mano para representar la cantidad cinco y después se
hablaba de cuántas manos se tenía. También se sabe que se usaba cuerdas con nudos para representar cantidad. Tiene
mucho que ver con la coordinabilidad entre conjuntos. Entre ellos están los sistemas del antiguo Egipto, el sistema
denumeración romana, y los usados en Mesoamérica por mayas, aztecas y otros pueblos .
[editar]Sistemas de numeración semi posicionales
El sistema de los números romanos no es estrictamente posicional. Por esto, es muy complejo diseñar algoritmos de uso
general (por ejemplo, para sumar, restar, multiplicar o dividir). Como ejemplo, en el número romano XCIX (99 decimal) los
numerales X (10 decimal) del inicio y del fin de la cifra equivalen siempre al mismo valor, sin importar su posición dentro de
la cifra.
[editar]Sistemas de numeración posicionales
Artículo principal: Sistema de numeración posicional
El número de símbolos permitidos en un sistema de numeración posicional se conoce como base del sistema de
numeración. Si un sistema de numeración posicional tiene base bsignifica que disponemos de b símbolos diferentes para
escribir los números, y que b unidades forman una unidad de orden superior.
Ejemplo en el sistema de numeración decimal
Si contamos desde 0, incrementando una unidad cada vez, al llegar a 9 unidades, hemos agotado los símbolos disponibles,
y si queremos seguir contando no disponemos de un nuevo símbolo para representar la cantidad que hemos contado. Por
tanto añadimos una nueva columna a la izquierda del número, reutilizamos los símbolos de que disponemos, decimos que
tenemos una unidad de segundo orden (decena), ponemos a cero las unidades, y seguimos contando.
De igual forma, cuando contamos hasta 99, hemos agotado los símbolos disponibles para las dos columnas; por tanto si
contamos (sumamos) una unidad más, debemos poner a cero la columna de la derecha y sumar 1 a la de la izquierda
(decenas). Pero la columna de la izquierda ya ha agotado los símbolos disponibles, así que la ponemos a cero, y sumamos
1 a la siguiente columna (centena). Como resultado nos queda que 99+1=100.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
El cuentakilómetros mecánico, al utilizar el sistema de numeración posicional decimal, nos muestra lo anterior: va sumando
1 a la columna de la derecha y cuando la rueda de esa columna ha completado una vuelta (se agotan los símbolos),
se pone a cero y se añade una unidad a la siguiente columna de la izquierda.
Pero estamos tan habituados a contar usando el sistema decimal que no somos conscientes de este comportamiento, y
damos por hecho que 99+1=100, sin pararnos a pensar en el significado que encierra esa expresión.
Tal es la costumbre de calcular en decimal que la mayoría de la población ni siquiera se imagina que puedan existir otros
sistemas de numeración diferentes al de base 10, y tan válidos y útiles como este. Entre esos sistemas se encuentran el de
base 2 sistema binario, de base 8 sistema octal y el de base 16 sistema hexadecimal. También los antiguos mayas
tuvieron un sistema de numeración posicional el cual ya no se usa.
[editar]Teorema Fundamental de la numeración
Este teorema establece la forma general de construir números en un sistema de numeración posicional. Primero
estableceremos unas definiciones básicas:
, número válido en el sistema de numeración.
, base del sistema de numeración. Número de símbolos permitidos en el sistema.
, un símbolo cualquiera de los permitidos en el sistema de numeración.
,: número de dígitos de la parte entera.
, coma fraccionaria. Símbolo utilizado para separar la parte entera de un número de su parte fraccionaria.
,: número de dígitos de la parte decimal.
La fórmula general para construir un número N, con un número finito de decimales,
en un sistema de numeración posicional de base b es la siguiente:
El valor total del número será la suma de cada dígito multiplicado por la potencia de
la base correspondiente a la posición que ocupa en el número.
Esta representación posibilita la realización de sencillos algoritmos para la
ejecución de operaciones aritméticas.
[editar]Ejemplo en el sistema decimal
En el sistema decimal los símbolos válidos para construir números son {0,1,...9} (0
hasta 9, ambos incluidos), por tanto la base (el número de símbolos válidos en el
sistema) es diez
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
En la figura inferior podemos ver el teorema fundamental de la numeración aplicado
al sistema decimal.
Los dígitos a la izquierda de la coma fraccionaria representados por dn ... d2 d1 d0 ,
toman el valor correspondiente a las potencias positivas de la base (10 en el
sistema decimal), en función de la posición que ocupan en el número, y
representan respectivamente al dígito de las n-unidades (10n), centenas (10²=100),
decenas (10¹=10) y unidades (100=1), ya que como se ve en el gráfico están
colocados en las posiciones n..., tercera, segunda y primera a la izquierda de la
coma fraccionaria.
Los dígitos a la derecha de la coma fraccionaria d-1, d-2, d-3 ... d-n representan
respectivamente al dígito de las décimas (10-1=0,1), centésimas (10-2=0,01),
milésimas (10-3=0,001) y n-ésimas (10-n) .
Por ejemplo, el número 1492,36 en decimal, puede expresarse como: 1492/36
[editar]Ejemplo en el sistema binario
Tomemos ahora el sistema binario o de base 2. En este sistema los dígitos válidos
son {0,1}, y dos unidades forman una unidad de orden superior.
En la figura inferior podemos ver el teorema fundamental de la numeración aplicado
al sistema binario.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
Seguimos con el ejemplo del cuentakilómetros visto arriba. En este caso las ruedas
no tienen 10 símbolos (0 al 9) como en el caso del sistema decimal. En el sistema
binario la base es 2, lo que quiere decir que sólo disponemos de 2 símbolos {0,1}
para construir todos los números binarios.
En el sistema binario, para representar cifras mayores que 1 se combinan los 2
símbolos {0,1} y agrega una segunda columna de un orden superior.
Aquí las ruedas del cuentakilómetros dan una vuelta cada dos unidades. Por tanto,
una vez que contamos (sumamos) dos hemos agotado los símbolos disponibles
para esa columna, y debemos poner a cero la columna y usar otra columna a la
izquierda.
Así, si contamos en binario, tras el número 0(2 viene el 1(2, pero si contamos una
unidad más debemos usar otra columna, resultando 10(2
Sigamos contando 0(2,1(2,10(2,11(2. Al añadir una unidad a la columna de las
unidades, esa columna ha dado la vuelta (ha agotado los símbolos disponibles), y
debemos formar una unidad de segundo orden, pero como ya hay una, también
agotaremos los símbolos disponibles para esa columna, y debemos formar una
unidad de tercer orden o 100(2. Así, en el sistema binario 11(2 + 1(2 + 100(2
Ejemplos:
El número está formado por un solo símbolo repetido tres veces. No
obstante, cada uno de esos símbolos tiene un valor diferente, que depende de
la posición que ocupa en el número. Así, el primer 1 (empezando por la
izquierda) representa un valor de , el segundo de y el
tercero de , dando como resultado el valor del número:
.
[editar]Sistema de numeración octal
El sistema de numeración octal es también muy usado en la computación por tener
una base que es potencia exacta de 2 o de la numeración binaria. Esta
característica hace que la conversión a binario o viceversa sea bastante simple. El
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
sistema octal usa 8 dígitos (0, 1, 2, 3, 4, 5, 6, 7) y tienen el mismo valor que en el
sistema de numeración decimal.
El teorema fundamental aplicado al sistema octal sería el siguiente:
Como el sistema de numeración octal usa la notación posicional entonces para el
número 3452,32 tenemos q: 2*80 + 5*81 + 4*82 + 3*83 + 3*8-1 + 2*8-2 = 2 + 40 + 4*64
+ 3*512 + 3*0,125 + 2*0,015625 = 2 + 40 + 256 + 1536 + 0,375 + 0,03125 = 1834 +
0,40625d
Entonces, 3452,32q = 1834,40625d
El sub índice q indica número octal, se usa la letra q para evitar confusión entre la
letra 'o' y el número 0. En informática, a veces se utiliza la numeración octal en vez
de la hexadecimal. Tiene la ventaja de que no requiere utilizar otros símbolos
diferentes de los dígitos. Es posible que la numeración octal se usara en el pasado
en lugar de la decimal, por ejemplo, para contar los espacios interdigitales o los
dedos distintos de los pulgares.
Es utilizado como una forma abreviada de representar números binarios que
emplean caracteres de seis bits. Cada tres bits (medio carácter) es convertido en
un único dígito octal. Okta es un término griego que significa 8.
[editar]Sistema de numeración hexadecimal
El sistema de numeración hexadecimal, de base 16, utiliza 16 símbolos. Es común
abreviar hexadecimal como hex aunque hex significa base seis. Dado que el
sistema usual de numeración es de base decimal y, por ello, sólo se dispone de
diez dígitos, se adoptó la convención de usar las seis primeras letras del alfabeto
latino para suplir los dígitos que nos faltan: A = 10, B = 11, C = 12, D = 13, E = 14 y
F = 15. Como en cualquier sistema de numeración posicional, el valor numérico de
cada dígito es alterado dependiendo de su posición en la cadena de dígitos,
quedando multiplicado por una cierta potencia de la base del sistema, que en este
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
caso es 16. Por ejemplo: 3E0,A(16) = 3×16^2 + E×16^1 + 0×16^0 + A×16^-1 =
3×256 + 14×16 + 0×1 + 10×0,0625 = 992,625. El sistema hexadecimal actual fue
introducido en el ámbito de la computación por primera vez por IBM en 1963. Una
representación anterior, con 0–9 y u–z, fue usada en 1956 por la
computadora Bendix G-15 y algunas computadoras modernas.
[editar]Operaciones con sistemas de numeración
[editar]Suma de números binarios
La tabla de sumar para números binarios es la siguiente:
+ 0 1
0
0 1
1
1 10
Las posibles combinaciones al sumar dos bits son:
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 10
Note que al sumar 1 + 1 es 102, es decir, llevamos 1 a la siguiente posición de la
izquierda (acarreo). Esto es equivalente, en el sistema decimal a sumar 9 + 1, que
da 10: cero en la posición que estamos sumando y un 1 de acarreo a la siguiente
posición.
Ejemplo
1 10011000 + 00010101
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
——————————— 10101101
[editar]Resta binaria
Es similar a la decimal, con la diferencia de que se manejan sólo dos dígitos y
teniendo en cuenta que al realizar las restas parciales entre dos dígitos de idéntica
posiciones, una del minuendo y otra del sustraendo, si el segundo excede al
primero, se sustrae una unidad del dígito de más a la izquierda en el minuendo (si
existe y vale 1), convirtiéndose este último en 0 y equivaliendo la unidad extraída a
1*2 en el minuendo de resta parcial que estamos realizando. Si es cero el dígito
siguiente a la izquierda, se busca en los sucesivos. Las tablas de Resta son:
Tabla del cero (0): 0 - 0 = 0, 1 - 0 = 1
Tabla del uno (1): 0 - 1 = no cabe, 1 - 1 = 0
Ejemplo, mostrando los equivalentes en decimal entre paréntesis para su
contraste
Restar 101010 (42) a 111111 (63):
111111 - 101010 ——————————— 010101
[editar]Multiplicación binaria
Se realiza similar a la multiplicación decimal salvo que la suma final de los
productos se hacen en binarios. Las tablas de Multiplicar son:
Tabla del cero (0): 0 * 0 = 0, 1 * 0 = 0
Tabla del uno (1): 0 * 1 = 0, 1 * 1 = 1
Ejemplo, mostrando los valores en decimal entre paréntesis para su cotejo
Multiplicar 100 (4) por 10 (2):
100 * 10 = 1000 (8)
[editar]División binaria
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
La división en binario es similar a la decimal; la única diferencia es que a la hora de
hacer las restas, dentro de la división, éstas deben ser realizadas en binario.
Ejemplo, mostrando los valores en decimal entre paréntesis para su cotejo
Dividir 100010010 (274) entre 1101 (13):
100010010 |1101 ——————-0000 010101——————— 10001 -1101——————— 01000 - 0000 ——————— 10000 - 1101 ——————— 00011 - 0000 ——————— 01110 - 1101 ——————— 00001
[editar]Tabla de conversión entre decimal, binario, hexadecimal, octal, BCD, Exceso 3 y Gray o Reflejado
DecimalBinari
oHexadecimal Octal BCD
Exceso 3
Gray o Reflejado
0 0000 0 0 0000 0011 0000
1 0001 1 1 0001 0100 0001
2 0010 2 2 0010 0101 0011
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
3 0011 3 3 0011 0110 0010
4 0100 4 4 0100 0111 0110
5 0101 5 5 0101 1000 0111
6 0110 6 6 0110 1001 0101
7 0111 7 7 0111 1010 0100
8 1000 8 10 1000 1011 1100
9 1001 9 11 1001 1100 1101
10 1010 A 120001 0000
1111
11 1011 B 130001 0001
1110
12 1100 C 140001 0010
1010
13 1101 D 150001 0011
1011
14 1110 E 160001 0100
1001
15 1111 F 170001 0101
1000
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
Arquitectura de computadorasSe ha sugerido que Arquitectura de ordenadores (UCE) sea fusionado en este artículo o sección. (Discusión).Una vez que hayas realizado la fusión de artículos, pide la fusión de historiales en WP:TAB/F.
Una visión típica de una arquitectura de computadora como una serie de capas de
abstracción: hardware, firmware,ensamblador, kernel, sistema operativo yaplicaciones.
La arquitectura de computadoras es el diseño conceptual y la estructura operacional fundamental de
un sistema de computadora. 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 (UCP) trabaja internamente y accede a las direcciones
de memoria.
También suele definirse como la forma de seleccionar e interconectar componentes de hardware para
crear computadoras según los requerimientos de funcionalidad, rendimiento y costo.
El ordenador recibe y envía la información a través de los periféricos por medio de los canales. La UCP
es la encargada de procesar la información que le llega al ordenador. El intercambio de información se
tiene que hacer con los periféricos y la UCP. Todas aquellas unidades de un sistema exceptuando la
UCP se denomina periférico, por lo que el ordenador tiene dos partes bien diferenciadas, que son: la
UCP (encargada de ejecutar programas y que esta compuesta por la memoria principal, la UAL y la UC)
y los periféricos (que pueden ser de entrada, salida, entrada-salida y comunicaciones).
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
Contenido
[ocultar]
1 Introducción
2 Almacenamiento de operandos en la CPU
o 2.1 Ventajas de las arquitecturas
o 2.2 Desventajas de las arquitecturas
3 Véase también
4 Enlaces externos
[editar]Introducción
La implantación de instrucciones es similar al uso de una serie de desmontaje en
una fábrica de manufacturación. En las cadenas de montaje, el producto pasa a través de muchas
etapas de producción antes de tener el producto desarmado. Cada etapa o segmento de la cadena está
especializada en un área específica de la línea de producción y lleva a cabo siempre la misma actividad.
Esta tecnología es aplicada en el diseño de procesadores eficientes.
A estos procesadores se les conoce como pipeline processors. Estos están compuestos por una lista de
segmentos lineales y secuenciales en donde cada segmento lleva a cabo una tarea o un grupo de
tareas computacionales. Los datos que provienen del exterior se introducen en el sistema para ser
procesados. La computadora realiza operaciones con los datos que tiene almacenados en memoria,
produce nuevos datos o información para uso externo.
Las arquitecturas y los conjuntos de instrucciones se pueden clasificar considerando los siguientes
aspectos:
Almacenamiento de operativos en la CPU: dónde se ubican los operadores aparte de la
substractora informativa (SI)
Número de operandos explícitos por instrucción: cuántos operandos se expresan en forma explícita
en una instrucción típica. Normalmente son 0, 1, 2 y 3.
Posición del operando: ¿Puede cualquier operando estar en memoria?, o deben estar algunos o
todos en los registros internos de la CPU. Cómo se especifica la dirección de memoria (modos de
direccionamiento disponibles).
Operaciones: Qué operaciones están disponibles en el conjunto de instrucciones.
Tipo y tamaño de operandos y cómo se especifican.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
[editar]Almacenamiento de operandos en la CPU
La diferencia básica está en el almacenamiento interno de la CPU.
Las principales alternativas son:
Acumulador .
Conjunto de registros.
Memoria
Características:
En una arquitectura de acumulador un operando está implícitamente en el acumulador siempre leyendo
e ingresando datos. (Ej: calculadora Standard -estándar-)
En la arquitectura de pila no es necesario nombrar a los operandos ya que estos se encuentran en el
tope de la pila. (Ej: calculadora de pila HP)
La Arquitectura de registros tiene solo operandos explícitos (es aquel que se nombra) en registros o
memoria.
[editar]Ventajas de las arquitecturas
Pila : Modelo sencillo para evaluación de expresiones (notación polaca inversa). Instrucciones
cortas pueden dar una buena densidad de código.
Acumulador: Instrucciones cortas. Minimiza estados internos de la máquina (unidad de control
sencilla).
Registro: Modelo más general para el código de instrucciones parecidas. Automatiza generación de
código y la reutilización de operandos. Reduce el tráfico a memoria. Una computadora actualmente
tiene como estándar 32 registros. El acceso a los datos es más rápido.
[editar]Desventajas de las arquitecturas
Pila: A una pila no se puede acceder aleatoriamente. Esta limitación hace difícil generar código
eficiente. También dificulta una implementación eficente, ya que la pila llega a ser un cuello de
botella es decir que existe dificultad para la transferencia de datos en su velocidad mk.
Acumulador: Como el acumulador es solamente almacenamiento temporal, el tráfico de memoria es
el más alto en esta aproximación.
Registro: Todos los operadores deben ser nombrados, conduciendo a instrucciones más largas.
El concepto de arquitectura en el entorno informático proporciona una descripción de la construcción y distribución física de los componentes de lacomputadora.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
La arquitectura de una computadora explica la situación de sus componentes y permite determinar las posibilidades de que un sistema informático, conuna determinada configuración, pueda realizar las operaciones para las que se va a utilizar.
Cualquier usuario que desee adquirir un sistema informático, tanto si es una gran empresa como un particular, debe responder a una serie de preguntasprevias: ¿qué se desea realizar con el nuevo sistema informático? ¿Cuáles son los objetivos a conseguir? ¿Qué software será el más adecuado paraconseguir los objetivos marcados? ¿Qué impacto va a suponer en la organización (laboral o personal) la introducción del nuevo sistema informático?
Finalmente, cuando se haya respondido a estas preguntas, el usuario tendrá una idea aproximada de los objetivos que han de cumplir los diferentessistemas informáticos a evaluar.
En la actualidad es muy familiar el aspecto exterior de una computadora o, por lo menos, de una microcomputadoraName=g8; HotwordStyle=BookDefault; , pero se ha de advertir que, salvando las diferencias de tamaño y la posibilidad de teleproceso (manejo del sistema informático a grandes distancias a través de líneas de comunicaciones de diferentes tipos), en general, los sistemas informáticos se dividen físicamente en la unidad central del sistema y los periféricos que permiten conectarlo al mundo exterior.
La Unidad Central del Sistema es un habitáculo en forma de caja donde se sitúa el « cerebro» de la computadora, esto es, la unidad central de proceso(CPU), así como los distintos componentes que van a ayudar al sistema informático en sus operaciones habituales (bus, memorias, fuentes dealimentación eléctrica, etcétera).
La unidad central de proceso se compone de:
• Una Unidad de Control que manejará los diferentes componentes del sistema informático así como los datos a utilizar en los diferentes procesos.
• Una Unidad Aritmético-Lógica que realizará las diferentes operaciones de cálculo en las que la computadora basa su funcionamiento.
• Unos Registros del Sistema que sirven como área de trabajo interna a la unidad central de proceso.
La unidad central de proceso se conecta a una serie de memorias que le sirven como soporte para el manejo de los datos y programas que se han de utilizar mientras se encuentre operativa.
Las diferentes memorias del sistema informático (Random Access Memory o RAM y Read Only Memory o ROM) son componentes fundamentales de la computadora ya que van a ser, en el caso de la RAM, el área de trabajo donde el microprocesador va a realizar las diferentes operaciones en que se van a descomponer los procesos solicitados por el usuario, mientras que la ROM va a servir para ayudar a la computadora a realizar las diferentes operaciones de
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
arranque del sistema informático previas a que el sistema operativo tome el control de las diferentes tareas a realizar.
La unidad central de proceso y las memorias se conectan entre ellas por medio del bus. El bus es un enlace de comunicaciones que conecta todos los componentes que configuran el sistema informático y permite la transferencia de información entre ellos. Esta información se compone de datos y órdenes de comandos para manipular los datos. Existen varias tecnologías de diseño y construcción de buses entre las que se pueden distinguir las arquitecturas ISA, EISA y MCA que se verán más adelante.
Otros componentes que se conectan al bus son los puertos de conexión de los diferentes periféricos asociados a la unidad central del sistema de la computadora y que van a permitir configurar el sistema informático para una serie diferente de operaciones funcionales que siempre han de cubrir las necesidades del usuario.
Es evidente que la configuración de un sistema informático ha de realizarse en función de los objetivos operativos que vaya a cubrir la citada computadora. Así, un sistema informático que se va a dedicar exclusivamente a CAD/CAM (diseño asistido por computadora) no tendrá una configuración similar a la de una computadora que va a dedicarse a controlar los diferentes enlaces de comunicaciones que componen una redinformática.
Los diferentes periféricos que se pueden conectar a un sistema informático se dividen en cuatro grupos principales:
• Periféricos de Entrada de Información.
• Periféricos de Almacenamiento de Información.
• Periféricos de Salida de Información.
• Periféricos de Comunicaciones.
Unidad Central del Sistema
La Unidad Central del Sistema (System Unit en inglés) es el centro de operaciones de cualquier computadora existente en el mercado actual. En la unidad central del sistema se alojan los componentes y circuitería que van a realizar las tareas fundamentales de la computadora.
Al abrir la unidad central del sistema de una computadora se pueden apreciar una serie de componentes:
- Placa principal.
- Microprocesador central o unidad central de proceso (CPU).
- Bus.
- Memoria principal.
- Otros componentes controladores.
- Fuente de alimentación eléctrica.
A continuación se estudiará detenidamente cada uno de ellos.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
1. Placa Principal.
Es una placa con un circuito impreso donde se conectan los elementos básicos de la computadora: el microprocesador, el bus y toda o parte de la memoria principal.
En algunos lugares también aparece denominada como placa base o placa madre.
2. Microprocesador Central o Unidad Central de Proceso (CPU).
Es el elemento fundamental de la computadora. El microprocesador va a ocuparse de la ejecución de las órdenes de comandos, los cálculosmatemáticos solicitados por las referidas órdenes, el manejo de los datos asociados a los cálculos. Otra función importante del microprocesador va a ser el control de los componentes del sistema informático conectados a él y que le dan apoyo y le permiten realizar todas las operaciones que le son solicitadas por los diferentes programas de aplicación.
El microprocesador se va a ocupar también de controlar y gestionar el tráfico de datos entre la unidad central del sistema y los periféricos optimizando los procesos a realizar por la computadora.
3. Bus.
El bus, quizá fuera mejor decir los buses ya que existen varios con diversas funciones, es un circuito que conecta el procesador central con todo el resto de componentes de la computadora.
El bus sirve para que le llegue al procesador la información y las solicitudes de trabajo, desde el exterior, y envíe hacia afuera los resultados del trabajo realizado.
4. Memoria Principal.
Es la zona de trabajo donde la computadora va a almacenar temporalmente las órdenes a ejecutar y los datos que deberán manipular esas órdenes.
Cuanto mayor sea la cantidad de memoria existente en el sistema informático, mayores serán las posibilidades de trabajo de la computadora, ya que ésta podrá manipular una cantidad superior de datos al mismo tiempo (siempre que el sistema operativo lo permita).
5. Componentes de Control.
Son elementos que sirven como apoyo al funcionamiento del microprocesador central.
Fundamentalmente, son componentes especializados en realizar determinadas operaciones, descargando al microprocesador central de estas actividades y permitiéndole obtener una mayor rapidez y efectividad en el manejo del conjunto del sistema informático.
Los controladores más importantes son el controlador de interrupciones, el generador de reloj y el controlador de acceso directo a memoria.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
Las placas de expansión interna más importantes son las de control del subsistema de vídeo, que manejarán las señales que envía la CPU a la pantalla del sistema informático y las del controlador de los discos de la computadora que controlará el flujo de datos entre la memoria principal y el subsistema de almacenamiento.
Estos componentes serán estudiados en el apartado concreto de sus tareas dentro del sistema informático.
6. Fuente de Alimentación Eléctrica.
Las fuentes de alimentación proporcionan la energía eléctrica que necesita por la computadora para funcionar. Esa energía se estabiliza para impedir que la computadora se vea afectada por oscilaciones bruscas en el suministro de las compañías eléctricas.
La fuente de alimentación transforma la corriente alterna de 220 voltios de la red ciudadana en corriente continua y de menor voltaje, que es la que necesitan los diferentes componentes de la computadora.
Los voltajes que proporciona la fuente de alimentación son de 12 y 5 voltios. El primero se utiliza para poner en funcionamiento los componentes mecánicos de la computadora (discos, diskettes, etc.). El segundo se utiliza en los componentes electrónicos (el microprocesador, la memoria, el reloj, etc.).
En caso de que se abra la unidad central del sistema de la computadora es muy importante no manipular la fuente de alimentación; hay que tener encuenta que, si el sistema informático está enchufado y encendido, la fuente de alimentación es potencialmente peligrosa. Si se está intentando realizar alguna operación dentro de la caja de la unidad, deben manipularse cuidadosamente los cables que entran y salen de la caja de la fuente de alimentación y bajo ningún concepto intentar abrirla.
Unidad Central de Proceso
La Unidad Central de Proceso es el lugar donde se realizan las operaciones de cálculo y control de los componentes que forman la totalidad del conjunto del sistema informático.
Las CPU de las actuales computadoras son microprocesadores construidos sobre un cristal de silicio semiconductor donde se crean todos los elementos que forman un circuito electrónico ( transistores, etc.) y las conexiones necesarias para formarlo.
El microcircuito se encapsula en una pastilla de plástico con una serie de conexiones hacia el exterior, en forma de patillas metálicas, que forman su nexo de unión al resto del sistema informático. Estas pastillas de plástico, con una multitud de patillas de conexión metálicas, reciben el nombre de chips.
El microprocesador central de una computadora se divide en:
• Unidad de Control (Control Unit o CU en inglés).
• Unidad Aritmético-Lógica (Aritmethic Control Unit o ALU en inglés).
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
• Registros.
La Unidad de Control maneja y coordina todas las operaciones del sistema informático, dando prioridades y solicitando los servicios de los diferentes componentes para dar soporte a la unidad aritmético-lógica en sus operaciones elementales.
La Unidad Aritmético-Lógica realiza los diferentes cálculos matemáticos y lógicos que van a ser necesarios para la operatividad de la computadora; debe recordarse que todo el funcionamiento del sistema de una computadora se realiza sobre la base de una serie de operaciones matemáticas en códigobinario.
Los Registros son una pequeña memoria interna existente en la CPU que permiten a la ALU el manejo de las instrucciones y los datos precisos para realizar las diferentes operaciones elementales.
De la misma forma que la placa principal tiene un bus para conectar la CPU con los diferentes dispositivos del sistema informático, la unidad de control tiene un bus interno para conectar sus componentesName=g12; HotwordStyle=BookDefault; .
Unidad de Control (CU)
Es la parte de la unidad central de proceso que actúa como coordinadora de todas las tareas que ha de realizar la computadora. Asimismo, se encarga de manejar todas las órdenes que la computadora necesita para realizar la ejecución de las operaciones requeridas por los programas de aplicación.
Sus funciones Básicas son:
1. Manejar todas las operaciones de acceso, lectura y escritura a cada una de las posiciones de la memoria principal donde se almacenan las instrucciones necesarias para realizar un proceso.
2. Interpretar la instrucción en proceso.
3. Realizar las tareas que se indican en la instrucción.
Esta unidad también se ocupa de controlar y coordinar a las unidades implicadas en las operaciones anteriormente mencionadas, de manera que se eviten problemas internos que se puedan producir entre los componentes de la computadora.
La unidad de control, finalmente, comunica entre sí y dirige las entradas y salidas desde y hasta los periféricos, dando el oportuno tratamiento a la información en proceso.
Para realizar su cometido, la unidad de control necesita manejar la siguiente información:
• El registro de estado.
• El registro puntero de instrucciones.
• La instrucción a ejecutar.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
• Las señales de entrada/salida.
La salida que proporcionará la unidad de control será el conjunto de órdenes elementales que servirán para ejecutar la orden solicitada.
Los pasos en que se divide este proceso son:
1. Extraer de la memoria principal la instrucción a ejecutar.
2. Tras reconocer la instrucción, la unidad de control establece la configuración de las puertas lógicas (las interconexiones de los diferentes componentes del circuito lógico) que se van a ver involucradas en la operación de cálculo solicitada por la instrucción, estableciendo el circuito que va a resolverla.
3. Busca y extrae de la memoria principal los datos necesarios para ejecutar la instrucción indicada en el paso número 1.
4. Ordena a la unidad involucrada en la resolución de la instrucción en proceso que realice las oportunas operaciones elementales.
5. Si la operación elemental realizada ha proporcionado nuevos datos, éstos se almacenan en la memoria principal.
6. Se incrementa el contenido del registro puntero de instrucciones.
Unidad Aritmética y Lógica (ALU)
Su misión es realizar las operaciones con los datos que recibe, siguiendo las indicaciones dadas por la unidad de control.
El nombre de unidad aritmética y lógica se debe a que puede realizar operaciones tanto aritméticas como lógicas con los datos transferidos por la unidad de control.
La unidad de control maneja las instrucciones y la aritmética y lógica procesa los datos.
Para que la unidad de control sepa si la información que recibe es una instrucción o dato, es obligatorio que la primera palabra que reciba sea una instrucción, indicando la naturaleza del resto de la información a tratar.
Para que la unidad aritmética y lógica sea capaz de realizar una operación aritmética, se le deben proporcionar, de alguna manera, los siguientes datos:
1. El código que indique la operación a efectuar.
2. La dirección de la celda donde está almacenado el primer sumando.
3. La dirección del segundo sumando implicado en la operación.
4. La dirección de la celda de memoria donde se almacenará el resultado.
Registros
Los Registros son un medio de ayuda a las operaciones realizadas por la unidad de control y la unidad aritmética y lógica. Permiten almacenar información, temporalmente, para facilitar la manipulación de los datos por parte de la CPU.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
Realizando una similitud con el resto del sistema informático, los registros son a la CPU como la memoria principal es a la computadora.
Los registros se dividen en tres grupos principales:
• Registros de Propósito General.
• Registros de Segmento de Memoria.
• Registros de Instrucciones.
Seguidamente se presenta una relación completa de los tres grupos de registros que contiene un microprocesador típico como puede ser el Intel 80386:
Registros de Propósito General:
(AX) Registro de Datos
(DX) Registro de Datos
(CX) Registro de Datos
(BX) Registro de Datos
(BP) Registro Puntero Base
(SI) Registro Índice Fuente
(DI) Registro Índice Destino
(SP) Registro Puntero de la Pila
Registros de Segmento de Memoria:
(CS) Registro Segmento de Código
(SS) Registro Segmento de la Pila
(DS) Registro Segmento de Datos
(ES) Registro Segmento de Datos Extra
(DS) Registro Segmento de Datos Extra
(ES) Registro Segmento de Datos Extra
Registros de Instrucciones
(FL) Registro de «Flags» o también denominado registro de estado
(IP) Registro Puntero de Instrucción o también denominado registro Contador de Programa (PC)
De esta relación de registros los cuatro más importantes son:
• El Registro Puntero de Instrucciones.
El registro puntero de instrucciones o contador de programa indica el flujo de las instrucciones del proceso en realización, apuntando a la dirección de memoria en que se encuentra la instrucción a ejecutar.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
Dado que las instrucciones de un programa se ejecutan de forma secuencial, el procesador incrementará en una unidad este registro cada vez que ejecute una instrucción, para que apunte a la siguiente.
La información que almacena este registro se puede modificar cuando una interrupción externa, o la propia ejecución del proceso en curso, provoque una alteración en la secuencia de operaciones. Esta alteración transferirá el control del sistema informático a otro proceso diferente al que está en ejecución.
• El Registro Acumulador.
Es el Registro donde se almacenan los resultados obtenidos en las operaciones realizadas por la unidad aritmética y lógica.
Su importancia radica en las características de la información que almacena, ya que con su contenido se realizan todas las operaciones de cálculo que ha de ejecutar la unidad aritmética y lógica.
• El registro de Estado.
El Registro de Estado o registro de «flags» no es un solo registro propiamente dicho, ya que se compone de varios registros de menor tamaño; este tamaño puede ser incluso de un solo bit.
El registro de estado se utiliza para indicar cambios de estados y condiciones en los otros registros existentes en el sistema informático. Estos cambios en la situación de los demás registros se producen debido a las modificaciones del entorno a lo largo de la ejecución de los procesos realizados por el sistema informático.
• El Registro Puntero de la Pila.
Este Registro almacena la dirección de la zona de la memoria donde está situada la parte superior de la pila.
La Pila es una zona de los registros de segmento de memoria que la unidad aritmética y lógica utiliza para almacenar temporalmente los datos que está manipulando. Cuando la cantidad de datos a manejar es demasiado grande u otras necesidades del proceso impiden que estos datos puedan almacenarse en los registros creados para ello se envían a la pila, donde se almacenan hasta que la unidad de control recupera la información para que la procese la unidad aritmética y lógica.
La ventaja de manejar una pila como almacén de información es que la información que se guarda en ella tiene que entrar y salir, obligatoriamente, por una sola dirección de memoria. Esto permite que la unidad de control no necesite conocer más que esa dirección para poder manejar los datos almacenados en la pila.
Memoria Principal
La Memoria Principal es la zona de la unidad central de sistema que almacena la información, en forma de programas y datos, que se va a procesar seguidamente o
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
va a servir de apoyo a las diferentes operaciones que se van a efectuar por la computadora.
La posibilidad del proceso inmediato de la información que almacena la memoria principal es su característica fundamental, ya que, mientras que los datos existentes en la memoria principal pueden ser procesados de inmediato por la unidad central de proceso, la información contenida en la memoria auxiliar (discos, cintas, etc.) no puede ser procesada directamente por la unidad central de proceso.
La memoria principal está conectada directamente a los buses, que son su medio de comunicación con la unidad central de proceso del sistema informático. La cantidad de memoria existente en una computadora se verá limitada por la capacidad de direccionamiento del bus; esto forma el Mapa de Memoria.
La memoria principal está compuesta lógicamente por una serie de celdas de bits que permiten almacenar en cada una de ellas un bit de información en código binario (0, 1) que será parte de un dato o una instrucción.
Para poder identificar cada una de las celdas de la memoria, éstas se numeran; a este número se le llama dirección y es el medio a través del cual la unidad de control puede manejar la información.
Las direcciones de la memoria se localizan a través del mapa de memoria. La dirección de cada celda de la memoria se establece por una matriz en la que los parámetros son el número total de direcciones y la longitud de palabra que maneja el sistema informático. Esto supone una limitación, ya que la computadora sólo puede manejar un número limitado de bits de dirección en sus operaciones de direccionamiento.
La Palabra representa la cantidad de bits de información manejada en paralelo por la computadora. Tamaños típicos de palabras son 8 bits, 16 bits, 32 bits, etc.
Una vez localizada la dirección de la celda de memoria se podrán realizar dos operaciones: leer la información existente en ella o bien escribir nuevainformación para poder ser almacenada y posteriormente procesada.
Para poder determinar si el sistema informático va a leer o escribir se utiliza el registro de datos. El registro de datos es un bit que, según el valor de la información que contenga (0,1) indica a la unidad de control si se va a leer o escribir en el acceso a la memoria que se esté realizando en ese momento.En ambos casos, esta operación se realiza a través del bus de datos.
Cuando la unidad de control lee de la celda de memoria, necesita que se le proporcione una dirección a la cual ir a leer. La información existente en la celda no se destruye.
Cuando la unidad de control escribe en la celda de memoria, debe recibir dos informaciones: la dirección de la memoria donde escribir y la información que se debe escribir propiamente dicha. La información existente en la celda de memoria previamente se destruye, ya que lo que había escrito se sustituye por una nueva información.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
La memoria principal se divide fundamentalmente en dos partes: Volátil y No Volátil.
La Memoria Volátil pierde la información almacenada en su interior si el sistema informático que la soporta es apagado. Esta parte de la memoria principal se conoce como RAM (Memoria de Acceso Aleatorio o Random Access Memory).
La parte de la Memoria principal que No es Volátil es la ROM (Memoria de Sólo Lectura o Read Only Memory). Esta memoria es de sólo lectura y la computadora no puede escribir sobre ella. Su función principal es el arranque del sistema informático.
Las Memorias Volátiles pueden ser estáticas, también llamadas RAM (Memorias de Acceso Aleatorio o Random Access Memory), o dinámicas, denominadas en este caso DRAM (Memorias Dinámicas de Acceso Aleatorio o Dinamic Random Access Memory). Más adelante se verán más detenidamente.
Las Memorias No Volátiles se dividen en memorias de Sólo Lectura (ROM) y en otras que permiten la Manipulación de la Información que contienen por diversos medios especiales que se verán más adelante.
Existen dos modos distintos de Acceso a la Memoria:
• Acceso por Palabras.
• Acceso por Bloques.
1. Acceso por Palabras.
También se le denomina acceso aleatorio. La operación de acceso se realiza sobre una sola palabra de información. Recuérdese que palabra es la cantidad de bits que maneja el sistema informático al mismo tiempo.
Este tipo de acceso únicamente se utiliza con memorias estáticas (RAM) ya que el tiempo de acceso empleado es siempre el mismo.
2. Acceso por Bloques.
Es el modo de acceso utilizado en las memorias dinámicas. Consiste en empaquetar en un bloque un conjunto de datos al que se añade una cabecera para identificarlo. El acceso se realizará a la cabecera del bloque y una vez en ella se accederá a la información que contiene.
El acceso en las memorias dinámicas se realiza por bloques, debido a que tardan más tiempo que las estáticas en acceder a una zona de la memoria. La ventaja es que una vez que acceden a la zona donde se sitúa el bloque son muy rápidas en acceder a la información existente.
Generalmente, la memoria que posee una computadora recién adquirida no es la máxima que el bus puede direccionar, por lo que la memoria principal puede ampliarse incrementando el número de unidades de memoria conectadas. Conviene recordar que las placas de memoria son un factor fundamental en el costo total de adquisición del sistema informático.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
Debe tenerse en cuenta que si la cantidad de memoria principal del sistema informático no es muy grande el procesador se verá restringido en supotencia por la limitada capacidad de manipulación y acceso a los datos.
Las Tecnologías para fabricar memorias se caracterizan por:
• Coste.
• Tiempo de acceso.
• Capacidad de almacenamiento.
La Optimización se consigue con una gran capacidad de almacenamiento, un tiempo de acceso muy corto y un costo pequeño.
Las memorias se dividen físicamente en:
1. Soporte de Almacenamiento de la Información.
Generalmente son de naturaleza magnética. Está compuesto por pequeños dipolos que pueden tomar dos estados en los que la información toma unvalor en cada uno de ellos. Cada estado se obtiene por medio de la aplicación de una señal eléctrica exterior generada por el elemento de lectura y escritura.
2. Elemento de Escritura y Lectura.
Este dispositivo introducirá y obtendrá la información de la memoria.
Para Escribir el dispositivo produce una corriente eléctrica local que provoca un cambio estable en el campo magnético de la celda de memoria.
Para Leer el dispositivo determinará el campo magnético de la celda de memoria y sabrá cual es el valor existente.
3. Mecanismo de Direccionamiento.
Pueden ser de dos tipos dependiendo de que las memorias sean estáticas o dinámicas.
En las Memorias Estáticas el direccionamiento es un cableado directo a la celda de memoria.
En las Memorias Dinámicas se utiliza una información de control almacenada con los datos que configuran el circuito para direccionar la lectura o escritura al lugar donde se almacena la información.
La memoria se divide en varias capas o niveles con una estructura cuya forma puede recordarnos a una estructura piramidal.
Nombre Tamaño Máximo Tiempo de Acceso
Registros Hasta 200 Bytes Menos de 10 Nanosegundos
Memoria Caché Hasta 512 Bbytes Entre 10 y 30 Nanosegundos
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
Memoria Principal Más de 1 Gigabyte Entre 30 y 100 Nanosegundos
El vértice de la pirámide sería una pequeña cantidad de memoria, los registros, que se caracterizan por una capacidad de almacenamiento de información muy pequeña, pero que poseen la ventaja de tener un tiempo de acceso muy reducido, inferior a los 10 nanosegundos.
La base de nuestra hipotética pirámide es la memoria principal, donde existe una mayor cantidad de espacio (puede llegar hasta 1 gigabyte, esto es, mil millones de bytes), pero que tiene la desventaja de que el tiempo de acceso es muy superior, lo que la convierte en mucho más lenta que los registros.
Entre ambas se situaría una zona de memoria que se llama memoria caché. La memoria caché es una zona especial de memoria que sirve para optimizar los tiempos de acceso a la memoria RAM por métodos estadísticos.
Memoria de Acceso Aleatorio (RAM)
Las Memorias de Acceso Aleatorio (RAM: Random Access Memory) son memorias construidas sobre semiconductores donde la información se almacena en celdas de memoria que pueden adquirir uno cualquiera de los dos valores del código binario.
Las memorias de acceso aleatorio son memorias en la que se puede leer y escribir información. Permite el acceso a cualquier información que contenga con la misma velocidad. Esto significa que se puede acceder aleatoriamente a cualquier información almacenada sin que se afecte la eficiencia del acceso. Contrasta con las memorias secuenciales, por ejemplo una cinta magnética, donde la facilidad de acceso a una información depende del lugar de la cinta donde esté almacenada.
Las tecnologías de memorias RAM se basan en Celdas de Memoria. La memoria RAM es volátil, esto es, cuando se corta la alimentación eléctrica se pierde toda la información que estuviera almacenada en este tipo de memoria. La comunicación de la RAM con la CPU se realiza a través del Bus de Direcciones y el Bus de Datos.
La memoria RAM se utiliza tanto para almacenar temporalmente programas y datos como para guardar los resultados intermedios que se están manipulando durante un proceso.
Una celda de memoria concreta de la RAM se puede referenciar con una dirección de Segmento de Memoria y un valor determinado dentro de ese segmento llamado «desplazamiento».
La RAM está dividida en segmentos de memoria para facilitar su manejo por la unidad de control. Los segmentos de memoria tienen un tamaño múltiplo de 16, de 0 a F en Hexadecimal. El rango total varía desde 0000 hasta un valor Hexadecimal que depende de la cantidad de semiconductores de memoria RAM con la que se haya configurado el sistema de la computadora.
Los segmentos de memoria se agrupan en diferentes Áreas de Trabajo que permiten delimitar las diversas funciones que se realizan en la memoria.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
Las áreas de la memoria son:
• Memoria Convencional.
• Memoria Extendida.
La Memoria Convencional viene delimitada por la capacidad de direccionamiento de memoria de la CPU de la computadora y la capacidad de manejo de memoria que sea capaz de realizar el sistema operativo que gestiona el sistema informático.
Se puede ver un ejemplo en el microprocesador Intel 8088 que constituía la CPU de los primeros Personal Computer de IBM; este microprocesador eracapaz de direccionar un máximo de 1 megabyte de memoria, por ello, las primeras versiones del sistema operativo que lo gestionaba no necesitaban manejar más de 640 kilobytes para poder realizar su trabajo.
En la actualidad, las unidades centrales de proceso, como el microprocesador 80486, pueden llegar a manejar hasta 4 gigabytes de memoria, por lo que los sistemas operativos como OS/2 o WINDOWS han previsto esta posibilidad, pudiendo manejar esa cantidad de memoria.
La Memoria Convencional se Divide en:
• Memoria Baja.
• Memoria Alta.
La Memoria Baja es el área de memoria del sistema. Ocupa las primeras direcciones de la memoria convencional y está ocupada por las tablas de losvectores de las interrupciones, las rutinas de la ROM-BIOS y la parte residente del sistema operativo.
La Memoria Alta, también se denomina área de memoria del usuario, es la zona en la que se sitúan los códigos de los programas ejecutables y los datos que éstos manejan en las diferentes aplicaciones que la computadora ejecuta.
Puede ocurrir que la memoria convencional, es decir, la memoria que existe en la configuración de la computadora no sea suficiente para poder realizar ciertas operaciones en ese sistema informático; para poder solventar ese problema se utiliza la memoria extendida.
La Memoria Extendida se utiliza en computadoras que poseen una CPU que puede direccionar una gran cantidad de memoria, más de 1 megabyte, asociada a sistemas operativos que permiten gestionarla correctamente, es decir, los sistemas operativos multitareas o multiusuarios como UNIX, WINDOWS, sistemas operativos LAN, etc.
Estos sistemas operativos permiten instalar el código de los programas de aplicaciones y los datos que éstos manejan fuera del área de la memoria convencional denominada área de memoria del usuario, pudiendo, por tanto, realizar más de un proceso al mismo tiempo o permitiendo trabajar a varios usuarios a la vez en la misma computadora, como en una red de área local.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
Sin embargo, puede ocurrir que la memoria extendida no tenga el tamaño suficiente para que todos los procesos o todos los usuarios puedan realizar sus tareas al mismo tiempo; una solución que se utiliza para resolver este problema es una simulación de la memoria de trabajo llamada Memoria Virtual.
Esta memoria virtual consiste en que cuando el sistema informático intenta utilizar más memoria de trabajo que la que realmente existe, el gestor de la memoria salva una parte de la información que existe en la memoria, en el disco duro del sistema informático.
La parte de la memoria salvada en el disco se llama página; esta página de memoria almacenada queda disponible en la memoria de trabajo para ser utilizada por el sistema informático. Cuando la computadora necesite utilizar la información almacenada en la página guardada en el disco del sistema informático volverá a repetir el proceso salvando otra página de memoria en el disco y recuperando la que estaba almacenada en él.
La Memoria Virtual tiene Ventajas e Inconvenientes.
Entre las Ventajas merece la pena destacar que nos permite utilizar una gran cantidad de software, al mismo tiempo dentro del sistema informático, que de otra forma no se podría utilizar al no tener suficiente memoria y que nos permite utilizar mejor los recursos del sistema informático.
El principal Inconveniente que conlleva la memoria virtual es que si existe una excesiva cantidad de páginas se ralentiza considerablemente lavelocidad de proceso del sistema informático al tener que acceder constantemente al disco, pudiendo, por ello, causar colapsos en los diferentes procesos.
Un tipo diferente de ampliación de la memoria de trabajo es la denominada Memoria Expandida. Este tipo de memoria utiliza una serie de bancos de memoria en forma de circuitos integrados que se añaden a la circuitería básica de la computadora.
El estándar de memoria expandida lo instituyeron Lotus, Intel y Microsoft, por lo que en algunos lugares puede aparecer como memoria LIM.
La memoria expandida utilizaba una zona de la memoria convencional para crear un mapa de la cantidad de memoria expandida que se añade al sistema informático. El mapa permitirá que, cuando un programa de aplicación lo solicite, el gestor de la memoria expandida distribuya por las diferentes páginas en que se dividen los bancos de memoria los datos que la aplicación no puede manejar en la memoria convencional.
Como los tipos de memorias vistos anteriormente, la Memoria Expandida tiene también ventajas e inconvenientes.
La principal Ventaja es que al no realizar accesos al disco del sistema informático es mucho más rápida que la memoria virtual, pero el Inconveniente con que se encuentra la memoria expandida es que como los que tienen que solicitar su utilización son los propios programas de aplicación, en este tipo de memorias sólo se pueden almacenar datos, debiéndose colocar el código de los programas de aplicación en la memoria convencional.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
Existen dos tipos de memorias RAM:
• RAM Estáticas.
Son memorias RAM convencionales que mantienen la información almacenada en ellas permanentemente, mientras se mantenga la alimentación eléctrica.
• RAM Dinámicas (DRAM).
La diferencia fundamental entre este tipo de memorias y las memorias RAM estáticas es que debido a que la celda de memoria donde almacenan la información tiende a descargarse, por tanto a perder la información almacenada en ella, se ha de producir un «refresco», esto es, una regrabación de la información almacenada cada pocos milisegundos para que no se pierdan los datos almacenados.
La ventaja con respecto a las memorias RAM convencionales es su bajo costo para tamaños de memorias medios y grandes.
Un tipo específico de memorias DRAM son las VRAM (Vídeo RAM). Este tipo de memorias está diseñadas específicamentepara almacenar los datos de vídeo de los sistemas informáticos. Estas memorias son especialmente útiles para manejar subsistemas de vídeo, ya que su necesidad de refresco constante permite un manejo más sencillo de las cambiantes señales de vídeo.
Memoria ROM
La ROM (Read Only Memory) es una «Memoria Sólo de Lectura». En ella sólo se puede leer la información que contiene, no es posible modificarla. En este tipo de memoria se acostumbra a guardar las instrucciones de arranque y el funcionamiento coordinado de la computadora.
Físicamente, las memorias ROM son cápsulas de cristales de silicio. La información que contienen se graba de una forma especial por sus fabricantes oempresas muy especializadas.
Las memorias de este tipo, al contrario que las RAM, no son volátiles, pero se pueden deteriorar a causa de campos magnéticos demasiado potentes.
La comunicación con el procesador se realiza, al igual que en las memorias RAM, a través de los buses de direcciones y datos.
Al existir sólo la posibilidad de lectura, la señal de control, que en la RAM se utilizaba para indicar si se iba a leer o escribir, sólo va a intervenir para autorizar la utilización de la memoria ROM.
Además de las ROM, en las que sólo puede grabar información el fabricante de la memoria, existen otros tipos de memorias no volátiles que se pueden modificar de diversas formas y son de una flexibilidad y potencia de uso mayor que las simples ROM. La utilización de este tipo de memorias permite a los usuarios configurar computadoras dedicadas a tareas concretas, modificando simplemente la programación de los bancos de memoria del sistema informático. Estas memorias son:
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
• PROM (Programable Read Only Memory o Memoria Programable Sólo de Lectura).
Las memorias PROM son memorias sólo de lectura que, a diferencia de las ROM, no vienen programadas desde la fábrica donde se construyen, sino que es el propio usuario el que graba, permanentemente, con medios especiales la información que más le interesa.
• EPROM (Erasable-Programable Read Only Memory o Memoria Borrable y Programable Sólo de Lectura).
Las EPROM tienen la ventaja, con respecto a las otras memorias ROM, de que pueden ser reutilizables ya que, aunque la información que se almacena en ellas permanece permanentemente grabada, ésta se puede borrar y volver a grabar mediante procesos especiales, como puede ser el mantenerlas durante treinta minutos bajo una fuente de rayos ultravioletas para borrarlas.
• EEPROM (Electrically Erasable-Programable Read Only Memory o Memoria Borrable y Programable Eléctricamente Sólo de Lectura).
Las EEPROM aumentan, más si cabe, su ventaja con respecto a los anteriores tipos de memorias, ya que la información que se almacena en ellas se puede manipular con energía eléctrica y no es necesaria la utilización de rayos ultravioletas.
Memoria Caché
La Memoria Caché es una zona especial de la memoria principal que se construye con una tecnología de acceso mucho más rápida que la memoria RAM convencional. La velocidad de la caché con respecto a la memoria RAM convencional es del orden de 5 a 10 veces superior.
A medida que los microprocesadores fueron haciéndose más y más rápidos comenzó a producirse una disfunción con la velocidad de acceso a la memoria de trabajo que se conectaba a ellos en el sistema informático.
Cada vez que el microprocesador del sistema informático accede a la memoria RAM para leer o escribir información tiene que esperar hasta que la memoria RAM está lista para recibir o enviar los datos. Para realizar estas operaciones de lectura y escritura más rápidamente se utiliza un subsistema de memoria intermedia entre el microprocesador y la memoria RAM convencional que es la denominada memoria caché.
El funcionamiento de la memoria caché se basa en que al cargar una información en la memoria principal (sean instrucciones o datos) ésta se carga en zonas adyacentes de la memoria. El controlador especial situado dentro del subsistema de la memoria caché será el que determine dinámicamente qué posiciones de la memoria RAM convencional pueden ser utilizadas con más frecuencia por la aplicación que está ejecutándose en ese momento y traslada la información almacenada en ellas a la memoria caché.
La siguiente vez que el microprocesador necesite acceder a la memoria RAM convencional existirá una gran probabilidad de que la información que
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
necesita encontrar se encuentre en las direcciones de memoria adyacentes a las ya utilizadas. Como estas direcciones de memorias adyacentes ya se encuentran almacenadas en la memoria caché, el tiempo de acceso a la información disminuye en gran medida.
La utilización de algoritmos estadísticos de acceso a los datos permiten una gestión mucho más racional del manejo de la memoria RAM convencional, disminuyendo los tiempos de acceso a la memoria convencional y acercando ese tiempo de acceso al de la propia caché.
La memoria caché carga en su área de memoria propia el segmento de la memoria principal contiguo al que se está procesando. Debido a que, estadísticamente, existe una gran probabilidad de que la siguiente área de memoria que necesite la aplicación que está corriendo en ese momento sea la que se encuentra en el área de la caché, se optimiza el tiempo de acceso a la memoria, ya que debe recordarse que el acceso a la memoria caché es mucho más rápido que el acceso a la memoria RAM convencional.
El tamaño de las memorias caché más habituales oscila entre los 8 y los 64 kbytes.
Buses
El Bus es la vía a través de la que se van a transmitir y recibir todas las comunicaciones, tanto internas como externas, del sistema informático.
El bus es solamente un Dispositivo de Transferencia de Información entre los componentes conectados a él, no almacena información alguna en ningún momento.
Los datos, en forma de señal eléctrica, sólo permanecen en el bus el tiempo que necesitan en recorrer la distancia entre los dos componentes implicados en la transferencia.
En una unidad central de sistema típica el bus se subdivide en tres buses o grupos de líneas.
• Bus de Direcciones.
• Bus de Datos.
• Bus de Control.
Bus de Direcciones
Es un canal de comunicaciones constituido por líneas que apuntan a la dirección de memoria que ocupa o va a ocupar la información a tratar.
Una vez direccionada la posición, la información, almacenada en la memoria hasta ese momento, pasará a la CPU a través del bus de datos.
Para determinar la cantidad de memoria directamente accesible por la CPU, hay que tener en cuenta el número de líneas que integran el bus de direcciones, ya que cuanto mayor sea el número de líneas, mayor será la cantidad de direcciones y, por tanto, de memoria a manejar por el sistema informático.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
Bus de Datos
El bus de datos es el medio por el que se transmite la instrucción o dato apuntado por el bus de direcciones.
Es usado para realizar el intercambio de instrucciones y datos tanto internamente, entre los diferentes componentes del sistema informático, como externamente, entre el sistema informático y los diferentes subsistemas periféricos que se encuentran en el exterior.
Una de las características principales de una computadora es el número de bits que puede transferir el bus de datos (16, 32, 64, etc.). Cuanto mayor sea este número, mayor será la cantidad de información que se puede manejar al mismo tiempo.
Bus de Control
Es un número variable de líneas a través de las que se controlan las unidades complementarias.
El número de líneas de control dependerá directamente de la cantidad que pueda soportar el tipo de CPU utilizada y de su capacidad de direccionamiento de información.
Arquitecturas de Bus
Dependiendo del diseño y la tecnología que se utilice para construir el bus de una microcomputadora se pueden distinguir tres arquitecturas diferentes:
• Arquitectura ISA.
• Arquitectura MCA.
• Arquitectura EISA.
• Arquitectura ISA.
• Arquitectura ISA
La Arquitectura ISA (Industry Standard Architecture en inglés) es la arquitectura con que se construyó el bus de los microcomputadores AT de IBM.
Esta arquitectura se adoptó por todos los fabricantes de microcomputadoras compatibles y, en general, está basada en el modelo de tres buses explicado anteriormente. Su tecnología es antigua, ya que se diseñó a principios de la década de los 80, lo que provoca una gran lentitud, debido a su velocidad de 8 megaherzios y una anchura de sólo 16 bits.
• Arquitectura MCA.
La Arquitectura MCA (MicroChannel Architecture en inglés) tuvo su origen en una línea de microcomputadoras fabricadas por IBM, las PS/2 (PS significa Personal System).
Las PS/2 fueron unas microcomputadoras en las que, en sus modelos de mayor rango, se sustituyó el bus tradicional de las computadoras personalespor un canal de comunicaciones llamado MicroChannel.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
El MicroChannel no es compatible, ni en su diseño ni en las señales de control, con la tecnología de bus tradicional, si bien su misión de transferencia de direcciones de memoria y datos es similar en ambos casos. Las ventajas de MicroChannel son una mayor velocidad, 10 megaherzios, una anchura de 32 bits, la posibilidad de autoinstalación y una mejor gestión de los recursos conectados al canal gracias a un control denominado busmaster.
• Arquitectura EISA.
La Arquitectura EISA (Extended Industry Standard Architecture en inglés) surge como una mejora del estándar ISA por parte de un grupo de empresasfabricantes de microcomputadoras compatibles. La velocidad del bus aumenta, así como la posibilidad de manejo de datos, llegándose a los 32 bits en paralelo; asimismo posee autoinstalación y control de bus.
La unión del aumento de la velocidad interna del bus y los 32 bits trabajando en paralelo permite a esta arquitectura una capacidad de manejo y transferencia de datos desconocida hasta ese momento, pudiendo llegar hasta los 33 megabytes por segundo.
La gran ventaja de la arquitectura EISA es que es totalmente compatible con ISA, esto es, una tarjeta de expansión ISA funciona si se la inserta en una ranura EISA. Evidentemente, no va a poder utilizar totalmente la potencia del nuevo estándar, funcionando a menor velocidad, pero funcionando al fin y al cabo.
En la actualidad no existe una arquitectura que tenga el suficiente peso específico como para desbancar totalmente al resto, si bien, poco a poco, la arquitectura ISA puede ir desapareciendo de las configuraciones de los sistemas informáticos dando paso a las otras dos arquitecturas.
Reloj
El reloj de una computadora se utiliza para dos funciones principales:
1. Para sincronizar las diversas operaciones que realizan los diferentes subcomponentes del sistema informático.
2. Para saber la hora.
El reloj físicamente es un circuito integrado que emite una cantidad de pulsos por segundo, de manera constante. Al número de pulsos que emite el reloj cada segundo se llama Frecuencia del Reloj.
La frecuencia del reloj se mide en Ciclos por Segundo, también llamados Hertzios, siendo cada ciclo un pulso del reloj. Como la frecuencia del reloj es de varios millones de pulsos por segundo se expresa habitualmente en Megaherzios.
El reloj marca la velocidad de proceso de la computadora generando una señal periódica que es utilizada por todos los componentes del sistema informático para sincronizar y coordinar las actividades operativas, evitando el que un componente maneje unos datos incorrectamente o que la velocidad de transmisión de datos entre dos componentes sea distinta.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
Cuanto mayor sea la frecuencia del reloj mayor será la velocidad de proceso de la computadora y podrá realizar mayor cantidad de instrucciones elementales en un segundo.
El rango de frecuencia de los microprocesadores oscila entre los 4,77 megaherzios del primer PC diseñado por IBM y los 200 megaherzios de las actuales computadoras basadas en los chips Intel Pentium.
TARJETAS DE EXPANSIÓN INTERNA
Las Tarjetas de Expansión están diseñadas y dedicadas a actividades específicas, como pueden ser las de controlar la salida de vídeo de la computadora,gráficas, comunicaciones, etc.
Las tarjetas de expansión no forman parte de la unidad central de proceso, pero están conectadas directamente a ésta a través del bus, generalmente dentro de la propia caja de la unidad central del sistema, y controladas por la CPU en todas sus operaciones.
Las tarjetas de expansión complementan y ayudan a la placa base y, por tanto, al microprocesador central descargándole de tareas que retardarían los procesos de la CPU, añadiendo al mismo tiempo una serie de posibilidades operativas que no estaban previstas en los primeros modelos de computadoras.
A lo largo de la historia del desarrollo de las computadoras se han ido aprovechando diseños técnicos anteriores para crear subcomponentes de sistemas informáticos de complejidad superior; un ejemplo puede ser el microprocesador 8086 que sirvió como microprocesador principal para una serie de sistemas informáticos, como fueron los PS/2 de IBM. En la actualidad puede emplearse como microprocesador de tarjetas gráficas dedicadas a controlar los subsistemas de vídeo.
Las tarjetas de expansión cumplen una importante cantidad de cometidos que van desde controlar actividades del proceso general del sistema informático (subsistema de vídeo, subsistema de almacenamiento masivo de información en los diferentes discos de la computadora, etc.) hasta permitir una serie de tareas para las que los diseñadores del sistema informático no han previsto facilidades o que debido a su costo sólo se entregan como opcionales.
Tarjetas Controladoras de Periféricos
Las Tarjetas de Expansión Controladoras de Periféricos son placas que contienen circuitos lógicos y que se conectan al bus de datos para recibir la información que la CPU envía hacia los periféricos almacenándola en Buffers, esto es, una serie de Memorias Intermedias que actúan como amortiguadoras de los flujos de datos que se transmiten en el interior del sistema informático y descargan al procesador principal del control del tráfico de señales y datos entre el procesador y los periféricos exteriores.
Las tarjetas de expansión controladoras de periféricos más importantes son:
• Las Tarjetas de Expansión Controladoras del Modo de Vídeo.
• Las Tarjetas de Expansión Controladoras de Entrada/Salida de Datos.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
• Las Tarjetas de Expansión Controladoras de Comunicaciones.
Tarjetas de Expansión Controladoras del Modo de Video
Este tipo de tarjetas de expansión son también llamadas Tarjetas Gráficas. Las tarjetas gráficas van a proporcionar diferentes clases de calidad en la información que el sistema informático va a poder mostrar en su pantalla.
La información que la computadora va a representar en su pantalla se encuentra en una zona de la memoria RAM que alimenta periódicamente al cañón de electrones, a través de la tarjeta controladora del modo gráfico, de los datos necesarios para representar la información almacenada en la pantalla del sistema informático.
La pantalla de la computadora se refresca, esto es, modifica el dibujo que aparece en ella con una periodicidad de entre 50 y 80 veces por segundo. Eldibujo que aparece en la pantalla del sistema informático es el almacenado en la memoria de vídeo de la computadora y que la tarjeta gráfica recibe para manejar los datos y enviarlos hacia la pantalla del sistema informático.
Cuando la tarjeta de vídeo envía la información almacenada en la memoria hacia la pantalla de la computadora, estos datos pasan por un convertidor digital/analógico para convertirse en una señal eléctrica compatible con la necesaria para que el componente de generación de imágenes de la pantalla del sistema informático (cañón de rayos, LCD, etc.) forme la imagen en la pantalla de la computadora.
Existen diferencias entre los distintos tipos de tarjetas gráficas entre las que caben destacar:
1. Modo de Trabajo.
Es como se va a manejar la información que se va a representar en la pantalla del sistema informático.
Los modos principales de trabajo son:
• Modo Texto: Se maneja la información en forma de texto, si bien algunos de estos caracteres pueden utilizarse para realizar dibujos sencillos.
• Modo Gráfico: Es más completo que el anterior ya que a la posibilidad del manejo de caracteres se une la de la creación de dibujos complejos.
2. Utilización del Color.
Algunas tarjetas de vídeo pueden manejar una serie de parámetros, en forma de código binario, que permiten la utilización del color en las pantallas de los sistemas informáticos que estén preparadas para ello. La utilización, o no, del color permite realizar la siguiente diferenciación:
• Monocromas: Utilizan sólo un color que resalta sobre el fondo de la pantalla de la computadora.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
• Policromas: Utilizan la serie de tres colores fundamentales (rojo, azul y verde) para obtener las diferentes mezclas de colores y tonos que se van a representar en la pantalla del sistema informático.
3. Resolución Gráfica.
Es una matriz formada por la cantidad total de líneas de información y el número de puntos en que se puede dividir cada una de las líneas. Esta matriz es la información que la tarjeta gráfica envía hacia la pantalla de la computadora.
A continuación van a estudiarse los tipos de tarjetas gráficas más conocidas:
Tarjeta Gráfica Hércules.
Las tarjetas gráficas Hércules son tarjetas de vídeo que trabajan en modo gráfico en sistemas informáticos cuya configuración incluye pantallas monocromas.
Fueron diseñadas por Hercules Corp. para poder crear gráficos en las pantallas monocromas de las primeras computadoras personales debido a que la tarjeta de vídeo que incluían estos sistemas informáticos, el Adaptador Monocromo de IBM, sólo podía trabajar en modo texto.
Debido a que Hercules Corp. era una empresa independiente, IBM nunca consideró a la tarjeta de vídeo creada por ella como un estándar, aunque sí lo fue de hecho.
Este modelo de tarjeta de vídeo posee una resolución gráfica de 720 puntos por 348 líneas.
Tarjeta Gráfica CGA.
La tarjeta gráfica CGA (Color Graphics Adapter-Adaptador de Gráficos Color) fue diseñada para introducir el color en el mundo de la microinformática.
Las tarjetas gráficas CGA trabajan en los modos texto y gráfico, pudiendo conectarse a ellas pantallas de computadora monocromas y de color.
El problema que presentan las CGA es que su resolución gráfica es muy pobre en comparación con el resto de las tarjetas gráficas del mercado, siendo de 640 puntos por 240 líneas en modo monocromo y de 320 puntos por 200 líneas trabajando con cuatro colores.
Tarjeta Gráfica EGA.
La EGA (Enhanced Graphics Adapter-Adaptador Mejorado de Gráficos) es una tarjeta de vídeo que trabaja en modo gráfico y mejora en gran medida lasprestaciones de la CGA. Esta tarjeta gráfica trabaja con pantallas de computadora monocromas o de color.
La resolución de la tarjeta gráfica EGA es de 640 puntos por 350 líneas y maneja hasta 16 colores al mismo tiempo.
Tarjeta Gráfica MCGA.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
Esta Tarjeta Gráfica (Microchannel Graphics Adapter - Adaptador Gráfico Microchannel) fue diseñada por IBM para trabajar en sus microcomputadoras del tipo PS/2.
La MCGA tenía una resolución máxima de 640 puntos por 400 líneas en modo monocromo, reduciéndose a medida que se aumentaba el número de colores con que se trabajaba.
Tarjeta Gráfica VGA.
La Tarjeta Gráfica VGA (Video Graphics Adapter - Adaptador Vídeo de Gráficos) se diseñó, como la anterior, para los sistemas informáticos PS/2 de IBM. La diferencia entre ambas tarjetas gráficas es que si la anterior se instaló en los sistemas informáticos menos potentes, la VGA se instaló en los sistemas informáticos más potentes de la gama PS/2, debido a su mejor resolución.
Al contrario que la MCGA, la tarjeta gráfica VGA sí tuvo un modelo compatible con el bus habitual de los sistemas PC y gracias a su calidad de diseño y fabricación ha llegado a convertirse en un estándar dentro del mercado microinformático.
La resolución de esta tarjeta gráfica tiene dos modos distintos:
• La resolución en modo texto es de 720 puntos por 400 líneas manejando los dos colores del monocromo.
• La resolución en modo gráfico es de 640 puntos por 480 líneas y maneja 16 colores.
Tarjeta Gráfica SVGA.
La tarjeta gráfica SVGA (Super Video Graphics Adapte - Super Adaptador Vídeo de Gráficos) es un diseño de reciente creación. Ha sido introducida en el mercado como una tarjeta gráfica VGA, ampliada y mejorada, que rápidamente está consiguiendo una importante cuota de instalación en las configuraciones de los nuevos sistemas informáticos.
La posibilidad de manejo por la propia tarjeta gráfica de un megabyte de memoria DRAM, que puede ampliarse hasta los dos megabytes, supone una importante potencia gráfica que da, a los sistemas microinformáticos, posibilidades de manejo de gráficos que antes sólo podían realizar las estaciones de trabajo o las minicomputadoras.
La resolución de esta tarjeta gráfica es muy alta, llegando a los 1.280 puntos por 1.024 líneas.
Tarjetas Controladoras de Entrada y Salida de Datos
La función principal de estos dispositivos es adaptar la información procesada por la unidad central de proceso, canalizando las transferencias de información entre la computadora y los dispositivos periféricos exteriores.
Con las tarjetas controladoras de entrada y salida de datos se consigue:
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
1. Independencia funcional entre la unidad central de proceso y los periféricos asociados a ella. Las tarjetas controladoras evitan la lentitud de los procesos debido a la diferencia de velocidad entre la CPU y los periféricos.
2. Adaptación de diversos tipos de periféricos al sistema informático, independientemente de que la operatividad entre ellos y la computadora no sea compatible.
3. Pueden servir de traductoras entre el modo digital de la computadora y el analógico del de otros medios por los que se pueden establecer enlaces entre sistemas informáticos.
Tarjetas Controladoras de Comunicaciones
Las Tarjetas Controladoras de comunicaciones son unidades que permiten la conexión de una computadora central, denominada sistema central oservidor, con una serie de computadoras menos potentes que utilizan parte de los recursos del servidor para aumentar su operatividad.
La conexión se produce a través de una serie de Enlaces que unen todas las computadoras entre sí formando una Red de Comunicaciones.
Si los sistemas informáticos que constituyen esta red de comunicaciones se encuentra en una zona no muy extensa, no mayor que un edificio, la red se denomina Red de Área Local (LAN - Local Area Network).
Si la red de comunicaciones tiene una extensión mayor y se utilizan los servicios de las compañías telefónicas para enlazar las diferentes computadoras que componen la red, ésta se denomina Red de Área Extensa (WAN-Wide Area Network).
Las tarjetas controladoras de comunicaciones más comunes son las tarjetas de conexión a redes de área local. Este tipo de tarjetas de comunicaciones se estudiarán más adelante en un apartado específico dedicado a ella; sin embargo, se puede adelantar aquí que las tarjetas controladoras de comunicaciones se dividen en dos grupos principales:
• Tarjetas de conexión a redes locales (LAN).
• Tarjetas de expansión módem (para redes de comunicaciones extensas).
Las tarjetas de conexión a redes LAN son tarjetas de expansión que proporcionan una Conexión y una Dirección que permiten identificar al usuario en el interior de la red, posibilitándole el poder enviar y recibir información al sistema informático.
La conexión que proporcionan las tarjetas de conexión a redes de área local es a un cable coaxial muy similar al utilizado para conectar una televisióncomercial a su antena exterior. La velocidad que este medio permite dentro de la red de comunicaciones es, sin embargo, inferior a la que poseen los sistemas informáticos conectados a ella, rondando unos pocos megaherzios.
Las tarjetas de expansión módem modulan la señal digital existente dentro de la unidad central del sistema de la computadora y la transforman convirtiéndola en analógica.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
Esta señal analógica se superpone a otra señal llamada portadora, que es la que viaja por el cable telefónico, sobre la que va a poder atravesar las líneas telefónicas hasta un punto remoto donde otro módem volverá a convertir la señal en digital para que pueda ser utilizada por otra computadora.
Las velocidades de transmisión que proporcionan este tipo de tarjetas de expansión módem oscilan entre los 1.200 y los 28.800 bits por segundo.
SISTEMA OPERATIVOS
Un Sistema Operativo (SO) es el software básico de una computadora que provee una interfaz entre el resto de programas del ordenador, los dispositivos hardware y el usuario.
Las funciones básicas del Sistema Operativo son administrar los recursos de la máquina, coordinar el hardware y organizar archivos y directorios en dispositivos de almacenamiento.
Los Sistemas Operativos más utilizados son Dos, Windows, Linux y Mac. Algunos SO ya vienen con un navegador integrado, como Windows que trae el navegador Internet Explorer.
Descripción del sistema operativo
Para que un ordenador pueda hacer funcionar un programa informático (a veces conocido
comoaplicación o software), debe contar con la capacidad necesaria para realizar cierta cantidad
de operaciones preparatorias que puedan garantizar el intercambio entre el procesador,
la memoria y losrecursos físicos (periféricos).
El sistema operativo (a veces también citado mediante su forma abreviada OS en inglés) se
encarga de crear el vínculo entre los recursos materiales, el usuario y las aplicaciones (procesador
de texto, videojuegos, etcétera). Cuando un programa desea acceder a un recurso material, no
necesita enviar información específica a los dispositivos periféricos; simplemente envía la
información al sistema operativo, el cual la transmite a los periféricos correspondientes a través de
su driver (controlador). Si no existe ningún driver, cada programa debe reconocer y tener presente
la comunicación con cada tipo de periférico.
De esta forma, el sistema operativo permite la "disociación" de programas y hardware,
principalmente para simplificar la gestión de recursos y proporcionar una interfaz de usuario (MMI
por sus siglas en inglés) sencilla con el fin de reducir la complejidad del equipo.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
Funciones del sistema operativo
El sistema operativo cumple varias funciones:
Administración del procesador: el sistema operativo administra la distribución del procesador
entre los distintos programas por medio de un algoritmo de programación. El tipo de
programador depende completamente del sistema operativo, según el objetivo deseado.
Gestión de la memoria de acceso aleatorio: el sistema operativo se encarga de gestionar el
espacio de memoria asignado para cada aplicación y para cada usuario, si resulta pertinente.
Cuando la memoria física es insuficiente, el sistema operativo puede crear una zona de
memoria en el disco duro, denominada "memoria virtual". La memoria virtual permite ejecutar
aplicaciones que requieren una memoria superior a la memoria RAM disponible en el sistema.
Sin embargo, esta memoria es mucho más lenta.
Gestión de entradas/salidas: el sistema operativo permite unificar y controlar el acceso de los
programas a los recursos materiales a través de los drivers (también conocidos como
administradores periféricos o de entrada/salida).
Gestión de ejecución de aplicaciones: el sistema operativo se encarga de que las
aplicaciones se ejecuten sin problemas asignándoles los recursos que éstas necesitan para
funcionar. Esto significa que si una aplicación no responde correctamente puede "sucumbir".
Administración de autorizaciones: el sistema operativo se encarga de la seguridad en
relación con la ejecución de programas garantizando que los recursos sean utilizados sólo por
programas y usuarios que posean las autorizaciones correspondientes.
Gestión de archivos: el sistema operativo gestiona la lectura y escritura en el sistema de
archivos, y las autorizaciones de acceso a archivos de aplicaciones y usuarios.
Gestión de la información: el sistema operativo proporciona cierta cantidad de indicadores
que pueden utilizarse para diagnosticar el funcionamiento correcto del equipo.
Componentes del sistema operativo
El sistema operativo está compuesto por un conjunto de paquetes de software que pueden
utilizarse para gestionar las interacciones con el hardware. Estos elementos se incluyen por lo
general en este conjunto de software:
El núcleo, que representa las funciones básicas del sistema operativo, como por ejemplo, la
gestión de la memoria, de los procesos, de los archivos, de las entradas/salidas principales y de
las funciones de comunicación.
El intérprete de comandos, que posibilita la comunicación con el sistema operativo a través de
un lenguaje de control, permitiendo al usuario controlar los periféricos sin conocer las
características del hardware utilizado, la gestión de las direcciones físicas, etcétera.
El sistema de archivos, que permite que los archivos se registren en una estructura arbórea.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
Sistemas de multiprocesos
Un sistema operativo se denominade multiprocesos cuando muchas "tareas" (también conocidas
comoprocesos) se pueden ejecutar al mismo tiempo.
Las aplicaciones consisten en una secuencia de instrucciones llamadas "procesos". Estos
procesos permanecen activos, en espera, suspendidos, o se eliminan en forma alternativa, según
la prioridad que se les haya concedido, o se pueden ejecutar en forma simultánea.
Un sistema se considera preventivo cuando cuenta con un programador (también
llamado planificador) el cual, según los criterios de prioridad, asigna el tiempo de los equipos entre
varios procesos que lo solicitan.
Se denomina sistema de tiempo compartido a un sistema cuando el programador asigna una
cantidad determinada de tiempo a cada proceso. Éste es el caso de los sistemas de usuarios
múltiples que permiten a varios usuarios utilizar aplicaciones diferentes o similares en el mismo
equipo al mismo tiempo. De este modo, el sistema se denomina "sistema transaccional". Para
realizar esto, el sistema asigna un período de tiempo a cada usuario.
Sistemas de multiprocesadores
La técnica de multiprocesamiento consiste en hacer funcionar varios procesadores en forma
paralela para obtener un poder de cálculo mayor que el obtenido al usar un procesador de alta
tecnología o al aumentar la disponibilidad del sistema (en el caso de fallas del procesador).
Las siglas SMP (multiprocesamiento simétrico o multiprocesador simétrico) hacen referencia a la
arquitectura en la que todos los procesadores acceden a la misma memoria compartida.
Un sistema de multiprocesadores debe tener capacidad para gestionar la repartición de memoria
entre varios procesadores, pero también debe distribuir la carga de trabajo.
Sistemas fijos
Los sistemas fijos son sistemas operativos diseñados para funcionar en equipos pequeños, como
losPDA (asistentes personales digitales) o los dispositivos electrónicos autónomos (sondas
espaciales, robots, vehículos con ordenador de a bordo, etcétera) con autonomía reducida. En
consecuencia, una característica esencial de los sistemas fijos es su avanzada administración de
energía y su capacidad de funcionar con recursos limitados.
Los principales sistemas fijos de "uso general" para PDA son los siguientes:
PalmOS
Windows CE / Windows Mobile / Window Smartphone
Sistemas de tiempo real
Los sistemas de tiempo real se utilizan principalmente en la industria y son sistemas diseñados
para funcionar en entornos con limitaciones de tiempo. Un sistema de tiempo real debe tener
capacidad para operar en forma fiable según limitaciones de tiempo específicas; en otras palabras,
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
debe tener capacidad para procesar adecuadamente la información recibida a intervalos definidos
claramente (regulares o de otro tipo).
Estos son algunos ejemplos de sistemas operativos de tiempo real:
OS-9;
RTLinux (RealTime Linux);
QNX ;
VxWorks .
Tipos de sistemas operativos
Existen varios tipos de sistemas operativos, definidos según su capacidad para administrar
simultáneamente información de 16 bits, 32 bits, 64 bits o más.
Sistema ProgramaciónUsuario único
Usuario múltiple
Tarea única
Multitarea
DOS 16 bits X X
Windows3.1 16/32 bits X no preventivo
Windows95/98/Me
32 bits X cooperativo
WindowsNT/2000 32 bits X preventivo
WindowsXP 32/64 bits X preventivo
Unix / Linux 32/64 bits X preventivo
MAC/OS X 32 bits X preventivo
VMS 32 bits X preventivo
Tipos de progamación existentes
Programación estructurada
En informática, término general que se refiere a un tipo de programación que produce código con un flujo limpio, un diseño claro y un cierto grado de modularidad o de estructura
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
jerárquica. Entre los beneficios de la programación estructurada se encuentran la facilidad de mantenimiento y la legibilidad por parte de otros programadores.
Programación orientada a objetos
En informática, un estilo de programación en el que un programa se contempla como un conjunto de objetos limitados que, a su vez, son colecciones independientes de estructuras de datos y rutinas que interactúan con otros objetos. Una clase define las estructuras de datos y rutinas de un objeto. Un objeto es una instancia de una clase, que se puede usar como una variable en un programa. En algunos lenguajes orientados a objetos, éste responde a mensajes, que son el principal medio de comunicación. En otros lenguajes orientados a objeto se conserva el mecanismo tradicional de llamadas a procedimientos.
b) Definición y 2 ejemplos de algorítmos
ALGORITMOS
Un Algoritmo, es la descripción exacta y sin ambigüedades de una secuencia de pasos elementales para encontrar la solución correcta a un problema.
Características:
Finito
El algoritmo debe finalizar.
Legible
El algoritmo debe permitir que las modificaciones o actualizaciones sean sencillas de realizar.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
Eficiente
Debe ser optimo, es decir debe evitar pasos de mas o de menos para que al codificarlo aproveche al máximo la memoria del procesador y el tiempo e ejecución sea el menor posible.
Modulable
Debe estar dividido en pequeños procesos o módulos.
Estructurado
Comprende todas las características anteriores
Como consecuencia de una mejor estructuración, resulta mas fácil:
Leer el algoritmo.
Modificar o actualizar el algoritmo.
Eliminar las parte repetitivas.
c) ¿Qué es un diagrama de flujo?
DIAGRAMA DE FLUJO
Diagrama secuencial empleado en muchos campos para mostrar los procedimientos detallados que se deben seguir al realizar una tarea, como un proceso de fabricación. También se utilizan en la resolución de problemas, como por ejemplo en algoritmos. Los diagramas de flujo se usan normalmente para seguir la secuencia lógica de las acciones en el diseño de programas de computadoras.
SIMBOLOGIA UTILIZADA EN LOS DIAGRAMAS DE FLUJO
Terminal (representa el Inicio y el Final, de un programa, puede representa también una parada o interrupción programada que sea necesario realizar en un progma.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
Entrada/Sahda (cualquer tipo de introducción de datos) tipo
Proceso (cualquier tipo de operación que pueda originar cambio de valor, fomato o posición de la infomiación almacenada en memoia, operaciones aritmeticas).
Desición (indica operaciones lógicas o de comparación entre datos normalmente dos y en función del resultado de la misma determina cual de los distintos caminos altemativos del programa se debe seguir).
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
Desición múltiple (en función del resultado de la comparación se seguirá uno de los diferentes caminos de acuerdo con dicho resultado).
Conector ( sirve para enlazar dos partes cuales quiera de un organigrama atraves de un conector en la salida y otro conector en la salida)
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
Idicador de dirección ( indica el sentido de ejecución de las operaciones)
Linea conectora sirve de union entre dos símbolos
Conector ( coneccion entre dos puntos del organigrama situados en paginas diferentes)
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
Llamada a subrutina o un proceso predeterminado (una subrutina es el modulo independiente del programa)
Pantalla ( Se utiliza en ocaciones en lugar del símbolo E/S )
Impresora ( Se utiliza en ocaciones en lugar del símbolo E/S )
Teclado ( Se utiliza en ocaciones en lugar del símbolo E/S )
Calcular el salario neto de un trabajador en función del número de horas trabajadas, precio de la hora de trabajo y considerando unos descuentos fijos al salario bruto en concepto de impuestos (20 por 100).
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
d) ¿Qué es el Pseudocódigo?
QUÉ ES EL PSEUDOCÓDIGO
Es un conjunto de palabras reservadas y reglas para escribir algoritmos de una manera más formal y estructurada. El objetivo es tener un algoritmo que esté planteado en términos más cercanos a los lenguajes de programación utilizados en la computadora.
PROPÓSITO DE ESTE ESTÁNDAR DE PSEUDOCÓDIGO
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
Utilizarlo para los cursos de Fundamentos de Programación. El pseudocódigo ha sido concebido con algunos elementos similares a los del lenguaje C para dar cierta familiaridad con el lenguaje que en estos cursos se utiliza para los proyectos. Sin embargo, el pseudocódigo NO ES EL LENGUAJE C. Tiene diferencias sustanciales en cuanto a sus tipos de datos, operadores, representación de variables y estructuras de control. C es un lenguaje muy rico en expresividad pero también es muy fácil, al usarlo, escribir código de mala calidad si no se tiene cuidado.
PALABRAS RESERVADAS
En la sección palabras reservadas, se indica la sintaxis y semántica de las palabras que conforman el pseudocódigo junto con breves ejemplos de su uso.
Conclusión:
Seudocòdigo (pseudocode).- Algoritmo expresado en ingles para conceptualizarlo antes de codificarlo en un lenguaje de programación.
CONCLUSIÓN DE LOS INCISOS
METODOLOGIA DE LA PROGRAMACION.
1. Plantear el problema a resolver.
Es plantear todo lo que va a desencadenar el trabajo y consiste fundamentalmente en establecer los resultados que se requieren obtener a partir de los datos o informaciones que se posean.
2. Desarrollo del algoritmo.
Es el planteamiento a nivel mental de la solución aplicar el problema. Consiste en establecer todas las acciones necesarias y el orden en que deben realizarse para resolver el problema planteado.
3. Pseudocódigo.
Es la representación gráfica del algoritmo, cuanto mejor se haga el pseudocódigo, la codificación es casi mecánica. El pseudocódigo es necesario pero no imprescindible. Permite al usuario poder comprobar más fácilmente, que la solución planteada es la correcta para obtener el resultado. Un
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
aspecto importante del pseudocódigo es que va a ser usado o interpretado por personas. No está sujeto a unas normas estrictas, es decir hay libertad de expresión en un código.
4. Codificar.
Escribir de una manera que el ordenador lo comprenda, las acciones para resolver el problema.
5. Compilar.
Es la acción que permite que lo que hemos codificado lo pueda interpretar el ordenador.
6. Ejecución.
Poner en funcionamiento la ejecución real de las acciones establecidas. En metodología vamos a tratar los tres primeros pasos. Plantear el problema, algoritmo y pseudocódigo.
Los tipos o técnicas de programación son bastante variados, aunque puede que muchos de los lectores sólo conozcan una metodología para realizar programas. En la mayoría de los casos, las técnicas se centran en programación modular y programación estructurada, pero existen otros tipos de programación. Los explicaremos a lo largo del artículo.
Programación estructurada (PE):
La programación estructurada está compuesta por un conjunto de técnicas que han ido evolucionando aumentando considerablemente la productividad del programa reduciendo el tiempo de depuración y mantenimiento del mismo.
Esta programación estructurada utiliza un número limitado de estructuras de control, reduciendo así considerablemente los errores.
Esta técnica incorpora:
• Diseño descendente (top-dow): el problema se descompone en etapas o estructuras jerárquicas.
• Recursos abstractos (simplicidad): consiste en descompones las acciones complejas en otras más simples capaces de ser resueltas con mayor facilidad.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
• Estructuras básicas: existen tres tipos de estructuras básicas:
1) Estructuras secuénciales: cada acción sigue a otra acción secuencialmente. La salida de una acción es la entrada de otra. 2) Estructuras selectivas: en estas estructuras se evalúan las condiciones y en función del resultado de las mismas se realizan unas acciones u otras. Se utilizan expresiones lógicas. 3) Estructuras repetitivas: son secuencias de instrucciones que se repiten un número determinado de veces.
Las principales ventajas de la programación estructurada son:
• Los programas son más fáciles de entender • Se reduce la complejidad de las pruebas • Aumenta la productividad del programador • Los programas queden mejor documentados internamente.
Un programa está estructurado si posee un único punto de entrada y sólo uno de salida, existen de "1 a n" caminos desde el principio hasta el fin del programa y por último, que todas las instrucciones son ejecutables sin que aparezcan bucles infinitos.
Programación modular:
En la programación modular consta de varias secciones dividas de forma que interactúan a través de llamadas a procedimientos, que integran el programa en su totalidad.
En la programación modular, el programa principal coordina las llamadas a los módulos secundarios y pasa los datos necesarios en forma de parámetros.
A su vez cada modulo puede contener sus propios datos y llamar a otros módulos o funciones.
Programación orientada a objetos (POO):
Se trata de una técnica que aumenta considerablemente la velocidad de desarrollo de los programas gracias a la reutilización de los objetos.
El elemento principal de la programación orientada a objetos es el objeto. El objeto es un conjunto complejo de datos y programas que poseen estructura y forman parte de una organización. Un objeto contiene varios datos bien estructurados y pueden ser visibles o no dependiendo del programador y las acciones del programa en ese momento.
El polimorfismo y la herencia son unas de sus principales características y por ello
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
dedicaremos más adelante un artículo exclusivamente a tratar estos dos términos.
En DesarrolloWeb.com hemos publicado anteriormente una explicación de lo que es la programación orientada a objetos.
Programación concurrente:
Este tipo de programación se utiliza cuando tenemos que realizar varias acciones a la vez.
Se suele utilizar para controlar los accesos de usuarios y programas a un recurso de forma simultánea.
Se trata de una programación más lenta y laboriosa, obteniendo unos resultados lentos en las acciones.
Programación funcional:
Se caracteriza principalmente por permitir declarar y llamar a funciones dentro de otras funciones.
Programación lógica:
Se suele utilizar en la inteligencia artificial y pequeños programas infantiles. Se trata de una programación basada en el cálculo de predicados (una teoría matemática que permite lograr que un ordenador basándose en hecho y reglas lógicas, pueda dar soluciones inteligentes).
}
CONCEPTO DE PROGRAMACIÓN ESTRUCTURADA. Definición lógica. Ventajes potenciales. Teorema de la estructura. Otras estructuras lógicas de control. Etiquetas e instruccionesGo-to. Segmentación. Identificación.
DEFINICIONES
La programación estructurada (en adelante simplemente PE ), es un estilo de programación con el
cual el programador elabora programas, cuya estructura es la más clara posible, mediante el uso
de tres estructuras básicas de control lógico, a saber :
a. SECUENCIA.
b. SELECCIÓN.
c. ITERACIÓN.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
Un programa estructurado se compone de funciones,segmentos, módulos y/o subrutinas, cada una
con una sola entrada y una sola salida. Cada uno de estos módulos (aún en el mismo programa
completo), se denomina programa apropiado cuando, además de estar compuesto sólamente por las
tres estructuras básicas, tiene sólo una entrada y una salida y en ejecución no tiene partes por las
cuales nunca pasa ni tiene ciclos infinitos.
La PE tiene un teorema estructural o teorema fundamental, el cual afirma que cualquier
programa, no importa el tipo de trabajo que ejecute, puede ser elaborado utilizando únicamente
las tres estructuras básicas ( secuencia, selección, iteración )
Programación Orientada a Objetos
Lenguajes de Programación > Programación Orientada a Objetos
La programación orientada a objetos, intenta simular el mundo real a traves del significado de objetos que contiene caracteristicas y funciones. Los lenguajes orientados a objetos se clasifican como lenguajes de quinta generacion.
Como su mismo nombre indica, la programación orientada a objetos se basa en la idea de un objeto, que es una combinacion de variables locales y procedimientos llamados metodos que juntos conforman una entidad de programación.
El termino encapsulacion se usa para describir la combinacion de estructuras de datos y de metodos que son manipulados por el objeto. La llamada a un objeto es lo que se denomina pasar un "aviso" a un objeto.
En la programación orientada a objetos, encapsular significa, reunir y controlar el grupo resultante como un todo y no individualmente.
En la programación orientada a objetos la abstraccion es un termino externo al objeto, que controla la forma en que es visto
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
por los demas.
En la programación orientada a objetos la modularidad se considera de la siguiente manera: Un programa grande siempre sera más complicado que la suma de varios programas pequeños, con lo que se considera ventajoso dividir un gran sistema en diversos modulos.
En la programación orientada a objetos tenemos la jerarquia, la cual consiste en la clasificacion y organizacion de las abstracciones segun su naturaleza. El más claro ejemplo de jerarquia es la herencia.
En la programación orientada a objetos se define la herencia como una jerarquia de extracciones, y la relacion entre clases, donde se comparte la estructura y el comportamiento de una o más clase considerada como clases superiores o una superclase, con lo cual se resume que la herencia es una unidad independiente por si misma heredada de una abstraccion o superclase. Un ejemplo cotidiano lo encontramos en las aplicaciones que existen cactualmente en el mercado, donde un formulario cualquiera hereda las caracteristicas de uan ventana del sistema operativo Windows (Maximizar, Minimizar, Cerrar)
Un lenguaje de descripción de hardware (HDL, Hardware Description Language) permite documentar las interconexiones y el comportamiento de un circuito electrónico, sin utilizar diagramas esquemáticos.
El flujo de diseño suele ser típico:
Definir la tarea o tareas que tiene que hacer el circuito.
Escribir el programa usando un lenguaje HDL. También existen programas de captura de esquemas que pueden hacer esto, pero no son útiles para diseños complicados.
Comprobación de la sintaxis y simulación del programa.
Programación del dispositivo y comprobación del funcionamiento.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
Un rasgo común a estos lenguajes suele ser la independencia del
hardware y la modularidad o jerarquía, es decir, una vez hecho un diseño éste puede ser usado dentro de otro diseño más complicado y con otro dispositivo compatible.
Ejemplos
VHDL Verilog ABEL HDL
Lenguajes de programación
Lenguajes de Programación > Lenguajes de programación
Los lenguajes de programación son herramientas que nos permiten crear programas y software. Entre ellos tenemos Delphi, Visual Basic, Pascal, Java, etc..
Una computadora funciona bajo control de un programa el cual debe estar almacenado en la unidad de memoria; tales como el disco duro.
Los lenguajes de programación de una computadora en particular se conoce como código de máquinas o lenguaje de máquinas.
Estos lenguajes codificados en una computadora específica no podrán ser ejecutados en otra computadora diferente.
Para que estos programas funcionen para diferentes computadoras hay que realizar una versión para cada una de ellas, lo que implica el aumento del costo de desarrollo.
Por otra parte, los lenguajes de programación en código de máquina son verdaderamente difíciles de entender para una persona, ya que están compuestos de códigos numéricos sin sentido nemotécnico.
INVESTIGACION PROGRAMACION UNIDAD I 18 DE FEBRERO A MANO
Los lenguajes de programación facilitan la tarea de programación, ya que disponen de formas adecuadas que permiten ser leidas y escritas por personas, a su vez resultan independientes del modelo de computador a utilizar.
Los lenguajes de programación representan en forma simbólica y en manera de un texto los códigos que podrán ser leidos por una persona.
Los lenguajes de programación son independientes de las computadoras a utilizar.
Existen estrategias que permiten ejecutar en una computadora un programa realizado en un lenguaje de programación simbólico. Los procesadores del lenguaje son los programas que permiten el tratamiento de la información en forma de texto, representada en los lenguajes de programación simbólicos.
Hay lenguajes de programación que utilizan compilador.
La ejecución de un programa con compilador requiere de dos etapas:
1) Traducir el programa simbólico a código máquina2) Ejecución y procesamiento de los datos.
Otros lenguajes de programación utilizan un programa intérprete o traductor, el cual analiza directamente la descripción simbólica del programa fuente y realiza las instrucciones dadas.
El intérprete en los lenguajes de programación simula una máquina virtual, donde el lenguaje de máquina es similar al lenguaje fuente.
La ventaja del proceso interprete es que no necesita de dos fases para ejecutar el programa, sin embargo su inconveniente es que la velocidad de ejecución es más lenta ya que debe analizar e interpretar las instrucciones contenidas en el programa fuente.