Sunteți pe pagina 1din 289

FUNDAMENTOS DE COMPUTADORES

CURSO 2005/2006 1. PROYECTO DOCENTE 2. TRANSPARENCIAS DEL CURSO 3. GUIONES DE PRCTICAS 4. COLECCIN DE PROBLEMAS DE EXMENES

Carmelo Cuenca Hernndez y Francisca Quintana Domnguez

PROYECTO DOCENTE

CURSO: 2005/06

13877 - FUNDAMENTOS DE COMPUTADORES

ASIGNATURA: CENTRO: TITULACIN: DEPARTAMENTO: REA: PLAN: CURSO: CRDITOS:

13877 - FUNDAMENTOS DE COMPUTADORES Escuela Universitaria Informtica Ingeniero Tcnico en Informtica de Sistemas INFORMTICA Y SISTEMAS Arquitectura Y Tecnologa de Computadores 11 - Ao 2000 ESPECIALIDAD: Primer curso IMPARTIDA: Segundo cuatrimestre TIPO: Obligatoria 4,5 TERICOS: 3 PRCTICOS: 1,5

Descriptores B.O.E. Organizacin bsica de los computadores: elementos bsicos; esquemas de funcionamiento, desripcin de una mquina bsica, programacin. Temario 1 Arquitectura de un computador y jerarqua de niveles (3horas) 2 Arquitectura del nivel lenguaje mquina (10 horas) 2.1 Caractersticas generales del lenguaje mquina (3 horas) 2.2 Tipos de operandos e instrucciones (2 horas) 2.3 Modos de direccionamiento y formato de las instrucciones (2 horas) 2.4 Subrutinas (3 horas) 3 Diseo del procesador (15 horas) 3.1 Diseo y control cableado de un camino de datos monociclo (4 horas) 3.2 Diseo y control cableado de un camino de datos multiciclo ( 8 horas) 3.3 Diseo y control microprogramado de un camino de datos multiciclo (3 horas) 4 Rendimiento ( 2 horas) Conocimientos Previos a Valorar Los alumnos deberan haber cursado y aprobado la signatura de Sistemas Digitales, donde adquiriran los conocimientos acerca de los sistemas de numeracin y representacin de la informacin ms usuales, el lgebra de Boole y su aplicacin para simplificacin de funciones booleanas, las tcnicas de implementacin de circuitos combinacionales simples, los fundamentos y componentes bsicos de los sistemas secuenciales para desarrollar sistemas secuenciales sncronos. Tambin son necesarios algunos conocimientos bsicos de programacin en algn lenguaje de alto nivel para saber disear programas sencillos, y representar esos algoritmos en pseudocdigo, diagramas de flujo o algn mtodo equivalente. Objetivos Didcticos Fundamentos de Computadores es la asignatura que presenta los componentes de un computador y la organizacin de estos componentes para proporcionar, de una manera eficiente, las funciones necesarias para poder ejecutar programas.

Pgina 1

Obtener una visin general de la jerarqua de niveles de un computador. Saber diferenciar entre los conceptos de estructura y arquitectura de un computador. Conocer y comprender las caractersticas ms importante de la arquitectura y estructura de un computador. Conocer y comprender los elementos bsicos de la arquitectura del repertorio de instrucciones. Dominar la programacin en lenguaje ensamblador de algn procesador como, por ejemplo, el MIPS R2000. Conocer y comprender los elementos estructurales del procesador para la ejecucin de las instrucciones. Conocer los principios bsicos y mtodos de diseo de unidades de control cableadas y microprogramadas. Evaluar las alternativas de diseo, as como el rendimiento de computadores. Metodologa de la Asignatura La metodologa docente a utilizar durante la imparticin de la asignatura incluye los siguientes procedimientos: Clases magistrales. Clases prcticas en el laboratorio. Resolucin de problemas. Tutoras. Evaluacin La nota final de la asignatura ser el resultado de la ponderacin entre la nota de teora y la nota de las prcticas de laboratorio. Para aprobar la asignatura es preciso haber superado ambas partes con una nota mayor o igual a 5 puntos. La nota de teora tendr un peso de un 70% sobre la nota final y la nota de prcticas de laboratorio un 30%. La nota de teora y de prcticas de laboratorio se obtendr a partir de los exmenes de convocatoria de la asignatura, uno para teora y otro para prctica, en la fecha que el Centro fije para ello. As para calcular la nota final se utilizar la siguiente frmula: NF = 0.7 NT +0.3 NP (siempre que NT>=5 y NP>=5) donde NF es la nota final, NT es la nota de teora y NP es la nota de prcticas de laboratorio. Descripcin de las Prcticas Prctica n 1 DescripcinEl simulador PCspim. ObjetivosFamiliarizacin con la herramienta para las prcticas de la asignatura. Material de laboratorio recomendadoOrdenador personal. Windows. Simulador Pcspim N horas estimadas en Laboratorio2N horas total estimadas para la realizacin de la prctica2 Prctica n 2 DescripcinLos datos en memoria ObjetivosAdquirir soltura en cmo estn ubicados los datos en memoria Material de laboratorio recomendadoOrdenador personal. Window NT 4.0. Simulador Pcspim N horas estimadas en Laboratorio2N horas total estimadas para la realizacin de la prctica2 Prctica n 3 DescripcinCarga y almacenamiento de los datos

Pgina 2

ObjetivosEstudio de la forma en que se cargan y almacenan los datos. Poner en prctica los conocimientos adquiridos en las clases tericas sobre el repertorio de instrucciones MIPS. Material de laboratorio recomendadoOrdenador personal. Window NT 4.0. Simulador Pcspim N horas estimadas en Laboratorio2N horas total estimadas para la realizacin de la prctica2 Prctica n 4 DescripcinLas operaciones aritmticas y lgicas. ObjetivosAdquirir soltura en el uso de las instrucciones aritmticas lgicas. Poner en prctica los conocimientos adquiridos en las clases tericas sobre el repertorio de instrucciones MIPS. Material de laboratorio recomendadoOrdenador personal. Window NT 4.0. Simulador Pcspim2 N horas estimadas en Laboratorio2N horas total estimadas para la realizacin de la prctica2 Prctica n 5 DescripcinInterfaz con el programa ObjetivosFamiliarizacin con la forma en que el PCSPIM permite realizar entrada y salida de datos. Material de laboratorio recomendadoOrdenador personal. Window NT 4.0. Simulador Pcspim N horas estimadas en Laboratorio2N horas total estimadas para la realizacin de la prctica2 Prctica n 6 DescripcinEstructuras de control:condicionales y bucles ObjetivosAdquirir soltura en el uso de las instrucciones que permiten implementar estructuras condicionales y bucles Material de laboratorio recomendadoOrdenador personal. Window NT 4.0. Simulador Pcspim N horas estimadas en Laboratorio2N horas total estimadas para la realizacin de la prctica2 Prctica n 7 DescripcinGestin de subrutinas ObjetivosEstudio de la forma en que se manejan las subrutinas en lenguaje ensamblador. Material de laboratorio recomendadoOrdenador personal. Window NT 4.0. Simulador Pcspim N horas estimadas en Laboratorio3N horas total estimadas para la realizacin de la prctica3 Bibliografa
[1] Organizacin y diseo de computadores: la interfaz hardware/software Hennessy, John L. , McGraw-Hill, Madrid (1995) - (2 ed.) 8448118294 [2] Computer organization and design: the hardware/software interface John L. Hennessy, David A. Patterson Morgan Kaufmann, San Francisco (California) (1998) - (2nd ed.) 1-55860-491-X [3] Introduccin a la informtica Alberto Prieto Espinosa, Antonio Lloris Ruiz, Juan Carlos Torres Cantero McGraw Hill, Madrid (2001) - (3 ed.) 8448132173

Pgina 3

[4] Organizacin de computadoras: un enfoque estructurado Andrew S. Tanenbaum Prentice Hall, Mxico [etc.] (2000) - (4 ed.) 970-17-0399-5 [5] Organizacin y arquitectura de computadores: diseo para optimizar prestaciones William Stallings Prentice Hall, Madrid (2000) - (5 ed.) 84-205-2993-1 [6] Problemas y tests de introduccin a la informtica: con ms de 400 problemas y 700 preguntas de tests por Beatriz Prieto Campos, Alberto Prieto Espinosa Universidad de Granada, Departamento de Arquitectura y Tecnologa de Computadores, Granada (2003) 8460791092 [7] Arquitectura de computadores: un enfoque cuantitativo John L. Hennessy, David A. Patterson , McGraw-Hill, Madrid (1993) 8476159129

Equipo Docente CARMELO CUENCA HERNANDEZ


Categora: TITULAR DE ESCUELA UNIVERSITARIA Departamento: INFORMTICA Y SISTEMAS Telfono: 928458713 Correo Electrnico: ccuenca@dis.ulpgc.es WEB Personal: (COORDINADOR)

FRANCISCA QUINTANA DOMINGUEZ

(RESPONSABLE DE PRACTICAS)

Categora: TITULAR DE ESCUELA UNIVERSITARIA Departamento: INFORMTICA Y SISTEMAS Telfono: 928458736 Correo Electrnico: fquintana@dis.ulpgc.es WEB Personal:

Pgina 4

Proyecto docente Fundamentos de Computadores


http://serdis.dis.ulpgc.es/~itis-fc Titulacin de Ingeniera Tcnica en Informtica de Sistemas Escuela Universitaria de Informtica

Proyecto Docente - Profesorado


Carmelo Cuenca Hernndez (coordinador)
ccuenca@dis.ulpgc.es Despacho 2-13 en el mdulo 3

Horario de T U T O R A S Lunes de 11.00-13.00 y jueves 9.00-13.00


Francisca Quintana Domnguez (responsable de prcticas)
fquintana@dis.ulpgc.es Despacho 2-12 en el mdulo 3

Horario de T U T O R A S Lunes de 9.30-12.30 y mircoles 9.30-12.30

Curso 2005/2006

Fundamentos de Computadores

Proyecto Docente Horarios


L
8:30-9:30 9:30-10:30 10:30-11:30 11:30-12:30 12:30-13:30 13:30-14:30

M TA TB A1-A2 L1.1 A3-A4 L1.1 B3-B4 L1.1

V TB

TA

A-5 L3.3

B1-B2 L1.1

Curso 2005/2006

Fundamentos de Computadores

Proyecto docente - Objetivos de la asignatura


Fundamentos de Computadores presenta los componentes de un computador y la organizacin de estos componentes para ejecutar programas
Obtener una visin general de la jerarqua de niveles de un computador Conocer y comprender las caractersticas ms importante de la arquitectura y estructura de un computador Conocer y comprender los elementos bsicos de la arquitectura del repertorio de instrucciones Dominar la programacin en lenguaje ensamblador de algn procesador como, por ejemplo, el MIPS R2000 Conocer y comprender los elementos estructurales de un procesador para la ejecucin de las instrucciones Conocer los principios bsicos y mtodos de diseo de unidades de control cableadas y microprogramadas Evaluar alternativas de diseo, as como el rendimiento de un computador

Curso 2005/2006

Fundamentos de Computadores

Proyecto Docente - Temario


1. Arquitectura de un computador y jerarqua de niveles (3 horas) 2. Arquitectura del nivel lenguaje mquina (10 horas)
1. 2. 3. 4. Caractersticas generales del lenguaje mquina Tipos de operandos e instrucciones Modos de direccionamiento y formato de las instrucciones Subrutinas

3. Diseo del procesador (15 horas)


1. Diseo y control cableado de un camino de datos monociclo 2. Diseo y control cableado de un camino de datos multiciclo 3. Diseo y control microprogramado de un camino de datos multiciclo

4. Rendimiento (2 horas)
Curso 2005/2006 Fundamentos de Computadores 5

Proyecto Docente - Prcticas


1. El simulador PCspim (2 horas) 2. Los datos en memoria (2 horas) 3. Carga y almacenamiento de los datos (2 horas) 4. Las operaciones aritmticas y lgicas (2 horas) 5. Interfaz con el programa (2 horas) 6. Estructuras de control condicionales y bucles (2 horas) 7. Gestin de subrutinas (3 horas)
Curso 2005/2006 Fundamentos de Computadores 6

Proyecto Docente - Evaluacin


Nota final = 0.7 Nota de teora + 0.3 Nota de prctica
(siempre que nota de teora >=5 y Nota de prctica>=5)

La nota de teora y de prctica se obtendr en los exmenes de convocatoria de la asignatura, uno para teora y otro para prctica
Curso 2005/2006 Fundamentos de Computadores 7

Arquitectura de un computador y jerarqua de niveles


La arquitectura de un computador es la estructura de un computador que un programador en lenguaje mquina debe conocer para escribir un programa correcto (independiente del tiempo) Amdahl 1964

Objetivos
Establecer caractersticas para nominar una mquina como computador Conocer los hitos de la arquitectura de los computadores Distinguir los diferentes niveles de estudio de los computadores Entender los mecanismos de traduccin e interpretacin de niveles Diferenciar entre la arquitectura y la estructura de un computador Describir los componentes bsicos de un computador y las funcionalidades de cada uno de ellos por separados Explicar el funcionamiento global de un computador a partir de las relaciones de sus componentes bsicos

Curso 2005/2006

Fundamentos de Computadores

Contenidos
Concepto de computador Historia de los computadores
La 1 generacin (los primeros computadores) La 2 generacin (transistores) La 3 generacin (SCI), la 4 (LSI) y la 5 (VLSI, UVLSI)

Organizacin estructurada de un computador


Lenguajes, niveles y mquinas virtuales Computador multinivel

Funcionamiento de un computador
Componentes de un computador Ciclo de instruccin Interconexin con buses

El futuro de los computadores


Ley de Moore

Curso 2005/2006

Fundamentos de Computadores

10

Concepto de computador
Diccionario de la Lengua Espaola
Mquina electrnica dotada de una memoria de gran capacidad y de mtodos de tratamiento de la informacin, capaz de resolver problemas aritmticos y lgicos gracias a la utilizacin automtica de programas registrados en ella

Microsoft Encarta
Dispositivo electrnico capaz de recibir un conjunto de instrucciones y ejecutarlas realizando clculos sobre los datos numricos, o bien compilando y correlacionando otros tipos de informacin

Enciclopedia Britnica
Device for processing, storing, and displaying information

Wikipedia
Sistema digital con tecnologa microelectrnica capaz de procesar informacin a partir de un grupo de instrucciones denominado programa

Curso 2005/2006

Fundamentos de Computadores

11

Historia de los computadores


"Quien olvida las lecciones de la historia queda condenado a repetirla." Will Durant, Lecciones de la Historia

ENIAC Qu, quines, ?


Electronic Numerical Integrator And Computer Eckert y Mauchly Universidad de Pennsylvania Tablas de trayectorias balsticas Ao de inicio 1943 Ao de finalizacin 1946
Tarde para la Segunda Guerra Mundial (1939-1945)

En funcionamiento hasta 1955

Curso 2005/2006

Fundamentos de Computadores

13

ENIAC - detalles
Decimal (no binario) 20 registros acumuladores de 10 dgitos Programado manualmente mediante 6000 interruptores 18000 tubos de vaco y 1500 relevadores 30 toneladas 15000 pies cuadrados 140 Kw de consumo de potencia 5000 sumas por segundo

Curso 2005/2006

Fundamentos de Computadores

14

Von Neumann/Turing
Concepto de programa almacenado Componentes de un computador
La memoria principal (MM) almacena programas y datos La unidad aritmtica lgica (ALU) opera con datos binarios La unidad de control (UC) interpreta y provoca la ejecucin de las instrucciones en memoria

Mquinas
EDSAC la primera computadora de programa almacenado
Maurice Wilkes, Universidad de Cambridge, (?-1949)

La mquina IAS
John von Neumann y Herman Goldstine, Instituto para Estudios Avanzados de Princeton, (19461952) Curso 2005/2006 Fundamentos de Computadores 15

Estructura de una mquina von Neumann

Cinco partes bsicas:


la memoria (M), almacena datos e instrucciones la unidad aritmtica lgica (ALU), capaz de hacer operaciones con datos binarios la unidad de control (UC), interpreta y provoca la ejecucin de las instrucciones en memoria el equipo de entrada y salida (I/O)
Curso 2005/2006 Fundamentos de Computadores 16

IAS - detalles
Aritmtica binaria 1000 palabras de 40 bits 2 registros de instrucciones de 20 bits Registros dentro de la CPU
R. temporal de memoria (MBR) R. de direcciones de memoria (MAR) R. de instrucciones (IR) R. temporal de instrucciones (IBR) R. contador de programa (PC) R. acumulador (AC) R. multiplicador cociente (MQ)
Curso 2005/2006 Fundamentos de Computadores 17

Computadores comerciales
1947 Eckert-Mauchly Computer Comportation
UNIVAC I (Universal Automatic Computer)
Aplicaciones cientficas y comerciales Oficina del censo en 1950 Operaciones algebraicas con matrices, problemas de matrices, primas para las compaas de seguro, problemas logsticos ...

Absorcin por Sperry-Rand Comporation UNIVAC II a finales de los 50


Ms rpido Ms memoria

Serie UNIVAC 1100


Curso 2005/2006 Fundamentos de Computadores 18

IBM
Fabricante de equipos de procesamiento con tarjetas perforadas 1953 El 701 para aplicaciones cientficas 1955 El 702 para aplicaciones de gestin Lder mundial con las series 700/7000

Curso 2005/2006

Fundamentos de Computadores

19

La segunda generacin: los transistores (1955-1965)


Invencin de Shockley y otros de los laboratorios Bell en 1947 Sustitucin de los tubos de vaco por transistores Ventajas del transistor
Ms pequeo Ms barato Menor disipacin de calor Fabricado con silicio (arena)
Fundamentos de Computadores 20

Curso 2005/2006

Computadores con transistores


NCR y RCA fueron los primeros en comercializar pequeas mquinas con transistores IBM 7000 1957 - Fundacin de Digital Equipment Corporation (DEC) pionera de los minicomputadores
PDP 1
Curso 2005/2006 Fundamentos de Computadores 21

La 3, 4 y 5 generacin: los circuitos integrados (1965-????)


Un computador consta de puertas, celdas de memoria e interconexiones Tales componentes podan ser fabricados a partir de un semiconductor como el silicio en un circuito integrado (Robert Noyce 1958) Generaciones 3, 4 y 5 de computadores
3 generacin
Pequea y mediana integracin (SCI) 1965-1971 Hasta 100 componentes en un chip 1965 - IBM lder mundial inicia la familia 360 1965 - DEC lanza el minicomputador de bajo coste PDP-8

4 generacin
Gran integracin (LSI ) 1972-1977 Entre 3000 y 100000 componentes en un chip

5 generacin
Alta Integracin (VLSCI y UVLSI) 1978-???? Ms de 100000000 componentes en un chip
Curso 2005/2006 Fundamentos de Computadores 22

Organizacin estructurada de un computador


Los computadores estn diseados como una serie de niveles, cada uno construido sobre sus predecesores. Cada nivel representa una abstraccin distinta, y contiene diferentes objetos y operaciones

Lenguajes, niveles y mquinas virtuales


La mquina virtual Mi ejecuta slo programas escritos en el lenguaje de programacin Li Ejecucin de programas en Mi:
Traduccin
Un programa traductor sustituye cada instruccin escrita en Li por una secuencia equivalente de instrucciones en Li-1. El programa resultante consiste exclusivamente en instrucciones de Li-1. Luego, Mi-1 ejecuta el programa en Li-1

Interpretacin
Un programa intrprete escrito en Li-1 examina las instrucciones una por una y ejecuta cada vez la sucesin de instrucciones en Li-1 que equivale a cada una

Curso 2005/2006

Fundamentos de Computadores

24

Computador multinivel
N. aplicaciones
Microsoft Office, eMule BASIC, C, C++, Java, Lisp, Prolog

N. lenguaje alto nivel N. lenguaje ensamblador N. sistema operativo


Archivo, particin, proceso,

N. arquitectura del repertorio de instrucciones (ISA)


Salto, pila, Banco de registros, ALU, camino de datos Puertas lgicas: AND, OR , biestables, registros Transistores, diodos, estado slido

N. microarquitectura N. lgica digital

N. dispositivos

Curso 2005/2006

Fundamentos de Computadores

25

Funcionamiento de un computador

Componentes de un computador
Unidad central de proceso (CPU)
Unidad de control (UC) Unidad aritmticalgica (ALU)

Memoria (M) Entrada y salida (E/S)

Curso 2005/2006

Fundamentos de Computadores

27

Ciclo de instruccin (1/2)


Ciclo de bsqueda de instruccin
El registro contador de programa (PC) contiene la direccin de la siguiente instruccin a ejecutar El procesador busca la instruccin a partir de la localizacin de memoria sealada por el PC El procesador incrementa el contador de programa (hay excepciones) La instruccin es cargada en el registro de instrucciones (IR)

Curso 2005/2006

Fundamentos de Computadores

28

Ciclo de instruccin (2/2)


Ciclo de ejecucin (5 tipos)
Procesador-memoria: transferencia de datos desde la CPU a la memoria o al revs Procesador-E/S: transferencia de datos a o desde el exterior Procesamiento de datos: la CPU ha de realizar alguna operacin aritmtica o lgica con los datos Control: una instruccin puede especificar que la secuencia de ejecucin sea alterada Combinaciones de las anteriores

Curso 2005/2006

Fundamentos de Computadores

29

Ejemplo de ejecucin de programa

Curso 2005/2006

Fundamentos de Computadores

30

Diagrama de estados del ciclo de instruccin

Curso 2005/2006

Fundamentos de Computadores

31

Esquema de interconexin mediante buses


Conjunto de conductores elctricos para la conexin de dos o ms dispositivos Tipos de buses
De memoria, de datos y de control Anchura de los buses: 8, 16, 32, 64 bits

Cmo son los buses?


Pistas paralelas de los circuitos impresos Cintas de plstico con hilos conductores Conectores (ISA, PCI, ) Cables sueltos

Curso 2005/2006

Fundamentos de Computadores

32

Bus ISA (Industry Standard Architecture)

Curso 2005/2006

Fundamentos de Computadores

33

Bus de alta prestaciones

Curso 2005/2006

Fundamentos de Computadores

34

El futuro de los computadores


La relacin coste/rendimiento ha mejorado los ltimos 45 aos aproximadamente 240 000 000 (un 54% anual)

Ley de Moore

La densidad de integracin dobla cada 18 meses Vlida hasta 2020?)

Curso 2005/2006

Fundamentos de Computadores

36

Arquitectura del repertorio de instrucciones (ISA)


La arquitectura de un computador es la estructura del computador que un programador en lenguaje mquina debe conocer para escribir un programa correcto (independiente del tiempo) Amdahl 1964

Objetivos
Caracterizar una instruccin de acuerdo con el tipo de operacin, de datos, de modos de direccionamiento y de formato de codificacin Codificar una instruccin de lenguaje mquina a una instruccin de lenguaje ensamblador y viceversa Distinguir una pseudoinstruccin de una instruccin Explicar con comentarios la finalidad de un bloque bsico de cdigo ensamblador Determinar los valores intermedios y finales de los registros y los contenidos de la memoria tras la ejecucin de un bloque bsico de cdigo ensamblador Escribir la secuencia de instrucciones de lenguaje ensamblador correspondiente a una pseudoinstruccin Traducir las sentencias bsicas de asignacin, operacin, toma de decisiones, bucles y llamadas a procedimientos a lenguaje ensamblador Traducir un algoritmo escrito en un lenguaje de alto nivel a lenguaje ensamblador y viceversa Escribir procedimientos en lenguaje ensamblador consecuentes con los convenios de pasos de parmetros a procedimientos Corregir errores en un programa escrito en lenguaje ensamblador para que funcione correctamente Calcular el tiempo de ejecucin y los ciclos por instruccin (CPI) de un bloque bsico de cdigo ensamblador Disear un repertorio de instrucciones con restricciones de diseo

Curso 2005/2006

Fundamentos de Computadores

ndice
Estructura de una mquina Von Neumman Mquinas RISC MIPS R3000 Nivel ISA
Instrucciones aritmtico-lgicas Instrucciones de acceso a memoria
Organizacin de la memoria Carga y almacenamiento

Instrucciones de salto condicional Lenguaje mquina


Instrucciones aritmtico-lgicas, de acceso a memoria, de carga y almacenamiento, de salto condicional e incondicional

Datos inmediatos Gestin de procedimientos


Llamadas y retornos de procedimientos Convenio de uso de registros Gestin de la pila

Otras instrucciones

Mquinas CSIC IA 32
Caractersticas del ISA Registros Instrucciones bsicas Formato de las instrucciones

Curso 2005/2006

Fundamentos de Computadores

Estructura de una mquina von Neumann


Cinco partes bsicas
la memoria (M) la unidad aritmtica lgica (ALU la unidad de control (UC) el equipo de entrada y salida (I/O)

Ciclo de instruccin
Ciclo de bsqueda Ciclo de ejecucin
Curso 2005/2006 Fundamentos de Computadores 4

RISC - Reduced Instruction Set Computer


RISC es una filosofa de diseo con las siguientes caractersticas:
Tamao fijo de las instrucciones Nmero reducido de codificaciones de las instrucciones, modos de direccionamientos y operaciones Instrucciones de load/store para los accesos a memoria, registros

Usados por NEC, Nintendo, Silicon Graphics, Cisco, Sony...


1400 1300 1200 1100 1000 900 800 700 600 500 400 300 200 100 0 1998 1999 2000 2001 2002 Other SPARC Hitachi SH PowerPC Motorola 68K MIPS IA-32 ARM

Curso 2005/2006

Fundamentos de Computadores

MIPS R3000 Nivel ISA


Instrucciones de 32 bits 3 formatos 4 direccionamientos 5 tipos de instrucciones
Aritmtico-lgicas Acceso a memoria Ruptura de secuencia Gestin de memoria Especiales
Registros $0 - $31

PC HI LO

3 Instruction Formats:all 32 bits wide OP OP OP rs rs rt rt rd sa funct R format I format J format

32 registros de 32 bits de propsito general (GPR)


Curso 2005/2006

immediate

jump target

Fundamentos de Computadores

MIPS Instrucciones aritmticolgicas


Principio de diseo 1
La simplicidad favorece la uniformidad

Todos los computadores deben ser capaces de realizar clculos aritmticos y lgicos
add a, b, c # a sub a, a, d # a or a, a, e #a
Curso 2005/2006

b+c a + d = (b + c) - d a + e = (b + c + d) OR e
7

Fundamentos de Computadores

Ejemplos bsicos de compilacin de sentencias


Dos sentencias de asignacin de C en MIPS
Cdigo fuente
a = b + c; d = a e;

Compilacin
add a, b, c sub d, a, e

Compilacin de una sentencia compleja de C en MIPS


Cdigo fuente
f = (g + h) (i + j);

Compilacin
add t0, g, h add t1, i, j sub f, t0, t1

Curso 2005/2006

Fundamentos de Computadores

MIPS - Registros
Registers

Control
$0 - $31

Input Memory

Datapath
PC HI LO Processor

Output
I/O

Principio de diseo 2
Cuanto ms pequeo ms rpido

Los operandos de las instrucciones computacionales son registros Los compiladores asocian variables con registros
$s0, $s1,... para registros asociados a variables de C $t0, $t1,... para registros temporales Otros ms

Curso 2005/2006

Fundamentos de Computadores

Ejemplo de compilacin de una asignacin usando registros


Cdigo fuente de C
f = (g + h) (i+j);

f, g, h, i y j en $s0, $s1, $s2, $s3 y $s4 Compilacin en MIPS


add $t0, $s1, $s2 add $t1, $s3, $s4 sub $s0, $t0, $t1 # el registro $t0 contiene # g+h # el registro $t1 contiene # i +j # f contiene $t0 - $t1, que # es (g+h) (i+h)
10

Curso 2005/2006

Fundamentos de Computadores

Accesos a memoria - Organizacin de la memoria


La memoria es un vector de bytes La direccin es un ndice dentro del vector de bytes 2 posibles ordenaciones para las palabras:
Big Endian (IA-32) Little Endian (MIPS)
Little Endian
MSB LSB

Memoria
. 0x11 0x22 0x33 0x44 .
55

Big Endian
MSB LSB

0x44332211

0x11223344

Objeto Byte Media palabra Palabra (4 bytes) Doble palabra

Bien alineado 0,1,2,3,4,5,6,.. (nunca) 0,2,4,6,8, ... 0,4,8,... 0,8, .. 1,3,5,7, ...

Mal alineado

Alineacin de datos
address mdulo size = 0

1,2,3,5,6,7,9,10,11,... 1,2,3,4,5,6,7,9,10,11,12,13,14,15,....

Curso 2005/2006

Fundamentos de Computadores

11

Accesos a memoria Organizacin de la memoria del MIPS


El tamao de las palabras es de 32 bits Big Endian 232 posiciones de memoria de bytes, 0, 1, 232-1 Accesos alineados
231 posiciones de memoria de medias palabras, 0, 2 232-2 230 posiciones de memoria de palabras, 0, 4, 232-4 228 posiciones de memoria de dobles palabras, 0, 8 232-8
Curso 2005/2006 Fundamentos de Computadores 12

MIPS Cargas y almacenamientos


Instrucciones para accesos a memoria de palabras
lw $t0, 4($s3) # $t0 M[$s3+4] sw $t0, 4($s3) # M[$s3+4] $t0

La suma del registro base ($s3) y el desplazamiento (4) forma la direccin de memoria del dato
El desplazamiento tiene signo (complemento a dos) Los accesos estn limitados a una regin centrada en el registro base de 213 palabras
Curso 2005/2006 Fundamentos de Computadores 13

Ejemplo de compilacin con un dato en memoria


Cdigo fuente de C
g = h + A[8];

La base del vector asignada a $s3, las variables g y h asignadas a $s1 y $s2 Compilacin en MIPS
lw $t0, 32($s3) # $t0 contiene A[8] add $s1, $s2, $t0# $s1 contiene g = h + A[8]

Curso 2005/2006

Fundamentos de Computadores

14

Ejemplo de compilacin de una asignacin con un ndice variable


Cdigo fuente de C
g = h + A[i];

la base del vector en $s3, g y h e i en $s1, $s2 y $s4 Compilacin en MIPS


add $t1, $s4, $s4 add $t1, $t1, $t1 add $t1, $t1, $s3 lw $t0, 0($t1) add $s1, $s2, $t0
Curso 2005/2006

# $t1 contiene 2 * i # $t1 contiene 4 * i # $t1 contiene $s3 + 4 * i # $t0 contiene A[i] # $s1 contiene g = h + A[i]
15

Fundamentos de Computadores

MIPS Instrucciones de salto condicional


Instrucciones de salto condicional (slo dos)
bne $s0, $s1, L1 beq $s0, $s1, L1 # branch to L1 if no equal # branch to L1 if equal

Pseudoinstrucciones de salto condicional


slt (set si menor que), beq, bne y $zero permiten las condiciones restantes
blt $s1, $s2, etiqueta slt $at, $s1, $s2 bne $at, $zero, etiqueta # salta si menor que

El ensamblador expande las pseudoinstrucciones


$at, registro utilizado por el programa ensamblador
Curso 2005/2006 Fundamentos de Computadores 16

Ejemplo de compilacin de una sentencia de salto condicional


Cdigo fuente de C
If (i==j) h = i + j; h, i y j en $s0, $s1 y $s2

Compilacin en MIPS
bne $s1, $s2, etiqueta add $s0, $s1, $s2 etiqueta:

Curso 2005/2006

Fundamentos de Computadores

17

Lenguaje mquina Instrucciones aritmtico-lgicas


El tamao de las instrucciones es de 32 bits Las instrucciones aritmtico-lgicas son codificadas con el formato tipo-R
add $rd, $rs, $rt

Significado de los campos


op rs, rt, rd shamt funct 6-bits cdigo de operacin 5-bits registro source, target, destination 5-bits nmero de bits a desplazar (cuando aplicable) 6-bits cdigo de funcin (extensin del cdigo de operacin)

op 6 bits
000000

rs 5 bits
01010

rt 5 bits
11111

rd 5 bits
00011

shamt funct Formato de instrucciones aritmticas 5 bits 6 bits Todas las instrucciones MIPS de 32 bits
00000 100000 0x015f1820 add $3,$10,$31

Curso 2005/2006

Fundamentos de Computadores

18

Lenguaje mquina Instrucciones de acceso a memoria


Principio de diseo 3
Un buen diseo necesita buenas soluciones de compromiso

Las instrucciones de load y store especifican dos registros y un desplazamiento


Formato tipo I (16 bits para el dato inmediato) lw $rt, inmediato($rs), sw $rt, inmediato($rs lh, lhu, lb, lbu sh, sb (load half, half unsigned, byte, byte unsigned; store half, byte)

op 6 bits
100011

rs 5 bits
00011

rt 5 bits
00101

Direccin/inmediato 16 bits
0000000000100000

Formato de instruciones de carga Todas las instrucciones MIPS de 32 bits 0x8c650020 lw $5,32($3)

Curso 2005/2006

Fundamentos de Computadores

19

Traduccin de lenguaje ensamblador a lenguaje mquina


Cdigo fuente de C
A[300] = h + A[300]; La base del vector asignada a $t1 y h a $s2

Compilacin en MIPS
lw $t0, 1200($t1) add $t0, $s2, $t0 sw $t0, 1200($t1)

Lenguaje mquina
1000 1101 0010 1000 0000 0100 1011 0000 0000 0010 0100 1000 0100 0000 0010 0000 1010 1101 0010 1000 0000 0100 1011 0000
Curso 2005/2006 Fundamentos de Computadores 20

Lenguaje mquina Instrucciones de salto condicional


Formato tipo I (16 bits para el dato inmediato)
El inmediato codifica el n de palabras desde la siguiente instruccin a la instruccin de salto (PC+4) hasta la instruccin destino Los saltos estn limitados a una regin centrada en el PC + 4 de 215 palabras
from the low order 16 bits of the branch instruction
16

offset sign-extend
00 32 32 Add 32 4 32 Add 32

branch dst address


32

PC
32

Curso 2005/2006

Fundamentos de Computadores

21

MIPS Instrucciones de ruptura de secuencia incondicional


j etiqueta Formato tipo J
6 bits cdigo de operacin + 26 bits para el dato inmediato El inmediato de 26 bits codifica la direccin absoluta de la palabra con la instruccin destino de salto dentro de un segmento de 256MB
op 26-bit address

from the low order 26 bits of the jump instruction


26

00 32

PC

32

Curso 2005/2006

Fundamentos de Computadores

22

Ejemplo de compilacin de una sentencia de salto if-then-else


Cdigo fuente de C
If (i==j) f = g + h; else f = g h; i, j, f, g y h en $s0 $s4

Compilacin en MIPS
bne $s0, $s1, L1 add $s2, $s3, $s4 # f = g + h j L2 # salto incondicional sub $s2, $s3, $s4 # f = g - h
Fundamentos de Computadores 23

L1: L2:
Curso 2005/2006

MIPS Datos inmediatos (1/2)


Instrucciones aritmtico-lgicas con un operando constante
slti $t0, $s2, 15 #$t0 = 1 si $s2<15

La constante almacenada en la propia instruccin


Formato tipo I El dato inmediato est limitado a 16 bits (-215 a +215-1)

op

rs

rt

16 bit immediate

I format

Curso 2005/2006

Fundamentos de Computadores

24

MIPS Datos Inmediatos (2/2)


Gestin de datos inmediatos de ms de 16 bits
Almacenaje en memoria
.data muchosbits: .word 4294967295 # 0x7FFFFFFF .text lw $t0, muchosbits($zero)

Descomposicin en partes
lui ori
Curso 2005/2006

$at, 0x7FFFF # load upper inmediate $t0, $at, 0xFFFF


Fundamentos de Computadores 25

MIPS Gestin de procedimientos


Llamada a procedimiento
jal address
Escribe PC+4 en el registro $ra (return adress, $31) para posibilitar el retorno del procedimiento Instruccin tipo J

jalr $rs
Instruccin tipo R

Retorno de procedimiento
jr $ra
Instruccin tipo R
Curso 2005/2006 Fundamentos de Computadores 26

MIPS Convenio de uso de registros


Name Register number 0 $zero 2-3 $v0-$v1 4-7 $a0-$a3 8-15 $t0-$t7 16-23 $s0-$s7 24-25 $t8-$t9 28 $gp 29 $sp 30 $fp 31 $ra Usage the constant value 0 values for results and expression evaluation arguments temporaries saved more temporaries global pointer stack pointer frame pointer return address

Curso 2005/2006

Fundamentos de Computadores

27

MIPS Pila (stack)


Operaciones
Guardar (Push)
addi $sp, $sp, -4 sw $rs, 0(Sp)
sp-4 sp

Memoria

Direccin Baja

Valor guardado

Alta

Recuperar (Pop)
lw $rs, 0(Sp) addi $sp, $sp, 4
sp sp+4

Memoria

Direccin Baja

Valor ledo

Alta

Curso 2005/2006

Fundamentos de Computadores

28

MIPS - Instrucciones aritmticas


Instruccin sumar sumar sin signo sumar inmediato sumar inmediato sin signo restar restar sin signo dividir dividir sin signo multiplicar multiplicar sin signo dividir dividir sin signo multiplicar multiplicar multiplicar sin signo Ejemplo add $1,$2,$3 addu $1,$2,$3 addi $1,$2,10 addiu $1,$2,10 sub $1,$2,$3 subu $1,$2,$3 Significado $1= $2+$3 $1=$2+$3 $1=$2+10 $1=$2+10 $1=$2-$3 $1=$2-$3 Lo=$1$2 div $1,$2 Hi=$1mod$2 Lo=$1$2 divu $1,$2 Hi=$1mod$2 mult $1,$2 Hi,Lo=$1*$2 multu $1,$2 Hi,Lo=$1*$2 Pseudoinstrucciones $1=$2$3 div $1,$2,$3 (cociente) $1=$2$3 divu $1,$2,$3 (cociente) mul $1,$2,$3 $1=$2*$3 mulo $1,$2,$3 $1=$2*$3 mulou $1,$2,$3 $1=$2*$3 Comentarios
Posible excepcin por desbordamiento

Posible excepcin por desbordamiento

Posible excepcin por desbordamiento

Posible excepcin por desbordamiento

Posible excepcin por desbordamiento

Posible excepcin por desbordamiento Posible excepcin por desbordamiento

Curso 2005/2006

Fundamentos de Computadores

29

MIPS Intrucciones lgicas


Instruccin and or xor nor andi ori xori shift left logical shift left logical variable shift right logical shift right logical variable shift right arithmetic shift right arithmetic variable Ejemplo and $1,$2,$3 andi $1,$2,10 xor $1,$2,$3 nor $1,$2,$3 andi $1,$2,10 ori $1,$2,10 xori $1,$2,10 sll $1,$2,10 sllv $1,$2,$3 srl $1,$2, 10 srlv $1,$2,$3 sra $1,$2,10 srav $1,$2,$3 Significado $1= $2&$3 $1=$2&10 $1=$2$3 $1=~($2|$3) $1=$2&10 $1= $2|10 $1=$2|10 $1= $2<<10 $1= $2<<$3 $1=$2>>10 $1=$2>>$3 $1=$2>>10 $1=$2>>$3 Comentarios

Curso 2005/2006

Fundamentos de Computadores

30

MIPS - Instrucciones de transferencia de datos (1/2)


Instruccin carga byte carga byte sin ext. signo carga media palabra carga media palabra sin extensin de signo carga palabra carga inmediata de la parte ms significativa load upper inmediate Carga registro del coprocesador z almacena byte almacena media palabra almacena palabra almacena registro en memoria registro del coprocesador z Carga inmediata Carga direccin Ejemplo lb $1,10($2) lbu $1,10($2) lh $1,10($2) lhu $1,10($2) lw $1,10($2) lui $1,50 lwc1 $f0,10($2) sb $1,10($2) sh $1,10($2) sw $1,10($2) swc1 $f0,10($2) Significado $1=M[10+$2] $1=M[10+$2] $1=M[10+$2] $1=M[10+$2] $1=M[10+$2] $1=50*216 $f0= M[10+$2] M[10+$2]=$1 M[10+$2]=$1 M[10+$2]=$1 M[10+$2]=$f0
Carga un dato de 16 bits en la parte ms significativa del registro.

Comentarios
Extiende el bit de signo No extiende el bit de signo Extiende el bit de signo No extiende el bit de signo

li $1,1000 la $3,label

Pseudoinstrucciones Carga de un dato de 32 bits $1=1000 $3=direccin de Transfiere la direccin de memoria no el contenido. label

Curso 2005/2006

Fundamentos de Computadores

31

MIPS Instrucciones de movimiento de datos (2/2)

Instruccin mover desde Hi mover desde Lo mover a Hi mover a Lo mover desde coprocesador z mover al coprocesador z transfiere o mueve transfiere doble desde coproc. 1

Ejemplo Significado Comentarios mfhi $1 $1= Hi mflo $1 $1= Lo mthi $1 Hi=$1 mtlo $1 Lo=$1 $f0-$f30: Registros del coprocesador 1 mfcz $1,$f0 $1=$f0 mtcz $1,$f0 $f0=$1 Pseudoinstrucciones move $1,$2 $1=$2 $4=$F0 mfc1.d $4,$f0 $5=$F1

Curso 2005/2006

Fundamentos de Computadores

32

Instrucciones de comparacin
Instruccin Ejemplo Inicializar menor que slt $1,$2,$3 Significado if ($2<$3) then $1=1 else $1=0 endif Comentarios

inicializar menor que sin signo sltu $1,$2,$3 Inicializar menor que inmediato slti $1,$2,5 Inicializar menor que inmediato sin signo sltiu $1,$3,$5 Pseudoinstrucciones si ($2==$3) then $1=1 seq $1,$2,$3 else $1=0 endif sge $1,$2,$3 sgt $1,$2,$3 sle $1,$2,$3 sne $1,$2,$3

Inicializa igual

inicializa mayor o igual inicializa mayor que inicializa menor o igual inicializa no igual

Curso 2005/2006

Fundamentos de Computadores

33

MIPS Instrucciones de salto y bifurcacin


Instruccin Ejemplo Significado si($1==$2 )ir a PC+4 +100 salta sobre igual beq $1,$2,100 si($1!=$2) ir a PC+4 +100 salta sobre no igual bne $1,$2,100 si($1>=0) ir a PC+4 +100 salta sobre mayor o igual que cero bgez $1,100 salta sobre mayor o igual que cero y bgezal $1,1000 si($1>=0) $31=PC+4; ir a 1000 enlaza ..... ir a 2000 bifurcar j 2000 ir a $1 bifurcar registro jr $1 $31=PC+4; ir a 10000 Bifurcar y enlazar jal 10000 $31=PC+4; ir a $1 bifurcar y enlazar registro jalr $1 Pseudoinstrucciones si($1>=$2) ir a PC+4 +100 salta sobre mayor o igual bge $1,$2,100 si($1>$2) ir a PC+4 +100 salta sobre mayor que bgt $1,$2,100 si($1<=$2) ir a PC+4 +100 salta sobre menor o igual ble $1,$2,100 si($1<$2) ir a PC+4 +100 salta sobre menor que blt $1,$2,100 ..... Comentarios

Curso 2005/2006

Fundamentos de Computadores

34

MIPS - Modos de direccionamientos


1. Immediate addressing op rs rt Immediate 2. Register addressing op rs rt rd ... funct Registers Register

3. Base addressing op rs rt Address Memory

Register

Byte

Halfword

Word

4. PC-relative addressing op rs rt Address Memory

PC

Word

5. Pseudodirect addressing op Address Memory

PC

Word

Curso 2005/2006

Fundamentos de Computadores

35

CISC - Complex Instruction Set Computer


CISC es una filosofa de diseo con las siguientes caractersticas:
Instrucciones con mayor contenido semntico para conseguir una reduccin del nmero de instrucciones ejecutadas Mayor tiempo de ciclo (Tc) o mayor nmero de ciclo por instruccin (CPI) que una arquitectura RISC

Curso 2005/2006

Fundamentos de Computadores

36

IA - 32
1978 P 8086/88 (16 bits, 40 pines) 1980 coprocesador Intel 8087 1982 P 80286
Direcciones de 24 bits Niveles de privilegio Direcciones de 32 bits Coprocesador integrado Cach L1 de 8KB Bus interno 128 256 bits Superscalares MMX (57 instrucciones MMX)

1986 P 80386 1989 P 80486 1993 Pentium 1995-1999 Familia P6 1999 2005 Familia Pentium IV (478 pines)
Hyper Threading 70 instrucciones Streaming SIMD Extensions Fundamentos de Computadores 37

Curso 2005/2006

IA - 32
Caractersticas del ISA
Longitud de instrucciones 1..17 bytes Mquina de 2 operandos
SUB AX, AX

Mquina registro-memoria
ADD AX, [BX]

Modos de direccionamientos complejos

Curso 2005/2006

Fundamentos de Computadores

38

IA32 Registros
8 registros de 32 bits de casi propsito general
GPR0-GPR7: EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI
Name 31 EAX ECX EDX EBX ESP EBP ESI EDI CS SS DS ES FS GS EIP EFLAGS 0 GPR 0 GPR 1 GPR 2 GPR 3 GPR 4 GPR 5 GPR 6 GPR 7 Code segment pointer Stack segment pointer (top of stack) Data segment pointer 0 Data segment pointer 1 Data segment pointer 2 Data segment pointer 3 Instruction pointer (PC) Condition codes Use

6 registros de segmento de 16 bits


CS, SS, DS, ES, FS, GS

Un registro puntero de instruccin de 32 bits


EIP

Un registro de estado de 32 bits


EFLAGS
Curso 2005/2006 Fundamentos de Computadores

39

IA-32 Restricciones de uso de los registros de propsito general

Curso 2005/2006

Fundamentos de Computadores

40

IA-32 Instrucciones bsicas


Movimiento de datos
MOV, PUSH, POP

Aritmtico-lgicas
El destino registro o memoria Aritmtica entera y decimal CMP activa los bits del registro CFLAGS

Control de flujo
Saltos condicionales, incondicionales, llamadas y retornos de procedimientos

Manipulacin de cadena
Movimiento y comparacin de cadenas
Curso 2005/2006 Fundamentos de Computadores 41

IA-32 Formato de las instrucciones


a. JE EIP + displacement 4 4 8 JE Condi- Displacement tion

b. CALL 8 CALL 32 Offset

c. MOV 6 MOV

EBX, [EDI + 45] 1 1 8 d w r/m Postbyte

8 Displacement

d. PUSH ESI 5 PUSH 3 Reg

e. ADD EAX, #6765 4 3 1 ADD Reg w

32 Immediate

f. TEST EDX, #42 7 1 TEST w

8 Postbyte

32 Immediate

Curso 2005/2006

Fundamentos de Computadores

42

Resumen
El nivel ISA es el interfaz hardware/software de un computador Principios de diseo
La simplicidad favorece la uniformidad
Tamao de instrucciones fijo No muchos formatos de instrucciones Fcil codificacin de las instrucciones

Cuanto ms pequeo ms rpido


Nmero de instrucciones y modo de direccionamientos bajo Nmero registros no excesivo

Un buen diseo necesita buenas soluciones de compromiso


Equilibrio nmero de registros, nmero de instrucciones, tipos y tamao de las instrucciones

Hacer el caso comn rpido


Mquina registro-registro Datos inmediatos en la propia instruccin

La complejidad de las instrucciones es slo un parmetro de diseo


Menor recuento de instrucciones, pero mayor CPI y mayor Tc
Fundamentos de Computadores 43

Curso 2005/2006

Otros puntos
Gestin de procedimientos
Enlazador (link) Cargador (loader) Gestin de la pila (stack)
Bloque de activacin Puntero de marco (frame pointer) Subrutinas recursivas

Manipulacin de cadenas (strings) Punteros Interrupciones y excepciones Llamadas al sistema


Fundamentos de Computadores 44

Curso 2005/2006

Diseo del procesador


Mientras el ENIAC est equipado con 18000 vlvulas de vacio y pesa 30 toneladas, los ordenadores del futuro pueden tener 1000 vlvulas y quizs pesen slo 1 tonelada y media. Popular Mechanics, Marzo de 1949

Objetivos
Calcular el nmero total de ciclos de reloj de la ejecucin de un trozo de cdigo ensamblador para diferentes implementaciones de un procesador bsico Trazar ciclo a ciclo de reloj (sobre una ruta de datos) un trozo de cdigo ensamblador para diferentes implementaciones de un procesador bsico Plantear una ruta de datos para un repertorio de instrucciones simple en un procesador bsico Modificar una ruta de datos para la inclusin de nuevas instrucciones en un procesador bsico Modificar una ruta de datos para satisfacer determinadas caractersticas de diseo Especificar una unidad de control con una mquina de estados finitos para una ruta de datos y un repertorio de instrucciones simples Modificar una unidad de control especfica de un procesador bsico para la inclusin de nuevas instrucciones Modificar una unidad de control especfica de un procesador bsico para satisfacer determinadas caractersticas Calcular las ecuaciones de implementacin de una unidad de control descrita mediante una mquina de estados finitos Rellenar el contenido de una memoria ROM para una especificacin de una unidad de control mediante una mquina de estados finitos Implementar con PLA una especificacin de una unidad de control mediante una mquina de estados finitos Especificar la unidad de control de un procesador bsico con un microprograma Disear un formato de microinstrucciones para un procesador bsico Modificar un microprograma para la inclusin de nuevas instrucciones en un procesador bsico Modificar un microprograma para satisfacer determinadas caractersticas de diseo Modificar el formato de microinstrucciones para un procesador bsico Escribir una rutina de tratamiento de excepcin para interrupciones o excepciones bsicas

Curso 2005/2006

Fundamentos de Computadores

Contenidos (1/4)
Metodologa de sincronizacin Diseo de un procesador MIPS R3000 reducido
Rutas de datos individuales
Bsqueda de instruccin Decodificacin de la instruccin Ejecucin (aritmtico-lgicas, cargas y almacenamientos, saltos condicionales y bifurcaciones)
Curso 2005/2006 Fundamentos de Computadores 3

Contenidos (2/4)
Diseo monociclo
Diseo de la ruta de datos
Integracin de las rutas de datos individuales Seales de control Integracin de la ruta de datos y de la unidad de control Ejemplos de flujo de datos + control

Diseo de la unidad de control de la ALU (Tambin vlida para el diseo multiciclo)


Estructura de la ALU Especificacin del control ALU Tabla de verdad del control ALU Implementacin del control ALU

Diseo de la unidad de control


Funcionalidad de las seales de control Implementacin de la UC

Ventajas y desventajas

Curso 2005/2006

Fundamentos de Computadores

Contenidos (3/4)
Diseo multiciclo
Diseo de la ruta de datos
Esbozo de la ruta de datos Integracin de la ruta de datos y de la unidad de control Etapa de la ejecucin de las instrucciones
Ejemplo de la ejecucin de la instruccin lw

Diseo de la unidad de control


Control cableado
Curso 2005/2006 Especificacin de la UC con una FSM (diagrama) Especificacin de la UC con una FSM (tabla) Implementacin de la FSM Ecuaciones de implementacin de la FSM Implementacin de FSM con ROM Implementacin de FSM con PLA Formato de la microinstruccin Seales asociadas a los campos y valores Microprograma de la UC Secuenciador del microprograma Fundamentos de Computadores 5

Control microprogramado

Contenidos (4/4)
Excepciones e interrupciones
Tratamiento de excepciones en MIPS Implementacin de excepciones en MIPS Ruta de datos con soporte de excepciones Especificacin de la UC con soporte de excepciones Instrucciones para excepciones en MIPS

Curso 2005/2006

Fundamentos de Computadores

Metodologa de sincronizacin
La metodologa de sincronizacin define cundo pueden leerse y escribirse las diferentes seales Caractersticas de la metodologa de sincronizacin por nivel
Un elemento de estado puede ser actualizado slo en el flanco de reloj Un elemento de estado puede ser ledo y modificado en un mismo ciclo Seales de habilitacin de escritura explcitas

State element 1

Combinational logic

State element 2

clock

one clock cycle


Curso 2005/2006 Fundamentos de Computadores 7

Diseo de un procesador MIPS R3000 reducido


Soporte del subconjunto de instrucciones
Acceso a memoria: lw (load word) y sw (store word) Aritmtico-lgicas: add, sub, and, or, slt Salto y bifurcacin: beq (branch if equal) y j (jump)

Ciclo de instruccin
Lectura de la instruccin M[PC] Decodificacin de la instruccin y lectura de los registros Ejecucin de la instruccin
Curso 2005/2006 Fundamentos de Computadores 8

Ruta de datos individuales Bsqueda de la instruccin


Lectura de la memoria de instrucciones Actualizacin del PC a la siguiente instruccin

Add 4

Instruction Memory PC Read Address Instruction

Curso 2005/2006

Fundamentos de Computadores

Ruta de datos individuales Decodificacin de la instruccin


Envo de los campos de cdigo de operacin y funcin a la unidad de control Lectura del banco de registro de los registros $rs y $rt

Control Unit

Instruction

Read Addr 1 Register Read Read Addr 2 Data 1 File Write Addr Read Data 2 Write Data

Curso 2005/2006

Fundamentos de Computadores

10

Ruta de datos individuales Aritmtico-lgicas (ejecucin)


op y funct especifican la operacin aritmtico-lgica Escritura del registro $rd del banco de registros con la salida de la ALU
31 R-type: op 25 rs 20 rt 15 rd 10 5 0

shamt funct

RegWrite

ALU control

Instruction

Read Addr 1 Read Register Read Addr 2 Data 1 File Write Addr Read Write Data Data 2

ALU

overflow zero

Curso 2005/2006

Fundamentos de Computadores

11

Ruta de datos individuales Cargas y almacenamientos (ejecucin)


Clculo de la direccin de memoria
address $rt $rs + extensin-signo(IR[15:0])

Carga de un registro (load)


M[$rs + extensin-signo(IR[15:0])] $rt
MemWrite

Almacenamiento de un registro (store)


M[$rs + extensin-signo(IR[15:0])]
RegWrite ALU control overflow zero
Address Data Memory Read Data Write Data

Instruction

Read Addr 1 Read Register Read Addr 2 Data 1 File Write Addr Read Data 2 Write Data

ALU

16

Sign Extend

MemRead
32

Curso 2005/2006

Fundamentos de Computadores

12

Ruta de datos individuales Saltos condicionales (ejecucin)


Resta de $rs y $rt y comprobacin de la seal zero de la ALU Clculo de la direccin efectiva de salto
address PC + 4 + extensin-signo(IR[15:0]<<2)

Add 4 Add Shift left 2

Branch target address

ALU control
PC Read Addr 1 Read Register Read Addr 2 Data 1 File Write Addr Write Data

zero (to branch control logic)


ALU

Instruction

16

Sign Extend

32

Curso 2005/2006

Fundamentos de Computadores

13

Ruta de datos individuales Bifurcaciones (ejecucin)


Reemplazo del PC por la direccin efectiva de salto
PC PC[31:28] || (IR[25:0]<<2)

Add 4 4 Instruction Memory PC Read Address Instruction 26 Shift left 2

Jump address
28

Curso 2005/2006

Fundamentos de Computadores

14

Diseo monociclo
Integracin de las rutas de datos individuales
Recursos hardware + multiplexores + seales de control + restricciones de diseo

Restriccin de diseo
Todas las instrucciones tardan un nico ciclo de reloj La instruccin ms lenta determina el tiempo de ciclo Ningn componente de la ruta de datos puede ser reutilizado
Memorias separadas de instrucciones y datos Sumadores
Curso 2005/2006 Fundamentos de Computadores 15

Diseo de la RD - Integracin de las individuales (no beq, no j)


Add 4 Read Addr 1 Read Register Read Addr 2 Data 1 File Write Addr Read Data 2 Write Data

RegWrite

ALUSrc ALU control ovf zero

MemWrite

MemtoReg

Instruction Memory PC Read Address Instruction

Address Data Memory Read Data Write Data

ALU

Sign 16 Extend

MemRead
32

Curso 2005/2006

Fundamentos de Computadores

16

Diseo de la RD Seales de control


Seleccin de la operacin a realizar
Operacin ALU: ALUControl Escritura y lectura del banco de registros: RegWrite Escritura y lectura de las memorias: MemRead, MemWrite

Seleccin de entradas de los multiplexores (flujo de datos)


ALUSrc, MemToReg
31 R-type: op 31 I-Type: J-type: op 31 op 25 rs 25 rs 25 target address
Fundamentos de Computadores 17

20 rt 20 rt

15 rd 15

10

shamt funct 0 address offset 0

Curso 2005/2006

Diseo de la RD Integracin de la RD y de la UC
0
Add Add 4 ALUOp Instr[31-26] Control Unit ALUSrc RegWrite RegDst Instruction Memory PC Read Address Instr[31-0] Instr[25-21] Read Addr 1 Read Register Instr[20-16] Read Addr 2 Data 1 File 0 Write Addr Read 1 Data 2 Instr[15 Write Data -11] Sign Extend 16 Address Branch Shift left 2

1
PCSrc MemRead MemtoReg MemWrite

ovf zero 0 1
ALU control ALU

Data Memory Read Data Write Data

1 0

Instr[15-0]

32

Instr[5-0]

Curso 2005/2006

Fundamentos de Computadores

18

Diseo de la RD Flujo de datos y control para tipo R


0
Add Add 4 ALUOp Instr[31-26] Control Unit ALUSrc RegWrite RegDst Instruction Memory PC Read Address Instr[31-0] Instr[25-21] Read Addr 1 Read Register Instr[20-16] Read Addr 2 Data 1 File 0 Write Addr Read 1 Data 2 Instr[15 Write Data -11] Sign Extend 16 Address Branch Shift left 2

1
PCSrc MemRead MemtoReg MemWrite

ovf zero 0 1
ALU control ALU

Data Memory Read Data Write Data

1 0

Instr[15-0]

32

Instr[5-0]

Curso 2005/2006

Fundamentos de Computadores

19

Diseo de la RD Flujo de datos y control para lw


0
Add Add 4 ALUOp Instr[31-26] Control Unit ALUSrc RegWrite RegDst Instruction Memory PC Read Address Instr[31-0] Instr[25-21] Read Addr 1 Read Register Instr[20-16] Read Addr 2 Data 1 File 0 Write Addr Read 1 Data 2 Instr[15 Write Data -11] Sign Extend 16 Address Branch Shift left 2

1
PCSrc MemRead MemtoReg MemWrite

ovf zero 0 1
ALU control ALU

Data Memory Read Data Write Data

1 0

Instr[15-0]

32

Instr[5-0]

Curso 2005/2006

Fundamentos de Computadores

20

Diseo de la RD Flujo de datos y control para beq


0
Add Add 4 ALUOp Instr[31-26] Control Unit ALUSrc RegWrite RegDst Instruction Memory PC Read Address Instr[31-0] Instr[25-21] Read Addr 1 Read Register Instr[20-16] Read Addr 2 Data 1 File 0 Write Addr Read 1 Data 2 Instr[15 Write Data -11] Sign Extend 16 Address Branch Shift left 2

1
PCSrc MemRead MemtoReg MemWrite

ovf zero 0 1
ALU control ALU

Data Memory Read Data Write Data

1 0

Instr[15-0]

32

Instr[5-0]

Curso 2005/2006

Fundamentos de Computadores

21

Integracin de la RD Flujo de datos y control para j


Instr[25-0] 26 Add Add 4 ALUOp Instr[31-26] Control Unit ALUSrc RegWrite RegDst Instruction Memory PC Read Address Instr[31-0] Instr[25-21] Read Addr 1 Read Register Instr[20-16] Read Addr 2 Data 1 File 0 Write Addr Read Address Jump Branch Shift left 2 Shift left 2

1
28 32 PC+4[31-28]

0 0 1
PCSrc MemRead MemtoReg MemWrite

ovf zero 0 1
ALU control ALU

Data Memory Read Data Write Data

1 0

Instr[15 -11]

Write Data

Data 2

Instr[15-0]

Sign Extend 16

32

Instr[5-0]

Curso 2005/2006

Fundamentos de Computadores

22

Diseo de la UC de la ALU Estructura de la ALU


Binvert

A L U o p e r a ti o n
a

Operation CarryIn

a Z ero ALU R e s u lt O v e r f lo w

0 1 Result b 0 1 Less 3 2

C a rry O u t

a. CarryOut

Entradas de control (ALUctr)


000 001 010 110 111

FUNCIN
AND OR ADD SUB SLT

Curso 2005/2006

Fundamentos de Computadores

23

Diseo de la UC de la ALU Especificacin del control ALU


Operacin ALU
lw, sw ($rs + extensin-signo(IR[15:0])) beq ($rs-$rt) add, sub, or, and y slt (operacin especfica)
Cod. Op. LW SW Branch Equal R-Type R-Type R-Type R-Type R-Type ALUop 00 00 01 10 10 10 10 10 Instruccin Carga Almacena salto suma resta AND OR set on less than FUNCT XXXXXX XXXXXX XXXXXX 100000 100010 100100 100101 101010 Op. deseada suma suma resta suma resta and or set on less than Entradas de control de la ALU (ALUctr) 010 010 110 010 110 000 001 111

Curso 2005/2006

Fundamentos de Computadores

24

Diseo de la UC de la ALU Tabla de verdad del control ALU


ALUop ALUop1 ALUop0 0 0 x 1 1 x 1 x 1 x 1 x 1 x F5 x x x x x x x F4 x x x x x x x funct F3 F2 x x x x 0 0 0 0 0 1 0 1 1 0 F1 x x 0 1 0 0 1 F0 x x 0 0 0 1 0 ALUctr bit2 bit1 bit0 0 1 0 1 1 0 0 1 0 1 1 0 0 0 0 0 0 1 1 1 1

31

26 op 6 bits rs

21 rt 5 bits

16 rd 5 bits ALUctr 3 ALU ALU ALU

11 shamt 5 bits 5 bits

6 funct 6 bits

Instruccin Tipo R:

func op 6 Main Control 6 ALUop N ALU Control (Local)

funct<3:0> Instruction Op. 0000 0010 0100 0101 1010 add subtract and or set-on-less-than

Curso 2005/2006

Fundamentos de Computadores

25

Diseo de la UC de la ALU Implementacin del control ALU


ALUop ALUop1 ALUop0 0 0 x 1 1 x 1 x 1 x 1 x 1 x F5 x x x x x x x F4 x x x x x x x
ALUOp ALU control block ALUOp0 ALUOp1

funct F3 F2 x x x x 0 0 0 0 0 1 0 1 1 0

F1 x x 0 1 0 0 1

F0 x x 0 0 0 1 0

Operacin (ALUctr) bit2 bit1 bit0 0 1 0 1 1 0 0 1 0 1 1 0 0 0 0 0 0 1 1 1 1

F3 F2 F (5 0) F1

Operation2 Operation1 Operation0 Operation

F0

Curso 2005/2006

Fundamentos de Computadores

26

Diseo de la UC de la ALU Unidad de control


Tipo R: Bits: Tipo I: Bits: Tipo J: Bits: op 31-26 op 31-26 op 31-26 rs 25-21 rs 25-21 rt 20-16 rt 20-16 Direccin 26-0
PCSrc 0 M u x 1

rd 15-11

shamt 10-6 Inmediato16 15-0

funct 5-0

Add 4 RegWrite Instruction [2521] PC Read address Instruction [310] Instruction memory Instruction [2016] 0 M u Instruction [1511] x 1 RegDst Instruction [150] Read register 1 Read data 1 Read register 2 Read Write data 2 register Write data Registers 16 Sign extend 32 ALU control Shift left 2 ALU Add result

MemW rite ALUSrc 0 M u x 1 Zero ALU ALU result MemtoReg Address Read data 1 M u x 0

Write Data data memory MemRead

Instruction [50] ALUOp

Curso 2005/2006

Fundamentos de Computadores

27

Diseo de la UC Funcionalidad de las seales de control


Seal
RegDst RegWrite AluSrc PCSrc MemWrite MemRead MemToReg

Accin cuando es desactivada (0)

Accin cuando se activa (1)

El registro destino para las escrituras viene del El registro destino para las escrituras viene del campo campo rt (bits 20-16) rd (bits 15-11) Ninguno Escribe el dato en "WriteData" en el registro dado por "WriteRegister". El segundo operando de la ALU viene del banco de El segundo operando de la ALU son los 16 bits menos registro (salida 2) significativos de la instruccin extendidos en signo Selecciona PC+4 como nuevo valor del PC Selecciona la direccin de salto computada como nuevo valor del PC Ninguna Escribe en la direccin de memoria "Address" el dato "WriteData" Ninguna Lee un dato de la direccin de memoria "Address" y lo deja en la salida "ReadData" El valor a realimentar al campo "WriteData" viene El valor a realimentar al campo "WriteData" viene de la de la salida de la ALU memoria
PC Src A dd 4 RegW rite Instruction[2521] PC R ead address Instruction [310] Instruction m ory em Instruction[2016] 0 M Instruction[1511] u x 1 R egDst Instruction[150] R d ea ead register1 R data1 R d ea register2 R ead W rite data2 register W rite egisters data R 16 Sign 32 extend S hift le ft2 A result dd ALU 0 M u x 1

M W em rite A S LU rc 0 M u x 1 A LU control A UOp L Zero LU ALU A result M toR em eg ead Ad dress R data W m ata rite D ory d ata em M R em ead 1 M u x 0

Instruction[50]

Curso 2005/2006

Fundamentos de Computadores

28

Diseo de la UC Implementacin de la UC
Implementacin con PLA
Inputs Op5

Op5-0 -> (bits 31-26) RegDst ALUSrc MemToReg RegWrite MemRead MemWrite Branch ALUOp1 ALUOp0

00 0000 0D R-Format 1 0 0 1 0 0 0 1 0

10 0011 35D lw 0 1 1 1 1 0 0 0 0

10 1011 43D sw x 1 x 0 0 1 0 0 0

00 0100 4D beq x 0 x 0 0 0 1 0 1

Op4 Op3 Op2 Op1 Op0

Outputs R-format Iw sw beq RegDst ALU ALUSrc MemtoReg RegWrite MemRead MemWrite Branch ALUOp1 ALUOpO

Curso 2005/2006

Fundamentos de Computadores

29

Diseo monociclo Ventajas y desventajas


Todas las instrucciones tardan un ciclo Aprovechamiento ineficiente del rea del chip (componentes repetidos) Ciclo de reloj grande para acomodar la instruccin ms lenta
Las instrucciones de punto flotante requeriran un tiempo de ciclo extra largo

Cycle 1 Clk lw

Cycle 2

sw

Waste

Curso 2005/2006

Fundamentos de Computadores

30

Diseo multiciclo
Divisin del ciclo de instruccin en etapas (cada etapa un ciclo de reloj)
CPI (ciclos por instruccin) variables (instrucciones lentas y rpidas) Las etapas presentan cargas de trabajo equilibradas

Reutilizacin de las unidades funcionales


Memoria unificada, pero un nico acceso por ciclo Una nica ALU, pero una nica operacin ALU por ciclo

Curso 2005/2006

Fundamentos de Computadores

31

Diseo de la RD Esbozo de la ruta de datos


Inclusin de registros a la salida de las unidades funcionales para preservar los datos (generalmente entre ciclos adyacentes)
IR, registro de instrucciones MDR, registro de dato ledo de memoria A, B registros de datos ledos desde el banco de registro ALUOut, registro de salida de la ALU

IR actualiza el contenido cada instruccin, el resto de los registros cada ciclo de reloj

ALU B

Write Data

Curso 2005/2006

Fundamentos de Computadores

MDR

ALUout

Memory Address Read Data (Instr. or Data)

PC

IR

Read Addr 1 Register Read Read Addr 2 Data 1 File Write Addr Read Write Data Data 2

32

Diseo de la RD Integracin de la RD y de la UC (1/2)


Los multiplexores a las entradas de las unidades funcionales y la ejecucin multiciclo permiten el compartimiento de los recursos hardware
IorD MemRead MemWrite IRWrite RegDst RegWrite ALUSrcA PC 0 M u x 1 Address Memory MemData Write data Instruction [25 21] Instruction [20 16] Instruction [15 0] Instruction register Instruction [15 0] 0 M Instruction u x [15 11] 1 0 M u x 1 16 Sign extend 32 Shift left 2 Read register 1 Read Read data 1 register 2 Registers Write Read register data 2 Write data A 0 M u x 1 Zero ALU ALU result

ALUOut

B 4

0 1 M u 2 x 3

Memory data register

ALU control

Instruction [5 0]

MemtoReg

ALUSrcB ALUOp

Curso 2005/2006

Fundamentos de Computadores

33

Diseo de la RD Integracin de la RD y de la UC (2/2)


PCWriteCond PCWrite IorD IorD MemRead MemWrite MemtoReg IRWrite Op [5 0] Control Outputs PCSource ALUOp ALUSrcB ALUSrcA RegWrite RegDst 0 M x 2

Instructi Instruction [25 0] Instruction [31-26] Address Memory MemData Write data Instruction [25 21] Instruction [20 16] Instruction [15 0] Instruction register Instruction [15 0] Memory data register 0 M Instruction u x [15 11] 1 0 M u x 1 16 Sign extend extend 32 Shift left 2 Read register 1 Read Read register 2 data 1 Registers Write Read register data 2 Write data A 0 M u x 1

26

Shift left 2

28

Jump address [31-0]

1 u

PC

0 M u x 1

PC [31-28]

B 4

Zero ALU ALU result

ALUOut

0 1 M u 2 x 3

ALU control

Instruction [5 0]

Curso 2005/2006

Fundamentos de Computadores

34

1. Bsqueda de la instruccin y actualizacin del PC (IF)


IR M[PC]; PC PC + 4

Diseo de la RD - Etapas de la ejecucin de las instrucciones (1/3)

2. Decodificacin instruccin, lectura de registros y clculo de direccin efectiva de salto (DEC/REG)


A RegFile[$rs]; B RegFIle[$rt]; ALUOut PC + extensin-signo(IR[15:0])<<2
Curso 2005/2006 Fundamentos de Computadores 35

3. Ejecucin (EX)
ALUOut ALUOut if (A=B) PC PC
Curso 2005/2006

Diseo de la RD - Etapas de la ejecucin de las instrucciones (2/3)


A op B A + extensin-signo(IR[15:0]) ALUOut

Tipo R (add, sub, and, or, slt) Referencia a memoria (lw, sw) Salto (beq) Bifurcacin (j)
PC[31:28] || IR[25:0]<<2
Fundamentos de Computadores 36

4. Acceso a memoria o fin ejecucin tipo R (MEM)


Acceso a memoria para lectura
MDR M[ALUOut] B

Diseo de la RD - Etapas de la ejecucin de las instrucciones (3/3)

Acceso a memoria para escritura


M[ALUOut] $rd MDR
Curso 2005/2006

Fin ejecucin tipo R


ALUOut M[ALUOut]
Fundamentos de Computadores 37

5. Fin de lectura en memoria (WB)

Etapas de la ejecucin de las instrucciones - lw Etapa IF


PCSource PCWrite ALUOp IorD Outputs ALUSrcB MemRead ALUSrcA MemWrite Control RegWrite MemtoReg IRWrite Op [5 0] RegDst 0 PCWriteCond

Instruction [250] Instruction [31-26] Address Memory MemData Write data Instruction [25 21] Instruction [20 16] Instruction [15 0] Instruction register Instruction [15 0] Memory data register 0 M Instruction u x [15 11] 1 0 M u x 1 Read register 1 Read Read register 2 data 1 Registers Write Read register data 2 Write data A B 4 0 M u x 1 0 1M u 2 x 3

26

Shift left 2

28

Jump address [31-0]

1 u
x 2

PC

0 M u x 1

PC [31-28]

Zero ALU ALU result

ALUOut

16

Sign extend

32

Shift left 2

ALU control

Instruction [5 0]

Curso 2005/2006

Fundamentos de Computadores

38

Etapas de la ejecucin de las instrucciones - lw Etapa DEC/REG


PCSource PCWrite ALUOp IorD Outputs ALUSrcB MemRead ALUSrcA MemWrite Control RegWrite MemtoReg IRWrite Op [5 0] RegDst 0 PCWriteCond

Instruction [250] Instruction [31-26] Address Memory MemData Write data Instruction [25 21] Instruction [20 16] Instruction [15 0] Instruction register Instruction [15 0] Memory data register 0 M Instruction u x [15 11] 1 0 M u x 1 Read register 1 Read Read register 2 data 1 Registers Write Read register data 2 Write data A B 4 0 M u x 1 0 1M u 2 x 3

26

Shift left 2

28

Jump address [31-0]

1 u
x 2

PC

0 M u x 1

PC [31-28]

Zero ALU ALU result

ALUOut

16

Sign extend

32

Shift left 2

ALU control

Instruction [5 0]

Curso 2005/2006

Fundamentos de Computadores

39

Etapas de la ejecucin de las instrucciones - lw Etapa EX


PCSource PCWrite ALUOp IorD Outputs ALUSrcB MemRead ALUSrcA MemWrite Control RegWrite MemtoReg IRWrite Op [5 0] RegDst 0 PCWriteCond

Instruction [250] Instruction [31-26] Address Memory MemData Write data Instruction [25 21] Instruction [20 16] Instruction [150] Instruction register Instruction [15 0] Memory data register Read register 1 Read Read register 2 data 1 Registers Write Read register data 2 Write data A B 4 0 M u x 1 0 1M u 2 x 3

26

Shift left 2

28

Jump address [31-0]

1 u
x 2

PC

0 M u x 1

PC [31-28]

0 M Instruction u x [15 11] 1 0 M u x 1 16

Zero ALU ALU result

ALUOut

Sign extend

32

Shift left 2

ALU control

Instruction [5 0]

Curso 2005/2006

Fundamentos de Computadores

40

Etapas de la ejecucin de las instrucciones - lw Etapa MEM


PCSource PCWrite ALUOp IorD Outputs ALUSrcB MemRead ALUSrcA MemWrite Control RegWrite MemtoReg IRWrite Op [5 0] RegDst 0 PCWriteCond

Instruction [250] Instruction [31-26] Address Memory MemData Write data Instruction [25 21] Instruction [20 16] Instruction [150] Instruction register Instruction [15 0] Memory data register 0 M Instruction u x [15 11] 1 0 M u x 1 Read register 1 Read Read register 2 data 1 Registers Write Read register data 2 Write data A B 4 0 M u x 1 0 1M u 2 x 3

26

Shift left 2

28

Jump address [31-0]

1 u
x 2

PC

0 M u x 1

PC [31-28]

Zero ALU ALU result

ALUOut

16

Sign extend

32

Shift left 2

ALU control

Instruction [5 0]

Curso 2005/2006

Fundamentos de Computadores

41

Etapas de la ejecucin de las instrucciones - lw Etapa WB


PCSource PCWrite ALUOp IorD Outputs ALUSrcB MemRead ALUSrcA MemWrite Control RegWrite MemtoReg IRWrite Op [5 0] RegDst 0 PCWriteCond

Instruction [250] Instruction [31-26] Address Memory MemData Write data Instruction [25 21] Instruction [20 16] Instruction [150] Instruction register Instruction [15 0] Memory data register 0 M Instruction u x [15 11] 1 0 M u x 1 Read register 1 Read Read register 2 data 1 Registers Write Read register data 2 Write data A B 4 0 M u x 1 0 1M u 2 x 3

26

Shift left 2

28

Jump address [31-0]

1 u
x 2

PC

0 M u x 1

PC [31-28]

Zero ALU ALU result

ALUOut

16

Sign extend

32

Shift left 2

ALU control

Instruction [5 0]

Curso 2005/2006

Fundamentos de Computadores

42

Diseo multiciclo - Diseo de la unidad control


Mquina de estados finitos (FSM)
Especificacin del control mediante un diagrama de estados finitos (representacin grfica o tabular) Mquina de estados finitos
Conjunto de estados Funcin estado siguiente
Si Ij Sk

Funcin salida
Mquinas de Moore: Si Ok Mquinas de Mealy: Si Ij Ok

Microprogramacin
Especificacin del control mediante un programa Necesaria para simplificar la especificacin de una UC compleja
Curso 2005/2006 Fundamentos de Computadores 43

Control cableado - Especificacin de la UC con una FSM (diagrama)


Instruction fetch 0 MemRead ALUSrcA = 0 IorD = 0 IRWrite ALUSrcB = 01 ALUOp = 00 PCWrite PCSource = 00
= (Op

In struction Instruction decode/ register fetch 1 ALUSrcA = 0 ALUSrcB = 11 ALUOp = 00

Start

Memory address computation 2 ALUSrcA = 1 ALUSrcB ALUSrcB = 10 ALUOp = 00


(Op

or W ') = 'L

(O p

= 'S

Execution 6 ALUSrcA =1 ALUSrcB = 00 ALUOp = 10 8

Branch completion

(O p

W')

(Op = 'J')

'B

typ R-

EQ

e)

')

Jump completion

9 ALUSrcA = 1 ALUSrcB = 00 ALUOp = 01 PCWriteCond PCSource = 01 PCWrite PCSource = 10

O (O

(Op = 'LW')

p p = S 'S W ) ')

Memory access 5

Memory access 7 MemWrite IorD = 1

R-type completion

3 MemRead IorD = 1

RegDst = 1 RegWrite MemtoReg = 0

Write-back step 4 RegDst = 0 RegWrite MemtoReg = 1

Curso 2005/2006

Fundamentos de Computadores

44

Control cableado - Especificacin de la UC con una FSM (tabla)


Entradas
Cdigo Operacin Estado Actual Estado Siguiente PCWriteCond

Salidas
Seales de Control para el Camino de Datos

MemToReg

PCSource1

PCSource0

ALUSrcB1

ALUSrcB0

MemRead

MemWrite

ALUSrcA

Regwrite 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0

ALUOp1

IRWRite

pCWrite

ALUop0

op5 op4

0 1 1 1 1 1 2 2 3 4 5 6 7 8 9 lw sw R

x 1 1 0

x 0 0 0 0 0 0 0 x x x x x x x

x 0 1 0 0 0 0 1 x x x x x x x

x 0 0 0 1 0 0 0 x x x x x x x

x 1 1 0 0 1 1 1 x x x x x x x

x 1 1 0 0 0 1 1 x x x x x x x

0 0 0 0 0 0 0 0 0 0 0 0 0 1 1

0 0 0 0 0 0 0 0 0 1 1 1 1 0 0

0 0 0 0 0 0 1 1 1 0 0 1 1 0 0

0 1 1 1 1 1 0 0 1 0 1 0 1 0 1

0 0 0 0 1 1 0 0 0 0 0 0 0 0 0

0 0 0 1 0 0 0 1 1 0 0 1 0 0 0

0 1 1 1 0 0 1 0 0 0 0 1 0 0 0

1 0 0 0 0 1 1 1 0 0 0 1 0 0 0

1 0 0 0 0 0 0 0 0 0 0 0 0 0 1

0 0 0 0 0 0 0 0 0 0 0 0 0 1 0

0 0 0 0 0 0 0 0 1 0 1 0 0 0 0

1 0 0 0 0 0 0 0 1 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 1 0 0 0 0

1 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 1 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 1

0 0 0 0 0 0 0 0 0 0 0 0 0 1 0

0 0 0 0 0 0 0 0 0 0 0 1 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 1 0

0 1 1 1 1 1 1 1 0 0 0 0 0 0 0

1 1 1 1 1 1 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 1 1 0 0 0 1 0 1 0

beq 0 j lw sw 0 1 1 x x x x x x x

Curso 2005/2006

Fundamentos de Computadores

RegDst 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0

IorD

op3

op2

op1

op0

ns3

ns2

ns1

ns0

s3

s2

s1

s0

45

Control cableado Implementacin de la FSM


PCWrite PCWriteCond IorD MemRead MemWrite IRWrite Control logic MemtoReg PCSource ALUOp Outputs ALUSrcB ALUSrcA RegWrite RegDst NS3 NS2 NS1 NS0

Estado Siguiente

Inputs

Op3

Op2

Op1

Op5

Op4

Op0

S1

S3

S2

Instruction register r opcode field

State register

S0

Estado Actual

Curso 2005/2006

Fundamentos de Computadores

46

Control cableado Ecuaciones de implementacin de la FSM


Seal Control Ecuacin lgica (S3'S2'S1'S0) (OP5'OP4'OP3'OP2OP1'OP0') + (S3'S2'S1'S0) (OP5'OP4'OP3'OP2'OP1OP0') = -> NS3
NS2 NS1 NS0 PCWrite PCWriteCond IorD MemRead MemWrite IRWrite MemToReg PCSource1 PCSource0 ALUOp1 ALUOp0 ALUSrcB1 ALUSrcB0 ALUSrcA RegWrite RegDst
Estado 1 (op[5:0] = 'beq') + Estado 1 (op[5:0] = 'jmp') -> Estado 1 (op[5:0] = 'R-format') + Estado 2 (op[5:0] = 'sw') + Estado 3 + Estado 6

-> Estado 1 (op[5:0] = 'lw') +

Estado 1 (op[5:0] = 'sw') + Estado 1 (op[5:0] = 'R-format') + Estado 2 (op[5:0] = 'lw') + Estado 2 (op[5:0] = 'sw') + Estado 6 -> Estado 0 + Estado 1 (op[5:0] = 'jmp') + Estado 2 (op[5:0] = 'lw') + Estado 2 (op[5:0] = 'sw') + Estado 6

-> Estado 0 + Estado 9 -> Estado 8 -> Estado 3 + Estado 5 -> Estado 0 + Estado 3 -> Estado 5 -> Estado 0 -> Estado 4 -> Estado 9 -> Estado 8 -> Estado 6 -> Estado 8 -> Estado 1 + Estado 2 -> Estado 0 + Estado 1 -> Estado 2 + Estado 6 + Estado 8 -> Estado 4 + Estado 7 -> Estado 7

Curso 2005/2006

Fundamentos de Computadores

47

Control cableado - Implementacin de FSM con ROM


Diseo unificado (Tamao 210 20 = 20Kb)
6 bits cdigo de operacin + 4 bits de los estados = 210 posiciones de memoria 16 salidas de control + 4 salidas de nuevo estado = 20 bits de anchura ROM de seales de control (Tamao 24 16 = 256b)
4 bits de los estados = 2 posiciones de memoria 16 salidas de control = 4 bits de anchura
Inputs Op5 Op3 Op4 Op2 Op1 Op0 S2 S3 S1 S0

Tamao: 20 Kbits vs 4.25 Kbits


Control logic

PCWrite PCWriteCond IorD MemRead MemWrite IRWrite MemtoReg PCSource ALUOp

Diseo no unificado (Tamao 4.25Kb)

Outputs

ALUSrcB ALUSrcA RegWrite RegDst NS3 NS2 NS1 NS0

ROM de nuevo estado (Tamao 210 4 = 4Kb)


6 bits cdigo de operacin + 4 bits de los estados = 210 posiciones de memoria 4 salidas de nuevo estado = 4 bits de anchura

Instruction register r opcode field

State register

Curso 2005/2006

Fundamentos de Computadores

48

Control cableado - Implementacin de FSM con PLA


Tamao de la PLA
#inputs #minterms + #outputs #minterms = (10 17)+(20 17) = 510 celdas
Op5 Op4 Op3 Op2 Op1 Op0 S3 S2 S1 S0

PCWrite PCWriteCond IorD MemRead MemWrite IRWrite MemtoReg PCSource1 PCSource0 ALUOp1 ALUOp0 ALUSrcB1 ALUSrcB0 ALUSrcA RegWrite RegDst NS3 NS2 NS1 NS0

Curso 2005/2006

Fundamentos de Computadores

49

Diseo de la unidad de control Control microprogramado


El estado siguiente es frecuentemente el estado actual + 1 Las seales de control estn almacenadas en una memoria
Control unit Microcode memory PCWrite PCWriteCond IorD MemRead MemWrite IRWrite BWrite MemtoReg PCSource ALUOp ALUSrcB ALUSrcA RegWrite RegDst AddrCtl Datapath

Outputs

Input 1 Microprogram counter Adder Address select logic Op[5 0] Instruction register opcode field

Secuenciador externo

Curso 2005/2006

Fundamentos de Computadores

50

Control microprogramado Formato de la microinstruccin


7 campos: 6 campos de control + 1 campo de secuenciacin
Control ALU
Nom bre del cam po Control ALU SRC1 SRC2

SRC1

SRC2

Control Registro

Memoria

Control PCWrite

Secuenciamiento

Funcin del cam po Especifica la operacin que va a realizar la ALU add subt durante el ciclo. Especifica la fuente para el primer operando de la ALU Especifica la fuente para el segundo operando de la ALU Especifica el nmero de registro y dato que se escribe en el mismo fuente del

Valores del cam po

Func code PC A B 4 Extend ExtShft Read W rite ALU (rd <- ALUout) W rite MDR (rt <- MDR) Read PC (IR <- M[PC]) Read ALU (MDR <- M[ALUout] W rite ALU (M[ALUout] <- B) ALU ALUOut-Cond Jump Address Seq Fetch Dispatch i

Control Registro Mem oria Control PCW rite Secuenciam iento

Especifica lectura o escritura y la fuente de la direccin Especifica la escritura del PC Especifica la siguiente microinstruccin que se va a ejecutar

Curso 2005/2006

Fundamentos de Computadores

51

Control microprogramado Seales asociadas a los campos y valores


C o n tro l A L U ALUop1 0 0 1 ALUO p0 0 1 0 O p e r a c i n Sum a R e s ta Func. code
SRC1 A d d rS rc A 0 1 O p e r a c i n PC A

SRC2 A L U S rB 1 0 0 1 1 A L U S rcB 0 0 1 0 1

O p e ra c i n B 4 E xte n d E xtS h ft

R e g is t e r C o n t r o l R e g W r ite 1 1 R egD st 1 0 M em ToReg 0 1

O p e r. W r ite A L U W r ite M D R

M e m o ria IR W rite 1 0 0 M em R ead 1 1 0 M e m W rite 0 0 1 Io rD 0 1 1

O p e r. Read PC Read ALU W rite A L U

Control PCWrite PCSrc1 0 0 1 PcSrc0 0 1 0 PCwrite 1 0 1 PCWrtCond 0 1 0 ALU

Sec

Oper.

A d d rC tl1 1 0 0 1

A d d rC tl0 1 0 1 0

O p e ra c i n Seq. F e tc h D is p a tc h 1 D is p a tc h 2

ALUOut-Cond Jump address

Curso 2005/2006

Fundamentos de Computadores

52

Control microprogramado Microprograma de la UC


Control ALU SRC1 SRC2 Control Registro MemToReg ALUSrcB0 Memoria Control PCWrite PCWriteCond PCSource1 PCSource0 Sec. ALUSrcB1 MemRead MemWrite RegWrite AddrCtl1

18 seales de control ->

Estado

Etiqueta Fetch Mem1 LW 2

0 1 2 3 4 5 6 7 8 9

Control SRC1 ALU Add PC Add PC Add A

SRC2

Control Registros

Mem oria Read PC

4 Extshft Read Extend W rite MDR

Read ALU W rite ALU A B W rite ALU

SW 2 Rform at1 Func Cod BEQ1 JUMP1 Subt

Control Secuenc. PCW rite ALU Seq. Dispatch 1 Dispatch 2 Seq Fetch Fetch Seq Fetch Fetch Fetch

ALUOutcond Jump Address

Curso 2005/2006

Fundamentos de Computadores

AddrCtl0

PCWrite

AluSrcA

IRWrite

RegDst

Aluop1

Aluop0

IorD

53

Control microprogramado Secuenciador del microprograma


La lgica de seleccin de direcciones genera la direccin de la siguiente microinstruccin a ejecutar
Sec A d d rC tl1 1
PLA or ROM

A d d rC tl0 1 0 1 0

O p e ra c i n Seq. F e tc h D is p a tc h 1 D is p a tc h 2

0 0 1

1 State Adder Mux 2 1 AddrCtl 0 0

Dispatch ROM 2

Dispatch ROM 1 Address select logic

Dispatch ROM2 Op [5:0] Nombre Valor 100011 lw LW2 (3) 101011 sw SW2 (5)

Instruction register opcode field

Op [5:0] 000000 000010 000100 100011 101011

Dispatch ROM1 Nombre Valor R-Format R-Format1 (6) jmp JUMP1 (9) beq BEQ1 (8) lw MEM1 (2) sw MEM1 (2)

Curso 2005/2006

Fundamentos de Computadores

Op

54

Excepciones e interrupciones
Definiciones
Eventos inesperados que cambian el flujo normal de ejecucin de las instrucciones Excepcin
Evento que tiene su origen en el interior del procesador (desbordamiento aritmtico, instruccin ilegal, etc.)

Interrupcin
Evento que tiene su origen en el exterior del procesador (dispositivos de entrada/salida, fallo de pgina, etc.)
Curso 2005/2006 Fundamentos de Computadores 55

Tratamiento de excepciones en MIPS


Acciones bsicas
Guardar la direccin de la instruccin causante en el registro Contador de Programa de Excepciones (EPC) Registrar la causa de la excepcin (Registro CAUSE) Transferir el control al sistema operativo en alguna direccin especificada (0xC0000000) donde se tratar la excepcin (ejecucin de una rutina de servicio)

Programa

Interrupcin Rutina de servicio de la interrupcin

Curso 2005/2006

Fundamentos de Computadores

56

Implementacin de excepciones en MIPS


Excepciones a implementar
Desbordamiento aritmtico Instruccin ilegal o no definida

Registros adicionales requeridos


EPC: registro de 32 bits para guardar la direccin de la instruccin causante de la excepcin CAUSE: Registro de 32 bits para registrar la causa de la excepcin. Utilizaremos slo el bit menos significativo
bit 0 = 0 -> Instruccin ilegal bit 0 = 1 -> Desbordamiento aritmtico

Seales de control adicionales


Intcause (0: instr. ilegal; 1: desbordamiento) CauseWrite (1: escritura en el registro CAUSE; 0: no escribe) EPCWrite (1: escritura en el registro EPC; 0: no escribe) Constante: C000 0000 0000 0000 (direccin a donde se transfiere el control cada vez que se interrumpe)
Fundamentos de Computadores 57

Curso 2005/2006

Ruta de datos con soporte de excepciones


PCWriteCond PCWrite IorD MemRead MemWrite MemtoReg IRWrite Op [5 0] Control Outputs CauseWrite IntCause EPCWrite PCSource ALUOp ALUSrcB ALUSrcA RegWrite RegDst 0 Jump address [31-0]

Instruction [25 0] Instruction [31-26] Address Memory MemData Write data Instruction [25 21] Instruction [20 16] Instruction [15 0] 0] Instruction register Instruction [15 0] Memory data register 0 M Instruction u x [15 11] 1 0 M u x 1 16 Sign extend 32 Shift left 2 Read register 1 Read Read register 2 data 1 Registers Write Read register data 2 Write data A 0 M u x 1 0 1M u 2x 3

26

Shift left 2

28

1M
2 u x

CO 00 00 00
PC [31-28]

PC

0 M u x 1

B 4

Zero ALU ALU result

ALU ALUOut

EPC

1 ALU control

0 M u x 1

Cause

11

Instruction [5 0]

10 IntCause = 0 CauseWrite ALUSrcA = 0 ALUSrcB = 01 ALUOp = 01 EPCWrite PCWrite PC++Source = 11

IntCause = 1 CauseWrite ALUSrcA = 0 ALUSrcB = 01 ALUOp = 01 EPCWrite PCWrite PCSource = 11 PCSource = 11

To state 0 to begin next instruction

Curso 2005/2006

Fundamentos de Computadores

58

Especificacin de la UC con soporte de excepciones


Instruction fetch 0 MemRead ALUSrcA = 0 IorD = 0 IRWrite ALUSrcB = 01 ALUOp = 00 PCWrite PCSource = 00
e) -typ =R (Op Branch completion 8 ALUSrcA = 1 ALUSrcB = 00 ALUOp = 01 PCWriteCond PCSource = 01

Instruction decode/ decode/ Register fetch 1 ALUSrcA = 0 ALUSrcB = 11 ALUOp = 00


p= p= p= ( ( (O

Start

'B EQ ')

(Op = 'J')

e e e oth

Memory address computation 2 ALUSrcA = 1 ALUSrcB = 00 ALUOp = 00


p= ( ( (O

') 'SW p= or (O Execution W') = 'L 6 (Op

(O p

) ) r)

Jump completion

9 PCWrite PCSource = 10

ALUSrcA = 1 ALUSrcB = 00 ALUOp = 10

(Op = 'LW')

''') W '''S

Memory access 5

Memory access 7 MemWrite IorD = 1

R-type completion 11 RegDst = 1 RegWrite MemtoReg = 0 Overflow

3 MemRead IorD = 1

IntCause = 1 CauseWrite A ALUSrcA = 0 ALUSrcB = 01 ALUOp = 01 EPCWrite PCWrite PCSource = 11

10

IntCause = 0 CauseWrite ALUSrcA = 0 ALUSrcB = 01 ALUOp = 01 EPCWrite PCWrite PCSource = 11

Write-back step 4 RegWrite MemtoReg = 1 RegDst = 0 Overflow

Curso 2005/2006

Fundamentos de Computadores

59

Instrucciones para excepciones en MIPS


mfc0 $rt, $rd (move from coprocesador 0)
Transfiere la informacin desde el registro de propsito general $rd al registro de propsito especial $rt (0 para CAUSE, 1 para EPC) Tipo R
010000 0000 ttttt ddddd 00000000000

mtc0 $rd, $rt (move to coprocesador 0)


Transfiere la informacin desde el registro de propsito especial $rt (0 para CAUSE, 1 para EPC) al registro de propsito general $rd Tipo R
010000 0100 ttttt ddddd 00000000000

rfe (return from exception)


Transfiere el contenido del EPC al registro contador de programa Tipo J
010000 10000000000000000000100000

Curso 2005/2006

Fundamentos de Computadores

60

Rendimiento, coste y prestaciones


El tiempo descubre la verdad, Sneca

Contenidos (1/3)
Mtricas de rendimiento, coste y prestaciones Definiciones
Tiempo de respuesta, tiempo de CPU, productividad y rendimiento

Medidas del rendimiento


MIPS, MFLOPS Tiempo de ejecucin Ecuacin clsica del tiempo de CPU
Frmula bsica CPImedio Dependencias
Curso 2005/2006 Fundamentos de Computadores 2

Contenidos (2/3)
Programas para la evaluacin del rendimiento - Benchmarks SPEC Benchmarks
SPEC89 SPEC92 y SPEC95
SpecInt, SpecFp, SPECbase SPEC95 Programas SPEC95 Pentium

SPEC CPU2000
CINT2000, CFP2000 Programas SPEC CINT2000 y CFP2000 - Pentium

SPECweb99
Sistemas Dell PowerEdge

Benchmarks para embedded computing systems

Fiabilidad de los programas de prueba Ms mtricas del rendimiento


MIPS y MFLOPS

Curso 2005/2006

Fundamentos de Computadores

Contenidos (3/3)
Mtodos de comparacin y resumen de rendimientos Ley de Amdahl (o ley de rendimientos decrecientes) Rendimiento, potencia y eficiencia de energa
Limitaciones de los sistemas empotrados y porttiles Tcnicas de ahorro de potencia Familia Pentium

Conclusiones
Curso 2005/2006 Fundamentos de Computadores 4

Objetivos
Definir coste, rendimiento, productividad y prestaciones Dar las principales mtricas para el coste, el rendimiento, productividad y prestaciones y su importancia para los usuarios y diseadores Distinguir entre tiempo de ejecucin del tiempo de CPU Aplicar la ecuacin bsica del rendimiento Sealar la influencia de los parmetros de diseo de un computador sobre los parmetros de la ecuacin bsica del tiempo de CPU Categorizar los diferentes programa para la evaluacin del rendimiento Conocer las caractersticas de las medidas de rendimiento SPECS, MIPS y MFLOPS Mtodos de resumen de rendimientos Aplicar la ley de Amdahl para el clculo del rendimiento Enumerar las principales limitaciones de los sistemas empotrados y porttiles eficiencia de energa

Curso 2005/2006

Fundamentos de Computadores

Mtricas de rendimiento, coste y prestaciones


Mtricas del rendimiento
Tiempo de respuesta, productividad

Mtricas del coste


Generalmente , $...,

Mtricas de las prestaciones


Relacin entre rendimiento y productividad

Importan a los clientes y vendedores de computadores


Qu mquina proporciona el mayor rendimiento? Qu mquina tiene el menor coste? Qu mquina tiene la mejor relacin rendimiento/coste?

Importan a lo diseadores de computadores


Qu diseo proporciona mayor rendimiento? Qu diseo tiene menor coste? Qu diseo tiene la mejor relacin rendimiento/coste?

Curso 2005/2006

Fundamentos de Computadores

Definiciones -Tiempo de respuesta, tiempo de CPU y productividad


Tiempo de respuesta o latencia o tiempo de ejecucin
Tiempo entre el comienzo y finalizacin de una tarea

Tiempo de CPU
No incluye tiempo de: accesos a memoria secundaria y discos, entrada y salida, otros procesos

Productividad (throughput)
Cantidad total de trabajo realizado por unidad de tiempo

Curso 2005/2006

Fundamentos de Computadores

Tiempo de respuesta y productividad - Ejemplos


Un tren de lavado de coches comienza un coche nuevo cada 30s y en el tren de lavado coexisten 6 coches en distintas fases de lavado
Tiempo de respuesta (usuario) de 180s (30*6) Productividad de 1 coche/30 segundos

El cambio de procesador de un computador disminuye el tiempo de respuesta, aumenta la productividad o ambos? La adicin de procesadores a un computador que asigna un procesador a cada tarea disminuye el tiempo de respuesta, aumenta la productividad o ambos?
Curso 2005/2006 Fundamentos de Computadores 8

Definicin de rendimiento
El rendimiento de un computador es el inverso del tiempo de ejecucin
Rendimiento X =

Un computador X es n veces ms rpido que un computador Y cuando


Rendimiento X =n Rendimiento Y

1 Tiempo de ejecucin X

Rendimiento X Rendimiento Y *100 = n Rendimiento Y


Curso 2005/2006

Un computador X (Y) es n% veces ms rpido (lento) que un computador Y (X) cuando


Fundamentos de Computadores

Rendimiento X Rendimiento Y *100 = n Rendimiento X


9

Definicin de rendimiento - Ejemplo


La mquina A ejecuta un programa en 10s y la mquina B ejecuta el mismo programa en 15 s,
cunto ms rpida es 1 respecto de B? A 1
n% = 100 TCPU A TCPU B RA RB % = 100 1 RB TCPU B 1 1 1 1 10 15 = 50% % = 100 1 15

cunto ms lenta es B respecto de A?


n% = 100
Curso 2005/2006

TCPU A TCPU B RA RB % = 100 1 RA TCPU A

1 1 % = 100 10 15 = 33.3% 1 10
10

Fundamentos de Computadores

Medidas del rendimiento


MIPS (Million Instructions Per Second ) MFLOPS (Millions of Floating Point Operations Per Second )
TOP 1 de 2005: IBM BlueGene/L 280600 GFLOPS y 131072 P TOP 8 de 2005: IBM Mare Nostrum 27910 GLOPS con 4800 P

Frecuencia del reloj (MHz, GHz) inversa del periodo de reloj

A 4GH = 250ps

one clock period

Tiempo de ejecucin
MIPS, MFLOPS no son medidas fiables El tiempo es la nica medida fiable del rendimiento de un computador Medida del tiempo
El sistema operativo UNIX proporciona la orden time nombre de programa para medir el tiempo Ejemplo de salida de time: 90.7u 12.9s 2:39s 65%

Curso 2005/2006

Fundamentos de Computadores

11

Ecuacin clsica del TCPU Frmula bsica


El tiempo de CPU es el tiempo que la CPU tarda en la ejecucin de un programa
TCPU = # ciclos de reloj por programa Tiempo de ciclo

Ciclos por instruccin (medio)


CPI medio = # ciclos de reloj por programa # instrucciones

Tiempo de CPU = # de instrucciones por programa Ciclos por instruccin (medio) Tiempo de ciclo
Curso 2005/2006 Fundamentos CPI T TCPU = Nde Computadores C 12

Ecuacin clsica del TCPU - CPImedio


El clculo del CPImedio considera los tipos, los CPI individuales y los promedios de uso de las instrucciones n

CPI medio = CPI i IC i


i =1

ICi es el porcentaje del # de instrucciones de tipo-i ejecutadas CPIi es el # de ciclos de reloj por instruccin del tipo-i n es el # de instrucciones

CPImedio vara con los programas y los datos de entrada


Curso 2005/2006 Fundamentos de Computadores 13

Ecuacin clsica del TCPU Dependencias


TCPU = N CPI TC
#instrucciones Algoritmo Lenguaje de programacin Compilador ISA Estructura del computador Tecnologa
Curso 2005/2006 Fundamentos de Computadores

CPImedio X X X X X

Tc

X X X X

X X X
14

Ecuacin clsica del TCPU Autoevaluacin I


Considere dos mquinas A y B con idnticas arquitecturas del repertorio de instrucciones:
A tiene Tc = 1ns y CPI = 2 para un programa concreto B tiene Tc = 2ns y CPI de 1.2 para ese programa

Cunto ms rpida (en %) sera una mquina que la otra? Cunto ms lenta (en %) sera una mquina que la otra?

Curso 2005/2006

Fundamentos de Computadores

15

Ecuacin clsica del TCPU Autoevaluacin II


Para una declaracin particular de un lenguaje de alto nivel, el diseador del compilador considera dos secuencias de cdigo diferentes
Cul ejecutar mayor # de instrucciones? Cul es ms rpida? Cul es el CPI de cada secuencia?

Instruccin A B C
Tipo A

CPI 1 2 3
Tipo B Tipo C

Sec1 Sec2

2 4

1 1

2 1
16

Curso 2005/2006

Fundamentos de Computadores

Ecuacin clsica del TCPU Autoevaluacin III


Cunto ms rpida sera la mquina si una cambio
del sistema de memoria reduce el CPIload 2 ciclos? del sistema de prediccin de saltos reduce el CPIbranch 1ciclo? del ISA reduce el # de instrucciones ALU a la mitad Op ALU Load Store Branch ICi 50% 20% 10% 20% CPIi 1 5 3 2 ICi CPIi 0.5 1.0 0.3 0.4 2.2
Curso 2005/2006 Fundamentos de Computadores 17

Ecuacin clsica del TCPU Autoevaluacin IV


Una aplicacin escrita en Java tarda 25s en un procesador. Con la nueva versin del compilador Java el nmero de instrucciones a ejecutar es reducido en un 40% pero el CPI aumenta en un 1.1%. Cunto tiempo tardar la aplicacin en terminar?

Curso 2005/2006

Fundamentos de Computadores

18

Programas para la evaluacin del rendimiento - Benchmarks


Programas de una carga de trabajo estndar para predecir el rendimiento con una carga de trabajo real
Programas reales tpicos
Compiladores (gcc), tratamiento de texto (TeX), herramientas CAD (SPICE)

Ncleos de programas reales (Kernels)


Coleccin de pequeas partes intensivas temporalmente de programas reales Ejemplo: Livermore Loops, Linpack

Programas triviales (toy bechmarks)


10-100 lneas de programa. Ejemplo: quickshort, puzzle,..

Programas sintticos
Programas artificiales para evaluar una determinada caracterstica Ejemplo: Whetstone (punto flotante), Dhrystone (aplicaciones no numricas)

Fiabilidad de resultados?
Mejoras especficas (caso matrix300 de los SPEC89) Mejoras errneas (caso Intel)

Curso 2005/2006

Fundamentos de Computadores

19

SPEC Benchmarks
Standard Perfomance Evaluation Cooperative (desde 1988)
AMD * Apple * ATI * Borland * Dell * HP * IBM * Intel * Microsoft * NVIDIA * Oracle * SGI * Sun * Symantec

Benchmarks para CPU, HPC, aplicaciones grficas, servidores/clientes java, servidores/clientes de correo, sistemas de ficheros, web htpp://www.spec.org
Curso 2005/2006 Fundamentos de Computadores 20

SPEC89
Conjunto pequeo de programas
4 de aritmtica entera y 6 de punto flotante No hay distincin entre SPECs de aritmtica entera y punto flotante

Media geomtrica
Es independiente de la mquina de referencia No predice tiempos
SPEC programa = SPEC global =
Curso 2005/2006

Tiempo de ejecucin de un VAX 11/780 Tiempo de ejecucin de la mquina a medir


programai

( SPEC

1 n

Fundamentos de Computadores

21

SPEC92 y SPEC95
SPEC92
SpecInt92 (6 programas aritmtica entera) SpecFp92 (14 programas de aritmtica en FP) SPECbase
Medida obtenida sin hacer uso de los flags del compilador que optimiza el cdigo generado segn el programa especfico. Los flags especficos llegan a aumentar el rendimiento entre un 15% y un 30% VAX 11/780 -> 1 Spec(int/fp)92

SPEC95
SpecInt95 (8 programas aritmtica entera) SpecFp95 (10 programas de aritmtica en FP) Los SPECs de cada programa se normalizan respecto a una Sun SPARCStation 10/40 (la VAX 11/780 ya no es operativa)
SparcStation 10/40 -> 1 Spec(int/fp)95 SparcStation 10/40 -> 41.26 SpecInt92 - 34.35 Specfp92

Curso 2005/2006

Fundamentos de Computadores

22

SPEC95 - Programas
Benchmark go m88ksim gcc compress li ijpeg perl vortex tomcatv swim su2cor hydro2d mgrid applu trub3d apsi fpppp wave5 Description Artificial intelligence; plays the game of Go Motorola 88k chip simulator; runs test program The Gnu C compiler generating SPARC code Compresses and decompresses file in memory Lisp interpreter Graphic compression and decompression Manipulates strings and prime numbers in the special-purpose programming language Perl A database program A mesh generation program Shallow water model with 513 x 513 grid quantum physics; Monte Carlo simulation Astrophysics; Hydrodynamic Naiver Stokes equations Multigrid solver in 3-D potential field Parabolic/elliptic partial differential equations Simulates isotropic, homogeneous turbulence in a cube Solves problems regarding temperature, wind velocity, and distribution of pollutant Quantum chemistry Plasma physics; electromagnetic particle simulation

Curso 2005/2006

Fundamentos de Computadores

23

SPEC95 Pentium
Procesador Pentium 100 -> 200 MHz (x2) Pentium Pro 150 -> 200 MHz (x1.33) SpecInt95 (mejora) 1.7 1.24 SpecFp95 (mejora) 1.4 1.18

10 9 8 7 SPECint 6 5 4 3 2 1 0 50 100 150 Clock rate (M Hz) 200 P entium P entium Pro 250

10 9 8 7 SPECfp 6 5 4 3 2 1 0 50 100 150 200 Pentium Pentium Pro 250 Clock rate (M Hz)

Curso 2005/2006

Fundamentos de Computadores

24

SPEC CPU2000

SPEC programa = Tiempo ejecucin Sun Ultra5_10 (300MHz 256MB) Tiempo de ejecucin

SPEC global =

( SPEC

programai

1 n

CINT2000 (Integer Component of SPEC CPU2000)


12 aplicaciones enteras (11 C, 1 C++) Cint_rate, Cint_non_rate

CFP2000 (Floating Point Component of SPEC CPU2000)


14 aplicaciones FP (6 F77, 4 F90, 4 C) Cfp_rate, Cfp_non_rate

Curso 2005/2006

Fundamentos de Computadores

25

SPEC CPU2000 - Programas


CINT2000
164.gzip Compresin de datos 175.vpr Circuitos FPGA 176.gcc Compilador de C 181.mcf Resuelve flujos de red de mnimo coste 186.crafty Programa de ajedrez 197.parser Procesamiento de lenguaje natural 252.eon Ray tracing 253.perlbmk Perl 254.gap Teora computacional de grupos 255.vortex Base de datos orientada a objetos 256.bzip2 Utilidad de compresin de datos 300.twolf Simulador
CFP2000
168.wupwise Cromodinmica cuntica 171.swim Modelo de agua 172.mgrid Resuelve campo potencial en 3D mutimalla 173.applu Ecuaciones diferenciales parciales parablicas/elpticas 177.mesa librera grfica 3D 178.galgel Dinmica de fluidos 179.art Simulacin de redes neuronales 183.equake Simulacin de elementos finitos 187.facerec Reconocedor de caras 188.ammp Qumica computacional 189.lucas Teora de nmeros: N primos 191.fma3d simulacin de choques mediante elementos finitos 200.sixtrack modelo de acelerador de partculas 301.apsi Meteorologa: temperatura, viento y distribucin de la polucin

Curso 2005/2006

Fundamentos de Computadores

26

SPEC CINT2000 y CFP2000 para Pentium III y Pentium IV

Curso 2005/2006

Fundamentos de Computadores

27

SPECweb99
La primera versin de benchmarks para servidores web data de 1996. Actualizados en 1999 y 2005 Caractersticas
Orientados a medir throughput ( nmero mximo de conexiones que puede soportar un sistema servidor web). El sistema debe proporcionar respuesta en un tiempo dado y con un nmero mximo de errores Son benchmarks de entornos multiprocesadores El programa para realizar las peticiones forma parte del benchmark El rendimiento depende en gran medida de las caractersticas del sistema, incluyendo el sistema de discos y la red

Curso 2005/2006

Fundamentos de Computadores

28

SPECweb99 - Sistemas Dell PowerEdge


La frecuencia de reloj no es la caracterstica ms importante en servidores web
El 8400 tiene el doble de procesadores lentos que el 6600 y ofrece mejor rendimiento

La configuracin adecuada de los sistemas permite obtener mejor rendimiento (adicin de discos e incremento de la conectividad hasta que el procesador sea el cuello de botella)
Sistema 1550/1000 1650 2500 2550 2650 4600 6400/700 Procesador Pentium III Pentium III Pentium III Pentium III Pentium 4 Xeon Pentium 4 Xeon Pentium III N discos 2 3 8 1 5 10 5 N CPUs 2 2 2 2 2 2 4 N redes 2 1 4 1 4 4 4 f (GHz) 1.00 1.40 1.13 1.26 3.06 2.20 0.70 2.00 0.70 Resultado 2765 1810 3435 1454 5698 4615 4200 6700 29 8001

6600 Pentium 4 Xeon MP 8 4 8 Curso 2005/2006 Fundamentos de Computadores 8450/700 Pentium III Xeon 7 8 8

Benchmarks para embedded computing systems


Un sistema empotrado es un sistema informtico de uso especfico construido dentro de un dispositivo mayor Las aplicaciones dispares de los sistemas empotrados (tiempo real restringido, tiempo real flexible, coste/rendimiento) dificultan el diseo de benchmarks Los benchmarks estn en un estado primitivo. Los fabricantes tienen preferencias de benchmarks diferentes (kernels como Dhrystone) EDN Embedded Microprocessor Benchmark Consortium (EEMBC)
34 benchmarks divididos en 5 clases: automocin/industrial, consumo, networking, automatizacin de oficinas, telecomunicaciones Mejor conjunto de benchmarks estandarizados en el entorno embedded Permite a los fabricantes dar resultados tanto para versiones modificadas del cdigo fuente como para versiones codificadas a mano de las aplicaciones (los kernels pequeos posibilitan la tarea.

Curso 2005/2006

Fundamentos de Computadores

30

Fiabilidad de los programas de prueba


El fabricante mejorar el rendimiento con optimizaciones especficas de los benchmarks (los programas reales no mejoran en factores similares) Generalmente, los benchmarks reducidos y los sintticos
No cargan la memoria principal del sistema de forma realista No calculan nada til para un usuario (existen excepciones) No reflejan el comportamiento de ningn programa

Los benchmarks reales son difciles de realizar, situacin que se agudiza en los casos de:
Mquinas no construidas, simuladores ms lentos Benchmarks no portables Compiladores no disponibles

Curso 2005/2006

Fundamentos de Computadores

31

Ms mtricas del rendimiento MIPS (1/3)


MIPS (millones de instrucciones por segundo)
MIPS
Nativos

Recuento de Instrucciones Tiempo de Ejecucin x 106

MIPS

Nativos

Frecuencia del reloj CPI x 106

MIPS de pico
MIPS obtenidos con un programa de CPI mnimo (el programa podra ser intil) Dan una idea del rendimiento terico mximo de la mquina. Algunos fabricantes la utilizan a veces en la publicidad de los productos
Curso 2005/2006 Fundamentos de Computadores 32

Ms mtricas de rendimiento MIPS (2/3)


MIPS relativos
MIPS obtenidos respecto a una mquina de referencia

MIPS Re lativos =

Tiempo Tiempo

Re ferencia

x MIPS Re ferencia

En _ la _ maquina

TiempoRe ferencia = Tiempo de ejecucin de un programa en la mquina de referencia TiempoEn _ la _ mquina = Tiempo de ejecucin del mismo programa en la mquina a medir MIPS Re ferencia = MIPS para el computador de referencia

Proporcionales al tiempo de ejecucin SLO para un programa dado con una entrada dada A medida que pasan los aos la mquina de referencia deja de estar operativa Debera el computador de referencia ser actualizado con una nueva versin de sistema operativo y compilador?
Curso 2005/2006 Fundamentos de Computadores 33

Ms mtricas de rendimiento MIPS (3/3)


Inconvenientes de la mtrica MIPS:
Los MIPS dependen del # de instrucciones ejecutadas y por tanto del repertorio de instrucciones Los MIPS no posibilitan comparar distintas arquitecturas Los MIPS varan entre programas en el mismo computador (no es una medida absoluta por mquina) Los MIPS no tienen en cuenta los tres factores de la ecuacin de tiempo de CPU (slo dos de ellos) Es posible una variacin de los MIPS inversamente proporcional al rendimiento
Curso 2005/2006 Fundamentos de Computadores 34

Ms mtricas de rendimiento MFLOPS


MFLOPS (Millones de operaciones en coma flotante por segundo)
MFLOPS
=

N operaciones en punto flotante Tiempo de ejecucin x 106

Inconvenientes
Depende del programa y SLO es aplicable a las operaciones en coma flotante Instrucciones en coma flotante no comparables entre diferentes mquinas
Mquina A: +, -, * y / Mquina B: No tiene / (dar mas MFLOPS)

Depende de la mezcla de operaciones coma flotante rpidas y lentas


Los MFLOPS para 100 sumas sern mayores que para 100 divisiones

MFLOPS normalizados
+, -, * y comparaciones: peso 1 OP / y raz cuadrada: peso 4 OP Exponencial y trigonomtricas: 8 OP

Curso 2005/2006

Fundamentos de Computadores

35

Mtodos de comparacin y resumen de los resultados


Media aritmtica 1 n TMedio = Ti n i =1
(Si el rendimiento se expresa como una frecuencia (ej. MFLOPS,))

Media aritmtica ponderada


n i =1

Media armnica n 1 donde Vi = n 1 Ti V i =1 i

TMedio = Pesoi * Ti
Pesoi = Frecuencia del programa isimo. Suma de los pesos igual a 1.

Media armnica ponderada 1 n Pesoi V i =1 i


Ti

Media geomtrica para tiempos normalizados TMedio = n

T
i =1

Normalizado

Normalizado

= Tiempo de ejecucin, normalizado para la mquina de referencia, para el programa isimo de un total de n.

Ti = Tiempo de ejecucin del programa isimo

n = N de programas de la carga de trabajo

Curso 2005/2006

Fundamentos de Computadores

36

Ley de Amdahl (o ley de rendimientos decrecientes)


El posible aumento de rendimiento para una mejora dada est limitado por la cantidad que se utiliza la caracterstica mejorada
Rendimiento despus de la mejora Tiempo de ejecucin antes de la mejora = Rendimiento antes de la mejora Tiempo de ejecucin despus de la mejora Tiempo de ejecucin despus de la mejora = Tiempo de ejecucin afectado por la mejora = + Tiempo de ejecucin no afectado por la mejora Cantidad de la mejora Ganancia velocidad =

Si suponemos que la mejora acelera una fraccin F de la tarea en un factor de S, entonces la ganancia de velocidad (speedup) vendr dada por:
G= 1 F + (1 F ) S

F 1

1-F

Corolario: Procurar hacer rpido el caso comn


Curso 2005/2006 Fundamentos de Computadores 37

Ley de Amdahl Ejemplos (1/3)


Calcula la ganancia de rendimiento obtenida con la modificacin de la unidad de control de un procesador si el tiempo de ejecucin de la tarea disminuye de 2,8s a 1,9s La ejecucin de un programa tarda en una mquina 100s, de los cuales 80 corresponden a instrucciones de multiplicar
Cunto hay que mejorar la velocidad de la multiplicacin para que mi programa sea cuatro veces ms rpido? Y para que sea cinco veces ms rpido?
Curso 2005/2006 Fundamentos de Computadores 38

Ley de Amdahl Ejemplos (2/3)


Una propuesta de mejora de un computador implica que el precio del computador sea el doble. Si el procesador est activo durante el 60% del tiempo de ejecucin total de la tarea y la mejora supone aumentar la velocidad del procesador al triple, averigua el inters de introducir la mejora usando para ello la relacin precio/ganancia de rendimiento La adquisicin de un nuevo modelo de computador supone un incremento en la ganancia de rendimiento del 50% respecto al antiguo. Teniendo en cuenta que el antiguo tardaba en ejecutar una tarea 22 segundos, cunto tiempo emplear el nuevo en ejecutar la misma tarea?
Curso 2005/2006 Fundamentos de Computadores 39

Ley de Amdahl Ejemplos (3/3)


Suponga paralela un 90% o lo que es lo mismo, una tarea que puede ejecutarse por varios procesadores simultneamente, calcula la mejora cuando P = 10, 100 y 100
Speedup P = Speedup10 =

0.1 +

1 0.9 0.1 + 10

= 5.3

Speedup100 =

1 0.9 0.1 + 100

0.9 P = 9.17

Speedup1000 =

1 0.9 0.1 + 1000

= 9.91

Calcula la mejora (para P = 100), si mejoramos en una cantidad 2 la parte no paralela 1


Speedup100, 2 =

0.1 0.9 + 2 100

= 16.95

Calcula la mejora si a continuacin aumentamos la fraccin paralelizable en 0.05?


Speedup100 =

0.95 0.05 + 100

= 16.80

Curso 2005/2006

Fundamentos de Computadores

40

Rendimiento, potencia y eficiencia de energa


Los sistemas empotrados y porttiles estn limitados por el consumo de potencia (adems de por el coste y rendimiento)
Utilizan enfriamiento pasivo (ventiladores versus tubos de calor) y alimentacin con bateras (la duracin de las bateras no ha aumentado)

Tcnicas de ahorro de potencia


Desconexin de las partes no utilizadas Reduccin esttica o dinmica de la frecuencia de reloj y el voltaje
Curso 2005/2006 Fundamentos de Computadores 41

Rendimiento, potencia y eficiencia de energa Familia Pentium (1/2)


Intel Mobile Pentium y Serie Pentium M
Procesadores diseados para aplicaciones mviles alimentadas por bateras Tienen una frecuencia mxima (mximo rendimiento) y una frecuencia reducida (mayor vida de la batera) Rendimiento/potencia optimizados mediante cambios dinmicos de frecuencia

El Pentium M tiene mejor rendimiento a fmxima y a fadaptativa El Pentium M a fmnima es ms lento que el Pentium 4-M y ms rpido que el Pentium III-M

Curso 2005/2006

Fundamentos de Computadores

42

Rendimiento, potencia y eficiencia de energa Familia Pentium (2/2)


La eficiencia energtica mide la relacin entre rendimiento y consumo medio de potencia de entornos con limitaciones de potencia Los Pentium M (diseo especfico) tienen mayor eficiencia energtica que las versiones mobile de Pentium III y Pentium IV (rediseo)
Curso 2005/2006 Fundamentos de Computadores 43

Conclusiones
El arte del diseo consiste en encontrar el equilibrio entre coste y rendimiento El TIEMPO es la medida del rendimiento de un computador

TCPU = N CPI Tciclo

Imprescindible usar buenos benchmarks para medir el rendimiento de forma fiable...No excesiva credibilidad... Las medidas populares del rendimiento no reflejan siempre la realidad, a veces son utilizadas malintencionadamente para inducir a error Ley de Amdahl establece que la ganancia de rapidez est limitada por la parte del programa que no mejora
Curso 2005/2006 Fundamentos de Computadores 44

Prcticas de Fundamentos de Computadores

Ingeniera Informtica Facultad de Informtica Universidad de Las Palmas de Gran Canaria PRESENTACIN
Las prcticas de laboratorio de esta asignatura se centran en el conocimiento y uso de la arquitectura del R2000 a travs de su conjunto de instrucciones. Para ello se han elaborado unas prcticas en las que el alumno utilizar el lenguaje ensamblador de este procesador y conocer su funcionamiento mediante el simulador SPIM. Estas prcticas se han diseado para que el alumno pueda seguirlas de forma casi autnoma, requiriendo nicamente puntuales aclaraciones por parte del profesor. Con ello se pretende que el alumno pueda repasar fuera del horario de prcticas aquellas partes que no hayan quedado lo suficientemente claras. Las prcticas se han dividido en las siguientes partes:

Parte 1: El simulador SPIM Introduccin. Descripcin del simulador PCSpim Sintaxis del Lenguaje ensamblador del MIPS R2000. Problema propuesto.

Parte 2: Los datos en memoria Introduccin. Declaracin de palabras en memoria. Declaracin de bytes en memoria. Declaracin de cadenas de caracteres. Reserva de espacio en memoria. Alineacin de datos en memoria. Problemas propuestos.

Parte 3: Carga y almacenamiento de los datos Introduccin. Carga de datos inmediatos (constantes). Carga de palabras (transferencia de palabras desde memoria a registros). Carga de bytes (transferencia de bytes desde memoria a registros). Almacenamiento de palabras (transferencia de palabras desde registros a memoria).

Almacenamiento de bytes (transferencia de bytes desde registros a memoria). Problemas propuestos. Parte 4: Las operaciones aritmticas y lgicas Introduccin. Operaciones aritmticas con datos inmediatos (constantes). Operaciones aritmticas con datos en memoria . Operaciones lgicas. Operaciones de desplazamiento. Problemas propuestos. Parte 5: Interfaz con el programa Introduccin. Impresin de una cadena de caracteres. Impresin de enteros. Lectura de enteros. Lectura de una cadena de caracteres. Problemas propuestos. Parte 6: Estructuras de control: condicionales y bucles Introduccin. Estructura de control condicional Si-entonces con condicin simple. Estructura de control condicional Si-entonces con condicin compuesta. Estructura de control condicional Si-entonces-sino con condicin simple. Estructura de control condicional Si-entonces-sino con condicin compuesta. Estructura de control repetitiva para. Estructura de control repetitiva mientras. Problemas propuestos. Parte 7: Gestin de subrutinas Introduccin. Gestin de la pila. Llamada y retorno de una subrutina. Llamadas anidadas de subrutinas. Paso de parmetros. Bloque de activacin de una subrutina. Problemas propuestos. Cada una de estas partes no se corresponde con una sesin de prcticas. As, salvo la primera sesin que ser ms guiada, en el resto de sesiones el alumno o equipo de alumnos seguir un ritmo de aprendizaje propio, teniendo en cuenta que deber haber cubierto todas las partes de estas prcticas en 7 sesiones de 2 horas. Desde este enlace puedes descargar el simulador que se va a utilizar (SPIM) para Windows:

Ejecutable SPIM para Windows (comprimido .zip)

El simulador SPIM-->

Parte I. El simulador SPIM


Introduccin. Descripcin del simulador PCSpim. Sintaxis del Lenguaje ensamblador del MIPS R2000. Problema propuesto.

Introduccin
El SPIM (MIPS al revs) es un simulador que ejecuta programas en lenguaje ensamblador para los computadores basados en los procesadores MIPS R2000/R3000. La arquitectura de este tipo de procesadores es RISC, por lo tanto simple y regular, y en consecuencia fcil de aprender y entender. La pregunta obvia en estos casos es por qu se va a utilizar un simulador y no una mquina real. Las razones son diversas: entre ellas cabe destacar la facilidad de poder trabajar con una versin simplificada y estable del procesador real. Los procesadores actuales ejecutan varias instrucciones al mismo tiempo y en muchos casos de forma desordenada, esto hace que sean ms difciles de comprender y programar. El simulador a utilizar en prcticas es una versin grfica del SPIM, denominadaPCSPIM. La instalacin del PCSpim es sencilla: Windows Ejecutar el programa spimwin.exe. Se realizar la instalacin y slo habr que ejecutar el icono PCSpim for Windows para arrancar el programa.

Descripcin del Simulador PCSpim


Al ejecutar PCSpim aparece la siguiente ventana

La ventana principal de PCSpim se divide en cuatro partes: 1. La parte superior de la ventana es la barra de mens. Permite acceder a las operaciones con ficheros (men File), especificar las opciones del simulador (men Simulator), seleccionar la forma de visualizacin de las ventanas incluidas en la ventana principal (men Window), y obtener informacin de ayuda (men Help). 2. Debajo de la barra de mens se encuentra la barra de herramientas que incluye en forma de botones algunas de las acciones ms comunes en PCSpim. 3. La parte central de la ventana de la aplicacin sirve para visualizar cuatro ventanas: Registros (Registers), Segmento de Texto (Text Segment), Segmento de Datos (Data Segment) y Mensajes (Messages). A continuacin se presentan las caractersticas de estas cuatro ventanas:

Registros (Registers) Aparecen el nombre y el contenido de los registros enteros, R0 a R31, con sus correspondientes alias entre parntesis, los registros de coma flotante, FP0 a FP31, los registros de control de la CPU (BadVAddr, Cause, Status, EPC) y los registros especiales para la multiplicacin y divisin entera, HI y LO.

Segmento de Texto (Text Segment) Se pueden ver cada una de las direcciones, el cdigo mquina, las instrucciones ensambladas y el cdigo fuente del programa de usuario (a partir de la direccin 0x00400000) y del ncleo del simulador (a partir de la direccin 0x80000000). Antes de que se cargue ningn programa aparecen una serie de instrucciones, introducidas por el simulador para lanzar adecuadamente la ejecucin de nuestro cdigo.

Segmento de Datos (Data Segment) Aparecen las direcciones y datos almacenados en las zonas de memoria de datos del usuario (a partir de la direccin 0x10000000 en adelante), el ncleo del simulador (a partir de la direccin 0x90000000) y la pila (el puntero de pila, registro sp, se encuentra cargado con la direccin 0x7fffeffc, y sta crece hacia direcciones decrecientes).

Mensajes (Messages) En este panel se observan los diversos mensajes que comunica el simulador, que nos tendrn informados del resultado y evolucin de las acciones que ste lleva a cabo.

Existe una quinta ventana, llamada Consola, independiente, a la que se accede con la opcin Window->Console, y que sirve para realizar la entrada/salida del programa simulado. En esta ventana se teclean los datos de entrada, cuando sean necesarios, y se lee la informacin que pueda imprimir nuestro programa.

Carga y ejecucin de programas


Los ficheros de entrada a PCSpim son de tipo texto ASCII, que incluyen las instrucciones ensamblador del programa que se desea simular.

Para cargar un programa se selecciona File->Open (o el botn Open de la barra de herramientas, con el icono de la carpeta abrindose) con lo que aparecer un cuadro de dilogo donde se puede seleccionar el fichero que se quiere abrir. Para ejecutar el programa, Simulator->Go (o el botn Go de la barra de herramientas, con el icono de un programa con una flecha que indica ejecucin), har que PCSpim comience a simularlo. Previamente pedir que se le indique la direccin de comienzo del programa (en hexadecimal). En nuestro caso este valor ser normalmente 0x00400000 (donde comienza nuestro segmento de texto). Si se desea detener la ejecucin del programa, Simulator->Break (Ctrl-C). Para continuar con la ejecucin, Simulator->Continue. Si el programa incluye operaciones de lectura o escritura desde el terminal, PCSpim despliega una ventana independiente llamada Console, a travs de la cual se realiza la entrada-salida (se simula un terminal de la mquina MIPS).

Depuracin de programas
Si un programa no hace lo que se esperaba, hay algunas caractersticas del simulador que ayudarn a depurar el programa. Con Simulator->Single Step (o bien la tecla F10) es posible ejecutar las instrucciones del programa una a una (paso a paso). Esto permite verificar el contenido de los registros, la pila, los datos, etc., tras la ejecucin de cada instruccin. Empleando Simulator->Multiple Step se consigue ejecutar el programa un nmero determinado de instrucciones. PCSpim tambin permite ejecutar todas las instrucciones de un programa hasta llegar a un determinado punto, denominado breakpoint (punto de ruptura), a partir del cual se puede recuperar el control del programa y, por ejemplo, continuar paso a paso. Para ello, se selecciona Simulator->Breakpoints (o el botn Breakpoints de la barra de herramientas, con el icono de una mano indicando detencin). Una vez seleccionada esa opcin, PCSpim muestra una ventana en la que pide la(s) direccin(es) en la(s) que se quiere que el programa se detenga, para recuperar el control sobre el mismo. Se debe mirar cul es la direccin en que interesa parar el programa, en la ventana del segmento de texto, e introducirla (en hexadecimal) en la ventana, pulsando a continuacin la tecla Add, para aadir dicho breakpoint. Se pueden introducir tantos puntos de ruptura como se desee. Una vez encontrado el error y corregido, se vuelve a cargar el programa con Simulator>Reload<nombre_fichero>. Con Simulator->Clear Registers se pone el contenido de los registros a cero (excepto $sp), mientras que Simulator->Set Value permite cambiar el valor actual de un registro o de una posicin de memoria por un valor arbitrario. Otras opciones tiles disponibles en el men principal son las contenidas en el men de ventana (Window). Con ellas se pueden mostrar y ocultar las barras de herramientas y de estado, as como las distintas ventanas del simulador, organizar visualmente las mismas y limpiar la consola de entrada/salida.

PCSpim tambin proporciona ayuda en lnea (Opcin Help->Help Topics), que muestra un documento con ayuda sobre el programa, y el icono de la barra de herramientas con una flecha y una interrogacin, que sirve para pedir ayuda sobre una opcin concreta de los mens.

Opciones del simulador


Al elegir la opcin Simulator->Settings se muestran las diversas opciones que ofrece el simulador. PCSpim utiliza estas opciones para determinar cmo cargar y ejecutar los programas. Una vez escogida esta opcin aparece la siguiente ventana

El significado de las opciones es el siguiente: 1. Save window positions. PCSpim guarda la posicin de las ventanas al salir, y la recupera al ejecutar de nuevo PCSpim. 2. General registers/Floating point registers in hexadecimal. Fija el formato de los registros en hexadecimal. En caso de no estar seleccionada esta opcin, se muestra el contenido en decimal (con signo; es decir, interpretado en complemento a 2). 3. Bare machine. Simula el ensamblador sin pseudoinstrucciones o modos de direccionamiento suministrados por el simulador. 4. Allow pseudo instructions. Determina si se admiten las pseudoinstrucciones. 5. Load trap file. Indica si se debe cargar el manejador de interrupciones (fichero trap.handler). En tal caso, cuando se produce una excepcin, PCSpim salta a la direccin 0x80000080, que contiene el cdigo necesario para tratar la excepcin. 6. Mapped I/O. Si se selecciona esta opcin, se activa la entrada-salida mapeada en Memoria. Los programas que utilizan llamadas al sistema (syscall), para leer o escribir en el terminal, deben desactivar esta opcin. Aquellos otros programas que vayan a hacer entrada-salida mediante mapeo en memoria deben tenerla activada.

7. Quiet. Si se activa, PCSpim no imprime mensaje alguno cuando se producen las excepciones. De otra manera, se muestra un mensaje cuando ocurre una excepcin.

Sintaxis del Lenguaje ensamblador del MIPS R2000


La sintaxis del lenguaje ensamblador es algo que se descubrir poco a poco, pero es interesante introducir algunos conceptos bsicos: Comentarios Estos son muy importantes en los lenguajes de bajo nivel ya que ayudan a seguir el desarrollo del programa y, por tanto, se usan con profusin. Comienzan con un carcter de almohadilla # y desde este carcter hasta el final de la lnea es ignorado por el ensamblador. Identificadores Son secuencias de caracteres alfanumricos, guiones bajos (_) y puntos (.), que no comienzan con un nmero. Los cdigos de operacin son palabras reservadas que no pueden ser utilizadas como identificadores. Etiquetas Son identificadores que se sitan al principio de una lnea y seguidos de dos puntos. Sirven para hacer referencia a la posicin o direccin de memoria del elemento definido en sta. A lo largo del programa se puede hacer referencia a ellas en los modos de direccionamiento de las instrucciones. Pseudoinstrucciones No son instrucciones que tengan su traduccin directa al lenguaje mquina que entiende el procesador, pero el ensamblador las interpreta y las convierte en una o ms instrucciones mquina reales. Permiten una programacin ms clara y comprensible. A lo largo del desarrollo de las prcticas se irn introduciendo diferentes pseudoinstrucciones que permite utilizar este ensamblador. Directivas Tampoco son instrucciones que tengan su traduccin directa al lenguaje mquina que entiende el procesador, pero el ensamblador las interpreta y le informan a ste de cmo tiene que traducir el programa. Son identificadores reservados, que el ensamblador reconoce y que van precedidos por un punto. A lo largo del desarrollo de las prcticas se irn introduciendo las distintas directivas que permite utilizar este ensamblador. Por otro lado, los nmeros se escriben, por defecto, en base 10. Si van precedidos de 0x, se interpretan en hexadecimal. Las cadenas de caracteres se encierran entre comillas

dobles (). Los caracteres especiales en las cadenas siguen la convencin del lenguaje de programacin C:

Salto de lnea: \n Tabulador: \t Comilla: \

A la hora de generar un fichero con un programa en ensamblador (extensin .s), hay que tener en cuenta que algunas versiones del SPIM tienen un bug, que se evita haciendo que los cdigos en ensamblador almacenados en estos ficheros terminen siempre con una lnea en blanco (vaca).

Problema propuesto
Dado el siguiente ejemplo de programa ensamblador:
.data dato: memoria a 3 .text .globl main: main lw $t0, dato($0) # debe ser global

.byte 3

# inicializo una posicin de

Indica las etiquetas, directivas y comentarios que aparecen en el mismo.

<--Presentacin

Los datos en memoria-->

Parte II. Los datos en memoria


Introduccin. Declaracin de palabras en memoria. Declaracin de bytes en memoria. Declaracin de cadenas de caracteres. Reserva de espacio en memoria. Alineacin de datos en memoria. Problemas propuestos.

Introduccin
Se comienza viendo cmo se definen los datos en memoria. Para ello hay que recordar que, aunque la unidad base de direccionamiento es el byte, las memorias de estos computadores tienen un ancho de 4 bytes o 32 bits, que se llamar palabra o word, el mismo ancho que el del bus de datos. As pues, cualquier acceso a una palabra de memoria supondr leer cuatro bytes (el byte con la direccin especificada y los tres almacenados en las siguientes posiciones). Las direcciones de palabra deben estar alineadas en posiciones mltiplos de cuatro. Otra posible unidad de acceso a memoria es transferir media palabra (half-word). El ensamblador permite reservar posiciones de memoria para los datos de un programa de usuario, as como inicializar los contenidos de esas direcciones utilizando directivas. En este apartado se describen y crean programas en ensamblador para utilizar estas directivas.

Declaracin de palabras en memoria


Utilizacin de las directivas .data y .word valor Primer ejercicio En el directorio de trabajo crea un fichero con la extensin .s, por ejemplo "ejer1.s", y con el siguiente contenido:
.data palabra1: palabra2: # comienza zona de datos # decimal # hexadecimal

.word 15 .word 0x15

Este programa en ensamblador incluye diversos elementos que se describen a continuacin: la directiva .data dir indica que los elementos que se definen a continuacin se almacenarn en la zona de datos y, al no aparecer ninguna direccin como argumento de dicha directiva, la direccin de almacenamiento ser la que hay por defecto (0x10010000). Las dos sentencias que aparecen a continuacin reservan dos nmeros enteros, de tamao word, en dos direcciones de memoria, una a continuacin de la otra, con los contenidos especificados. Ejecuta el programa xspim desde el directorio de trabajo y crgalo con la opcin File>Open...

Cuestiones

Encuentra los datos almacenados por el programa anterior en memoria. Localiza dichos datos en el panel de datos e indica su valor en hexadecimal. En qu direcciones se han almacenado dichos datos? Por qu? Qu valores toman las etiquetas palabra1 y palabra2?

Segundo ejercicio Crea otro fichero (ejer2.s) o modifica el anterior con el siguiente cdigo:
.data 0x10010000 palabras: .word 15,0x15 # comienza zona de datos # decimal/hexadecimal

Borra los valores de la memoria con la opcin Simulator->Reinitialize y carga el nuevo fichero. Cuestiones

Comprueba si hay diferencias respecto al programa anterior. Crea un fichero con un cdigo que defina un vector de cinco palabras (word), que est asociado a la etiqueta vector, que comience en la direccin 0x10000000 y con los valores 0x10, 30, 0x34, 0x20 y 60. Comprueba que se almacena de forma correcta en memoria. Qu ocurre si se quiere que el vector comience en la direccin 0x10000002? En qu direccin comienza realmente? Por qu?

Declaracin de bytes en memoria

La directiva .byte valor inicializa una posicin de memoria, de tamao byte, a valor.

Tercer ejercicio Crea un fichero con el siguiente cdigo:


.data octeto: # comienza zona de datos # hexadecimal

.byte

0x10

Borra los valores de la memoria Simulator->Reinitialize y carga el nuevo fichero. Cuestiones


Qu direccin de memoria se ha inicializado con el contenido especificado? Qu valor se almacena en la palabra que contiene el byte?

Cuarto ejercicio Crea otro fichero o modifica el anterior con el siguiente cdigo:
.data de datos palabra1: palabra2: .byte .word 0x10,0x20,0x30,0x40 0x10203040 # hexadecimal # hexadecimal # comienza zona

Borra los valores de la memoria con la opcin Simulator->Reinitialize y carga el nuevo fichero. Cuestiones

Cules son los valores almacenados en memoria? Qu tipo de alineamiento y organizacin de los datos (Big-endian o Littleendian) utiliza el simulador? Por qu? Qu valores toman las etiquetas palabra1 y palabra2?

Declaracin de cadenas de caracteres


La directiva .ascii tira permite cargar en posiciones de memoria consecutivas, de tamao byte, el cdigo ascii de cada uno de los caracteres que componen tira.

Quinto ejercicio Crea un fichero con el siguiente cdigo:


.data cadena: .ascii "abcde" octeto: .byte 0xff

# defino string

Borra los valores de la memoria con la opcin Simulator->Reinitialize y carga el nuevo fichero. Cuestiones

Localiza la cadena anterior en memoria. Qu ocurre si en vez de .ascii se emplea la directiva .asciiz? Describe lo que hace esta ltima directiva. Crea otro fichero cargando la tira de caracteres cadena en memoria utilizando la directiva .byte.

Reserva de espacio en memoria


La directiva .space n sirve para reservar espacio para una variable en memoria, inicializndola a 0. Sexto ejercicio Crea un fichero con el siguiente cdigo:
.data # comienza zona de datos espacio: .space 8 # reservo espacio .byte 0xff

Borra los valores de la memoria con la opcin Simulator->Reinitialize y carga el nuevo fichero. Cuestiones

Qu rango de posiciones se han reservado en memoria para la variable espacio? Cuntos bytes se han reservado en total? Y cuntas palabras?

Alineacin de datos en memoria


La directiva .align n alinea el siguiente dato a una direccin mltiplo de 2n. Sptimo ejercicio Crea un fichero con el siguiente cdigo:
.data byte1: espacio: byte2: palabra: # comienza zona de datos .byte .space .byte .word 0x10 4 0x20 10

Borra los valores de la memoria con la opcin Simulator->Reinitialize y carga el nuevo fichero. Cuestiones

Qu rango de posiciones se han reservado en memoria para la variable espacio? Estos cuatro bytes podran constituir los bytes de una palabra? Por qu? A partir de que direccin se ha inicializado byte1? y byte2? A partir de que direccin se ha inicializado palabra? Por qu?

Octavo ejercicio Crea un fichero con el siguiente cdigo:


.data byte1: .align espacio: byte2: palabra: # comienza zona de datos .byte 2 .space .byte .word 0x10 4 0x20 10

Borra los valores de la memoria con la opcin Simulator->Reinitialize y carga el nuevo fichero. Cuestiones

Qu rango de posiciones se ha reservado en memoria para la variable espacio? Estos cuatro bytes podran constituir los bytes de una palabra? Por qu? Qu ha hecho la directiva .align?

Problemas propuestos
1. Disea un programa ensamblador que reserva espacio para dos vectores A y B de 20 palabras cada uno a partir de la direccin 0x10000000.

2. Disea un programa ensamblador que realice la siguiente reserva de espacio en memoria a partir de la direccin 0x10001000: o una palabra o un byte o una palabra alineada en una direccin mltiplo de 4.

3. Disea un programa ensamblador que realice la siguiente reserva de espacio e inicializacin en memoria a partir de la direccin por defecto: 3 (palabra), 0x10 (byte), reserve 4 bytes a partir de una direccin mltiplo de 4, y 20 (byte).

4. Disea un programa ensamblador que defina, en el espacio de datos, la siguiente cadena de caracteres: Esto es un problema utilizando
o o o .ascii .byte .word

5. Sabiendo que un entero se almacena en un word, disea un programa ensamblador que defina en la memoria de datos la matriz A de enteros definida como

a partir de la direccin 0x10010000 suponiendo que: o La matriz A se almacena por filas. o La matriz A se almacena por columnas.

<--El simulador SPIM

Carga y almacenamiento de los datos-->

Parte III. Carga y almacenamiento de los datos


Introduccin. Carga de datos inmediatos (constantes). Carga de palabras (transferencia de palabras desde memoria a registros). Carga de bytes (transferencia de bytes desde memoria a registros). Almacenamiento de palabras (transferencia de palabras desde registros a memoria). Almacenamiento de bytes (transferencia de bytes desde registros a memoria). Problemas propuestos.

Introduccin
En esta tercera parte se estudia cmo cargar los datos en los registros del R2000 (empleando los registros generales del procesador) y almacenar despus su valor en memoria. Dado que la arquitectura del R2000 es RISC, utiliza un subconjunto concreto de instrucciones que permiten las acciones de carga y almacenamiento de los datos entre los registros del procesador y la memoria. Generalmente, las instrucciones de carga de un dato de memoria a registro comienzan con la letra l (de load en ingls) y las de almacenamiento de registro en memoria con s (de store en ingls), seguidos por la letra inicial correspondiente al tamao de dato que se va a mover (en ingls), b para byte, h para media palabra y w para palabra.

Carga de datos inmediatos (constantes)

Primer ejercicio Crea un fichero con el siguiente cdigo:


.text main: # zona de instrucciones lui $s0, 0x8690

La directiva .text sirve para indicar el comienzo de la zona de memoria dedicada a las instrucciones. Por defecto esta zona comienza en la direccin 0x00400000 y en ella, se pueden ver las instrucciones que ha introducido el simulador para

ejecutar, de forma adecuada, nuestro programa. La primera instruccin de nuestro programa debe estar referenciada con la etiqueta main:. Esta etiqueta le indica al simulador dnde est el principio del programa que debe ejecutar. Por defecto hace referencia a la direccin 0x00400020. A partir de esta direccin, el simulador cargar el cdigo de nuestro programa en el segmento de memoria de instrucciones. La instruccin lui es la nica instruccin de carga inmediata real, y almacena la media palabra que indica el dato inmediato de 16 bits en la parte alta del registro especificado, en este caso s0. La parte baja del registro se pone a 0. Borra los valores de la memoria con la opcin del men principal Simulator>Reinitialize y carga el nuevo fichero. Cuestiones Localiza la instruccin en memoria de instrucciones e indica: La direccin donde se encuentra. El tamao que ocupa. La instruccin mquina, analizando cada campo de sta e indicando que tipo de formato tiene. Ejecuta el programa con la opcin del men principal Simulator->Go . Comprueba el efecto de la ejecucin del programa en el registro.

Segundo ejercicio El ensamblador del MIPS ofrece la posibilidad de cargar una constante de 32 bits en un registro utilizando una pseudoinstruccin. sta es la pseudoinstruccin li. Crea un fichero con el siguiente cdigo:
.text main: # zona de instrucciones li $s0, 0x12345678

Borra los valores de la memoria con la opcin del men principal Simulator>Reinitialize , carga el nuevo fichero y ejectalo con la opcin del men principal Simulator->Go Cuestiones Comprueba el efecto de la ejecucin del programa en el registro. Comprueba qu conjunto de instrucciones reales implementan esta pseudoinstruccin.

Carga de palabras (transferencia de palabras desde memoria a registros)

Tercer ejercicio Crea un fichero con el siguiente cdigo:


.data palabra: .word 0x10203040 .text main: lw $s0, palabra($0)

# zona de instrucciones

La instruccin "lw" carga la palabra contenida en una posicin de memoria, cuya direccin se especifica en la instruccin, en un registro. Dicha posicin de memoria se obtiene sumando el contenido del registro (en este caso $0, que siempre vale cero) y el identificador "palabra". Borra los valores de la memoria con la opcin del men principal Simulator>Reinitialize, carga el nuevo fichero y ejectalo con la opcin del men principal Simulator->Go Cuestiones Localiza la instruccin en memoria de instrucciones e indica cmo ha transformado dicha instruccin el simulador. Explica cmo se obtiene a partir de esas dos instrucciones la direccin de palabra. Por qu crees que el simulador traduce de esta forma la instruccin original? Analiza cada uno de los campos que componen estas instrucciones e indica el tipo de formato que tienen. Comprueba el efecto de la ejecucin del programa. Qu pseudoinstruccin permite cargar la direccin de un dato en un registro? Modifica el programa original para que utilice esta pseudoinstruccin, de forma que el programa haga la misma tarea. Comprueba qu conjunto de instrucciones sustituyen a la pseudoinstruccin utilizada una vez el programa se carga en la memoria del simulador. Modifica el cdigo para que en lugar de transferir la palabra contenida en la direccin de memoria referenciada por la etiqueta palabra, se intente transferir la palabra que est contenida en la direccin referenciada por palabra+1. Explica qu ocurre y por qu.

Modifica el programa anterior para que guarde en el registro $s0 los dos bytes de mayor peso de "palabra". Nota: Utiliza la instruccin lh que permite cargar medias palabras (16 bits) desde memoria a un registro (en los 16 bits de menor peso del mismo).

Carga de bytes (transferencia de bytes desde memoria a registros)

Cuarto ejercicio Crea un fichero con el siguiente cdigo:


#------------------------------------------------# # zona de datos # .data #------------------------------------------------# octeto: .byte 0xf3 siguiente: .byte 0x20 #------------------------------------------------# # zona de instrucciones # .text #------------------------------------------------# main: lb $s0, octeto($0)

La instruccin "lb" carga el byte de una direccin de memoria en un registro. Al igual que antes la direccin del dato se obtiene sumando el contenido del registro $0 (en este caso siempre vale cero) y el identificador "octeto".

Borra los valores de la memoria con la opcin del men principal Simulator>Reinitialize, carga el nuevo fichero y ejectalo con la opcin del men principal Simulator->Go Cuestiones Localiza la instruccin en memoria de instrucciones e indica cmo ha transformado dicha instruccin el simulador. Comprueba el efecto de la ejecucin del programa. Cambia en el programa la instruccin "lb" por "lbu". Qu sucede al ejecutar el programa? Qu significa esto? Si "octeto" se define como:
octeto: .byte 0x30

existe diferencia entre el uso de la instruccin lb y lbu Por qu Cul es el valor del registro s0 si octeto se define como:
octeto: .word 0x10203040 ?.

Por qu? Cul es el valor del registro s0 si se cambia en "main" la instruccin existente por la siguiente
main: lb $s0, octeto+1($0)?

Por qu? Por qu en este caso no se produce un error de ejecucin (excepcin de error de direccionamiento)?

Almacenamiento de palabras (transferencia de palabras desde registros a memoria)

Quinto ejercicio Crea un fichero con el siguiente cdigo:


#------------------------------------------------# # zona de datos # .data #------------------------------------------------# palabra1: .word 0x10203040 palabra2: .space 4 palabra3: .word 0xffffffff #------------------------------------------------# # zona de instrucciones # .text #------------------------------------------------# main: lw $s0, palabra1($0) sw $s0, palabra2($0) sw $s0, palabra3($0)

La instruccin "sw" almacena la palabra contenida en un registro en una direccin de memoria. Esta direccin se obtiene sumando el contenido de un registro ms un desplazamiento especificado en la instruccin (identificador).

Borra los valores de la memoria con la opcin del men principal Simulator>Reinitialize, carga el nuevo fichero y ejectalo con la opcin del men principal Simulator->Go Cuestiones Localiza la primera instruccin de este tipo en la memoria de instrucciones e indica cmo ha transformado dicha instruccin el simulador. Comprueba el efecto de la ejecucin del programa.

Almacenamiento de bytes (transferencia de bytes desde registros a memoria)

Sexto ejercicio Crea un fichero con el siguiente cdigo:


#------------------------------------------------# # zona de datos # .data #------------------------------------------------# palabra1: .word 0x10203040 octeto: .space 2 #------------------------------------------------# # zona de instrucciones # .text #------------------------------------------------# main: lw $s0, palabra1($0) sb $s0, octeto($0)

La instruccin sb almacena el byte de menor peso de un registro en una direccin de memoria. La direccin se obtiene sumando el desplazamiento indicado por el identificador y el contenido de un registro. Borra los valores de la memoria con la opcin del men principal Simulator>Reinitialize, carga el nuevo fichero y ejectalo con la opcin del men principal Simulator->Go Cuestiones Localiza la instruccin en memoria de instrucciones e indica cmo ha transformado dicha instruccin el simulador. Comprueba el efecto de la ejecucin del programa.

Modifica el programa para que el byte se almacene en la direccin "octeto+1". Comprueba y describe el resultado de este cambio.

Modifica el programa anterior para transferir a la direccin de octeto el byte en la posicin palabra+3.

Problemas propuestos
Disea un programa ensamblador que defina el vector de palabras V=(10,20,25,500,3) en la memoria de datos a partir de la direccin 0x10000000 y cargue todos sus componentes en los registros s0-s4. Disea un programa ensamblador que copie el vector definido en el problema anterior a partir de la direccin 0x10010000. Disea un programa ensamblador que, dada la palabra 0x10203040, almacenada en una posicin de memoria, la reorganice en otra posicin de memoria, invirtiendo el orden de sus bytes. Disea un programa ensamblador que, dada la palabra 0x10203040 definida en memoria la reorganice en la misma posicin, intercambiando el orden se sus medias palabras. Nota: utiliza las instrucciones lh y sh. Disea un programa en ensamblador que inicialice cuatro bytes a partir de la posicin 0x10010002 a los siguientes valores 0x10, 0x20, 0x30, 0x40, y reserve espacio para una palabra a partir de la direccin 0x10010010. El programa transferir los cuatro bytes contenidos a partir de la posicin 0x10010002 a la direccin 0x10010010.

<--Los datos en memoria

Las operaciones aritmticas y lgicas>-->

Parte 4. Las operaciones aritmticas y lgicas


Introduccin. Operaciones aritmticas con datos inmediatos (constantes) . Operaciones aritmticas con datos en memoria. . Operaciones lgicas. . Operaciones de desplazamiento. . Problemas propuestos.

Introduccin
En este apartado se presentan las instrucciones que permiten realizar operaciones aritmticas, lgicas y de desplazamiento. Entre las primeras se encuentran las instrucciones de suma y resta (add, addu, addi, addiu, sub, subu) y las instrucciones de multiplicacin y divisin (mult, multu, div, divu ). Las instrucciones acabadas en u consideran los operandos como nmeros en binario puro, mientras que las instrucciones no acabadas en u consideran los operandos de las instrucciones como nmeros en complemento a dos. En ambos casos, se producir una excepcin aritmtica si el resultado de la operacin no es representable en 32 bits. Recuerda que el rango de representacin de los nmeros enteros con signo de 32 bits en complemento a 2 va desde 2.147.483.648 a 2.147.483.647 (0x80000000 a 0x7fffffff). Dentro del grupo de instrucciones que permiten realizar operaciones lgicas estn: suma lgica (or y ori), producto lgico (and y andi) y la or exclusiva (xor y xori). Finalmente, se presentan las instrucciones de desplazamiento aritmtico y lgico (sra, sll, srl).

Operaciones aritmticas con datos inmediatos (constantes)


Primer ejercicio
.data .word 2147483647 .text lw $t0,numero($0) addiu $t1,$t0,1

numero: main:

La instruccin addiu es una instruccin de suma con un dato inmediato y sin deteccin de desbordamiento.

Borra los valores de la memoria, carga el fichero y ejectalo paso a paso. Cuestiones

Localiza el resultado de la suma efectuada. Comprueba el resultado. Cambia la instruccin "addiu" por la instruccin "addi". Borra los valores de la memoria, carga el fichero y ejectalo paso a paso. Qu ha ocurrido al efectuar el cambio? Por qu?

Operaciones aritmticas con datos en memoria


Segundo ejercicio
.data .word 0x80000000 .word 1 .word 1 .text lw $t0,numero1($0) lw $t1,numero2($0) subu $t0,$t0,$t1 lw $t1,numero3($0) subu $t0,$t0,$t1 sw $t0,numero3($0)

numero1: numero2: numero3: main:

Borra los valores de la memoria, carga el fichero y ejectalo paso a paso. Cuestiones

Qu hace el programa anterior? Qu resultado se almacena en numero3? Es correcto? Se producir algn cambio si las instrucciones "subu" son sustituidas por instrucciones "sub"? Por qu?

Multiplicacin y divisin con datos en memoria


Tercer ejercicio Crea un fichero con el siguiente cdigo:
.data .word .word .space .text lw lw mult

numero1: numero2:

0x7fffffff 16 8 $t0,numero1($0) $t1,numero2($0) $t0,$t1

main:

mflo mfhi sw sw

$t0 $t1 $t0,numero2+4($0) $t1,numero2+8($0)

La instruccin mult multiplica dos registros de propsito general (en el ejemplo anterior los registros t0 y t1) y deja el resultado de 64 bits en dos registros especiales de 32 bits llamados HI y LO. Las instrucciones mfhi y mflo sirven para mover los contenidos de estos registros especiales a los registros de propsito general (en este caso otra vez los registros t0 y t1). El cdigo realiza la multiplicacin de dos nmeros, almacenando el resultado de la multiplicacin a continuacin de los dos multiplicandos.

Borra los valores de la memoria, carga el fichero y ejectalo. Cuestiones


Qu resultado se obtiene despus de realizar la operacin? Por qu se almacena en dos palabras de memoria? Modifica los datos anteriores para que numero1 y numero2 sean 0xffffffff y 1 respectivamente. Cul es el valor del registro HI? Por qu? La instruccin de tipo R mul multiplica dos registros y guarda el resultado en un tercero. Escribe un programa en ensamblador que utilice la instruccin mul para multiplicar numero1 y nmero2 y deje el resultado en el registro $t2. Deja el resultado tambin en algn otro registro? Qu ocurre al cambiar la instruccin mul en el programa anterior por la pseudoinstruccin mulo? Qu ocurre al cambiar la pseudoinstruccin mulo en el programa anterior por la pseudoinstruccin mulou? Modifica los datos anteriores para que numero1 y numero2 sean 10 y 3 respectivamente. Escribe el cdigo que divida numero1 entre numero2 (dividendo y divisor respectivamente) y coloque el cociente y el resto a continuacin de dichos nmeros. La pseudointruccin div divide dos registros y guarda el resultado en un tercero (de manera similar a cualquier instruccin tipo-R). Escribe un programa en ensamblador que utilice la pseudoinstruccin div para dividir numero1 y nmero2 y deje el resultado en el registro $t2. Comprueba excepciones? Cul? Qu ocurre al cambiar la pseudoinstruccin div en el programa anterior por la pseudoinstruccin divu? Qu es diferente en el cdigo generado para las pseudoinstrucciones div y divu?

Operaciones lgicas
Cuarto ejercicio Crea un fichero con el siguiente cdigo:

.data

numero:

.word 0x3ff41 .space 4 .text $t0,numero($0) andi $t1,$t0,0xfffe sw $t1,numero+4($0)

main:

lw

El cdigo anterior pone a 0 los 16 bits ms significativos y el bit 0 de nmero, almacenando el resultado en la siguiente palabra. Esto se consigue utilizando la instruccin andi, que realiza el producto lgico bit a bit entre el dato contenido en un registro y un dato inmediato. El resultado que se obtiene es: aquellos bits que en el dato inmediato estn a 1 no se modifican con respecto al contenido original del registro, es decir, los 16 bits de menor peso excepto el bit 0. Por otro lado, todos aquellos bits que en el dato inmediato estn a 0, en el resultado tambin estn a 0, es decir, los 16 bits de mayor peso y el bit 0. Los 16 bits da mayor peso se ponen a 0 puesto que, aunque el dato inmediato que se almacena en la instruccin es de 16 bits, a la hora de realizar la operacin el procesador trabaja con un dato de 32 bits, poniendo los 16 de mayor peso a 0, fijando, por tanto, los bits del resultado tambin a 0.

Borra los valores de la memoria, carga el fichero y ejectalo. Cuestiones

Modifica el cdigo para obtener, en la siguiente palabra, que los 16 bits ms significativos de nmero permanezcan tal cual, y que los 16 bits menos significativos queden a 0, excepto el bit 0 que tambin debe quedar como estaba. La solucin debe ser vlida independientemente del valor almacenado en nmero. Modifica el cdigo para obtener, en la siguiente palabra, que los 16 bits ms significativos de nmero permanezcan tal cual, y que los 16 bits menos significativos queden a 1, excepto el bit 0 que tambin debe quedar como estaba. La solucin debe ser vlida independientemente del valor almacenado en numero.

Operaciones de desplazamiento
Quinto ejercicio Crea un fichero con el siguiente cdigo:

numero: main:

.data .word 0xffffff41 .text lw $t0,numero($0) sra $t1,$t0,4

El cdigo desplaza el nmero cuatro bits a la derecha, rellenando con el bit del signo.

Borra los valores de la memoria, carga el fichero y ejectalo. Cuestiones


Para qu se ha rellenado el nmero con el bit del signo? Qu ocurre si se sustituye la instruccin "sra" por "srl"? Modifica el cdigo para desplazar el nmero tres bits a la izquierda.

Problemas propuestos
1. Disea un programa ensamblador que defina el vector de enteros de dos elementos V=(10,20) en la memoria de datos a partir de la direccin 0x10000000 y almacene su suma a partir de la direccin donde acaba el vector. 2. Disea un programa ensamblador que divida los enteros 18,-1215 almacenados a partir de la direccin 0x10000000 entre el nmero 5 y que a partir de la direccin 0x10010000 almacene el cociente de dichas divisiones. Es posible usar ms de una directiva .data para ubicar las seccin de datos. 3. Pon a cero los bits 3,7,9 del entero 0xABCD12BD almacenado en memoria a partir de la direccin 0x10000000, sin modificar el resto. 4. Cambia el valor de los bits 3,7,9 del entero 0xFF0F1235 almacenado en memoria a partir de la direccin 0x10000000, sin modificar el resto. 5. Multiplica el nmero 0x1237, almacenado en memoria a partir de la direccin 0x10000000, por 32 (25) sin utilizar las instrucciones de multiplicacin ni las pseudoinstrucciones de multiplicacin.

Interfaz <--Carga y almacenamiento con el de datos en programa> memoria --

Parte 5. Interfaz con el programa


Introduccin. Impresin de una cadena de caracteres. Impresin de enteros. Lectura de enteros. Lectura de cadena de caracteres. Problemas propuestos.

Introduccin
El SPIM ofrece un pequeo conjunto de servicios tipo Sistema Operativo a travs de la instruccin de llamada al sistema (syscall). Estos servicios permiten introducir datos y visualizar resultados, de forma cmoda, en los programas que se desarrollan. Para pedir un servicio, el programa debe cargar el nmero identificador del tipo de llamada al sistema en el registro $v0 y el/los argumento/s en los registros $a0-$a3 (o f12 para valores en coma flotante). Las llamadas al sistema que retornan valores ponen sus resultados en el registro $v0 ($f0 en coma flotante). La interfaz con nuestro programa se har a travs de una ventana o consola que puede visualizarse u ocultarse mediante el botn "terminal". A continuacin se muestra una tabla resumen del nmero de identificacin de cada una de las funciones disponibles y de los parmetros que son necesarios en cada una de ellas:
Servicio Imprimir_entero Imprimir_cadena Leer_entero Leer_string Nmero de identificacin (en $v0) 1 4 5 8 $a0=dir_cadena, $a1=longitud Argumentos $a0=entero $a0=dir_cadena Entero (en $v0) Resultado

Impresin de una cadena de caracteres


Primer ejercicio
.data .asciiz "Hola. Ha funcionado." .text

dir:

main:

li $v0,4 la $a0,dir syscall

#codigo de imprimir cadena #direccion de la cadena #llamada al sistema

La pseudoinstruccin "li" carga de forma inmediata el dato que acompaa la instruccin en el registro. La pseudoinstruccin "la" carga de forma inmediata la direccin que acompaa la instruccin en el registro especificado.

Borra los valores de la memoria, carga el fichero y ejectalo. Cuestiones

Comprueba que se imprime la cadena de caracteres "Hola. Ha funcionado." Vulvelo a ejecutar. Acurdate que antes de volver a ejecutar el programa se debe borrar el contenido de los registros. Dnde se imprime el mensaje? Introduce al final de la cadena los caracteres "\n". Ejectalo dos veces y comprueba cul es la diferencia con respecto al cdigo original. Modifica la lnea de la instruccin "la ..." para que slo se imprima "Ha funcionado.".

Impresin de enteros.
Segundo ejercicio Crea un fichero con el siguiente cdigo:
.data .asciiz "Se va a imprimir el entero: " .word 7 .text li $v0,4 la $a0,dir syscall li $v0,1 li $a0,5 syscall

dir: entero:

main:

#codigo de imprimir cadena #direccion de la cadena #llamada al sistema #codigo de imprimir entero #entero a imprimir #llamada al sistema

Borra los valores de la memoria, carga el fichero y ejectalo. Cuestiones


Comprueba la impresin del entero "5". Modifica el programa para que se imprima el entero almacenado en la direccin "entero". Comprueba su ejecucin.

Lectura de enteros.

Tercer ejercicio Crea un fichero con el siguiente cdigo:

dir: entero:

.data .asciiz "Introduce el entero: " .align 2 .space 4 .text li $v0,4 #codigo de imprimir cadena la $a0,dir #direccion de la cadena syscall #llamada al sistema li $v0,5 #codigo de leer entero syscall #llamada al sistema

main:

Borra los valores de la memoria, carga el fichero y ejectalo. Introduce, a travs de la consola, el entero que te parezca. Cuestiones

Comprueba el almacenamiento del entero introducido en el registro v0. Modifica el programa para que el entero ledo se almacene en la direccin de memoria "entero". Elimina la lnea align 2 del programa anterior y ejectalo. Qu ocurre? Por qu?

Lectura de cadena de caracteres. Cuarto ejercicio Crea un fichero con el siguiente cdigo:

dir: buffer:

.data .asciiz "Introduce la cadena de caracteres: " .space 10 .text li $v0,4 #codigo de imprimir cadena la $a0,dir #direccion de la cadena syscall #llamada al sistema li $v0,8 #codigo de leer el string la $a0,buffer #direccion de lectura de cadena li $a1,10 #espacio maximo de la cadena

main:

syscall

#llamada al sistema

Borra los valores de la memoria, carga el fichero y ejectalo. Introduce, a travs de la consola, la cadena de caracteres que te parezca. Cuestiones

Comprueba el almacenamiento de la cadena de caracteres en "buffer". Qu ocurre si la cadena de caracteres que se escribe es ms larga que el tamao reservado en "buffer"?

Problemas propuestos 1. Disea un programa ensamblador que pida por la consola dos enteros "A" y "B" dando como resultado su suma "A+B". 2. Disea un programa que pida los datos de un usuario por la consola y los introduzca en memoria, reservando espacio para ello. La estructura de la informacin es la siguiente: Nombre Apellidos DNI cadena de 10 bytes cadena de 15 bytes entero

A continuacin se deber imprimir los datos introducidos para comprobar el correcto funcionamiento del programa.

<-Estructuras Operaciones de aritmticas control> -y lgicas

Parte 6. Estructuras de control: condicionales y bucles


Introduccin. Estructuras de control condicional Si-entonces con condicin simple . Estructuras de control condicional Si-entonces con condicin compuesta . Estructuras de control condicional Si-entonces-sino con condicin simple . Estructuras de control condicional Si-entonces-sino con condicin compuesta . Estructuras de control repetitiva para . Estructuras de control repetitiva mientras . Problemas propuestos.

Introduccin
El lenguaje ensamblador no dispone de estructuras de control de flujo de programa definidas a priori, que permitan decidir entre dos (o varios) caminos de ejecucin de instrucciones distintos (como por ejemplo la sentencia if de otros lenguajes de programacin). En esta prctica se describe cmo implementar algunas de estas estructuras de control. En primer lugar se realiza un breve recordatorio de las instrucciones que dispone el MIPS R2000 a partir de las cuales se llevan a cabo las implementaciones de estructuras de este tipo. Estas se agrupan en tres grupos: instrucciones de ruptura de secuencia condicional e incondicional, e instrucciones de comparacin. Instrucciones de salto condicional El ensamblador del MIPS incluye dos instrucciones bsicas de ruptura de secuencia condicional beq (branch if equal, saltar si igual) y bne (branch if no equal, saltar si distinto). La sintaxis de estas instrucciones es la siguiente: beq rs, rt, etiqueta bne rs, rt, etiqueta. Ambas comparan el contenido de los registros rs y rt y saltan a la direccin de la instruccin referenciada por etiqueta si el contenido del registro rs es igual al del rt (beq) o distinto (bne). Adems dispone de instrucciones de salto condicional para realizar comparaciones con cero. Estas instrucciones son: bgez (branch if greater or equal to zero, saltar si mayor o igual a cero), bgtz (branch if greater than zero, saltar si mayor que cero), blez (branch if

less or equal to zero, saltar si menor o igual que cero), bltz (branch if less than zero, saltar si menor que cero), y tienen la siguiente sintaxis: bgez rs, etiqueta bgtz rs, etiqueta blez rs, etiqueta bltz rs, etiqueta Todas ellas comparan el contenido del registro rs con 0 y saltan a la n de la instruccin referenciada por etiqueta si rs >=0 (bgez), rs > 0 (bgtz), rs<=0 (blez) rs<0 (bltz). Instrucciones de salto incondicional La instruccin j permite romper la secuencia de ejecucin del programa de forma incondicional y desviarla hacia la instruccin referenciada mediante la etiqueta. Esta instruccin presenta el siguiente formato: j etiqueta Instrucciones de comparacin El ensamblador del MIPS dispone de una instruccin que compara dos registros, y pone un 1 en un tercer registro si el contenido del primero es menor que el segundo y pone un 0 si no se cumple esta condicin. Esta instruccin es slt (set if less than, poner a 1 si menor que) y tiene la siguiente sintaxis: slt rd, rs, rt A partir de este conjunto de instrucciones se puede implementar cualquier estructura de control de flujo del programa. Pseudoinstrucciones de salto condicional Para facilitar la programacin, el lenguaje ensamblador del MIPS aporta un conjunto de pseudoinstrucciones de salto condicional que permiten comparar dos variables almacenadas en registros (a nivel de mayor, mayor o igual, menor, menor o igual) y segn el resultado de esa comparacin saltan o no, a la instruccin referenciada a travs de la etiqueta. Estas pseudoinstrucciones son: bge (branch if greater or equal, saltar si mayor o igual ), bgt (branch if greater, saltar si mayor que), ble (branch if less or equal, saltar si menor o igual), blt (branch if less, saltar si menor que). El formato es el mismo para todas ellas: bxx rs,rt, etiqueta El salto a la instruccin referenciada por etiqueta se efecta si el resultado de la comparacin entre las variables contenidas en rs y rt es: mayor o igual (ge), mayor (gt), menor o igual (le), o menor (lt). La implementacin de estas pseudoinstrucciones se realiza a partir de la instruccin slt y de las instrucciones de salto condicional bsicas: beq y bne, principalmente.

Una vez introducidos el conjunto de instrucciones y pseudoinstrucciones que permiten implementar cualquier estructura de control de flujo de programa, se va a describir cmo se implementan las estructuras ms tpicas de un lenguaje de alto nivel. Estas son: Si-entonces, Si-entonces-sino, Mientras y Para si se habla en lenguaje algortmico, o las estructuras if-then, if-then-else, while, y for del lenguaje Pascal. De ellas, las dos primeras son estructuras de control de flujo condicionales, y el resto son estructuras de control de flujo repetitivas. Estas estructuras dependen, implcita o explcitamente, de la verificacin de una o varias condiciones para determinar el camino que seguir la ejecucin del cdigo en curso. La evaluacin de esta condicin (o condiciones) vendr asociada a una o varias instrucciones de salto condicional e incondicional o pseudoinstrucciones.

Estructura de control condicional Si-entonces con condicin simple

Primer ejercicio Crea un fichero con el siguiente fragmento de cdigo que implementa una estructura de control condicional Si-entonces:
.data .word .word .space

dato1: dato2: res:

40 30 4

main:

.text lw $t0, dato1($0) lw $t1, dato2($0) and $t2, $t2,$0 add $t3, $t0,$t1

#cargar dato1 en t0 #cargar dato2 en t1 #pone a 0 t2 #t3 = t0+t1 #si t1 = 0 finsi #t0/t1 #almacenar LO en t2 #t2= t3 + t2 #almacenar en memoria t2

Si: entonces: finsi:

beq $t1, div $t0, mflo $t2 add $t2, sw $t2,

$0, finsi $t1 $t3, $t2 res($0)

Disponible en ejercicio1.s Borra los valores de la memoria, carga el fichero en el simulador y ejectalo. Cuestiones

Identifica la instruccin que determina la condicin y controla el flujo de programa. Qu condicin se evala?

Identifica el conjunto de instrucciones que implementan la estructura condicional si-entonces. Qu valor se almacena en la variable "res" despus de ejecutar el programa? Si dato2=0, Qu valor se almacena en la variable res despus de ejecutar el programa?Qu hace entonces el programa? Dibuja el diagrama de flujo asociado a la estructura de control implementada en el fragmento de cdigo anterior. Modifica el cdigo anterior para que la instruccin resaltada en negrita (sumar el contenido de t0 y t1) se realice despus de la estructura de control Si-entonces en lugar de antes, sin modificar el resultado de la ejecucin del programa.

Estructura de control condicional Si-entonces con condicin compuesta

Segundo ejercicio Crea un fichero con el siguiente fragmento de cdigo que implementa una estructura de control condicional Si-entonces:

dato1: dato2: res:

.data .word .word .space .text

40 30 4

main:

Si: entonces: finsi:

lw $t0, lw $t1, and $t2, add $t3, beq $t1, beq $t0, div $t0, mflo $t2 add $t2, sw $t2,

dato1($0) dato2($0) $t2,$0 $t0, $t1 $0, finsi $0, finsi $t1 $t3, $t2 res($0)

#cargar dato1 en t0 #cargar dato2 en t1 #pone a 0 t2 #t3=t0 + t1 #si t1=0 saltar a finsi #si t0 =0 saltar a finsi #t0/t1 #almacenar LO en t2 #t2=t2+t3 #almacenar en memoria t2

Disponible en ejercicio2.s Borra los valores de la memoria, carga el fichero en el simulador y ejectalo. Cuestiones

Qu condicin compuesta se evala? Modifica el cdigo anterior para que la condicin evaluada sea ((t1 > 0) y (t0 <> t1)). Comprueba el correcto funcionamiento ante los siguientes valores: o dato1=40, dato2=30

o o

dato1=0, dato2=40 dato1=40, dato2=-40

Estructura de control condicional Si-entonces-sino con condicin simple

Tercer ejercicio Crea un fichero con el siguiente fragmento de cdigo que implementa una estructura de control Si-entonces-sino.

dato1: dato2: res:

.data .word .word .space .text lw lw bge sw j sw

30 40 4

main:

$t0,dato1($0) $t1,dato2($0) $t0,$t1,sino $t0, res($0) finsi $t1, res($0)

Si: entonces: sino: finsi:

#almacenar t0 en res #almacenar t1 en res

Disponible en ejercicio3.s Borra los valores de la memoria, carga el fichero en el simulador y ejectalo. Cuestiones

Identifica qu condicin se evala. <li< Qu valor se almacena en "res" despus de ejecutar el programa? Si dato1=50 y dato2=0, qu valor se almacena en res despus de ejecutar el programa? Qu hace entonces el programa?

Dibuja el diagrama de flujo asociado a la estructura de control implementada en el fragmento de cdigo anterior. Identifica en el lenguaje mquina generado por el simulador el conjunto de instrucciones que implementan la pseudoinstruccin bge.

Estructura de control condicional Si-entonces-sino con condicin compuesta

Cuarto ejercicio Crea un fichero con el siguiente fragmento de cdigo que implementa una estructura de control Si-entonces-sino.
.data .word .word .word .space .text lw lw lw blt ble addi j add sw

dato1: dato2: dato3: res:

30 40 -1 4

main:

$t1,dato1($0) $t2,dato2($0) $t3,dato3($0) $t3, $t1, entonces $t3, $t2, sino $t4, $0, 1 finsi $t4, $0,$0 $t4, res($0)

#cargar dato1 en t1 #cargar dato2 en t2 #cargar dato3 en t3 #si t3 < t1 saltar a #si t3 <= t2 #t4 = 1 #t4 = 0 #almacenar en memoria t4 saltar a sino

si: entonces entonces: sino: finsi:

Disponible en ejercicio4.s Borra los valores de la memoria, carga el fichero en el simulador y ejectalo. Cuestiones

Identifica qu condicin compuesta se evala. Qu valor se almacena en "res" despus de ejecutar el programa? Si dato1=40 y dato2=30, qu valor se almacena en res despus de ejecutar el programa? Qu hace entonces el programa? Dibuja el diagrama de flujo asociado a la estructura de control implementada en el fragmento de cdigo anterior. Modifica el cdigo anterior para que la condicin evaluada sea ((dato3>=dato1) y (dato3<=dato2)).

Estructura de control repetitiva para

Quinto ejercicio Crea un fichero con el siguiente fragmento de cdigo que implementa una estructura de control repetitiva Para:
.data .word .space .text la and li beq lw

vector: res:

6,7,8,9,10,-1 4

main:

$t2, vector $t3, $0, $t3 $t1, 6 $t1, $0, finpara $t4, 0($t2) $t3, $t4, $t3 $t2, $t2, 4 $t1, $t1, -1 para $t3, res($0)

#t2 = vector #pone a 0 t3 #carga 6 en t1 # si t1 = 0 saltar a finpara # carga un elemento del vector #acumula la suma de los #suma 4 a t2 #resta 1 a t1 #saltar a para #almacena t3 en res

para: en t4

add elementos del vector addi addi j finpara: sw

Disponible en ejercicio5a.s Borra los valores de la memoria, carga el fichero en el simulador y ejectalo. Cuestiones

Qu hace la instruccin "la $t2, vector"? Identifica en el fragmento de cdigo anterior qu conjunto de instrucciones constituyen el bucle repetitivo y cuntas veces se va a repetir. Dentro del bucle se incrementa el contenido del registro t2 en cuatro unidades cada iteracin, por qu? Dentro del bucle se decrementa el contenido del registro t1 en una unidad en cada iteracin, por qu? Qu valor se almacena en "res" despus de ejecutar el cdigo anterior? Qu hace entonces el programa? Dibuja el diagrama de flujo asociado a la estructura de control implementada en el fragmento de cdigo anterior. Indica si el siguiente fragmento de cdigo es equivalente al anterior. Cul de las dos implementaciones es ms ptima? por qu?
.data .word .space .text la

vector: res:

6,7,8,9,10,-1 4

main:

$t2, vector

#t2 = vector

and li li para: en t4 add elementos del vector addi addi j finpara: sw bgt lw

$t3, $0, $t3 $t0, 1 $t1, 6

#pone a 0 t3 #carga 1 en t1

$t0, $t1, finpara # si t1 = 0 saltar a finpara $t4, 0($t2) # carga un elemento del vector $t3, $t4, $t3 $t2, $t2, 4 $t0, $t0, 1 para $t3, res($0) #acumula la suma de los #suma 4 a t2 #resta 1 a t1 #saltar a para #almacena t3 en res

Disponible en ejercicio5b.s

Estructura de control repetitiva mientras

Sexto ejercicio Crea un fichero con el siguiente fragmento de cdigo que implementa una estructura de control repetitiva Mientras:
.data .asciiz .align .space .text la andi mientras: finmientras addi $t2, $t2, 1 addi $t0, $t0,1 j mientras sw $t2, n($0) #sumar 1 a #sumar 1 a #saltar #almacenar t2 t0 a mientras t2 en n lb beq

cadena: n:

"hola" 2 4

main: cadena en t0

$t0, cadena $t2, $t2, 0

#cargar la direccion de #poner a 0 t2

$t1, 0($t0) #almacena un byte en t1 $t1, $0, finmientras #si t1 = 0 saltar a

finmientras:

Disponible en ejercicio6a.s Borra los valores de la memoria, carga el fichero en el simulador y ejectalo. Cuestiones

Parte 7. Gestin de Subrutinas


Introduccin. Gestin de la pila. Llamada y retorno de una subrutina. Llamadas anidadas de subrutinas. Paso de parmetros. Bloque de activacin de una subrutina. Problemas propuestos.

Introduccin
El diseo de un programa que resuelve un determinado problema puede simplificarse si se plantea adecuadamente la utilizacin de subrutinas. stas permiten dividir un problema largo y complejo en subproblemas ms sencillos o mdulos, ms fciles de escribir, depurar y probar que si se aborda directamente el programa completo. De esta forma se puede comprobar el funcionamiento individual de cada rutina y, a continuacin, integrar todas en el programa que constituye el problema global de partida. Otra ventaja que aporta la utilizacin de subrutinas es que en ocasiones una tarea aparece varias veces en el mismo programa; si se utilizan subrutinas, en lugar de repetir el cdigo que implementa esa tarea en los diferentes puntos, bastar con incluirlo en una subrutina que ser invocada en el programa tantas veces como sea requerida. Yendo ms lejos, subproblemas de uso frecuente pueden ser implementados como rutinas de utilidad (libreras), que podrn ser invocadas desde diversos mdulos. Con el fin de dotar de generalidad a una subrutina, sta ha de ser capaz de resolver un problema ante diferentes datos que se le proporcionan como parmetros de entrada cuando se le llama. Por tanto, para una correcta y eficaz utilizacin de las subrutinas es necesario tener en cuenta, por un lado, la forma en que se realizan las llamadas y, por otro, el paso de parmetros. Como paso previo a la realizacin de la prctica se van a realizar algunos ejercicios sencillos que nos ayuden al manejo de la pila, estructura muy utilizada para una buena gestin de las subrutinas.

Gestin de la pila
Una pila es una estructura de datos caracterizada por que el ltimo dato que se almacena es el primero que se obtiene despus. Para gestionar la pila se necesita un puntero a la ltima posicin ocupada de la misma, con el fin de conocer dnde se tiene que dejar el

siguiente dato a almacenar, o para saber dnde estn situados los ltimos datos almacenados en ella. Para evitar problemas, el puntero de pila siempre debe estar apuntando a una palabra de memoria. Por precedentes histricos, el segmento de pila siempre "crece" de direcciones superiores a direcciones inferiores. Las dos operaciones ms tpicas con esta estructura son: Transferir datos hacia la pila (push o apilar). Antes de aadir un dato a la pila se tienen que restar 4 unidades al puntero de pila. Transferir datos desde la pila (pop o desapilar). Para eliminar datos de la pila, despus de extrado el dato se tienen que sumar 4 unidades al puntero de pila. El ensamblador del MIPS tiene reservado un registro, $sp, como puntero de pila (stack pointer). Para realizar una buena gestin de la pila ser necesario que este puntero sea actualizado correctamente cada vez que se realiza una operacin sobre la misma. El siguiente fragmento de cdigo muestra cmo se puede realizar el apilado de los registros $t0-$t1 en la pila:

Primer ejercicio

main:

.text li li addi sw addi sw

$t0,10 $t1, 13 $sp, $sp, -4 $t0, 0($sp) $sp, $sp, -4 $t1, 0($sp)

#inicializar reg. t0,t1 #actualizar el sp #apilar t0 #actualizar el sp #apilar t1

Disponible en ejercicio1.s Edita el programa, reinicializa el simulador y carga el programa. Cuestiones Ejecuta el programa paso a paso y comprueba en qu posiciones de memoria, pertenecientes al segmento de pila se almacena el contenido de los registros t0t1. Modifica el programa anterior para que en lugar de actualizar el puntero de pila cada vez que se pretende apilar un registro en la misma, se realice una sola vez al principio y despus se apilen los registros en el mismo orden. Aade el siguiente cdigo al programa original despus de la ltima instruccin: Modifica el contenido de los registros t0-t1, realizando algunas operaciones sobre ellos. o Recupera el contenido inicial de estos registros desapilndolos de la pila, y actualiza el puntero de pila correctamente (limpiar la pila).
o

Ejecuta el programa resultante y comprueba si finalmente t0-t1 contienen los datos iniciales que se haban cargado. Comprueba tambin que el contenido del registro sp es el mismo antes y despus de la ejecucin del programa. Implementa el siguiente programa:
o o o

Almacena en memoria una tira de caracteres de mximo 10 elementos. Lee la cadena de caracteres desde el teclado. Invierte esta cadena, almacenando la cadena resultante en las mismas posiciones de memoria que la original. (Sugerencia para realizar el ejercicio: Apila los elementos de la tira en la pila y, a continuacin, se desapilan y se almacenan en el mismo orden que se extraen).

Llamada y retorno de una subrutina

El juego de instrucciones del MIPS R2000 dispone de una instruccin especfica para realizar la llamada a una subrutina, jal etiqueta. La ejecucin de esta instruccin conlleva dos acciones:

Almacenar la direccin de memoria de la siguiente palabra a la que contiene la instruccin jal en el registro ra. Llevar el control de flujo de programa a la direccin etiqueta.

Por otra parte, el MIPS R2000 dispone de una instruccin que facilita el retorno de una subrutina. Esta instruccin es jr $ra, instruccin de salto incondicional que salta a la direccin almacenada en el registro ra, que justamente es el registro dnde la instruccin jal ha almacenado la direccin de retorno cuando se ha hecho el salto a la subrutina. Para ejecutar cualquier programa de usuario el simulador xspim hace una llamada a la rutina main mediante la instruccin jal main. Esta instruccin forma parte del cdigo que aade ste para lanzar a ejecucin un programa de usuario. Si la etiqueta main no est declarada en el programa se genera un error. Esta etiqueta deber siempre referenciar la primera instruccin ejecutable de un programa de usuario. Para que cualquier programa de usuario termine de ejecutarse correctamente, la ltima instruccin ejecutada en ste debe ser jr $ra (salto a la direccin almacenada en el registro ra), que devuelve el control a la siguiente instruccin desde donde se lanz la ejecucin del programa de usuario. A partir de este punto se hace una llamada a una funcin del sistema que termina la ejecucin correctamente. Segundo ejercicio El siguiente cdigo es un programa que realiza la suma de dos datos contenidos en los registros a0 y a1.

main:

.text li li add jr

$a0,10 $a1,20 $v1,$a0,$a1 $ra

Disponible en ejercicio2.s Reinicializa el simulador, carga el programa y ejectalo paso a paso, contestando a las siguientes cuestiones: Cuestiones Cul es el contenido del PC y del registro ra antes y despus de ejecutar la instruccin jal main? Cul es el contenido de los registros PC y ra antes y despus de ejecutar la instruccin jr $ra? Reinicializa el simulador, carga el programa de nuevo y ejectalo todo completo. Comprueba que la ejecucin termina correctamente sin que salga el mensaje de error que sala en ejecuciones anteriores cuando no se inclua la instruccin jr $ra.

Llamadas anidadas de subrutinas

Cuando una subrutina llama a otra utilizando la instruccin jal se modifica automticamente el contenido del registro $ra con la direccin de retorno (direccin de memoria de la siguiente palabra a la que contiene la instruccin que ha efectuado el salto). Esto hace que se pierda cualquier contenido anterior que pudiera tener este registro, que podra ser a su vez otra direccin de retorno suponiendo que se llevan efectuadas varias llamadas anidadas. As pues, en cada llamada a una subrutina se modifica el contenido del registro ra, y slo se mantiene en este registro la direccin de retorno asociada a la ltima llamada, Qu ocurre entonces con todas las direcciones de retorno que se deberan guardarse en llamadas anidadas? Una solucin a este problema es que antes de ejecutar una llamada desde una subrutina a otra se salve el contenido del registro ra en la pila. Como la pila crece dinmicamente, las direcciones de retorno de las distintas llamadas anidadas quedarn almacenadas a medida que stas se van produciendo. La ltima direccin de retorno apilada estar en el tope de la pila, y sta es justamente la primera que se necesita recuperar. As pues, una pila es la estructura adecuada para almacenar las direcciones de retorno en llamadas anidadas a subrutinas. Tercer ejercicio

El siguiente cdigo implementa una llamada anidada a dos subrutinas, rutina main y subr. A la primera se le llamar desde el fragmento de cdigo que tiene el simulador para lanzar la ejecucin de un programa de usuario y a la subrutina subr se la llamar desde main. La primera necesita apilar la direccin de retorno (contenido de ra) para que sea posible la vuelta a la instruccin siguiente desde donde se hizo la llamada a la rutina main. La segunda como no hace ninguna llamada a otra subrutina no necesita apilar el contenido de ra:

suma:

.data .space .text addi sw li li jal sw lw addi jr add jr

main:

$sp, $sp, -4 $ra,0($sp) $a0,10 $a1,2 subr $v0,suma($0) $ra, 0($sp) $sp,$sp,4 $ra $v0, $a0,$a1 $ra

#apilar dir. ret.

#desapilar dir. ret.

subr:

Disponible en ejercicio3.s Reinicializa el simulador, carga el programa y ejectalo paso a paso respondiendo a las siguientes cuestiones: Cuestiones Comprueba qu contiene el registro ra y el PC antes y despus de ejecutar la instruccin jal main. Comprueba qu hay almacenado en el tope de la pila despus de ejecutar las dos primeras instrucciones del programa. Comprueba el contenido de los registros ra y PC antes y despus de ejecutar la instruccin jal subr. Comprueba el contenido de los registros ra y PC antes y despus de ejecutar la instruccin jr $ra que est en la subrutina subr. Comprueba el contenido de los registros ra y PC antes y despus de ejecutar la instruccin jr $ra que est en la subrutina main. Qu hubiera ocurrido si antes de ejecutar la instruccin jr $ra de esta subrutina main no se hubiese desapilado el contenido del registro ra? Aade el cdigo necesario para realizar las siguientes modificaciones sobre el cdigo original:

La subrutina subr debera calcular la siguiente operacin $v0=$a0 DIV $a1. Esta divisin slo se realizar si ambos operandos son mayores que 0. La comprobacin se realizar en una segunda subrutina llamada comp que almacenar en v0 un 1, si los datos contenidos en los registros a0 y a1 son mayores que 0, y un 0 en caso contrario. La llamada a esta segunda subrutina se realizar desde la subrutina subr, y &eeacute;sta almacenar en v0 el cociente de la divisin, si &eacue;sta se realiza y un -1 en caso contrario.

Paso de parmetros

A la hora de implementar una subrutina hay que decidir: Parmetros a pasar a la rutina. Tipo de parmetros: por valor: se pasa el valor del parmetro, por referencia: se pasa la direccin de memoria donde est almacenado el parmetro. Lugar donde se van a pasar los parmetros: registros, pila El ensamblador del MIPS establece el siguiente convenio para realizar el paso de parmetros: Los 4 primeros parmetros de entrada se pasarn a travs de los registros $a0-$a3. A partir del quinto parmetro se pasar&iacutea a travs de la pila. Los dos primeros parmetros de salida se devuelven a travs de los registros $v0-$v1, el resto a travs de la pila. Cuarto ejercicio El siguiente programa implementa la llamada a una subrutina y el cdigo de la misma, que devuelve una variable booleana que vale 1 si una determinada variable est dentro de un rango y 0, en caso contrario. La subrutina tendr los siguientes parmetros: Parmetros de entrada:

Las dos variables que determinan el rango, pasados por valor, a travs de a0 y a1. La variable que se tiene que estudiar si est dentro del rango, pasada por valor, a travs de a2. Parmetros de salida: Variable booleana que indica si la variable estudiada est o no dentro del rango, por valor, devuelto a travs de v0.
.data rango1: rango2: dato: res: .text main: sw lw lw lw jal sb lw addi jr programa subr: a sino entonces: addi j sino: finsi: blt $a2,$a0,sino #Si a2a1 saltar addi $sp,$sp,-4 $ra,0($sp) #apilar ra $a0,rango1($0) #a0=rango1 $a1,rango2($0) #a1=rango2 $a2,dato($0) #a2=dato subr #saltar a subr $v0,res($0) #res=v0 $ra,0($sp) $sp,$sp,4 #desapilar ra $ra #terminar ejecucion .word .word .word .space 10 50 12 1

add jr

$v0, $0,1 #v0=1 finsi #saltar a finsi $v0,$0,$0 #v0=0 $ra #retornar

Disponible en ejercicio4.s Reiniciliza el simulador, carga el programa, ejectalo y comprueba el resultado almacenado en la posicin de memoria res. Cuestiones Identifica las instrucciones que se necesitan en: El programa que hace la llamada para: 1. La carga de parmetros en los registros. 2. La llamada a la subrutina. 3. El almacenamiento del resultado. La subrutina para: 1. La lectura y procesamiento de parmetros. 2. La carga del resultado en v0 3. El retorno al programa que ha hecho la llamada.

Modifica el cdigo anterior para que los parmetros que se pasan a la subrutina subr, tanto los de entrada como el de salida, se pasen por referencia. Los pasos a realizar tanto por el programa que hace la llamada como por la subrutina son los siguientes: En el programa que hace la llamada: 1. Cargar la direccin de los parmetros en los registros correspondientes (entrada y salida). 2. Llamada a la subrutina. En la subrutina: 1. Lectura de los parmetros de entrada a partir de las direcciones pasada como parmetro. 2. Procesamiento de los parmetros de entrada y generacin del resultado. 3. Almacenamiento del resultado en la direccin de memoria pasada a travs del parmetro de salida 4. Retorno al programa que hiz la llamada. Ejecuta el programa obtenido y comprueba que el resultado obtenido es el mismo que el del programa original. Modifica el cdigo anterior para que los parmetros de entrada a la subrutina se pasen por valor mediante la pila y el de salida se pase tambin a travs de la pila pero por referencia. A continuacin se muestra un esquema de cmo debe ser la situacin de la pila en el momento que empieza a ejecutarse la subrutina: rango1 + rango 2 dato sp --> res

Bloque de activacin de la subrutina

El bloque de activacin de la subrutina es el segmento de pila que contiene toda la informacin referente a una llamada a una subrutina (parmetros pasados a travs de la pila, registros que modifica la subrutina y variables locales). Un bloque tpico abarca la memoria entre el puntero de bloque (normalmente llamado regisro $fp en el ensamblador del MIPS, se trata del registro 30), que apunta a la primera palabra almacenada en el bloque, y el puntero de pila ($sp), que apunta a la ltima palabra del bloque. El puntero de pila puede variar su contenido durante la ejecucin de la subrutina y, por lo tanto, las referencias a una variable local o a un parmetro pasado a travs de la pila podran tener diferentes desplazamientos relativos al puntero de pila dependiendo de dnde estuviera ste en cada momento. De forma alternativa, el puntero de bloque apunta a una direccin fija dentro del bloque. As pues, la subrutina en ejecucin

usa el puntero de bloque de activacin para acceder mediante desplazamientos relativos a ste a cualquier elemento almacenado en el bloque de activacin independientemente de dnde se encuentre el puntero de pila. Los bloques de activacin se pueden construir de diferentes formas. No obstante, lo que realmente importa es que el programa que hace la llamada y la subrutina deben estar de acuerdo en la secuencia de pasos a seguir. Los pasos que se enumeran a continuacin describen la convencin de llamada y retorno de una subrutina que se adopta. Esta convencin interviene en tres puntos durante una llamada y retorno a una subrutina: Inmediatamente antes de llamar a la subrutina e inmediatamente despus del retorno de la misma, en el programa que hace la llamada, en el momento justo en el que la subrutina empieza su ejecucin e inmediatamente antes de realizar el retorno en la subrutina: En el programa que hace la llamada: Inmediatamente antes de hacer la llamada a la subrutina: Se deben cargar los parmetros de entrada (y los de salida si se pasan por referencia) en los lugares establecidos, los cuatro primeros en registros y el resto en la pila. Inmediatamente despus del retorno de la subrutina: Se debe limpiar la pila de los parmetros almacenados en ella, actualizando el puntero de pila. o En la subrutina: En el momento que empieza la ejecucin: Reservar espacio en la pila para apilar todos los registros que la subrutina vaya a modificar y para las variables locales que se almacenarn en la pila. Puesto que el registro $fp es uno de los registros modificados por la subrutina, va a ser utilizado como puntero al bloque de activacin, deber apilarse. Para que la posterior limpieza del bloque de activacin sea ms sencilla, conviene apilarlo como primera palabra detrs de los parmetros que ha apilado el programa que ha hecho la llamada (si los hubiese). Actualizar el contenido del registro fp, para que apunte a la posicin de la pila donde acabamos de almacenar el contenido del fp. Apilar el contenido del resto de registros que se van a modificar, que pueden ser: $t0-$t9, $s0-$s7, $a0-$a3, $ra. Inmediatamente antes del retorno: Recuperar el contenido de los registros apilados y actualizar el puntero de pila para limpiar la pila.
o

El Bloque de activacin de una subrutina tendra, por lo tanto, la siguiente estructura: Parmetros Parmetros apilados por el programa que hace la + llamada 5,6.... fp -Registro fp Registros apilados por la subrutina >

Registro ra Registros a0-a3 Registros s0-s7 Registros t0-t9 sp -- variables locales > Quinto ejercicio El siguiente programa implementa una subrutina que calcula los elementos nulos de un vector. Los parmetros que se le pasan son: Parmetros de entrada: La dimensin del vector (pasado por valor). La direccin del primer elemento del vector (pasado por referencia). Estos parmetros se pasarn a travs de la pila ya que el objetivo que se pretende remarcar con este programa es la gestin del bloque de activacin de una subrutina. Segn el convenio establecido, estos parmetros se pasaran a travs de los registros a0 y a1. o Parmetros de salida: Contador de elementos nulos del vector. Este parmetro se devolver a traves del registro v0.
o

En la subrutina se termina de crear el bloque de activacin de la subrutina, que estar formado por los parmetros que se han pasado a travs de la pila (parmetros de entrada) y por los registros que vaya a modificar la subrutina, que apilar al principio de la ejecucin de la subrutina. No se reserva espacio para variables locales puesto que se utilizan registros para almacenarlas. Por otro lado, para que se pueda apreciar mejor la evolucin del bloque de activacin de la subrutina en distintos puntos del programa, en el programa main lo primero que se hace es inicializar los registros s0, s1, s2 y fp a unos valores. Al finalizar la ejecucin del programa el contenido de estos registros debera ser el mismo.

.data n1: vec1: nul1: .text #en primer lugar main: li li li .word .word .space 4 1,0,0,2 4

se inicializan los registros s0, s1, s2 y fp li $s0,1 $s1,2 $s2,3 $fp,4

addi sw addi lw sw la sw jal ret: sw lw addi jr subr: sw addi sw sw sw lw lw

$sp,$sp,-4 $ra,0($sp) $sp, $sp,-8 $t0, n1($0) $t0,4($sp) $t0, vec1 $t0, 0($sp) subr addi $sp,$sp,8

$v0,nul1($0) $ra,0($sp) $sp,$sp,4 $ra addi $sp,$sp,-16 $fp, 12($sp) $fp,$sp,12 $s0,-4($fp) $s1,-8($fp) $s2,-12($fp) $s0,4($fp) $s1,8($fp)

and $v0, $v0,$0 #bucle cuenta elem. nulos. bucle: beq $s1,$0,finb # si s1 = 0 saltar a finb lw $s2, 0($S0) # cargar s2=Mem(s0) bne $s2, $0, finsi #si s3<>0 saltar a finsi addi $v0,$v0,1 #v0=s2 finsi: addi $s0, $s0,4 # s0 = s0+4 addi $s1, $s1,-1 # s1=s1-1 j bucle #saltar a bucle finb: lw lw addi lw addi jr lw $s0,-4($fp) $s1,-8($fp) $s2,-12($fp) $sp,$fp,0 $fp,0($sp) $sp,$sp,4 $ra

Disponible en ejercicio5.s Cuestiones Identifica la instruccin o conjunto de intrucciones que realizan las siguientes acciones en programa que hace la llamada a la subrutina subr y en la subrutina: En el programa que hace la llamada: 1. Carga de parmetros en la pila. 2. Llamada a la subrutina.

3. Limpieza de la pila de los parmetros pasados a travs de ella. 4. Almacenamiento del resultado. En la subrutina: 1. Acutalizacin del bloque de activacin de la subrutina. 2. Lectura de los parmetros de la pila y procesamiento de los mismos. 3. Carga del resultado en v0. 4. Desapilar bloque de activacin los registros apilados y eliminar las variables locales. Actualizar el puntero de pila. 5. Retorno al programa que ha hecho la llamada. Ejecuta paso a paso el programa anterior y dibuja la situacin del bloque de activacin y de los registros s0, s1, s2, fp, sp, ra y PC en cada una de las siguientes situaciones: Programa que hace la llamada a la subrutina subr, hasta el momento que hace la llamada: 1. Antes y despus de ejecutar la instruccin addi $sp, $sp, 8 (situacin uno). 2. Antes y despueacute;s de ejecutar la instruccin jal subr. (situacin justo antes de llamar a la subrutina) Subrutina: 1. Despus de ejecutar la instruccin addi $sp, $sp, -16. 2. Despus de ejecutar la instruccin sw $fp, 12($sp). 3. Despus de ejecutar la instruccin addi $fp, $sp, 12. 4. Despues de ejecutar la instruccin sw $s2, -12($fp). 5. Despus de ejecutar la instruccin lw $s0, 4($fp). 6. Despus de ejecutar la instruccin lw $s1, 4($fp). 7. Despus de ejecutar el bucle (denominado bucle). 8. Antes y despus de ejecutar addi $sp, $fp, 0. 9. Despus de ejecutar lw $fp, 0($sp). 10. Despus de ejecutar addi $sp, $sp, 4. Comprobar qu la situacin de la pila y de los registros sp y fp es la misma que justo antes de llamar a la subrutina). 11. Despus de ejecutar jr $ra Programa que hace la llamada despus de retornar de la subrutina: 1. Antes y despus de ejecutar addi sp, sp, 8. Comprobar qu el contenido de los registros y de la pila se corresponde con la situacin uno. Modifica el cdigo para que los parmetros se pasen a travs de los registros $a0-$a1 y el de salida a travs de v0. Supongamos que el programa que hace la llamada pretende que despus de ejecutar la subrutina estos registros contengan el mismo contenido que el que se ha cargado inicialmente en el programa.

Problemas propuestos
Implementa una subrutina en ensamblador que calcule cuntos elementos de un vector de enteros de dimensin n son iguales a un elemento dado: Parmetros de entrada a la subrutina: 1. direccin del primer elemento del vector, 2. total de elementos del vector (dimensin), 3. elemento a comparar. Parmetro de salida de la subrutina: 1. contador calculado. Realiza las siguientes implementaciones: Implementa la subrutina de forma que todos los parmetros que se le pasan sean por valor excepto aqullos que obligatoriamente se deban pasar por referencia, y a travs de registros. Implementa la subrutina de forma que todos los parmetros se pasen por referencia y a travs de registros. Implementa la subrutina donde los parmetros que se pasan sean del mismo tipo que en el primer caso pero utilizando la pila como lugar para realizar el paso de parmetros. Implementa una subrutina en ensamblador, tal que dado un vector de enteros de dimensin n obtenga el elemento (i) de dicho vector. La subrutina tendr como parmetros de entrada: la direccin del vector, la dimensin del mismo y el del elemento a devolver. La subrutina devolver el elemento i-simo. Realiza la llamada y el retorno a la subrutina segn el convenio establecido. Implementa una subrutina en ensamblador, tal que dada una matriz de enteros de dimensin n x m, almacenada por filas, obtenga el elemento (i,j) de dicha matriz. La subrutina tendr como parmetros de entrada: la direccin de la matriz, las dimensiones de la misma y los ndices elemento a devolver. La subrutina devolver el elemento (i,j). Realiza la llamada y el retorno a la subrutina segn el convenio establecido.

<--Estructuras de control

El simulador SPIM > -->

Examen de Teora Fundamentos de Computadores de Ingeniera Informtica Facultad de Informtica. Universidad de Las Palmas de GC 15 de diciembre de 2005 1. (2 puntos) Ha aparecido en el mercado una nueva versin de un procesador en la que la nica mejora con respecto a la versin anterior es una unidad de coma otante mejorada que permite reducir el tiempo de las instrucciones de coma otante a tres cuartas partes del tiempo que consuman antes. Suponga que en los programas que constituyen la carga de trabajo habitual del procesador las instrucciones de coma otante consumen un promedio del 13 % del tiempo del procesador antiguo:

a ) (0.75 puntos) Cul es la mxima ganancia de velocidad que puede esperarse en los programas si se sustituye el procesador de la versin antigua por el nuevo? b ) (1.25 puntos) Cul debera ser el porcentaje de tiempo de clculo con datos en coma otante (en la versin antigua del procesador) en sus programas para esperar una ganancia mxima de 4?
2. (3 puntos) El tratamiento de las excepciones del procesador MIPS bsico consiste en la escritura de la direccin de la instruccin causante de la excepcin en el registro EP C , la escritura en el registro Cause de la causa de la excepcin (0 para instruccin desconocida y 1 para desbordamiento aritmtico) y la ruptura del secuenciamiento de las instrucciones a la direccin 0x0C000000. Las guras 1 y 2 son la ruta de datos y la especicacin del control para el procesador MIPS bsico. Realiza las modicaciones de la ruta de datos y especica el control mediante una tabla de verdad para incluir el tratamiento de las excepciones tal y como ha sido denido anteriormente. 3. (2.0 puntos) Las guras 3 y 4 representan la ruta de datos y la especicacin del control para la implementacin multiciclo del procesador MIPS bsico

con la inclusin del hardware y control necesarios para tratar las excepciones por instruccin desconocida y desbordamiento aritmtico. Adems, las guras 5 y 6 especican el control microprogramado de la implementacin multiciclo del procesador MIPS bsico. Realiza las modicaciones necesarias del microprograma y del secuenciador del microprograma de la gura 7 para que incluya el tratamiento de excepcin por desbordamiento aritmtico. Es necesario especicar el contenido de las ROM de "dispatch"que hayan sido modicadas. El tratamiento de la excepcin por instruccin desconocida no es necesario incluirlo. 4. (0.5 puntos) Cambia el valor de los bits 3, 7, 9, 21, 29 (sin modicar el resto de los bits) de la posicin de memoria etiquetada palabra y de contenido 0xFF0F1235 almacenada en memoria a partir de la direccin 0x10000004. 5. (2.5 puntos) Disea un programa en ensamblador que dado un vector de enteros V obtenga cuntos elementos de este vector estn dentro del rango determinado por dos variables rango1 y rango2 (ambos inclusives). El programa deber inicializar los elementos del vector en memoria, una variable que almacenar el nmero de elementos que tiene ese vector y dos variables donde se almacenarn los rangos. Tambin deber reservar espacio para la variable resultante.

0 M u x ALU Add result 1 PCSrc Shift left 2

Add

4 Instruction [31 26]

RegDst Branch Branch MemRead MemtoReg Control ALUOp MemWrite ALUSrc RegWrite Read register 1

Figura 1: Ruta de datos monociclo


Instruction [25 21] Instruction [20 16] Read data 1 Re Read register 2 Registers Read Write data 2 register Write data 0 M u x 1 Zero ALU ALU result Address Instruction [15 11] 0 M u x 1 W rite data Instruction [15 0] 16 Sign extend 32 ALU control Instruction [5 0]

PC

Read address

Instruction [310]

Instruction memory

Read data Data m emory

1 M u x 0

Implementacin con PLA


Inputs Op5 Op4 Op3 Op2 Op1 Op0

Op5-0 -> (bits 31-26)

Outputs R-format Iw sw beq RegDst ALU ALUSrc MemtoReg RegWrite MemRead MemWrite Branch ALUOp1 ALUOpO

Figura 2: Control monociclo

RegDst ALUSrc MemToReg RegWrite MemRead MemWrite Branch ALUOp1 ALUOp0

00 0000 0D R-Format 1 0 0 1 0 0 0 1 0

10 0011 35D lw 0 1 1 1 1 0 0 0 0

10 1011 43D sw x 1 x 0 0 1 0 0 0

00 0100 4D beq x 0 x 0 0 0 1 0 1

PCWriteCond PCWrite IorD Outputs MemRead MemWrite MemtoReg RegWrite RegDst 0 IRWrite Op [5 0] ALUSrcA Control ALUSrcB

CauseWrite IntCause EPCWrite PCSource ALUOp

Instruction [25 0]
Shift left 2 PC [31-28]

26

28

Jump address [31-0]

1M
2 u x

PC Instruction [25 21] Read register 1 A B 4 Instruction [20 16] Instruction [15 0] 0] Instruction register Write data Instruction [15 0]

Instruction [31-26]

CO 00 00 00

Address

0 M u x 1 0 M u x 1 Read Read register 2 data 1 Registers Write Read register data 2

Memory

MemData 0 M Instruction u x [15 11] 1 0 1M u 2x 3

Zero ALU ALU result

ALU ALUOut

EPC

Write data

Cause 1

0 M u x 1 16 Sign extend 32 Shift left 2

5 Figura 3: Camino de datos con excepciones


Memory data register ALU control Instruction [5 0]

0 M u x 1

Instruction fetch 0

Instruction decode/ decode/ Register fetch 1 ALUSrcA = 0 ALUSrcB = 11 ALUOp = 00

Start

MemRead ALUSrcA = 0 IorD = 0 IRWrite ALUSrcB = 01 ALUOp = 00 PCWrite PCSource = 00


'''B EQ EQ EQ ') ) ) =
r) the =o p (O

( ( (O p

Memory address computation 2


= (Op ') o r 'LW

= (Op

') 'SW Execution

(Op = 'J') Jump completion

6 ALUSrcA = 1 ALUSrcB = 00 ALUOp = 10 PCWrite PCSource = 10

ALUSrcA = 1 ALUSrcB = 00 ALUOp = 00


p (O

e) -typ =R (Op Branch completion 8 ALUSrcA = 1 ALUSrcB = 00 ALUOp = 01 PCWriteCond PCSource = 01

(Op = 'LW')

Figura 4: Especicacin del control con excepciones

6
= ') W 'S

Memory access R-type completion 7 MemWrite IorD = 1 Overflow RegDst = 1 RegWrite MemtoReg = 0 11 5

Memory access

10

MemRead IorD = 1

IntCause = 1 CauseWrite A ALUSrcA = 0 ALUSrcB = 01 ALUOp = 01 EPCWrite PCWrite PCSource = 11

IntCause = 0 CauseWrite ALUSrcA = 0 ALUSrcB = 01 ALUOp = 01 EPCWrite PCWrite PCSource = 11

Write-back step Overflow

RegWrite MemtoReg = 1 RegDst = 0

C o n tr o l A L U ALUop1 0 0 1 ALUO p0 0 1 0

O p e r a c i n Sum a R e s ta F unc. code

SRC1 A d d rS rc A 0 1

O p e r a c i n PC A

SRC2 A L U S rB 1 0 0 1 1 A L U S rc B 0 0 1 0 1

O p e ra c i n B 4 E x te n d E x tS h ft

R e g is t e r C o n t r o l R e g W r ite 1 1 R egD st 1 0 M em ToR eg 0 1

O p e r. W r ite A L U W r ite M D R

M e m o ria IR W rite 1 0 0 M em Read 1 1 0 M e m W rite 0 0 1 Io rD 0 1 1

O p e r. R ead PC R ead ALU W rite A L U

Control PCWrite PCSrc1 0 0 1 PcSrc0 0 1 0 PCwrite 1 0 1 PCWrtCond 0 1 0 ALU

Sec

Oper.

A d d rC tl1 1 0 0 1

A d d rC tl0 1 0 1 0

O p e ra c i n Seq. F e tc h D is p a tc h 1 D is p a tc h 2

ALUOut-Cond Jump address

Figura 5: Campos y codicacin de los valores de las microinstrucciones


Control ALU SRC1 SRC2 Control Registro MemToReg ALUSrcB0 Memoria Control PCWrite PCWriteCond PCSource1 PCSource0 Sec.

ALUSrcB1

MemRead

MemWrite

RegWrite

AddrCtl1

Estado

Etiqueta Fetch Mem1 LW2

0 1 2 3 4 5 6 7 8 9

Control SRC1 ALU Add PC Add PC Add A

SRC2

Control Registros

Memoria Read PC

4 Extshft Read Extend Write MDR

Read ALU Write ALU A B Write ALU

SW2 Rformat1 Func Cod BEQ1 JUMP1 Subt

Control Secuenc. PCWrite ALU Seq. Dispatch 1 Dispatch 2 Seq Fetch Fetch Seq Fetch Fetch Fetch

ALUOutcond Jump Address

Figura 6: Microprograma 7

AddrCtl0

PCWrite

AluSrcA

IRWrite

RegDst

Aluop1

Aluop0

IorD

Sec A d d rC tl1 1
PLA or ROM

A d d rC tl0 1 0 1 0

O p e ra c i n Seq. F e tc h D is p a tc h 1 D is p a tc h 2

0 0 1

1 State Adder Mux 2 1 A ddrCtl 0 0

Dispatch ROM 2

Dispatch ROM 1 Address select logic

Dispatch ROM2 Op [5:0] Nombre Valor 100011 lw LW2 (3) 101011 sw SW2 (5)

Instruction register opcode field

Op [5:0] 000000 000010 000100 100011 101011

Dispatch ROM1 Nombre Valor R-Format R-Format1 (6) jmp JUMP1 (9) beq BEQ1 (8) lw MEM1 (2) sw MEM1 (2)

Figura 7: Secuenciador del microprograma

Op

Examen de Teora Fundamentos de Computadores de Ingeniera Informtica Facultad de Informtica. Universidad de Las Palmas de GC 7 de septiembre de 2005 1. (3.0 puntos) La gura 1 representa una ruta de datos alternativa para la implementacin multiciclo del procesador MIPS bsico estudiado. En esta implementacin, los registros temporales A y B han sido eliminados con la intencin de realizar en un nico ciclo un acceso de lectura al banco de registro y una operacin ALU. La gura 2 es la especicacin del control multiciclo para el procesador MIPS bsico estudiado y es incluida aqu por si fuera de ayuda. Escribe la especicacin completa de la nueva unidad de control para esta nueva ruta de datos que incluya el control para las instruciones load, store, aritmticas y jump. El control para la instruccin beq no es necesario hacerlo. 2. (1.5 puntos) Considera que una ventaja de la nueva implementacin del procesador es la reduccin de los ciclos por instruccin en una unidad para todas las instrucciones, mientras que una desventaja es el aumento del tiempo de ciclo. A partir de la mezcla de instrucciones de la tabla 1, Cul es el mximo incremento de frecuencia permitido para la nueva implementacin respecto a la implementacin original (en tanto por ciento) para que la propuesta no haga ms lento la ejecucin del programa gcc?
Tipo Tipo-R Load Store Saltos y bifurcaciones Frecuencia ( %) 41 24 14 21

Cuadro 1: Frecuencia simplicada de usos de las instrucciones para el programa gcc

3. (2.5 puntos) Las guras 3 y 4 especican el control microprogramado de la implementacin multiciclo del procesador MIPS bsico estudiado. Realiza las modicaciones necesarias del microprograma para que sea vlido para la ruta de datos de la gura 1.
1

Figura 1: Camino de 2 datos con excepciones

Instruction fetch 0

Instruction decode/ decode/ Register fetch 1 ALUSrcA = 0 ALUSrcB = 11 ALUOp = 00

Start

MemRead ALUSrcA = 0 IorD = 0 IRWrite ALUSrcB = 01 ALUOp = 00 PCWrite PCSource = 00


'''B EQ EQ EQ ') ) ) =
r) the =o p (O

( ( (O p

Memory address computation 2


= (Op ') o r 'LW

= (Op

') 'SW Execution

(Op = 'J') Jump completion

6 ALUSrcA = 1 ALUSrcB = 00 ALUOp = 10 PCWrite PCSource = 10

ALUSrcA = 1 ALUSrcB = 00 ALUOp = 00


p (O

e) -typ =R (Op Branch completion 8 ALUSrcA = 1 ALUSrcB = 00 ALUOp = 01 PCWriteCond PCSource = 01

(Op = 'LW')

Figura 2: Especicacin del control con excepciones

3
= ') W 'S

Memory access R-type completion 7 MemWrite IorD = 1 Overflow RegDst = 1 RegWrite MemtoReg = 0 11 5

Memory access

10

MemRead IorD = 1

IntCause = 1 CauseWrite A ALUSrcA = 0 ALUSrcB = 01 ALUOp = 01 EPCWrite PCWrite PCSource = 11

IntCause = 0 CauseWrite ALUSrcA = 0 ALUSrcB = 01 ALUOp = 01 EPCWrite PCWrite PCSource = 11

Write-back step Overflow

RegWrite MemtoReg = 1 RegDst = 0

C o n tr o l A L U ALUop1 0 0 1 ALUO p0 0 1 0

O p e r a c i n Sum a R e s ta F unc. code

SRC1 A d d rS rc A 0 1

O p e r a c i n PC A

SRC2 A L U S rB 1 0 0 1 1 A L U S rc B 0 0 1 0 1

O p e ra c i n B 4 E x te n d E x tS h ft

R e g is t e r C o n t r o l R e g W r ite 1 1 R egD st 1 0 M em ToR eg 0 1

O p e r. W r ite A L U W r ite M D R

M e m o ria IR W rite 1 0 0 M em Read 1 1 0 M e m W rite 0 0 1 Io rD 0 1 1

O p e r. R ead PC R ead ALU W rite A L U

Control PCWrite PCSrc1 0 0 1 PcSrc0 0 1 0 PCwrite 1 0 1 PCWrtCond 0 1 0 ALU

Sec

Oper.

A d d rC tl1 1 0 0 1

A d d rC tl0 1 0 1 0

O p e ra c i n Seq. F e tc h D is p a tc h 1 D is p a tc h 2

ALUOut-Cond Jump address

Figura 3: Campos y codicacin de los valores de las microinstrucciones


Control ALU SRC1 SRC2 Control Registro MemToReg ALUSrcB0 Memoria Control PCWrite PCWriteCond PCSource1 PCSource0 Sec.

ALUSrcB1

MemRead

MemWrite

RegWrite

AddrCtl1

Estado

Etiqueta Fetch Mem1 LW2

0 1 2 3 4 5 6 7 8 9

Control SRC1 ALU Add PC Add PC Add A

SRC2

Control Registros

Memoria Read PC

4 Extshft Read Extend Write MDR

Read ALU Write ALU A B Write ALU

SW2 Rformat1 Func Cod BEQ1 JUMP1 Subt

Control Secuenc. PCWrite ALU Seq. Dispatch 1 Dispatch 2 Seq Fetch Fetch Seq Fetch Fetch Fetch

ALUOutcond Jump Address

Figura 4: Microprograma 4

AddrCtl0

PCWrite

AluSrcA

IRWrite

RegDst

Aluop1

Aluop0

IorD

Examen de Teora Fundamentos de Computadores de Ingeniera Informtica Facultad de Informtica. Universidad de Las Palmas de GC 13 de julio de 2005 1. (3 puntos) La instruccin Move Conditional on Zero MOVZ rd, rs, rt es una instruccin tipo R del repertorio de instrucciones del procesador MIPS que mueve condicionalmente el registro rs al registro rd cuando el registro rt es igual 0. El formato de la instruccin es el siguiente:

b31 . . . b26 b25 . . . b21 b20 . . . b16 b15 . . . b11 b10 . . . b6 b5 . . . b 0 0...0 rs rt rd 0...0 0 0 1 0 1 0
a ) (1.5 puntos) Aada los caminos de datos y las seales de control necesarias al camino de datos multiciclo de la gura 1 para la ejecucin de esta instruccin. b ) (1.5 puntos) Indique las modicaciones necesarias de la mquina de estados nitos de la gura 2 para la inclusin de la instruccin M OV Z .
2. (1.5 puntos) Una ventaja de incluir la instruccin MOVZ en el repertorio de instrucciones consiste en la posibilidad de sustituir cada pieza de cdigo con la siguiente estructura:

bne rs, nocopiar add rd, rt, r0 nocopiar: . . .


por el cdigo:

movz rd, rs, rt


Ten en cuenta que cuando hacemos esta sustitucin disminuye el nmero de instrucciones del programa y tambin el nmero de ciclos de ejecucin (de 3 ciclos del beq ms 4 ciclos del add pasamos a 4 ciclos del movz ). Considerando que esta mejora es aplicable slo al 2 por ciento del total de las instrucciones de salto y bifurcacin, calcula la mxima mejora de rendimiento introducida al incluir esta instruccin en el repertorio de instrucciones para el programa gcc que tiene la distribucin de instrucciones del cuadro 1.
1

Tipo Tipo-R Load Store Saltos y bifurcaciones

Frecuencia ( %) 41 24 14 21

Cuadro 1: Frecuencia simplicada de usos de las instrucciones para el programa gcc

3. (2.5 puntos) Las guras 1 y 2 representan la ruta de datos y la especicacin del control para la implementacin multiciclo del procesador MIPS bsico con la inclusin del hardware y control necesarios para tratar las excepciones por instruccin desconocida. Adems, las guras 3 y 4 especican el control microprogramado de la implementacin multiciclo del procesador MIPS bsico. Realiza las modicaciones necesarias del microprograma y del secuenciador del microprograma de la gura 5 para que incluya el tratamiento de excepcin por instruccin desconocida. Es necesario especicar el contenido de las ROM de "dispatch"que hayan sido modicadas. El tratamiento de la excepcin por desbordamiento aritmtico no es necesario incluirlo.

PCWriteCond PCWrite IorD Outputs MemRead MemWrite MemtoReg RegWrite RegDst 0 IRWrite Op [5 0] ALUSrcA Control ALUSrcB

CauseWrite IntCause EPCWrite PCSource ALUOp

Instruction [25 0]
Shift left 2 PC [31-28]

26

28

Jump address [31-0]

1M
2 u x

PC Instruction [25 21] Read register 1 A B 4 Instruction [20 16] Instruction [15 0] 0] Instruction register Write data Instruction [15 0]

Instruction [31-26]

CO 00 00 00

Address

0 M u x 1 0 M u x 1 Read Read register 2 data 1 Registers Write Read register data 2

Memory

MemData 0 M Instruction u x [15 11] 1 0 1M u 2x 3

Zero ALU ALU result

ALU ALUOut

EPC

Write data

Cause 1

0 M u x 1 16 Sign extend 32 Shift left 2

3 Figura 1: Camino de datos con excepciones


Memory data register ALU control Instruction [5 0]

0 M u x 1

Instruction fetch 0

Instruction decode/ decode/ Register fetch 1 ALUSrcA = 0 ALUSrcB = 11 ALUOp = 00

Start

MemRead ALUSrcA = 0 IorD = 0 IRWrite ALUSrcB = 01 ALUOp = 00 PCWrite PCSource = 00


'''B EQ EQ EQ ') ) ) =
r) the =o p (O

( ( (O p

Memory address computation 2


= (Op ') o r 'LW

= (Op

') 'SW Execution

(Op = 'J') Jump completion

6 ALUSrcA = 1 ALUSrcB = 00 ALUOp = 10 PCWrite PCSource = 10

ALUSrcA = 1 ALUSrcB = 00 ALUOp = 00


p (O

e) -typ =R (Op Branch completion 8 ALUSrcA = 1 ALUSrcB = 00 ALUOp = 01 PCWriteCond PCSource = 01

(Op = 'LW')

Figura 2: Especicacin del control con excepciones

4
= ') W 'S

Memory access R-type completion 7 MemWrite IorD = 1 Overflow RegDst = 1 RegWrite MemtoReg = 0 11 5

Memory access

10

MemRead IorD = 1

IntCause = 1 CauseWrite A ALUSrcA = 0 ALUSrcB = 01 ALUOp = 01 EPCWrite PCWrite PCSource = 11

IntCause = 0 CauseWrite ALUSrcA = 0 ALUSrcB = 01 ALUOp = 01 EPCWrite PCWrite PCSource = 11

Write-back step Overflow

RegWrite MemtoReg = 1 RegDst = 0

C o n tr o l A L U ALUop1 0 0 1 ALUO p0 0 1 0

O p e r a c i n Sum a R e s ta F unc. code

SRC1 A d d rS rc A 0 1

O p e r a c i n PC A

SRC2 A L U S rB 1 0 0 1 1 A L U S rc B 0 0 1 0 1

O p e ra c i n B 4 E x te n d E x tS h ft

R e g is t e r C o n t r o l R e g W r ite 1 1 R egD st 1 0 M em ToR eg 0 1

O p e r. W r ite A L U W r ite M D R

M e m o ria IR W rite 1 0 0 M em Read 1 1 0 M e m W rite 0 0 1 Io rD 0 1 1

O p e r. R ead PC R ead ALU W rite A L U

Control PCWrite PCSrc1 0 0 1 PcSrc0 0 1 0 PCwrite 1 0 1 PCWrtCond 0 1 0 ALU

Sec

Oper.

A d d rC tl1 1 0 0 1

A d d rC tl0 1 0 1 0

O p e ra c i n Seq. F e tc h D is p a tc h 1 D is p a tc h 2

ALUOut-Cond Jump address

Figura 3: Campos y codicacin de los valores de las microinstrucciones


Control ALU SRC1 SRC2 Control Registro MemToReg ALUSrcB0 Memoria Control PCWrite PCWriteCond PCSource1 PCSource0 Sec.

ALUSrcB1

MemRead

MemWrite

RegWrite

AddrCtl1

Estado

Etiqueta Fetch Mem1 LW2

0 1 2 3 4 5 6 7 8 9

Control SRC1 ALU Add PC Add PC Add A

SRC2

Control Registros

Memoria Read PC

4 Extshft Read Extend Write MDR

Read ALU Write ALU A B Write ALU

SW2 Rformat1 Func Cod BEQ1 JUMP1 Subt

Control Secuenc. PCWrite ALU Seq. Dispatch 1 Dispatch 2 Seq Fetch Fetch Seq Fetch Fetch Fetch

ALUOutcond Jump Address

Figura 4: Microprograma 5

AddrCtl0

PCWrite

AluSrcA

IRWrite

RegDst

Aluop1

Aluop0

IorD

Sec A d d rC tl1 1
PLA or ROM

A d d rC tl0 1 0 1 0

O p e ra c i n Seq. F e tc h D is p a tc h 1 D is p a tc h 2

0 0 1

1 State Adder Mux 2 1 A ddrCtl 0 0

Dispatch ROM 2

Dispatch ROM 1 Address select logic

Dispatch ROM2 Op [5:0] Nombre Valor 100011 lw LW2 (3) 101011 sw SW2 (5)

Instruction register opcode field

Op [5:0] 000000 000010 000100 100011 101011

Dispatch ROM1 Nombre Valor R-Format R-Format1 (6) jmp JUMP1 (9) beq BEQ1 (8) lw MEM1 (2) sw MEM1 (2)

Figura 5: Secuenciador del microprograma

Op

Examen de Fundamentos de Computadores de II Facultad de Inform tica. Universidad de Las Palmas de GC a 7 de septiembre de 2004
1. (0.75 puntos) El formato de instrucci n de un procesador tiene 6 bits para o el c digo de operaci n y 10 para la direcci n del operando. Suponiendo que o o o una instrucci n de bifurcaci n con direccionamiento relativo al contador o o de programa, almacenada en la posici n 530 (en decimal), origina un salto o a la posici n 620 (en decimal), y si adem s el c digo de operaci n de la o a o o instrucci n de salto es 110011, justica una posible codicaci n binaria de o o dicha instrucci n. o 2. (1.25 puntos) En un procesador con instrucciones de 0 direcciones (procesador con pila), qu expresi n matem tica calcula la secuencia de instruce o a ciones? P USH M[C] P USH M[D] ADD P USH M[C] P USH M[D] ADD MULT P OP M[A] 3. Suponga que hubiera una instrucci n MIPS llamada bcp, que copiara un o bloque de palabras de una direcci n a otra. Suponga que esta instrucci n o o requiera que la direcci n del principio del bloque fuente sea el registro t1, o la direcci n destino est en el registro t2, y el n mero de palabras a copiar o e u est en t3 (que es 0). Adem s suponga que los valores de estos registros, e a as como el registro t4 puedan destruirse al ejecutar esta instrucci n (para o que los registros puedan usarse como temporales). (2 puntos)Escriba un programa en lenguaje en ensamblador MIPS sustitutivo de la instrucci n bcp para realizar la copia del bloque. Cu ntas o a instrucciones se ejecutar n para copiar un bloque de 100 palabras? a Utilizando el CPI de las instrucciones en la realizaci n multiciclo, o cu ntos ciclos se necesitan para copiar n palabras? a

(2 puntos) Dise e una estrategia para incluir la instrucci n bcp al camin o no de datos de la gura 1 y a la especicaci n del control de la gura o 2. Probablemente se necesitar hacer algunos cambios en el camino de a datos para realizar la instrucci n ecientemente. D una descripci n o e o de los cambios propuestos y de c mo funciona el secuenciamiento de o la instrucci n. o (2 puntos) Modique el formato original de las microinstrucciones MIPS (gura 3) y el microprograma inical (gura 4) para que incluya la instrucci n bcp. Describa detalladamente c mo se extiende el mio o croc digo para soportar estructuras de control m s complejas (como o a un bucle) con microc digo. Ha cambiado el soporte para la instruco ci n bcp el tama o del c digo? Adem s de la instrucci n bcp, alguna o n o a o otra instrucci n se ver afectada por el cambio en el formato de inso a trucciones? (2 puntos) Estime la mejora del rendimiento que se puede conseguir al realizar la instrucci n en circuitera (respecto de la soluci n por o o programa del apartado anterior) y explique de d nde procede el increo mento del rendimiento.

PCWriteCond PCWrite IorD IorD MemRead MemWrite MemtoReg IRWrite Op [5 0] Control Outputs

PCSource ALUO p ALUSrcB ALUSrcA RegWrite RegDst 0 M x 2

Figura 1: Camino de datos

Instructi Instruction [25 0] Instruction [31-26] Address Memory MemData Write data Instruction [25 21] Instruction [20 16] Instruction [15 0] Instruction register Instruction [15 0] Memory data register 0 M Instruction u x [15 11] 1 0 M u x 1 16 Sign extend extend 32 Shift left 2 Read register 1 Read Read register 2 data 1 Registers Write Read register data 2 Write data A 0 M u x 1

26

Shift left 2

28

Jump address [31-0]

1 u

PC

0 M u x 1

PC [31-28]

B 4

Zero ALU ALU result

ALUOut

0 1 M u 2 x 3

ALU control

Instruction [5 0]

Instruction fetch 0 MemRead ALUSrcA = 0 IorD = 0 IRWrite ALUSrcB = 01 ALUOp = 00 PCWrite PCSource = 00

Instruction Instruction decode/ register fetch 1 ALUSrcA = 0 ALUSrcB = 11 ALUOp = 00

Start

Memory address computation 2 ALUSrcA = 1 ALUSrcB ALUSrcB = 10 ALUOp = 00


( Op W = 'L

( Op ') or

W') = 'S

Execution 6 ALUSrcA =1 ALUSrcB = 00 ALUOp= 10 8

e) -t yp =R ( Op Branch completion

=' BE Q' ) (O p

(Op = 'J')

Jump completion

9 ALUSrcA = 1 ALUSrcB = 00 ALUOp = 01 PCWriteCond PCSource = 01 PCWrite PCSource = 10

O (O

(Op = 'L W')

p p = = ''S '') W W

Memory access 5

Memory access 7 MemWrite IorD = 1

R-type completion

3 MemRead IorD = 1

RegDst = 1 RegWrite MemtoReg = 0

Write-back step 4 RegDst =0 RegWrite MemtoReg = 1

Figura 2: Especicaci n del control o

C o n tr o l A L U ALU op1 0 0 1 ALUO p0 0 1 0

O p e r a c i n Sum a R e s ta Func. code

SRC1 A d d rS rc A 0 1

O p e r a c i n PC A

SRC2 A L U S rB 1 0 0 1 1 A L U S rcB 0 0 1 0 1

O p e ra c i n B 4 E xte n d E xtS h ft

Control PCWrite PCSrc1 0 0 1 PcSrc0 0 1 0 PCwrite 1 0 1 PCWrtCond 0 1 0 ALU

Sec

Oper.

A d d rC tl1 1 0 0 1

A d d rC tl0 1 0 1 0

O p e ra c i n Seq. F e tc h D isp a tc h 1 D isp a tc h 2

ALUOut-Cond Jump address

Figura 3: Campos y codicaci n de los valores de las microinstrucciones o

Control ALU SRC1

SRC2

Control Registro MemToReg ALUSrcB0

Memoria

Control PCWrite PCWriteCond PCSource1 PCSource0

Sec.

ALUSrcB1

MemRead

MemWrite

RegWrite

AddrCtl1

Estado

Etiqueta Fetch Mem1 LW2

0 1 2 3 4 5 6 7 8 9

Control SRC1 ALU Add PC Add PC Add A

SRC2

Control Registros

Memoria Read PC

4 Extshft Read Extend Write MDR

Read ALU Write ALU A B Write ALU

SW2 Rformat1 Func Cod BEQ1 JUMP1 Subt

Control Secuenc. PCWrite ALU Seq. Dispatch 1 Dispatch 2 Seq Fetch Fetch Seq Fetch Fetch Fetch

ALUOutcond Jump Address

Figura 4: Microprograma

AddrCtl0

PCWrite

AluSrcA

IRWrite

RegDst

Aluop1

Aluop0

IorD

Examen de Teora Fundamentos de Computadores de Ingeniera Inform tica a Facultad de Inform tica. Universidad de Las Palmas de GC a 14 de julio de 2004
1. (0.5 puntos) Dise a el formato de las instrucciones de un m quina de registron a memoria que tiene las siguientes caractersticas: El repertorio de instrucciones contiene en total 32 instrucciones, de las cuales 16 son instrucciones del tipo: op Ry , (Rx ); esto es Ry Ry op M [Rx ] Otras 8 instrucciones son del tipo: op Ry , Rx ; esto es Ry Ry op Rx Y las otras 8 restantes est n todava por especicar. a S lo admite para acceder a la memoria el modo de direccionamiento o indirecto por registro. Tiene un banco de 8 registros. En el formato de la instrucci n se especican 3 campos: el primero, o para el c digo de operaci n; el segundo, para especicar el registro o o que es el segundo operando fuente o que contiene la direcci n de meo moria del segundo operando fuente; y el tercero, para especicar el primer registro fuente que es adem s siempre registro destino en las a instrucciones especicadas. 2. (2.0 puntos) Para el repertorio de instrucciones del problema anterior: (1.5 puntos) Dise a una ruta de datos monociclo que soporte la ejecun ci n de las instrucciones especicadas. Explica claramente el nombre o y la funcionalidad de cada una de las se ales de control en el camino y n el funcionamiento de cada uno de los bloques funcionales que utilices. (0.5 puntos) Especica la unidad de control para esa ruta de datos mediante una tabla de verdad o m todo equivalente. e 3. (3 puntos) Las guras 1 y 2 muestran la estructura y la especicaci n del o control de la implementaci n b sica multiciclo del procesador MIPS R3000. o a 1

En esta implementaci n tanto la instrucci n de bifurcaci n jump como la o o o de salto condicional beq tardan 3 ciclos en ser ejecutadas por el procesador. Nuestro objetivo como dise adores de este procesador es considerar la n implementaci n de estas dos instrucciones en dos ciclos. o a) (1.5 puntos) A ada los caminos de datos y las se ales de control nen n cesarias al camino de datos multiciclo de la gura 1 para que ambas instrucciones sean ejecutadas por el procesador en 2 ciclos. a b) (1.5 puntos) Indique las modicaciones necesarias a la m quina de estados nitos de la gura 2 para que ambas intrucciones sean ejecutadas por el procesador en 2 ciclos. Especica claramente la m quina a de estados nitos modicada. 4. (3 puntos) En nuestra compa a adem s de la versi n cableada del procen a o sador b sico MIPS R3000, tenemos tambi n una versi n que implementa a e o el control mediante la t cnica de microprogramaci n. Las guras 3 y 4 ree o sumen la especicaci n del control mediante la t cnica de microprogramao e ci n. o a) (2 puntos) Realiza las modicaciones necesarias sobre las guras 3 y 4 para que ahora el control microprogramado funcione para el camino de datos modicado para que las instrucciones de bifurcaci n y salto o funcionen en 2 ciclos. En el caso que alg n cambio sea necesario, u especica los nuevos valores de las tablas de Dispatch. b) (1 punto) Codica en binario o en hexadecimal las microinstrucciones que hayas modicado o a adido. n 5. (1.5 puntos) Cabe esperar que las modicaciones del procesador MIPS R3000 para que realice los saltos y las bifurcaciones en tan s lo 2 ciclos disminuo ya la frecuencia de reloj del procesador. Por este motivo, antes de seguir adelante con nuestro procesador modicado, estamos interesados en saber: a) (1 punto) Cu l es la frecuencia mnima (en relaci n con la frecuencia a o actual factual a partir de la cual deja de ser interesante el cambio que proponemos? b) (0.5 puntos) Cu l es la frecuencia mnima necesaria para una frecuena cia original de 100MHz? 2

Tipo Tipo-R Load Store Saltos y bifurcaciones

Frecuencia ( %) 41 24 14 21

Cuadro 1: Frecuencia simplicada de usos de las instrucciones para el programa gcc Para realizar el c lculo de esta frecuencia mnima, al menos de manera aproa ximada, disponemos de los datos de la mezcla de instrucciones del programa gcc en la tabla 1.

PCWriteCond PCSource Outputs ALUSrcB Control RegWrite Op [5 0] RegDst ALUSrcA ALUO p PCWrite IorD IorD MemRead MemWrite MemtoReg IRWrite

Instructi Instruction [25 0]


Shift left 2

26

28

1 u
Jump address [31-0] 2

M x

PC Instruction [25 21] Instruction [20 16] Instruction [15 0] B 4 Instruction register Write data Instruction [15 0] 0 M u x 1 16 Sign extend extend 32 Shift left 2 0 1 M u 2 x 3 A Read register 1

Instruction [31-26]

PC [31-28]

Address

4
0 M Instruction u x [15 11] 1 Read Read register 2 data 1 Registers Write Read register data 2

0 M u x 1 0 M u x 1

Memory

MemData

Zero ALU ALU result

ALUOut

Figura 1: Camino de datos


Memory data register ALU control Instruction [5 0]

Write data

Instruction fetch 0 MemRead ALUSrcA = 0 IorD = 0 IRWrite ALUSrcB = 01 ALUOp = 00 PCWrite PCSource = 00

Instruction Instruction decode/ register fetch 1 ALUSrcA = 0 ALUSrcB = 11 ALUOp = 00

Start

Memory address computation 2 ALUSrcA = 1 ALUSrcB ALUSrcB = 10 ALUOp = 00


( Op W = 'L

(O ') or

p=

(O p

') 'SW

Execution 6 ALUSrcA =1 ALUSrcB = 00 ALUOp= 10 8

e) -t yp =R ( Op Branch completion

=' BE Q' )

(Op = 'J')

Jump completion

9 ALUSrcA = 1 ALUSrcB = 00 ALUOp = 01 PCWriteCond PCSource = 01 PCWrite PCSource = 10

O (O

(Op = 'L W')

p p = = ''S '') W W

Memory access 5

Memory access 7 MemWrite IorD = 1

R-type completion

3 MemRead IorD = 1

RegDst = 1 RegWrite MemtoReg = 0

Write-back step 4 RegDst =0 RegWrite MemtoReg = 1

Figura 2: Especicaci n del control o

C o n tr o l A L U ALU op1 0 0 1 ALUO p0 0 1 0

O p e r a c i n Sum a R e s ta Func. code

SRC1 A d d rS rc A 0 1

O p e r a c i n PC A

SRC2 A L U S rB 1 0 0 1 1 A L U S rcB 0 0 1 0 1

O p e ra c i n B 4 E xte n d E xtS h ft

Control PCWrite PCSrc1 0 0 1 PcSrc0 0 1 0 PCwrite 1 0 1 PCWrtCond 0 1 0 ALU

Sec

Oper.

A d d rC tl1 1 0 0 1

A d d rC tl0 1 0 1 0

O p e ra c i n Seq. F e tc h D isp a tc h 1 D isp a tc h 2

ALUOut-Cond Jump address

Figura 3: Campos y codicaci n de los valores de las microinstrucciones o

Control ALU SRC1

SRC2

Control Registro MemToReg ALUSrcB0

Memoria

Control PCWrite PCWriteCond PCSource1 PCSource0

Sec.

ALUSrcB1

MemRead

MemWrite

RegWrite

AddrCtl1

Estado

Etiqueta Fetch Mem1 LW2

0 1 2 3 4 5 6 7 8 9

Control SRC1 ALU Add PC Add PC Add A

SRC2

Control Registros

Memoria Read PC

4 Extshft Read Extend Write MDR

Read ALU Write ALU A B Write ALU

SW2 Rformat1 Func Cod BEQ1 JUMP1 Subt

Control Secuenc. PCWrite ALU Seq. Dispatch 1 Dispatch 2 Seq Fetch Fetch Seq Fetch Fetch Fetch

ALUOutcond Jump Address

Figura 4: Microprograma

AddrCtl0

PCWrite

AluSrcA

IRWrite

RegDst

Aluop1

Aluop0

IorD

Examen de Pr cticas a Fundamentos de Computadores de Ingeniera Inform tica a Facultad de Inform tica. Universidad de Las Palmas de GC a 14 de julio de 2004
Las guras 1, 2 y 3, muestran parte del estado en un instante determinado de una m quina a MIPS R2000. La gura 1 muestra el valor de los registros, la gura 2 indica el contenido de la memoria y la gura 3 corresponde al segmento de texto. 1. (5 puntos) Escribe el c digo en ensamblador de la secuencia de instrucciones ejecutadas deso de el estado actual hasta que el registro contador de programa P C toma el valor 0x0040009C. Utiliza si lo consideras conveniente la tabla de c digos de operaci n 1 o o 2. (2.5 puntos) Cu l es el contenido de los registros despu s de que el registro P C tome el a e valor 0x0040009C? 3. (2.5 puntos) Cu l es el contenido de la memoria despu s de que el registro P C tome el a e valor 0x0040009C? nem nico o lw rt, rs, inmediato ori rt, rs, inmediato addiu rt, rs, inmediato slti rt, rs, inmediato bne rs, rt, inmdiato c d-op. o 0x23 0x0D 0x09 0x0A 0x05 nem nico o sw rt, rs, inmediato addu rd, rs, rt mult rt, rs slt rd, rs, rt bgez rs, inmediato jr rs c d-op. campo funci n o o 0x2B 0 0x21 0 0x18 0 0x2A 0x01 0 8

Cuadro 1: Tabla de c digos de operaci n o o

Figura 1: Contenido de los registros

Figura 2: Contenido del segmento de datos

Figura 3: Lenguaje m quina de un procedimiento a

Examen Fundamentos de Computadores de la Ingeniera Inform tica a Facultad de Inform tica. Universidad de Las Palmas de Gran a Canaria 12 de diciembre de 2003
n 1. (2.5 puntos) Para un computador de longitud de palabra de 36 bits, dise a (razonablemente) los formatos de las instrucciones para que permitan construir un repertorio de instrucciones con: 7 instrucciones con dos direcciones de 15 bits y una de 3 bits. 500 instrucciones con una direcci n de 15 bits y una de 3 bits o 50 instrucciones con 0 direcciones. 2. (2.5 puntos) Se est interesado en 2 realizaciones de una m quina, una con a a una circuitera especial de punto otante y otra sin ella. Consid rese un e programa P , con la siguiente mezcla de operaciones: multiplicaci n en punto otante o suma en punto otante divisi n en punto otante o instrucciones de enteros 10 % 15 % 5% 70 %

La m quina MPF (m quina con punto otante) tiene circuitera de punto a a otante y puede por lo tanto realizar operaciones de punto otante directamente. Se requiere el siguiente n mero de ciclos de reloj para cada tipo de u instrucci n: o multiplicaci n en punto otante o 6 suma en punto otante 4 divisi n en punto otante o 20 instrucciones de enteros 2 La m quina MSPF (m quina sin punto otante) no tiene circuitera de punto a a otante y por lo tanto debe emular las operaciones de punto otante usando instrucciones de enteros. Las instrucciones de enteros necesitan todas dos ciclos de reloj. El n mero de INSTRUCCIONES de enteros necesarias para u realizar cada operaci n de punto otante es el siguiente: o 1

multiplicaci n en punto otante 30 o suma en punto otante 20 divisi n en punto otante o 50 Ambas m quinas tienen una frecuencia de reloj de 100MHz. a a) Calcula la tasa de MIPS (millones de instrucciones por segundo) para ambas m quinas. a b) Si la m quina MPF necesita 300 millones de instrucciones para un proa grama, cu ntas instrucciones de enteros requerir la m quina MSPF a a a para el mismo programa? c) Cu l es el tiempo de ejecuci n para dicho programa de 300 millones a o de instrucciones en la m quina MPF y MSPF? a 3. (2.5 puntos) Escribe un programa en ensamblador MIPS que inicialice un vector de palabras con la constante 0. Asume que la direcci n de comienzo o del vector est en el registro a0 y el tama o del vector de palabras est en el a n a registro a1. 4. (2.5 puntos) Se quiere a adir la instrucci n jm (jump memory, salto a men o moria) al camino de datos multiciclo. Su formato de instrucci n es igual o al de lw excepto que el campo rt no se utiliza porque el dato cargado de memoria se coloca en el P C en vez de hacerlo en registro destino. a) A ada los caminos de datos y las se ales de control necesarias al can n mino de datos multiciclo. b) Indica las modicaciones necesarias a la m quina de estados nitos. a Especica claramente cu ntos ciclos necesita la nueva instrucci n paa o ra ejecutarse en su camino de datos y la m quina de estados nitos a modicada.

Figura 1: Camino de datos multiciclo.

Figura 2: Especicaci n del control para la ruta de datos multiciclo. o

Convocatoria extraordinaria de septiembre (septiembre 2003). Examen de FCI. Duracin 2 horas. o 1. (1 punto) Utilizando reiteradamente las leyes de Morgan, obtener una expresin en forma de suma de productos para las siguientes funciones: o a) F = (x + y)(x + z) y x x b) G = (y + xz) ( + y z) 2. (1 punto) Obtener una expresin como suma de minterms y otra como o producto de maxterms para la siguiente funcin: o f (x, y, z) = x + xz + y y z 3. (1 punto) Dada la siguiente funcin como suma de minterms, pasarla a o producto de maxterms. Minimizar la expresin resultante de la funcin o o empleando maxterms. f (x, y, z, w) = m(0, 2, 3, 4, 5, 6, 11)

4. (2 puntos) Obtener el resultado de las siguientes operaciones binarias: a) 110101 + 1001001 b) 1110010110 101011001 c) 0,01001 101,1001 d ) 1011,001/0,1101 5. (2.5 puntos) Minimizar la tabla de estado utilizando uno de los dos mtodos estudiados. e 0 1 2 3 A B,1 A,1 E,0 D,0 B F,1 C,0 E,1 A,1 C I,1 B,0 F,1 I,1 D F,1 B,0 I,1 A,1 E H,0 A,1 I,1 F,0 F B,0 A,1 I,1 F,0 G B,1 A,1 F,0 I,0 H E,1 C,0 F,1 A,1 I B,0 A,1 G,1 I,0 1

6. (2.5 puntos) Disea con biestables tipo D un sistema secuencial s n ncrono con dos entradas, E y C, y dos salidas, Z y S. Si durante tres pulsos de reloj se mantiene C=1, entonces Z = E y S = 1; si durante tres pulsos de reloj se mantiene C = 0, entonces Z = E y S = 1; en cualquier otro caso ha de ser Z = 0 y S = 0.

Examen Fundamentos de Computadores de la Ingeniera Inform tica a Facultad de Inform tica. Universidad de Las Palmas de Gran Canaria a Septiembre de 2003
1. (2.5 puntos) Comparar las m quinas de 0, 1 y 2 direcciones, escribiendo prograa mas para calcular la expresi n: o X = (A + B C)/(D E F G H) Para cada una de los tres tipos de m quinas el repertorio de instrucciones dispoa nibles es el siguiente: 0 direcciones PUSH M POP M SUM SUB MUL DIV 1 direcciones LOAD M STORE M SUM M SUB M MUL M DIV M 2 direcciones MOVE X, Y SUM X, Y RES X, Y MUL X, Y DIV X, Y

donde M es una direcci n de memoria de 16 bits y X e Y son direcciones de 16 o bits o n meros de registros de 4 bits. u La m quina de 0 direcciones usa una pila, la de 1 direcci n usa un acumulador y a o la de dos direcciones tiene 16 registros e instrucciones en las que cada operando puede estar en un registro o en memoria. Suponiendo c digos de operaci n de o o 8 bits y longitudes de instrucci n que son m ltiplos de 4 bits. Cu ntos bits o u a necesita cada computadora para representar el programa que calcula el valor de X? 2. (2.0 puntos) Asuma la personalidad del dise ador jefe de un nuevo procesador. n El dise o del procesador y el compilador est n completados, y ahora se debe n a decidir si se fabrica el dise o actual tal y como est o se utiliza tiempo adicional n a para mejorarlo. Se discute el problema con el grupo de ingeniera de circuitos y se llega a las siguientes opciones: Dejar el dise o tal y como est . A esta m quina base se le da el nombre n a a de Mbase. Tiene una frecuencia de reloj de 500MHz y se han tomado las siguientes medidas usando un simulador: Tipo de instrucci n CPI Frecuencia o A 2 40 % B 3 25 % C 3 25 % D 5 10 % Optimizar la circuitera. El grupo de ingeniera de circuitos indica que pue de mejorar el dise o del procesador para dar una frecuencia de 600MHz. n A esta m quina se le da el nombre Mopt. Se han tomado las siguientes a medidas usando un simulador para Mopt:

Tipo de instrucci n o A B C D

CPI 2 3 3 4

Frecuencia 40 % 25 % 25 % 10 %

a) Cu l es el CPI para cada m quina? (0.5 puntos) a a b) Cu les son las tasas de MIPS originales para Mbase y Mopt? (0.5 puntos) a a a a c) Cu nto m s r pida es Mopt que Mbase? (1.0 puntos) 3. (1.5 puntos) El procedimiento strcpy copia la cadena y en la cadena x usando la convenci n de C de terminaci n con byte nulo: o o void strcpy(char x[], char y[]) { int i; i = 0; while ((x[i]=y[i])!=0) /* copia y comprueba el byte */ i = i+1; }

4.

(1.5 puntos) Se quiere a adir la instrucci n jm (jump memory o salto a memon o ria) al camino de datos multiciclo. El formato de la nueva instrucci n es igual o al de la instrucci n lw excepto que el campo rt no se utiliza porque el dao to cardado de memoria se coloca en el PC en lugar de escribirlo en el registro destino. A ada los caminos de datos y las se ales de control necesarias al camin n no de datos multiciclo de la gura 1, e indique las modicaciones necesarias a la m quina de estados nitos de la gura 2. Intente encontrar una soluci n que a o minimice el n mero de ciclos de reloj requeridos para la nueva instrucci n. esu o pecique claramente cu ntos ciclos necesita la nueva instrucci n para ejecutarse a o en el camino de datos con la m quina de estados nitos modicados. a

5. (2.5 puntos) A ada los caminos de datos y las se ales de control necesarias al n n camino de datos multiciclo de la gura 1 y las modicaciones del diagrama de estados de la gura 2 para gestionar las excepciones debidas a instrucciones no denidas o desbordamientos aritm ticos. Explica tambi n c mo el procesador e e o trata una excepci n. o

Figura 1: Camino de datos multiciclo.

Figura 2: Especicaci n del control para la ruta de datos multiciclo. o

Examen Fundamentos de Computadores de la Ingeniera Inform tica a Facultad de Inform tica. Universidad de Las Palmas de Gran Canaria a 14 de julio de 2003
P1 1.75 P2 2.5 P3 1 P4 1.75 P5 3

1. 1.75 puntos. Un computador tiene palabras de 24 bits. Los operandos se pueden direccionar de las formas siguientes: Registro (R): se requieren 4 bits. Memoria (M): se requieren 4 bits para el registro base y 9 para el desplazamiento Inmediato (I): 9 bits. a) Dise ar los formatos de instrucciones necesarios para tener un repertorio con 2 instrucn ciones de M-I, 63 instrucciones de M-R, 15 instrucciones de R-I y 64 instrucciones de R-R. b) Variar n los formatos dise ados en el apartado anterior si en las especicaciones del a n mismo repertorio de instrucciones nos piden 14 instrucciones de R-I en vez de 15? o 2. 2.5 puntos. Considere el siguiente fragmento de c digo C: for(i=0; i<=1000; i=i+1){a[i] = b[i] + c} Suponga que a y b son vectores de palabras y la direcci n base de a est en el registro o a $a0 y la de b en $a1 . El registro $t0 se asocia con la variable i y $s0 con la o a variable c . Escriba el c digo MIPS. Cu ntas instrucciones se ejecutan a lo largo de este c digo? Cu ntas referencias de datos a memoria se producir n durante la ejecuci n? o a a o 3. 1.0 punto. El c digo siguiente trata de implementar un salto condicional a la direcci n noo o es-cero, cuyo valor es 0xABCD1234. Sin embargo, dicho salto no funciona de la forma que est implementado. Explique por qu e indique de qu manera habra que codicarlo para a e e que funcione. 0x00000004 0x00000008 no-es-cero: add $8, $15, $16 bne $8, $0, no-es-cero ... sub $9, $12, $13

Tipo Tipo-R Load Store Saltos y bifurcaciones

Frecuencia ( %) 41 24 14 21

Cuadro 1: Frecuencia simplicada de usos de las instrucciones para el programa gcc 4. 1.75 puntos. Sus amigos de la C 3 (Creative Computer Corporation) han determinado que el camino crtico que establece la longitud del ciclo de reloj del camino de datos multici clo es el acceso a memoria para la carga o almacenamiento de datos (no para la b squeda u de instrucciones) Esto ha dado lugar a su m s reciente realizaci n de la MIPS 30000 para a o ejecutar con una frecuencia de 500MHz en vez del objetivo de alcanzar los 750MHz. De todas formas, Beatriz e Ibrahin, de C 3 , tienen una soluci n. Si todos los ciclos que acceden o a memoria para datos se dividen en dos ciclos, entonces la m quina puede funcionar con la a frecuencia de reloj nal. Utilizando la combinaci n de instrucciones del gcc mostrada en la o tabla 1, determine cu nto m s r pida ser la m quina con accesos a memoria de dos ciclos a a a a a respecto a la m quina de 500MHz con acceso a memoria en un s lo ciclo. Suponga que a o todos los saltos necesitan el mismo n mero de ciclos y que las instrucciones del repertorio y u las aritm ticas inmediatas se realizan como de tipo R. e 5. 3.0 puntos. Se quiere a adir la la instrucci n aritm tica de 4 operandos add3, la cual n o e suma tres n meros en vez de dos: u add3 $t5, $t6, $t7, $t8 # $t5 = $t6 + $t7 + $t8 A ada los caminos de datos y las se ales de control necesarias al camino de datos n n multiciclo de la gura 1, e indique las modicaciones necesarias a la m quina de estados a nitos de la gura 2. Especique claramente cu ntos ciclos necesita la nueva instrucci n a o para ejecutarse en su camino de datos y la m quina de estados nitos modicada. Suponga a que la arquitectura del repertorio de instrucciones est modicada con un nuevo formato a de instrucci n similar al formato R, excepto que los bits 0-4 se utilizan para especicar el o registro adicional (se seguir utilizando los rs, rt y rd) y, por supuesto, se utiliza un nuevo a c digo de operaci n. Su soluci n no debera depender de a adir nuevos puertos de lectura al o o o n banco de registro, ni debera utilizar una nueva ALU.

Figura 1: Camino de datos para el problema 5.

Figura 2: Especicaci n del control para el problema 5 o .

S-ar putea să vă placă și