Documente Academic
Documente Profesional
Documente Cultură
CURSO 2005/2006 1. PROYECTO DOCENTE 2. TRANSPARENCIAS DEL CURSO 3. GUIONES DE PRCTICAS 4. COLECCIN DE PROBLEMAS DE EXMENES
PROYECTO DOCENTE
CURSO: 2005/06
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
(RESPONSABLE DE PRACTICAS)
Categora: TITULAR DE ESCUELA UNIVERSITARIA Departamento: INFORMTICA Y SISTEMAS Telfono: 928458736 Correo Electrnico: fquintana@dis.ulpgc.es WEB Personal:
Pgina 4
Curso 2005/2006
Fundamentos de Computadores
V TB
TA
A-5 L3.3
B1-B2 L1.1
Curso 2005/2006
Fundamentos de Computadores
Curso 2005/2006
Fundamentos de Computadores
4. Rendimiento (2 horas)
Curso 2005/2006 Fundamentos de Computadores 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
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)
Funcionamiento de un computador
Componentes de un computador Ciclo de instruccin Interconexin con buses
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
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
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 ...
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
Curso 2005/2006
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
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. 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)
Curso 2005/2006
Fundamentos de Computadores
27
Curso 2005/2006
Fundamentos de Computadores
28
Curso 2005/2006
Fundamentos de Computadores
29
Curso 2005/2006
Fundamentos de Computadores
30
Curso 2005/2006
Fundamentos de Computadores
31
Curso 2005/2006
Fundamentos de Computadores
32
Curso 2005/2006
Fundamentos de Computadores
33
Curso 2005/2006
Fundamentos de Computadores
34
Ley de Moore
Curso 2005/2006
Fundamentos de Computadores
36
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
Otras instrucciones
Mquinas CSIC IA 32
Caractersticas del ISA Registros Instrucciones bsicas Formato de las instrucciones
Curso 2005/2006
Fundamentos de Computadores
Ciclo de instruccin
Ciclo de bsqueda Ciclo de ejecucin
Curso 2005/2006 Fundamentos de Computadores 4
Curso 2005/2006
Fundamentos de Computadores
PC HI LO
immediate
jump target
Fundamentos de Computadores
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
Compilacin
add a, b, c sub d, a, e
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
Curso 2005/2006
Fundamentos de Computadores
Memoria
. 0x11 0x22 0x33 0x44 .
55
Big Endian
MSB LSB
0x44332211
0x11223344
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
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
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
# $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
Compilacin en MIPS
bne $s1, $s2, etiqueta add $s0, $s1, $s2 etiqueta:
Curso 2005/2006
Fundamentos de Computadores
17
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
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
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
offset sign-extend
00 32 32 Add 32 4 32 Add 32
PC
32
Curso 2005/2006
Fundamentos de Computadores
21
00 32
PC
32
Curso 2005/2006
Fundamentos de Computadores
22
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
op
rs
rt
16 bit immediate
I format
Curso 2005/2006
Fundamentos de Computadores
24
Descomposicin en partes
lui ori
Curso 2005/2006
jalr $rs
Instruccin tipo R
Retorno de procedimiento
jr $ra
Instruccin tipo R
Curso 2005/2006 Fundamentos de Computadores 26
Curso 2005/2006
Fundamentos de Computadores
27
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
Curso 2005/2006
Fundamentos de Computadores
29
Curso 2005/2006
Fundamentos de Computadores
30
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
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
Curso 2005/2006
Fundamentos de Computadores
34
Register
Byte
Halfword
Word
PC
Word
PC
Word
Curso 2005/2006
Fundamentos de Computadores
35
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]
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
39
Curso 2005/2006
Fundamentos de Computadores
40
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
c. MOV 6 MOV
8 Displacement
32 Immediate
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
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
Curso 2005/2006
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
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
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
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
Add 4
Curso 2005/2006
Fundamentos de Computadores
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
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
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
ALU control
PC Read Addr 1 Read Register Read Addr 2 Data 1 File Write Addr Write Data
Instruction
16
Sign Extend
32
Curso 2005/2006
Fundamentos de Computadores
13
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
RegWrite
MemWrite
MemtoReg
ALU
Sign 16 Extend
MemRead
32
Curso 2005/2006
Fundamentos de Computadores
16
20 rt 20 rt
15 rd 15
10
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
1 0
Instr[15-0]
32
Instr[5-0]
Curso 2005/2006
Fundamentos de Computadores
18
1
PCSrc MemRead MemtoReg MemWrite
ovf zero 0 1
ALU control ALU
1 0
Instr[15-0]
32
Instr[5-0]
Curso 2005/2006
Fundamentos de Computadores
19
1
PCSrc MemRead MemtoReg MemWrite
ovf zero 0 1
ALU control ALU
1 0
Instr[15-0]
32
Instr[5-0]
Curso 2005/2006
Fundamentos de Computadores
20
1
PCSrc MemRead MemtoReg MemWrite
ovf zero 0 1
ALU control ALU
1 0
Instr[15-0]
32
Instr[5-0]
Curso 2005/2006
Fundamentos de Computadores
21
1
28 32 PC+4[31-28]
0 0 1
PCSrc MemRead MemtoReg MemWrite
ovf zero 0 1
ALU control ALU
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
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
FUNCIN
AND OR ADD SUB SLT
Curso 2005/2006
Fundamentos de Computadores
23
Curso 2005/2006
Fundamentos de Computadores
24
31
26 op 6 bits rs
21 rt 5 bits
6 funct 6 bits
Instruccin Tipo R:
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
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
F3 F2 F (5 0) F1
F0
Curso 2005/2006
Fundamentos de Computadores
26
rd 15-11
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
Curso 2005/2006
Fundamentos de Computadores
27
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
Outputs R-format Iw sw beq RegDst ALU ALUSrc MemtoReg RegWrite MemRead MemWrite Branch ALUOp1 ALUOpO
Curso 2005/2006
Fundamentos de Computadores
29
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
Curso 2005/2006
Fundamentos de Computadores
31
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
PC
IR
Read Addr 1 Register Read Read Addr 2 Data 1 File Write Addr Read Write Data Data 2
32
ALUOut
B 4
0 1 M u 2 x 3
ALU control
Instruction [5 0]
MemtoReg
ALUSrcB ALUOp
Curso 2005/2006
Fundamentos de Computadores
33
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
1 u
PC
0 M u x 1
PC [31-28]
B 4
ALUOut
0 1 M u 2 x 3
ALU control
Instruction [5 0]
Curso 2005/2006
Fundamentos de Computadores
34
3. Ejecucin (EX)
ALUOut ALUOut if (A=B) PC PC
Curso 2005/2006
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
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
1 u
x 2
PC
0 M u x 1
PC [31-28]
ALUOut
16
Sign extend
32
Shift left 2
ALU control
Instruction [5 0]
Curso 2005/2006
Fundamentos de Computadores
38
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
1 u
x 2
PC
0 M u x 1
PC [31-28]
ALUOut
16
Sign extend
32
Shift left 2
ALU control
Instruction [5 0]
Curso 2005/2006
Fundamentos de Computadores
39
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
1 u
x 2
PC
0 M u x 1
PC [31-28]
ALUOut
Sign extend
32
Shift left 2
ALU control
Instruction [5 0]
Curso 2005/2006
Fundamentos de Computadores
40
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
1 u
x 2
PC
0 M u x 1
PC [31-28]
ALUOut
16
Sign extend
32
Shift left 2
ALU control
Instruction [5 0]
Curso 2005/2006
Fundamentos de Computadores
41
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
1 u
x 2
PC
0 M u x 1
PC [31-28]
ALUOut
16
Sign extend
32
Shift left 2
ALU control
Instruction [5 0]
Curso 2005/2006
Fundamentos de Computadores
42
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
Start
or W ') = 'L
(O p
= 'S
Branch completion
(O p
W')
(Op = 'J')
'B
typ R-
EQ
e)
')
Jump completion
O (O
(Op = 'LW')
p p = S 'S W ) ')
Memory access 5
R-type completion
3 MemRead IorD = 1
Curso 2005/2006
Fundamentos de Computadores
44
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
Estado Siguiente
Inputs
Op3
Op2
Op1
Op5
Op4
Op0
S1
S3
S2
State register
S0
Estado Actual
Curso 2005/2006
Fundamentos de Computadores
46
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
Outputs
State register
Curso 2005/2006
Fundamentos de Computadores
48
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
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
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
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
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
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
O p e r. W r ite A L U W r ite M D R
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
Curso 2005/2006
Fundamentos de Computadores
52
Estado
0 1 2 3 4 5 6 7 8 9
SRC2
Control Registros
Control Secuenc. PCW rite ALU Seq. Dispatch 1 Dispatch 2 Seq Fetch Fetch Seq Fetch Fetch Fetch
Curso 2005/2006
Fundamentos de Computadores
AddrCtl0
PCWrite
AluSrcA
IRWrite
RegDst
Aluop1
Aluop0
IorD
53
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
Dispatch ROM 2
Dispatch ROM2 Op [5:0] Nombre Valor 100011 lw LW2 (3) 101011 sw SW2 (5)
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
Programa
Curso 2005/2006
Fundamentos de Computadores
56
Curso 2005/2006
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
ALU ALUOut
EPC
1 ALU control
0 M u x 1
Cause
11
Instruction [5 0]
Curso 2005/2006
Fundamentos de Computadores
58
Start
'B EQ ')
(Op = 'J')
e e e oth
(O p
) ) r)
Jump completion
9 PCWrite PCSource = 10
(Op = 'LW')
''') W '''S
Memory access 5
3 MemRead IorD = 1
10
Curso 2005/2006
Fundamentos de Computadores
59
Curso 2005/2006
Fundamentos de Computadores
60
Contenidos (1/3)
Mtricas de rendimiento, coste y prestaciones Definiciones
Tiempo de respuesta, tiempo de CPU, productividad y rendimiento
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
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
Curso 2005/2006
Fundamentos de Computadores
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
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 =
1 Tiempo de ejecucin X
1 1 % = 100 10 15 = 33.3% 1 10
10
Fundamentos de Computadores
A 4GH = 250ps
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
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
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 X X X X X
Tc
X X X X
X X X
14
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
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
Curso 2005/2006
Fundamentos de Computadores
18
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
( 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
Curso 2005/2006
Fundamentos de Computadores
25
Curso 2005/2006
Fundamentos de Computadores
26
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
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
Curso 2005/2006
Fundamentos de Computadores
30
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
MIPS
Nativos
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
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
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)
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
TMedio = Pesoi * Ti
Pesoi = Frecuencia del programa isimo. Suma de los pesos igual a 1.
T
i =1
Normalizado
Normalizado
= Tiempo de ejecucin, normalizado para la mquina de referencia, para el programa isimo de un total de n.
Curso 2005/2006
Fundamentos de Computadores
36
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
0.1 +
1 0.9 0.1 + 10
= 5.3
Speedup100 =
0.9 P = 9.17
Speedup1000 =
= 9.91
= 16.95
= 16.80
Curso 2005/2006
Fundamentos de Computadores
40
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
Conclusiones
El arte del diseo consiste en encontrar el equilibrio entre coste y rendimiento El TIEMPO es la medida del rendimiento de un computador
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
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:
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.
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.
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.
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.
dobles (). Los caracteres especiales en las cadenas siguen la convencin del lenguaje de programacin C:
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
<--Presentacin
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.
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?
La directiva .byte valor inicializa una posicin de memoria, de tamao byte, a valor.
.byte
0x10
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?
# 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.
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?
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?
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.
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.
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.
# 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).
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)?
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.
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.
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).
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?
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?
numero1: numero2:
main:
mflo mfhi sw sw
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.
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:
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.
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:
El cdigo desplaza el nmero cuatro bits a la derecha, rellenando con el bit del signo.
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.
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
dir:
main:
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.
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
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.
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.
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.
Primer ejercicio Crea un fichero con el siguiente fragmento de cdigo que implementa una estructura de control condicional Si-entonces:
.data .word .word .space
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
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.
Segundo ejercicio Crea un fichero con el siguiente fragmento de cdigo que implementa una estructura de control condicional Si-entonces:
40 30 4
main:
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
Tercer ejercicio Crea un fichero con el siguiente fragmento de cdigo que implementa una estructura de control Si-entonces-sino.
30 40 4
main:
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.
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
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
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)).
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
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
#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
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
finmientras:
Disponible en ejercicio6a.s Borra los valores de la memoria, carga el fichero en el simulador y ejectalo. Cuestiones
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:
$t0,10 $t1, 13 $sp, $sp, -4 $t0, 0($sp) $sp, $sp, -4 $t1, 0($sp)
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).
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
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.
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:
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
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ía 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
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
$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
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.
Add
RegDst Branch Branch MemRead MemtoReg Control ALUOp MemWrite ALUSrc RegWrite Read register 1
PC
Read address
Instruction [310]
Instruction memory
1 M u x 0
Outputs R-format Iw sw beq RegDst ALU ALUSrc MemtoReg RegWrite MemRead MemWrite Branch ALUOp1 ALUOpO
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
Instruction [25 0]
Shift left 2 PC [31-28]
26
28
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
Memory
ALU ALUOut
EPC
Write data
Cause 1
0 M u x 1
Instruction fetch 0
Start
( ( (O p
= (Op
(Op = 'LW')
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
C o n tr o l A L U ALUop1 0 0 1 ALUO p0 0 1 0
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
O p e r. W r ite A L U W r ite M D R
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
ALUSrcB1
MemRead
MemWrite
RegWrite
AddrCtl1
Estado
0 1 2 3 4 5 6 7 8 9
SRC2
Control Registros
Memoria Read PC
Control Secuenc. PCWrite ALU Seq. Dispatch 1 Dispatch 2 Seq Fetch Fetch Seq Fetch Fetch Fetch
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
Dispatch ROM 2
Dispatch ROM2 Op [5:0] Nombre Valor 100011 lw LW2 (3) 101011 sw SW2 (5)
Dispatch ROM1 Nombre Valor R-Format R-Format1 (6) jmp JUMP1 (9) beq BEQ1 (8) lw MEM1 (2) sw MEM1 (2)
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
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
Instruction fetch 0
Start
( ( (O p
= (Op
(Op = 'LW')
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
C o n tr o l A L U ALUop1 0 0 1 ALUO p0 0 1 0
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
O p e r. W r ite A L U W r ite M D R
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
ALUSrcB1
MemRead
MemWrite
RegWrite
AddrCtl1
Estado
0 1 2 3 4 5 6 7 8 9
SRC2
Control Registros
Memoria Read PC
Control Secuenc. PCWrite ALU Seq. Dispatch 1 Dispatch 2 Seq Fetch Fetch Seq Fetch Fetch Fetch
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:
Frecuencia ( %) 41 24 14 21
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
Instruction [25 0]
Shift left 2 PC [31-28]
26
28
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
Memory
ALU ALUOut
EPC
Write data
Cause 1
0 M u x 1
Instruction fetch 0
Start
( ( (O p
= (Op
(Op = 'LW')
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
C o n tr o l A L U ALUop1 0 0 1 ALUO p0 0 1 0
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
O p e r. W r ite A L U W r ite M D R
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
ALUSrcB1
MemRead
MemWrite
RegWrite
AddrCtl1
Estado
0 1 2 3 4 5 6 7 8 9
SRC2
Control Registros
Memoria Read PC
Control Secuenc. PCWrite ALU Seq. Dispatch 1 Dispatch 2 Seq Fetch Fetch Seq Fetch Fetch Fetch
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
Dispatch ROM 2
Dispatch ROM2 Op [5:0] Nombre Valor 100011 lw LW2 (3) 101011 sw SW2 (5)
Dispatch ROM1 Nombre Valor R-Format R-Format1 (6) jmp JUMP1 (9) beq BEQ1 (8) lw MEM1 (2) sw MEM1 (2)
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
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
1 u
PC
0 M u x 1
PC [31-28]
B 4
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
Start
( Op ') or
W') = 'S
e) -t yp =R ( Op Branch completion
=' BE Q' ) (O p
(Op = 'J')
Jump completion
O (O
p p = = ''S '') W W
Memory access 5
R-type completion
3 MemRead IorD = 1
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
Sec
Oper.
A d d rC tl1 1 0 0 1
A d d rC tl0 1 0 1 0
SRC2
Memoria
Sec.
ALUSrcB1
MemRead
MemWrite
RegWrite
AddrCtl1
Estado
0 1 2 3 4 5 6 7 8 9
SRC2
Control Registros
Memoria Read PC
Control Secuenc. PCWrite ALU Seq. Dispatch 1 Dispatch 2 Seq Fetch Fetch Seq Fetch Fetch Fetch
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
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
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
ALUOut
Write data
Instruction fetch 0 MemRead ALUSrcA = 0 IorD = 0 IRWrite ALUSrcB = 01 ALUOp = 00 PCWrite PCSource = 00
Start
(O ') or
p=
(O p
') 'SW
e) -t yp =R ( Op Branch completion
=' BE Q' )
(Op = 'J')
Jump completion
O (O
p p = = ''S '') W W
Memory access 5
R-type completion
3 MemRead IorD = 1
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
Sec
Oper.
A d d rC tl1 1 0 0 1
A d d rC tl0 1 0 1 0
SRC2
Memoria
Sec.
ALUSrcB1
MemRead
MemWrite
RegWrite
AddrCtl1
Estado
0 1 2 3 4 5 6 7 8 9
SRC2
Control Registros
Memoria Read PC
Control Secuenc. PCWrite ALU Seq. Dispatch 1 Dispatch 2 Seq Fetch Fetch Seq Fetch Fetch Fetch
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
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.
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
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
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.