1 INTRODUCCION

Anuncio
5
Arquitectura y programación de ordenadores
1 INTRODUCCION
Existe una gran variedad de sistemas que pueden recibir correctamente el nombre de
computador, desde microprocesadores de un solo chip, y de bajo coste, a computadores que
cuestan decenas de millones de euros. Esta variedad es patente no sólo en costes, sino también
en tamaño, prestaciones y aplicaciones. La rapidez de los cambios, que ha caracterizado
siempre a la tecnología de computadores, continúa sin pausa. Estos cambios cubren todo los
aspectos de la tecnología de computadores, desde la tecnología subyacente de circuitos
integrados, usados para construir componentes de computadores, hasta el creciente uso de
conceptos de organización paralela para combinan esos componentes.
A pesar de la variedad y rapidez de los cambios en el campo de los computadores, se aplican
sistemáticamente ciertos conceptos fundamentales. La aplicación de estos conceptos depende
del desarrollo dual de la tecnología y de los objetivos, en cuanto a precio y aplicaciones, de
diseñador. La intención es ofrecer un concienzudo análisis de los fundamentos de arquitectura
y organización de los computadores y relacionar estos, con materias de diseños actuales.
6
Arquitectura y programación de ordenadores
1.1 ORGANIZACIÓN Y ARQUITECTURA
Cuando se describe un computador, frecuentemente se distingue entre arquitectura y
organización del computador. Aunque es difícil dar una definición precisa para estos términos
existe un consenso sobre las áreas generales cubiertas por cada uno.
La arquitectura de computadores se refiere a los atributos de un sistema visibles para un
programador, que tienen un impacto directo en la ejecución lógica de un programa. La
organización de computadores se refiere a las unidades funcionales y sus interconexiones, que
dan lugar a especificaciones arquitectónicas. Entre los ejemplos de atributos arquitectónicos se
encuentran el conjunto de instrucciones, el número de bits utilizados para representar varios
tipos de datos (por ejemplo, números y caracteres), los mecanismos de entrada y salida y las
técnicas para direccionamiento de memoria. Entre los atributos de organización se incluye en
aquellos detalles de hardware transparentes al programador, tales como señales de control,
interfaces entre computador y los periféricos y la tecnología de memoria usada.
Para poner un ejemplo, una cuestión de diseño arquitectónico es si el computador tendrá la
instrucción de multiplicar. Una cuestión de organización es si esa instrucción será
implementada por una unidad especializada en multiplicar, o por el mecanismo que haga un
uso iterativo de la unidad de suma del sistema. La decisión de organización puede estar basada
en la frecuencia prevista del uso de la instrucción de multiplicar, la velocidad relativa de las
dos aproximaciones, y el coste y el tamaño físico de una unidad especializada en multiplicar.
Históricamente, y aún hoy en día, la distinción entre arquitectura y organización ha sido
importante. Muchos fabricantes de computadores ofrecen una familia modelos, todos con la
misma arquitectura, pero con diferencias en cuanto a la organización. Consecuentemente, los
diferentes modelos de la familia tienen precios y prestaciones distintas. Más aún, una
arquitectura puede sobrevivir muchos años, pero su organización cambia con la evolución de
la tecnología. Un ejemplo destacado de ambos fenómenos es la arquitectura IBM Sistema/370.
Esta arquitectura apareció por primera vez en 1970 e incluía varios modelos. Un cliente con
7
Arquitectura y programación de ordenadores
necesidades modestas podía comprar un modelo más barato y lento, y si la demanda se
incrementaba, cambiarse más tarde a un modelo más caro y rápido sin tener que abandonar el
software que ya había sido desarrollado. A través de los años, IBM ha introducido muchos
modelos nuevos con tecnología mejorada para reemplazar modelos más viejos, ofreciendo al
consumidor mayor velocidad, precios más bajos o ambas cosas a la vez. Estos modelos más
nuevos conservaban la misma arquitectura, para proteger así la inversión en software del
consumidor. Podemos destacar que la arquitectura del Sistema/370, con unas pocas mejoras,
ha sobrevivido hasta hoy en día, como la arquitectura de la línea de grandes productos de
computación IBM.
En una clase de sistemas, los llamados microcomputador es, la relación entre arquitectura y
organización es muy estrecha. Los cambios en la tecnología no sólo influyen en la
organización, lo que también dan lugar a la introducción de arquitecturas más ricas y potentes.
Generalmente, hay menos requisitos de compatibilidad, generación generación, para estas
pequeñas máquinas. Así, hay más interacción entre las decisiones de diseño arquitectónicas y
de organización. Un ejemplo interesante de éstos a los computadores de repertorio reducido de
instrucciones (RISC, Reduced Instrution Set Computer).
1.2 ESTRUCTURA Y FUNCIONAMIENTO
Un computador es un sistema complejo; los computadores de hoy en día contienen millones
de componentes electrónicos básicos. ¿Cómo podríamos describir los claramente?. La clave
está en reconocer la naturaleza jerárquica de la mayoría de los sistemas complejos, incluyendo
el computador. Un sistema jerárquico es un conjunto de sus sistemas interrelacionados, cada
uno de los cuales, a su vez, se organiza en una estructura jerárquica, hasta que se alcanza el
nivel más bajo del su sistema elemental.
La naturaleza jerárquica de los sistemas complejos es esencial, tanto para su diseño como para
su descripción. El diseñador necesita tratar solamente con un nivel particular del sistema a la
vez. En cada nivel, el sistema consta de un conjunto de componentes y sus interrelaciones. El
8
Arquitectura y programación de ordenadores
comportamiento en cada nivel depende sólo de una caracterización abstracta y simplificada
del sistema que hay en el siguiente nivel más bajo. De cada nivel, al diseñador importa la
estructura y funcionamiento:
Estructura: el modo en que los componentes están interrelacionados.
Funcionamiento: la operación de cada componente individual como parte de la
estructura.
En términos de descripción tenemos dos opciones: empezar por lo más bajo y construir una
descripción completa, o comenzar con una visión desde arriba y descomponer el sistema en
sus partes. La experiencia a partir de muchos campos nos ha enseñado que la descripción de
arriba a abajo es la más clara y efectiva. Comenzaremos con los componentes principales del
sistema, describiendo su estructura y funcionamiento, y seguimos, sucesivamente, hace capas
más bajas de la jerarquía.
Funcionamiento
Tanto la estructura como el funcionamiento de un computador son, en esencia, sencillos. En
términos generales, sólo hay cuatro funciones básicas que un computador pueda llevar a cabo:
Procesamiento de datos
Almacenamiento de datos
Transferencia de datos
Control
El computador, por supuesto, tiene que ser capaz de procesar datos. Los datos pueden adoptar
una gran variedad de formas, y el rango de los requisitos de procesador es amplio. Sin
9
Arquitectura y programación de ordenadores
embargo, veremos que hay sólo unos pocos métodos o tipos fundamentales de procesado de
datos.
También es esencial que un computador almacene datos. Incluso si el computador esta
procesando datos al vuelo (es decir, si los datos se introducen y se procesan, y los resultados
se obtienen inmediatamente), el computador tiene que guardar temporalmente, al menos
aquellos datos con los que está trabajando en un momento dado. Así, hay al menos una
función de almacenamiento de datos a corto plazo. Con igual importancia, el computador lleva
a cabo una función de almacenamiento de datos a largo plazo. El computador almacena
ficheros de datos para que se recuperen y actualicen en un futuro.
El computador tiene que ser capaz de transferir datos entre el mismo y el mundo exterior. El
entorno de operación del computador se compone de dispositivos que sirven bien como fuente
o como destino de datos. Cuando se reciben o se llevan datos a un dispositivo que está
directamente conectado con el computador, el proceso se conoce como entrada-salida (E/S), y
este dispositivo de recibe el nombre de periférico. El proceso de transferir datos a largas
distancias, desde o hacía un dispositivo remoto, recibe el nombre de comunicación de datos.
Finalmente, se debe haber un control de estas tres funciones. Este control es ejercido por el/los
ente(s) que proporciona(n) al computador instrucciones. Dentro del computador, una unidad
de control gestiona los recursos del computador y dirige las prestaciones de sus partes
funcionales en respuesta a estas instrucciones
A este nivel general de discusión, el número de operaciones posibles que pueden ser
realizadas es pequeño. El computador puede funcionar como un dispositivo de transferencia
de datos, simplemente transfiriendo datos de un periférico o línea de comunicaciones a otro.
También puede funcionar como un dispositivo de almacenamiento de datos, contactos
transferidos desde un entorno externo al almacén de datos del computador (leer) y viceversa
(escribir).
10
Arquitectura y programación de ordenadores
Estructura
El computador es una entidad que y entre actúa de alguna manera con sus entorno externo. En
general, todas sus conexiones con el entorno externo puede ser clasificadas como dispositivos
periféricos o de comunicación. Diremos algo sobre ambos tipos de conexiones.
En su nivel más alto hay cuatro componentes estructurales principales :
Unidad de procesamiento (CPU, Central Procesing Unit): controla el
funcionamiento del
computador y acabó sus funciones de procesamiento de
datos. Frecuentemente se le llama
simplemente procesador.
memoria principal: almacena datos.
E/S: transfiere datos entre computador y entorno externo.
Sistema de interconexión: es un mecanismo que proporciona la comunicación entre
la CPU, la memoria principal y la E/S.
11
Arquitectura y programación de ordenadores
COMPUTADOR
M.P.
E/S
Interconexión
interna
CPU
CPU
Puede que haya uno o más de cada uno de estos componentes. Tradicionalmente, ha habido
sólo una CPU. En los últimos años, ha habido un uso creciente de varios procesadores en un
solo sistema.
El componente más interesante y, de algún modo, el más complejo es la CPU; sus principales
componentes estructurales son:
Unidad de control: controla el funcionamiento de la CPU y, por tanto, del
computador.
Unidad Aritmético-Lógica (ALU, Arithmetic Logic Unit): lleva a cabo las
funciones de procesamiento de datos del computador.
Registros: proporcionan almacenamiento interno a la CPU.
Interconexiones CPU: son mecanismos que proporcionan comunicación entre la
unidad de control, la habló y los registros.
12
Arquitectura y programación de ordenadores
CPU
ALU
Registros
Bus interno
UC
1.3 EVOLUCIÓN Y PRESTACIONES DE LOS COMPUTADORES
1.3.1 La primera generación: Los tubos de vacío
ENIAC
El ENIAC (Electronic Numerical Integrator And Computer), diseñado y construido bajo la
supervisión de
John Mauchly y John tres Presper Eckert en la Universidad de Pennsyvania, fue el primer
computador electrónico de propósito general del mundo.
El proyecto fue una respuesta al necesidades militares en tiempo de guerra de los Estados
Unidos. El laboratorio de investigación de balística del ejército, una agencia responsable del
desarrollo de tablas de tiro y de trayectoria de nuevas armas, tenía dificultades para elaborarlas
con exactitud y dentro de un plazo de tiempo razonable. Sin estas tablas de tiro, las nuevas
armas y piezas de artillería eran inútiles para los artilleros.
13
Arquitectura y programación de ordenadores
El laboratorio empleo a más de 200 personas, la mayoría mujeres, las cuales, utilizando
calculadoras de mesa, resolvían es ecuaciones balísticas necesarias. La preparación de las
tablas para una sola arma le habría llevado a una persona muchas horas, incluso días.
Mauchly, un catedrático de ingeniería eléctrica de la universidad de Pennsylvania, y Eckert,
uno de sus alumnos del licenciatura, propusieron construir un computador de propósito
general, usando tubos de vacío, para utilizarlo en las aplicaciones de la BRL (Ballistics
Research Laboratory). El 1943, esta proposición fue aceptada por el ejército, y se comenzó a
trabajar en el ENIAC. La la máquina que construyeron era enorme, pesaba treinta toneladas,
ocupaba 15.000 pies cuadrados y contenía más de 18.000 tubos de vacío. Cuando funcionaba,
consumía 140 kw de potencia. También era bastante más rápida que cualquier computador
electrodomésticos, ya que era capaz de actuar 5000 sumas por segundo.
El ENIAC era una máquina de final, y no binario. Es decir, los hombres estaban representados
en forma decimal y aritmética se realizaba también el sistema decimal. Su memoria consistía
en 20 acumuladores, cada uno capaz de contener un número decimal de diez dígitos. Cada
dígito estaba representado por un anillo de diez tubos de vacío. En un momento dado, sólo
uno de los tubos de vacío estaba en estado ON, representando uno de los diez dígitos. Uno de
los mayores inconvenientes del ENIAC era que tenía que ser programado en los manualmente
mediante computadores y conectando y las conectando cables.
El ENIAC se terminó en 1946, demasiado tarde para ser utilizado durante la guerra. En lugar
de eso, su primera misión fue realizar una serie de cálculos complejos, que se usaron para
ayudar a determinar la viabilidad de la bomba H. En uso del ENIAC para una función distinta
de aquella para la que fue construido ,mostró su naturaleza de propósito general. Así,1946
marcó el comienzo de la nueva era de los computadores electrónicos, culminando años de
esfuerzos. El ENIAC siguió funcionando bajo la dirección del BRL hasta 1955, cuando fue
desmontado.
14
Arquitectura y programación de ordenadores
La máquina de von Neumann: IAS
La tarea de cargar y modificar programas para el ENIAC era extremadamente tediosa. El
proceso de programación podría ser más fácil si el programa se representaba en una forma
adecuada para ser guardado en la memoria junto con los datos. Entonces, un ordenador podría
conseguir sus instrucciones leyéndolas de la memoria, y se podría hacer a modificar un
programa colocando los valores en una zona de memoria.
Esta idea, conocida como concepto de programa-almacenado, se atribuye a los diseñadores del
ENIAC, sobre todo al matemático John von Neumann, que era asesor del proyecto ENIAC. La
idea fue también desarrollada, aproximadamente el mismo tiempo, por Turing. la primera
publicación de la idea fue en una propuesta de von Neumann para un nuevo computador en
1945 ,el EDVAC (Electronic Discrete Variable Computer).
En 1946, von Neumann y sus colegas empezaron, en el instituto para estudios avanzados de
Princeton, el diseño de un nuevo computador de programa-almacenado, que llamaron IAS. No
completado hasta 1952, es el prototipo de todo una serie computadores de propósito general.
La siguiente figura muestra la estructura general del computador IAS.
ALU
Memoria
Equipos de
Principal
E/S
Unidad de
Control
15
Arquitectura y programación de ordenadores
Este consta de:
Una memoria principal, que almacene tanto datos como instrucciones.
Una unidad aritmético-lógica (ALU), capaz de hacer operaciones con datos binarios.
Una unidad de control, que interpreta las instrucciones de memoria y provoca su ejecución.
Un equipo de entrada-salida (E/S) dirigido por la unidad de control .
Brevemente, a continuación se describen los elementos básicos citados previamente:
CPU: es la parte del ordenador encargada de ejecutar las operaciones. Operaciones que
incluye fundamentalmente movimiento de datos, operaciones aritméticas y lógicas, y de
control del flujo de la ejecución. En la mayor parte de los ordenadores actuales, la CPU se
construye en un único circuito integrado, denominado también microprocesador.
Memoria: permite el almacenamiento de los datos y las instrucciones con las que trabaja el
procesador. El término de memoria se suele utilizar para hacer referencia la memoria principal
de la ordenador, frente a lo que sería una memoria secundaria, que es como se suele
denominar a los sistemas de almacenamiento masivo como como los discos, cintas, CD-ROM,
DVD, etc.. En un ordenador, prácticamente siempre aparecen espacios asociados a memoria
ROM (Read Only Memory), cuya información no puede modificar la CPU, y es información
que se conserva entré el apagado y el encendido del ordenador, y memorias RAM (Random
Accsee Memory), cuyo contenido lo puede consultar y actualizar la CPU, pero su información
se pierde cuando no se las alimenta eléctricamente.
Dispositivos de entrada/salida: la comunicación del ordenador con el exterior se realiza
mediante dispositivos de entrada/salida. Mediante estos dispositivos, la CPU autónoma y
ofrece información del exterior. Cada dispositivo físicos (pantalla, discos, impresoras, etc..) se
comunica con la CPU a través de un controlador específico para ese dispositivos.
16
Arquitectura y programación de ordenadores
Estos componentes se conectan mediante líneas eléctricas, denominadas buses, y se clasifican
como bus de datos, bus de direcciones y bus de control y aparte CPU, memoria se
controladores se construyen a partir de circuitos digitales (puertas lógicas, codificadores,
decodificadores, desplazadores, contadores, etc.). Su construcción suele hacerse empleando un
único circuito integrado para almacenarlos a todos (por ejemplo, un microprocesador) o
empleando un conjunto de circuitos digitales básicos, y a menudo algunos más complejos,
interconectados en un circuito impreso.
Salvo raras excepciones, todos los computadores de hoy en día tienen la misma estructura
general y funcionamiento que la indicada en las máquinas de von Neumann. Por tanto, merece
la pena describir brevemente la manera de operar del computador IAS.
La memoria del IAS consiste en 1000 posiciones de almacenamiento, llamadas palabras, de 40
dígitos binarios (bits) cada una. Tanto los datos como las instrucciones se almacena ahí por
tanto, los números se puede representar en forma binaria y cada instrucción tiene también un
código binario. La figura 2.2 muestra estos formatos. Cada número se representa con un bit
de signo y 39 bits de valor. Una palabra puede contener también dos instrucciones de 20 bits,
donde cada instrucción consiste en un código de operación de 8 bits (codop) específica la
operación que se va a realizar, y una dirección de 12 bits, que indica una de las palabras de la
memoria (numeradas de 0 a 999).
17
Arquitectura y programación de ordenadores
01
39
a) Palabra número
Bit de signo
0
8
Codop
19 20
Dirección
28
Codop
39
Dirección
b) Palabra Instrucción
La unidad de control dirige el IAS captando instrucciones de la memoria y ejecutándolas una a
una. Tanto la unidad de control como la ALU, contiene posiciones de almacenamiento,
llamadas registros, definidos de la siguiente manera:
Registro temporal de memoria (MBR , Memory Buffer Register): contiene una palabra
que debe ser almacenada en la memoria, o es usada para recibir una palabra procedente de la
memoria.
Registro de dirección de memoria (MAR ,Memory Address Register): específica la
dirección en memoria de la palabra que va a ser escrita o leída en MBR.
Registro de instrucción (IR, Instruction Register): contiene los 8 bits del código de
operación de la instrucción que se va a ejecutar.
Registro temporal de instrucción ( IBR, Instruction y Buffer Register): empleado para
almacenar temporalmente la instrucción contenida en la parte derecha de una palabra en
memoria.
Contador de programa (PC ,Program Counter): contiene la dirección de la próxima pareja
de instrucciones que va a ser captada de la memoria.
18
Arquitectura y programación de ordenadores
Acumulador (AC) y multiplicador cociente (MQ, Multiplier Quotient): se emplean para
almacenar operándos y resultados de operaciones de la ALU temporalmente. Por ejemplo, el
resultado de multiplicar dos números de 40 bits es un número de 80 bits; los 40 bits más
significativos se almacenan en el AC y los menos significativos en el MQ.
CPU
Unidad aritmético-lógica
MQ
AC
Equipo
de
E/S
Circuitos aritmético-lógicos
MBR
Instrucciones
y datos
IBR
PC
IR
MAR
Circuitos
de
control
Señales de
control
Memoria
principal
Direcciones
Unidad de control de programa
Estructura expandida del computador IAS
El IAS, opera ejecutando repetidamente un ciclo instrucción. Cada ciclo constará de dos
subciclos. Durante el ciclo de captación, el codop de la siguiente instrucción es cargado en el
IR, y la parte que contiene la dirección se almacena en el MAR.
Esta instrucción puede ser captada desde el IBR, o puede de ser obtenida de la memoria
cargando una palabra en el MBR, y luego en IBR, IR y MAR.
19
Arquitectura y programación de ordenadores
Una vez que el codop está en el IR, se lleva a cabo el ciclo de ejecución. Los circuitos de
control interpretan el codop y ejecutan las instrucciones, enviando las señales de control
adecuadas para provocar que los datos se transfieran o que la ALU realice una operación. El
computador IAS tiene un total de 21 instrucciones, algunas de las cuales se indican en la
Tabla1. El tipo de instrucciones del IAS se muestra en esta tabla, sin embargo aprovechamos
aquí para nombrar las instrucciones típicas que incluye cualquier CPU, que se pueden dividir
en los siguientes grupos:
Transferencia de datos: se emplea para mover información entre los diferentes espacios
(registros, memoria, registros de controladores de entrada/salida). Aunque algunas CPU
restringen los movimientos (8086 y los procesadores RISC no permiten movimientos de
memoria a memoria), otros permiten cualquier combinación (ortogonalidad). También se
incluyen operaciones específicas de entrada/salida o de acceso a los espacios de pila.
Aritméticas: instrucciones que realizan operaciones aritméticas, negaciones de signo,sumas,
restas, multiplicaciones, divisiones de operándose enteros (con y sin signo), en coma flotante,
etc.. También aparecen a veces instrucciones de comparación, que se suele utilizar con las de
salto condicional.
Lógicas y de desplazamientos: estas instrucciones implementan operaciones lógicas bit a bit
entre los operandos, incluyéndose operaciones como AND, OR, XOR, NOT, desplazamientos
izquierda o derecha y rotaciones a izquierda o derecha.
Manejo de bits: estas son instrucciones que permite modificar o consultar bits de un operando
de forma individual.
Control del programa: estas son instrucciones que permite modificar el flujo de ejecución de
un programa. Entré ellas se incluyen los saltos condicionales o incondicionales, las llamadas y
retornos de subrutina, las comprobaciones de errores y los desvíos al sistema operativo.
20
Arquitectura y programación de ordenadores
Control de el procesador: así se incluyen instrucciones específicas del procesador, como
instrucciones que dejan parado el procesador, lo dejan bloqueado hasta que aparezca una
interrupción; instrucciones que no hacen nada, o instrucciones que consultan o modifican
registro de propósito específico dentro del procesador (por ejemplo, palabras de estado).
Miscelánea: aparecen también instrucciones que facilitan el manejo de cadenas de caracteres
o instrucciones que facilitan la compartición de memoria entre varios procesadores.
Tabla1
Tipo de
Codop
Instrucción
Transferencia de datos
Representación
Descripción
simbólica
00001010
LOAD MQ
Transferir el contenido del registro
MQ al acumulador AC
00001001
LOAD MQ,M(X)
Transferir
el
contenido
de
la
posición de memoria X a MQ
Salto incondicional
00001101
JUMP M(X,0:19)
Captar la siguiente instrucción de la
mitad izquierda de M(X)
00001110
JUMP M(X,20:39)
Captar la siguiente instrucción de la
mitad derecha de M(X)
Salto condicional
00001111
JUMP + M(X,0:19)
Si el número en el acumulador no
es negativo, captar la siguiente
instrucción de la mitad izquierda de
M(X)
Aritmética
00001000
JUMP + M(X,20:39)
……. de la mitad derecha de M(X)
00000101
ADD M(X)
Sumar M(X) a AC; colocar el
resultado en AC
00000110
SUB M(X)
Restar M(X) a AC; colocar el
resultado en AC
Modificación de direcciones
00010010
STOR M(X,8:19)
Reemplazar el campo de dirección
de la izquierda de M(X) por los
doce bits de la derecha de AC
00010011
STOR M(X,28:39)
Reemplazar el campo de dirección
de la derecha de M(X)…
Microinstrucciones del ordenador IAS
21
Arquitectura y programación de ordenadores
1.4 LENGUAJE MÁQUINA: OPERANDOS Y DIRECCIONAMIENTO
Las instrucciones ejecuta la CPU se almacenan en la memoria del ordenador, de donde las
extrae el procesador y las ejecuta de forma secuencial, a menos que se produzca algún salto.
En una memoria sólo se pueden almacenarse secuencias de bytes cuyos contenidos son ceros
o unos, esas combinaciones y secuencias deben estar organizadas de forma que tengan algún
sentido para la CPU y sean reconocidas por esta. El conjunto de las posibles combinación de
que reconoce la CPU es lo que se denomina lenguaje máquina, y suelen ser diferentes para
cada familia de CPU.
Las instrucciones que ejecuta la CPU son, en general, operaciones aritméticas (sumas, restas,
multiplicaciones, etc.), lógicas (AND, OR, NOT, etc), movimiento de datos de unos espacios
a otros y control de flujo (saltos condicionales, incondicionales, comparaciones...). Esas
instrucciones suelen trabajar con unos operándos que la CPU pueda tomar de sus registros
(espacios para almacenar datos dentro de la propia CPU) o de la memoria. La forma en que se
especifica de donde se deben tomar los datos es lo que se llama el modo de direccionamiento.
Programas en lenguaje máquina
Como se ha dicho, el lenguaje máquinas es aquel que la CPU es capaz de reconocer y ejecutar.
Una secuencia de instrucciones de este lenguaje máquina, almacenado en la memoria del
ordenador, podrá representar un programa en lenguaje máquina. Un programa es una
secuencia de ceros y unos que, en función de las instrucciones que incluya y el orden en que
éstas aparezcan, a la que la CPU vaya obteniendo unos resultados, que pueden parecerse o no
a los que el programador pretendía conseguir.
Un ejemplo de programa en lenguaje máquina almacenado en la memoria de un ordenador
con un procesador hipotético podría ser el de la siguiente figura. En el se lleva una constante
con valor 6 a la posición 5 de memoria, y a continuación se introducen en un bucle en el que
restara uno al contenido de la posición 5 hasta que ésta se haga 0.
22
Arquitectura y programación de ordenadores
Dirección de memoria
Binario
Decimal
0000
0
0001
1
0010
2
0011
3
0100
4
0101
5
15
0
Poner
6
0001
0110
Restar
1
0100
0001
Si última op.
Programa
0011
xxxx
En dir
0101
De dir
0101
0
1001
xxxx
5
xxxx
Salta 4
xxxx
Salta a
Dato
5
0100
Dir 1
xxxx
xxxx
0001
xxxx
xxxx
xxxx
Parar
0000
Formato deInstrucción: Cog.
opera
Dato
inme.
Direc. Direc.
opera. salto
En este programa aparece una secuencia de instrucciones (no hay nada almacenado entre estas
instrucciones) El procesador irá ejecutando una tras otra. Son instrucciones en general
sencillas (comparándolas con las de los lenguajes de alto nivel como Fortran, C, VisualBasic,
etc...).
23
Arquitectura y programación de ordenadores
En general, las instrucciones suelen organizarse en campos, normalmente de tamaño variable
y que no siempre aparecen en todas las instrucciones. El ejemplo planteado es muy regular y
ortogonal, algo deseable, pero que no es la norma.
Otra característica común a todos los lenguajes máquina es que cada instrucción contiene todo
lo que la CPU necesita para poder ejecutarla, estando muy claro el límite entre ellas. La CPU
siempre puede ejecutar cualquier instrucción en un momento dado. Cualquier secuencia de
instrucciones podrá ser ejecutada por el procesado (salvo caso muy excepcionales), aunque los
resultados pueden ser impredecibles. Esta característica hace que la ejecución de las CPU sea
bastante sistemática y lleve asociado un ciclo de ejecución parecido en todas ellas:
1. Extraer instrucción de la memoria.
2. Decodificarlas, de terminar la operación a realizar y extraer los operando.
3. Ejecutarla instrucción y almacenar resultados.
4. Volver a uno.
A pesar de que es el lenguaje máquinas el que realmente se ejecuta en la CPU, espera
químicamente imposible representar un programa de cierta complejidad en este lenguajes.
Para poder escribir los programas, nos apoyamos en herramientas como los compiladores,
intérpretes o en sembradores, cuya función es producir los programas escritos en lenguaje de
alto nivel, o ensamblador, a lenguajes máquina, siendo estas traducciones las que realmente
ejecuta el procesador.
Para poder ejercer un programa en un caso general, además de editarlo, se deben seguir estos
pasos:
24
Arquitectura y programación de ordenadores
1. Compilar cada una de las unidades que lo compongan (pudiendo estar cada unidad escrita
en diferentes lenguajes de alto nivel o ensamblador). Los compiladores o ensambladores
generaran ficheros objetos, en los que se incluyen instrucciones en lenguaje máquina que
ejecutan operaciones equivalentes a las sentencias de los ficheros fuente, además de otra
información que se empleara en la siguientes fases.
2. Enlazar el conjunto de ficheros objeto que componen un programa. El enlanzador general
un fichero (fichero ejecutable) que contendrá un programa en lenguaje máquina, con
información adicional que permita cargarlo en memoria (datos sobre el espacio que ocupan los
datos del programa y el código, partes del código que hay que retocar cuando se carga el
código o información que emplean los depuradores de programas).
3. Cargar el programa ejecutable (el lenguaje máquina) en memoria y hacer que la CPU no
ejecute la carga de el programa La suele realizar el sistema operativo de la máquina, llevando
las instrucciones máquina contiene el fichero ejecutable a memoria. Una vez cargado, le
cederá control, ejecutando una instrucción de saltó a la dirección donde se ha cargado el
programa. Hasta ese momento, la CPU estaba ejecutando instrucciones de los programas que
componen el sistema operativo. A partir de ahora ejecutará las del programa.
Como se ve, para poder ejecutar un programa se deben ejecutar otros programas (compilador,
enlanzador, sistema operativo), que, a su vez, habrán sido escritos en lenguaje este alto nivel y
compilados y enlazados, a menudo con técnicas de programación cruzada (en una máquina
diferente y con otros compiladores y enlanzadores) o similares.
Un programa en ensamblador es básicamente un conjunto de instrucciones de un lenguaje
simbólico, en el que en general cada instrucción se hace corresponder con una instrucción de
las que es capaz de reconocer el procesador (salvo algunas instrucciones o directivas dirigidas
al ensamblador para que realice la traducción de una forma determinada).
Además de poder emplear nemotécnicos para representar las operaciones, los espacios de
datos se presentarán de forma simbólica (de forma parecida a como se declaran variables en
25
Arquitectura y programación de ordenadores
un lenguaje de alto nivel), con lo que se evita tener que trabajar directamente con direcciones
de memoria. Esos espacios se representan mediante etiquetas, que también se emplean para
representar direcciones donde se tienen almacenadas instrucciones.
Es importante resaltar que una instrucción ensamblador se corresponde con la instrucción en
lenguaje máquina, empleándose el lenguaje ensamblado como una forma más amigable de
representar el lenguaje máquina.
Al representar de forma más clara la misma idea, se facilita la escritura de programas de cierta
complejidad. Sin embargo, las instrucciones siguen siendo tan sencillas como las del lenguaje
máquina y, sobre todo, poco estructuradas, lo que hace que sea poco el software que se escriba
en ensamblador, y se limite en general a operaciones muy dependientes de la máquina con la
que se trabaja, dejando el resto a los lenguajes de alto nivel. Otro problema más de estos
programas es la poca portabilidad entre máquinas con procesadores de diferente tipo.
1.4.1 Operandos
En este apartado se comentarán los operandos empleados por instrucciones máquina y la
forma que emplean las instrucciones para representarlos.
La mayor parte de las instrucciones de un ordenador manipulan datos, esos datos residen en
los operandos, que aparecen descritos en las instrucciones que procesa la CPU. En general los
operandos con los que trabajan las instrucciones son de 3 clases, en función de su ubicación:
espacios de memoria, registros de la CPU y registros de controladores de entrada/salida.
Desde un punto de vista más particular, se pueden clasificar por el tipo de información que
almacenan: Direcciones, números, caracteres y datos lógicos.
normalmente, cada palabra o cualquier otra unidad direccionable (byte, media palabra, etc.) es
tratada como una unidad de datos individual. Sin embargo, a veces es útil considerar una
unidad de n bits, elemento elementos o datos de 1 bit, donde cada elemento tiene un valor 1 ó
0. Cuando los datos son vistos de esta manera, se consideran datos lógicos.
26
Arquitectura y programación de ordenadores
Tipos de datos en Pentium II
El Pentium II puede tratar tipos de datos de 8 (byte),32 (palabra doble) y 64 (palabra
cuádruple) bits de longitud. Para posibilitar una flexibilidad máxima en las estructuras de
datos, y una utilización eficiente de la memoria, las palabras no tienen por qué estar alineadas
con las direcciones pares de memoria, ni las palabras dobles alineadas con las direcciones
divisibles por cuatro, y las cuatro pares con direcciones divisibles por ocho. Sin embargo,
cuando se accede a los datos a través de un bus de 32 bits, su transferencia tiene lugar en
unidades de palabras dobles, empezando en direcciones divisibles por cuatro. El procesador
convierte las peticiones, valores no alineados, en una secuencia de peticiones adaptada a la
forma de transparencia en el bus. Como en todas las máquinas Intel 80X86, el Pentium II
emplea el estilo "litte-endian"; es decir: el byte menos significativo es almacenado en la
dirección más bajas.
El byte, la palabra, la palabra doble y la cuádruple, son referidas como tipos generales de
datos. Además, el Pentium II admite una variedad impresionante de tipos de datos específicos,
que son reconocidos y procesados mediante instrucciones concretas. La Tabla II resume estos
tipos.
El tipo coma flotante se refiere realmente a un conjunto de tipos utilizados por la unidad de
coma flotante, y que son procesados mediante instrucciones de coma flotante. Los enteros
están en representación de complemento a dos y puede ser de 16,32 ó 64 bits. Los enteros
decimales empaquetados se almacenan en representación signo-magnitud con 18 dígitos en el
rango de 0 a 9. Las tres representaciones en coma flotante se ajustan al estándar IEEE 754.
Tipos de datos en el PowerPC
El PowerPC puede manejar tipos de datos de 8 (byte),16 (media palabra),32 (palabra) y 64
(palabra doble)bits de longitud. Algunas instrucciones requieren que los operandos de
memoria estén alineados con una frontera de 32 bits. Sin embargo, en general no es necesario
27
Arquitectura y programación de ordenadores
el alineamiento. Una característica interesante del PowerPC es que puede utilizar bien estilo
"litte-endian" o el "big-endian"; es decir, el byte menos significativo puede estar almacenado,
bien en la dirección más baja, o bien en la más alta.
El byte, la media palabra, la palabra y la palabra doble, son tipos de datos generales. El
procesador interpreta el contenido de un elemento de datos dado dependiendo de la
instrucción. El procesador de coma flotante cifra reconoce los siguientes tipos de datos:
Byte sin signo: puede utilizarse para operaciones lógicas o para aritméticas con enteros. Se
carga de memoria en un registro general, completando con ceros hacia la izquierda hasta la
longitud total del registro.
Media palabra con signo: como antes, pero para cantidades de 16.
Media palabra con signo: utilizados para operaciones aritméticas; cargardo en memoria
completando el signo hacia la izquierda hasta la longitud total del registro (es decir, se repite
el bit de signo en todas las posiciones vacantes).
Palabra sin signo: utilizado para operaciones lógicas y como puntero de direcciones.
Palabra con signo: utilizado para operaciones aritméticas.
Palabra doble sin signo: utilizado como puntero de direcciones.
Cadena de bytes: de este 0 hasta 128 bytes de longitud.
Además, el por PowerPC admite tipos de datos en coma flotante de pretensión simple y doble
definidos en el estándar IEEE .
28
Arquitectura y programación de ordenadores
Tabla II
Tipo de datos
Descripción
General
Posiciones de byte, de palabra( 16 bits), de palabra
doble y cuádruple, con contenido binario arbitrario
Entero
Un valor binario con signo contenido en un byte, una
palabra o una palabra doble, representado en
complemanto a dos
Ordinal
Un entero con signo contenido en
un byte, una
palabra o una palabra doble
Decimal
codificado
en
binario
(BCD)
Representación de un dígito BCD en el rango de 0 a
desempaquetado
9, con un dígito en cada byte
BCD empaquetado
Representación empaquetada de dos dígitos BCD en
un byte; valor en el rango de 0 a 99
Puntero de proximidad
Una dirección efectiva de 32 bits que representa el
(Puntero cercano)
desplazamiento dentro de un segmento. Utilizado
para todos los punteros en una memoria no
segmentado y para referencias dentro de un
segmento en una memoria segmentado.
Campo de bits
Una secuencia contigua de bits en la que cada
posición
de
bit
se
considera
como
unidad
independiente. Una cadena de bits puede comenzar
en cualquier posición de cualquier byte y puede
contener hasta 232-1 bits
Cadena de bytes
Una secuencia contigua de bytes, de palabras, o de
palabras dobles, que contiene de 0 hasta 232-1 bytes
Coma flotante
Enteros de una palabra con 16 bits de precisión,
enteros cortos con precisión de 32 bits, enteros
largos con precisión de 64 bits, BCD empaquetado
de dieciocho dígitos de precisión, precisión simples
de 24 bits de precisión doble precisión de 3 bits y
precisión ampliada con precisión de 64 bits
Tipos de datos en el Pentium II
29
Arquitectura y programación de ordenadores
1.4.2 Direccionamiento
Se suelen utilizar 12 modos de direccionamiento básicos, clasificados en 5 grupos:
1.4.2.1. Direccionamientos de acceso directo a registro .
1.4.2.2. Direccionamiento de acceso directo a memoria
1.4.2.4. Direccionamiento relativo
1.4.2.5. Direccionamiento implícito.
1.4.2.1. Direccionamientos de acceso directo a registro
A Direccionamiento de registro
Especifica el operando fuente y el operando destino. Los registros deben ser del mismo tamaño.
ej. MOV DX, CX
MOV CL, DL.
B Direccionamiento inmediato
Un dato de 8 o 16 bits se especifica como parte de la instrucción. p.ej. MOV CL, 03H. Aquí el
operando fuente está en modo inmediato y el destino en modo registro.
1.4.2.2. Direccionamientos de acceso directo a memoria.
A Direccionamiento directo
La dirección efectiva (EA) de 16 bits se toma directamente del campo de desplazamiento de la
instrucción. El desplazamiento se coloca en la localidad siguiente al código de operación. Esta
EA o desplazamiento es la distancia de la localidad de memoria al valor actual en el segmento de
datos (DS) en el cual el dato está colocado. Ej. MOV CX, START. START puede definirse
como una localidad de memoria usando las pseudoinstrucciones DB o DW.
30
Arquitectura y programación de ordenadores
B Direccionamiento de registro indirecto.
La dirección efectiva EA está especificada en un registro apuntador o un registro índice. El
apuntador puede ser el registro base BX o el apuntador base BP; el registro índice puede ser el
Indice Fuente (SI) o el Indice Destino (DI).
Ej. MOV (DI),BX.
C Direccionamiento base
EA se obtiene sumando un desplazamiento (8 bits con signo o 16 bits sin signo) a los contenidos
de BX o BP. Los segmentos usados son DS y SS. Cuando la memoria es accesada, la dirección
física de 20 bits es calculada de BX y DS, por otra parte, cuando la pila es Accesada, la dirección
es calculada de BP y SS.
Ej. MOV AL, START (BX). el operando fuente está en modo base, y la EA se obtiene sumando
los valores de START y BX.
D Direccionamiento indexado.
EA se calcula sumando un desplazamiento (8 o 16 bits) a los contenidos de SI o DI. Ej. MOV
BH,START (SI).
E Direccionamento base indexado.
EA se calcula sumando un registro base (BX o BP), un registro índice (DI o SI), y un
desplazamiento (8 o 16 bits).
Ej. MOV ALPHA (SI)(BX),CL.
Este direccionamiento proporciona una forma conveniente para direccionar un arreglo localizado
en la pila.
31
Arquitectura y programación de ordenadores
F Direccionamiento con registros índice
Este modo usa registros índice. La cadena de instrucciones automáticamente asume que SI
apunta al primer byte o palabra del operando destino. Los contenidos de SI y DI son
incrementados automáticamente (poniendo a 0 DF mediante la instrucción CLD) o
decrementados (poniendo a 1 DF mediante la instrucción STD) para apuntar al siguiente byte o
palabra. El segmento del operando fuente es DS y puede ser encimado.
El segmento del operando destino debe ser ES y no puede ser encimado. Ej. MOVS BYTE.
1.4.2.3. Direccionamiento de acceso a puertos E/S
Hay dos tipos de direccionamiento usando puertos: directo e indirecto.
En el modo directo, el número de puerto es el operando inmediato de 8 bits, lo cual permite
accesar puertos numerados del 0 al 255. Ej. OUT 05H,AL.
En el modo indirecto, el número de puerto se toma de DX, permitiendo así 64K puertos de 8 bits
o 32K puertos de 16 bits.
Las transferencias E/S de 8 y 16 bits deben hacerse vía AX y AL, respectivamente.
1.4.2.4. Direccionamiento relativo
En este modo el operando se especifica como un desplazamiento de 8 bits con signo, relativo al
PC. Ej. JNC START. Si C=0, entonces el PC se carga con PC+el valor de START.
1.4.2.5. Direccionamiento implícito
Las instrucciones que usan esta modo no tienen operandos. Ej. CLC.
Descargar