1 INTRODUCCION - ajmoreno.webs.ull.es 2005/tema 1/Introduccion .pdf · de control gestiona los...

27
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. 5

Transcript of 1 INTRODUCCION - ajmoreno.webs.ull.es 2005/tema 1/Introduccion .pdf · de control gestiona los...

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.

5

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

6

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

7

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

8

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).

9

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.

10

Arquitectura y programación de ordenadores

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.

M.P.

Interco-nexión interna CPU

CPU

COMPUTADOR

E/S

11

Arquitectura y programación de ordenadores

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.

CPU

Registros ALU

Bus interno

UC

12

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.

13

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.

Memoria Principal

Equipos de E/S

ALU

Unidad de Control

14

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.

15

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).

16

Arquitectura y programación de ordenadores

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.

0 1

Bit de signo

0 8 19 20 28 39

Codop Dirección Codop Dirección

a) Palabra número

b) Palabra Instrucción

39

17

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

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.

Direcciones

MAR

PC IBR

IR

Circuitos de control

MBR

Circuitos aritmético-lógicos

AC MQ

Unidad aritmético-lógica

Equipo de E/S

Memoria principal

Instrucciones y datos

Unidad de control de programa

Señales de control

18

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.

19

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

Instrucción

Codop Representación

simbólica

Descripción

Transferencia de datos 00001010

00001001

LOAD MQ

LOAD MQ,M(X)

Transferir el contenido del registro

MQ al acumulador AC

Transferir el contenido de la

posición de memoria X a MQ

Salto incondicional 00001101

00001110

JUMP M(X,0:19)

JUMP M(X,20:39)

Captar la siguiente instrucción de la

mitad izquierda de M(X)

Captar la siguiente instrucción de la

mitad derecha de M(X)

Salto condicional 00001111

00001000

JUMP + M(X,0:19)

JUMP + M(X,20:39)

Si el número en el acumulador no

es negativo, captar la siguiente

instrucción de la mitad izquierda de

M(X)

……. de la mitad derecha de M(X)

Aritmética 00000101

00000110

ADD M(X)

SUB M(X)

Sumar M(X) a AC; colocar el

resultado en AC

Restar M(X) a AC; colocar el

resultado en AC

Modificación de direcciones 00010010

00010011

STOR M(X,8:19)

STOR M(X,28:39)

Reemplazar el campo de dirección

de la izquierda de M(X) por los

doce bits de la derecha de AC

Reemplazar el campo de dirección

de la derecha de M(X)…

Microinstrucciones del ordenador IAS

20

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.

21

Arquitectura y programación de ordenadores

Dirección de memoria

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...).

Binario Decimal 15 0

0000 0

0001 1

0010 2

0011 3 Programa

0100 4

0101 5 Dato

Si última op. 0 Salta 4

0011 xxxx xxxx 0100

Restar 1 De dir 5

0100 0001 0101 xxxx

Poner 6 En dir 5

0001 0110 0101 xxxx

Salta a Dir 1

1001 xxxx xxxx 0001

Parar

0000 xxxx xxxx xxxx

Cog. Dato Direc. Direc. opera inme. opera. salto

Formato deInstrucción:

22

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:

23

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

24

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.

25

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

26

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 .

27

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)

desempaquetado

Representación de un dígito BCD en el rango de 0 a

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

(Puntero cercano)

Una dirección efectiva de 32 bits que representa el

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

28

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.

29

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.

30

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.

31