26
DEPARTAMENTO DE INFORMÁTICA Y SISTEMAS FACULTAD DE INFORMÁTICA Ingeniería en Informática ESTRUCTURA DE COMPUTADORES PRÁCTICAS DE LABORATORIO Módulo 1 – Práctica 1 Introducción al entorno de simulación WinDLX Actualizado: 30/09/03

Prac 1 Intro Win Dlx

Embed Size (px)

Citation preview

Page 1: Prac 1 Intro Win Dlx

DEPARTAMENTO DE INFORMÁTICA Y SISTEMAS FACULTAD DE INFORMÁTICA

Ingeniería en Informática

ESTRUCTURA DE COMPUTADORES

PRÁCTICAS DE LABORATORIO

Módulo 1 – Práctica 1

Introducción al entorno de simulación WinDLX

Actualizado: 30/09/03

Page 2: Prac 1 Intro Win Dlx

Práctica 1 Introducción al entorno de simulación WinDLX

Estructura de Computadores 2

ÍNDICE 1 Objetivos ................................................................................................................................................................... 3 2 Arquitectura del procesador DLX ............................................................................................................................. 3

2.1 Modos de direccionamiento............................................................................................................................. 4 2.2 Formato de las instrucciones............................................................................................................................ 5 2.3 Repertorio de instrucciones DLX .................................................................................................................... 5

3 Lenguaje ensamblador DLX ..................................................................................................................................... 8 3.1 Sintaxis de las expresiones .............................................................................................................................. 8 3.2 Directivas......................................................................................................................................................... 8

4 El simulador WinDLX .............................................................................................................................................. 9 4.1 Descripción general del entorno de simulación ............................................................................................. 10

5 Traps........................................................................................................................................................................ 22 5.1 Trap #1 Abrir un archivo ............................................................................................................................... 23 5.2 Trap #2 Cerrar un archivo.............................................................................................................................. 24 5.3 Trap #3 Leer un bloque de un archivo ........................................................................................................... 24 5.4 Trap #4 Escribir un bloque en un archivo...................................................................................................... 25 5.5 Trap #5 Enviar información al dispositivo de salida ..................................................................................... 25

6 Realización práctica ................................................................................................................................................ 26 7 Defensa y entrega de la memoria ............................................................................................................................ 26 Tiempo: 1 sesión de laboratorio (2 horas)

Page 3: Prac 1 Intro Win Dlx

Práctica 1 Introducción al entorno de simulación WinDLX

Estructura de Computadores 3

1 Objetivos Los objetivos que se pretenden alcanzar en esta primera práctica de la asignatura Estructura de Computadores son, básicamente, dos: a) Familiarizar al alumno con la arquitectura del procesador DLX, un procesador RISC de tipo carga/almacenamiento, que se estudia en el libro “Arquitectura de Computadores” de Pattersson y Hennessy y b) introducir al alumno en el uso del entorno de simulación WinDLX que simula el pipeline de dicho procesador con capacidades para cargar, depurar y ejecutar programas escritos en lenguaje ensamblador. Una vez realizada esta práctica el alumno habrá adquirido los suficientes conocimientos y destreza para realizar sin dificultad las tareas básicas asociadas al desarrollo de software (edición, ejecución y depuración) en lenguaje ensamblador del procesador DLX. Esta práctica se considera como preámbulo para la segunda práctica en la que se estudia la técnica de la segmentación aplicada a la ejecución de instrucciones.

2 Arquitectura del procesador DLX En este apartado se citan las características básicas de la arquitectura del procesador DLX diseñado a partir de las observaciones sobre las primitivas más frecuentemente utilizadas en los programas. Otras funciones más sofisticadas son implementadas en software con varias instrucciones. El procesador DLX ha sido diseñado bajo la filosofía de diseño RISC cuyos principios se pueden concretar en los siguientes puntos:

• Arquitectura de carga-almacenamiento. • Repertorio de instrucciones sencillo. • Diseño de la segmentación eficiente. • Fácil implementación hardware de las instrucciones: Instrucciones de longitud fija y pocos modos de

direccionamiento. • Eficiencia como objeto del compilador. • Introducir en hardware sólo aquello que no sea rentable hacerlo en software y que, por tanto, suponga un

aumento del rendimiento global del sistema. El diseño de los procesadores con esta filosofía hace que las diferencias entre ellos sean mínimas en cuanto a la arquitectura del repertorio de instrucciones. Así, por ejemplo, las arquitecturas de los procesadores DLX y MIPS son similares existiendo sólo ligeras diferencias. Seguidamente resumimos las características más importantes de la arquitectura del procesador DLX:

• La arquitectura DLX tiene 32 registros de propósito general (GPR) de 32 bits. Son referenciados como R0, R1, ... R31; el valor de R0 siempre es 0.

• Adicionalmente, hay un conjunto de registros de punto flotante (FPR), que se pueden utilizar como registros de simple precisión (F0, F1, F2, ....F31) de 32 bits, o como parejas par-impar que contienen valores de doble precisión (D0, D2, D4, D30) de 64 bits. El registro de estado FPSR (Floating Point Status Register) se utiliza para comparaciones y excepciones de FP. Todas las transferencias al y del registro de estado se realizan a través de los GPR; hay una instrucción de salto que examina el bit de comparación del registro FPSR. El registro Di está formado por la pareja Fi+1:Fi.

• Arquitectura de carga-almacenamiento: Sólo dispone de instrucciones del tipo “load” y “store” para acceder a memoria. Todas las instrucciones de la ALU son instrucciones registro-registro, es decir, los operandos de las instrucciones aritmético-lógicas han de estar en registros.

• Unidades funcionales separadas: o Una unidad principal de enteros: Manipula todas las cargas y almacenamiento en ambos conjuntos de

registros (enteros y punto flotante), todas las operaciones enteras (excepto la multiplicación y la división) y los saltos.

o Multiplicador Punto Flotante (PF) y entero. o Divisor PF y entero

• La memoria es direccionable por bytes en el modo “Big Endian” con una dirección de 32 bits. Todas las referencias a memoria se realizan a través de instrucciones de carga-almacenamiento entre memoria y los GPR

Page 4: Prac 1 Intro Win Dlx

Práctica 1 Introducción al entorno de simulación WinDLX

Estructura de Computadores 4

o FPR. Los accesos que involucran los GPR pueden realizarse a un byte, a media palabra, o a una palabra. Los FPR se pueden cargar y almacenar con palabras en simple o doble precisión (utilizando registros Di).

• Todos los accesos a memoria deben estar alineados. • Conjunto reducido de instrucciones. Hay cuatro clases de instrucciones:

o Carga y almacenamiento. o Operaciones ALU del tipo aritmético-lógicas sobre enteros. o Instrucciones de control: saltos (condicionales) y bifurcaciones. o Instrucciones de punto flotante.

• Estructura segmentada. La ejecución de una instrucción se divide en cinco etapas. Dichas etapas, convenientemente interconectadas, forman el cauce o pipeline del procesador y son las siguientes:

o Etapa IF: Búsqueda de instrucción o Etapa ID: Decodificación de instrucción o Etapa EX: Ejecución (operación ALU o cálculo de la dirección efectiva). Esta etapa puede realizarse

en diferentes unidades, según la instrucción sea una operación de enteros (intEX), o flotantes donde se distingue entre: suma (faddEX), multiplicación FP y enteros (fmulEX) y división FP y enteros (fdivEX).

o Etapa MEM: Lectura o escritura de datos en memoria o Etapa WB (write back): Almacenamiento de los resultados de la instrucción en los registros

correspondientes. La escritura en los registros se realiza en la primera mitad del ciclo de reloj, de forma que una instrucción que simultáneamente se encuentra en la etapa de ID puede tomar el valor de los registros en la segunda mitad del ciclo, sin necesidad de utilizar la técnica de cortocircuito o anticipación de los datos (forwarding) para adelantar el dato y resolver, así, el riesgo del dato.

Todas las etapas ocupan un ciclo de reloj, salvo las de ejecución de punto flotante (faddEX, fmulEX, fdivEX) que tardan más de un ciclo en ejecutarse.

2.1 Modos de direccionamiento Siguiendo la filosofía de diseño RISC, el procesador DLX tiene muy pocos modos de direccionamiento y se clasifican en:

• Modos de direccionamiento para instrucciones Todos los modos de direccionamiento a instrucciones son relativos al contador de programa excepto la bifurcación indirecta por registro.

o Relativo al Contador de Programa (PC) § La dirección de destino se genera sumando al PC+4 el valor de desplazamiento (en bytes)

que se indica en la propia instrucción. § Ejemplo : J etiqueta; JAL etiqueta; BEQZ Rn, despl..; BNEZ Rn, despl..

o Indirecto por registro § La dirección de destino es el contenido del registro que se indica en la instrucción. En otras

arquitecturas pueden aparecer dos registros, siendo entonces el destino, el resultado de la suma de los contenidos de ambos registros.

§ Ejemplo: JR Rn; JALR Rn

• Modos de direccionamiento para datos o Registro-Registro

§ Los operandos se encuentran en registros § Ejemplo: ADD R1,R2,R3

o Inmediato § Uno de los operandos aparece de forma inmediata en la propia instrucción § Ejemplo: ADD R1,R2,#5

o Registro Base + Desplazamiento § Uno de los operandos se encuentra en memoria. La dirección de memoria donde se encuentra

el operando es el resultado de sumar el registro base y el desplazamiento. § Ejemplo: LW R2,100(R3)

Page 5: Prac 1 Intro Win Dlx

Práctica 1 Introducción al entorno de simulación WinDLX

Estructura de Computadores 5

2.2 Formato de las instrucciones Todas las instrucciones del procesador DLX son de longitud fija y se codifican con sólo tres formatos de instrucción. Éstos son:

2.3 Repertorio de instrucciones DLX El repertorio de instrucciones del DLX puede clasificarse en cuatro clases:

• Operaciones de transferencias de datos • Operaciones aritméticas y lógicas (ALU) • Instrucciones de saltos y bifurcaciones • Operaciones en coma flotante

Las siguientes tablas muestran de forma muy resumida las instrucciones pertenecientes a cada una de las clases.

Instrucciones de transferencias de Datos Instrucción Significado de la instrucción

LB Rd,Adr Load byte (sign extension) LBU Rd,Adr Load byte (unsigned) LH Rd,Adr Load halfword (sign extension) LHU Rd,Adr Load halfword (unsigned) LW Rd,Adr Load word LF Fd,Adr Load single-precision Floating point LD Dd,Adr Load double-precision Floating point SB Adr,Rs Store byte SH Adr,Rs Store halfword SW Adr,Rs Store word SF Adr,Fs Store single-precision Floating point SD Adr,Fs Store double-precision Floating point MOVI2FP Fd,Rs Move 32 bits from integer registers to FP registers

Formato R (Registro)

op rs1 rs2 rd func Instrucciones tipo R 6 bits 5 bits 5 bits 5 bits 11 bits Todas las instrucciones DLX de 32 bits

000000 01010 11111 00011 00000 100000 0x015f1820 add R3,R10,R31 Operaciones de ALU registro-registro: rd <- rs1 op rs2; el campo de “func” indica la operación a realizar por el camino de datos. Formato I (Inmediato)

op rs1 rd Inmediato Instruciones de carga e inmediatas 6 bits 5 bits 5 bits 16 bits Todas las instrucciones DLX de 32 bits

100011 00011 00101 0000000000100000 0x8c650020 lw $5,32($3) Carga y almacenamiento de bytes, palabras y medias palabras; todos los inmediatos ( rd <- rs1 op inmediato); saltos condicionales (rs1 es el registro, rd no usado); saltos indirectos por registro “jr” y salta y enlaza por registro “jalr” (rd=0; rs1 =destino; inmediato=0). Formato J (Jump)

op Dirección objetivo Instrucciones de bifurcación 6 bits 26 bits Todas las instrucciones DLX de 32 bits

000010 11111111111111111111110100 0x0bfffff4 0x10c: j 0x100 Bifurcación “j”; bifurcación y enlace “jal”; trap y retorno de excepción “rfe”.

Page 6: Prac 1 Intro Win Dlx

Práctica 1 Introducción al entorno de simulación WinDLX

Estructura de Computadores 6

MOVI2FP Rd,Fs Move 32 bits from FP registers to integer registers MOVF Fd,Fs Copy one Floating point register to another register MOVD Dd,Ds Copy a double-precision pair to another pair MOVI2S SR,Rs Copy a register to a special register (not implemented!) MOVS2I Rs,SR Copy a special register to a GPR (not implemented!)

Instrucciones aritméticas y lógicas Instrucción Significado de la instrucción

ADD Rd,Ra,Rb Add ADDI Rd,Ra,Imm Add immediate (all immediates are 16 bits) ADDU Rd,Ra,Rb Add unsigned ADDUI Rd,Ra,Imm Add unsigned immediate SUB Rd,Ra,Rb Subtract SUBI Rd,Ra,Imm Subtract immediate SUBU Rd,Ra,Rb Subtract unsigned SUBUI Rd,Ra,Imm Subtract unsigned immediate MULT Rd,Ra,Rb Multiply signed MULTU Rd,Ra,Rb Multiply unsigned DIV Rd,Ra,Rb Divide signed DIVU Rd,Ra,Rb Divide unsigned AND Rd,Ra,Rb And ANDI Rd,Ra,Imm And immediate OR Rd,Ra,Rb Or ORI Rd,Ra,Imm Or immediate XOR Rd,Ra,Rb Xor XORI Rd,Ra,Imm Xor immediate LHI Rd,Imm LOad high immediate - loads upper half of register with immediate SLL Rd,Rs,Rc Shift left logical SRL Rd,Rs,Rc hift right logical SRA Rd,Rs,Rc Shift right arithmetic SLLI Rd,Rs,Imm Shift left logical 'immediate' bits SRLI Rd,Rs,Imm Shift right logical 'immediate' bits SRAI Rd,Rs,Imm Shift right arithmetic 'immediate' bits S__ Rd,Ra,Rb Set conditional: "__" may be EQ, NE, LT, GT, LE or GE S__I Rd,Ra,Imm Set conditional immediate: "__" may be EQ, NE, LT, GT, LE or

GE S__U Rd,Ra,Rb Set conditional unsigned: "__" may be EQ, NE, LT, GT, LE or GE S__UI Rd,Ra,Imm Set conditional unsigned immediate: "__" may be EQ, NE, LT, GT,

LE or GE NOP No operation

Instrucciones de salto y bifurcación Instrucción Significado de la instrucción

BEQZ Rt,Dest Branch if GPR equal to zero; 16-bit offset from PC BNEZ Rt,Dest Branch if GPR not equal to zero; 16-bit offset from PC BFPT Dest Test comparison bit in the FP status register (true) and branch; 16-

bit offset from PC BFPF Dest Test comparison bit in the FP status register (false) and branch; 16-

bit offset from PC J Dest Jump: 26-bit offset from PC JR Rx Jump: target in register JAL Dest Jump and link: save PC+4 to R31; target is PC-relative JALR Rx Jump and link: save PC+4 to R31; target is a register TRAP Imm Transfer to operating system at a vectored address; see Traps. RFE Dest Return to user code from an execption; restore user mode (not

implemented!)

Page 7: Prac 1 Intro Win Dlx

Práctica 1 Introducción al entorno de simulación WinDLX

Estructura de Computadores 7

Instrucciones de operaciones en punto flotante Instrucción Significado de la instrucción

ADDD Dd,Da,Db Add double-precision numbers ADDF Fd,Fa,Fb Add single-precision numbers SUBD Dd,Da,Db Subtract double-precision numbers SUBF Fd,Fa,Fb Subtract single-precision numbers. MULTD Dd,Da,Db Multiply double-precision Floating point numbers MULTF Fd,Fa,Fb Multiply single-precision Floating point numbers DIVD Dd,Da,Db Divide double-precision Floating point numbers DIVF Fd,Fa,Fb Divide single-precision Floating point numbers CVTF2D Dd,Fs Converts from type single-precision to type double-precision CVTD2F Fd,Ds Converts from type double-precision to type single-precision CVTF2I Fd,Fs Converts from type single-precision to type integer CVTI2F Fd,Fs Converts from type integer to type single-precision CVTD2I Fd,Ds Converts from type double-precision to type integer CVTI2D Dd,Fs Converts from type integer to type double-precision __D Da,Db Double-precision compares: "__" may be EQ, NE, LT, GT, LE or

GE; sets comparison bit in FP status register __F Fa,Fb Single-precision compares: "__" may be EQ, NE, LT, GT, LE or

GE; sets

Page 8: Prac 1 Intro Win Dlx

Práctica 1 Introducción al entorno de simulación WinDLX

Estructura de Computadores 8

3 Lenguaje ensamblador DLX En este apartado comentaremos los aspectos más importantes del ensamblador del DLX disponible en el entorno de simulación WinDLX, que también será objeto de estudio en próximos apartados.

3.1 Sintaxis de las expresiones La sintaxis de las expresiones es similar al lenguaje de programación C (por ejemplo las ristras de caracteres deben ir entre “ ”). Números: WinDLX acepta números en notación decimal (por defecto); hexadecimal, si los dos primeros caracteres son 0x y octal, si el primer carácter empieza por 0. Direcciones: La forma más simple para esta expresión es un número que es interpretado como una dirección de memoria. De forma más general, las expresiones de direcciones pueden consistir de números, símbolos (que deben estar definidos en los ficheros de ensamblador actualmente cargados en el simulador), operadores *, /, +, -, <<, >>, &, |, y ^ (que tienen el mismo significado y precedencias que en C) y paréntesis para realizar agrupaciones. El valor de una expresión debe estar dentro de los límites propios definidos para el tipo de expresión: Bytes: -128 …+127 (8 Bit) Halfwords: -32768 … +32767 (16-Bit) Words: -2147483648 …+2147483647; 0xffffffff (32-Bit)

3.2 Directivas Las directivas de un programa ensamblador son instrucciones que controlan diversos aspectos de funcionamiento del programa ensamblador. Por tanto, no son instrucciones para el procesador sino para el programa (ensamblador) que traduce los mnemónicos de las instrucciones a lenguaje máquina (unos y ceros). La sintaxis de una directiva es:

.directiva [parámetros] Mientras el ensamblador procesa un fichero fuente, los datos e instrucciones ensambladas (traducidas a lenguaje máquina) son colocadas en memoria utilizando dos punteros: uno para datos y otro para instrucciones. El puntero que se utiliza en cada momento viene determinado por la directiva más recientemente utilizada: .DATA o .TEXT. Por defecto, el código del programa se carga a partir de la dirección dada por la variable $TEXT (con valor inicial 0x100) y los datos a partir de la dirección dada por la variable $DATA (con valor inicial 0x1000).

.align n Causa que el siguiente código (o dato) sea cargado en una dirección de memoria múltiplo de 2n (por ejemplo, “align 2” significa que comienza en la siguiente dirección de memoria múltiplo de 4).

.ascii "string1","..." Almacena en memoria las "strings" mostradas en la línea como una lista de caracteres.

.asciiz "string1","..." Similar a la directiva .ascii, excepto que cada string se termina con el carácter null (byte 0) que indica el final de la string.

.byte byte1,byte2,... Almacena secuencialmente en memoria los bytes listados en la línea.

.data [address]

Causa que el siguiente dato sean almacenado en el segmento de datos de la memoria (DATA). Si se especifica la dirección, los datos serán cargados a partir de dicha dirección; en caso contrario, se utilizará el último valor del puntero de datos ($DATA).

Page 9: Prac 1 Intro Win Dlx

Práctica 1 Introducción al entorno de simulación WinDLX

Estructura de Computadores 9

.double number1,... Almacena secuencialmente en memoria los "números" listados en la línea, como números en punto flotante de doble precisión.

.global label Declara el símbolo “label” como global de modo que pueda ser referenciado por otros módulos que se carguen después de este fichero.

.space size Se utiliza para reservar espacio de memoria. Mueve el puntero de almacenamiento actual (código o datos, $TEXT o $DATA) “size” bytes adelante.

.text [address]

Causa que el siguiente código sea almacenado en el área de texto o código de memoria (TEXT). Si se especifica la dirección, el código será cargado a partir de dicha dirección; en caso contrario, se utilizará el último valor del puntero de datos ($TEXT).

.word word1,word2,... Almacena secuencialmente en memoria las palabras (words) listadas en memoria.

4 El simulador WinDLX WinDLX (Windows De LuXe) es un simulador del “pipeline” del procesador DLX (procesador RISC similar al procesador MIPS) que será utilizado en las prácticas correspondientes al primer módulo del temario de la asignatura, dedicado a la mejora del rendimiento a través de la técnica de segmentación. Este simulador desarrollado por el Departamento de Diseño-VLSI de la Universidad de Tecnológica de Viena (http://ftp.vlsivie.twien.ac.at) funciona bajo el entorno Microsoft Windows, y permite el procesamiento de programas escritos en ensamblador de DLX, mostrando toda la información relevante de la CPU: estado del pipeline, banco de registros, memoria, estadísticas, etc.. Su versatilidad posibilita la modificación de la estructura y tiempos de latencia del pipeline de la CPU y del tamaño de la memoria. También, proporciona el soporte necesario para la realización de llamadas al sistema a través de TRAPs que constituyen el interfaz entre los programas DLX y el sistema de entrada/salida (abrir, cerrar, leer y escribir un archivo y visualización en pantalla). Existen varias razones que justifican el uso de un simulador frente a un computador real que disponga del chip procesador en cuestión. Entre ellas, cabe destacar:

- Las estaciones de trabajo no siempre están disponibles. - La evolución tecnológica hace que un computador quede obsoleto en sólo algunos años lo que conduce a

estaciones de trabajo (computadores) más rápidos y con mejores prestaciones (piense en el mercado de los ordenadores personales).

- Otra razón importante es la tendencia a desarrollar computadores más rápidos utilizando técnicas de diseño que permiten la ejecución de varias instrucciones concurrentemente. Esto hace que una arquitectura (procesador) sea más difícil de entender y programar en lenguaje ensamblador.

- Mejores entornos de programación que una máquina real. Los simuladores pueden proporcionar mejores entornos para programar a bajo nivel (lenguaje ensamblador) que los de una máquina real debido a que pueden detectar errores y tener mejores prestaciones. Por ejemplo, el simulador WinDLX tiene un interfaz de ventanas que es mejor que muchos depuradores de máquinas reales.

- Los simuladores son una herramienta muy útil para el estudio de los computadores y de los programas que en él se ejecutan. Debido a que son implementados en software (no silicio), los simuladores son fácilmente modificables con objeto de añadirles nuevas instrucciones, construir nuevos sistemas o, simplemente, para adquirir o recolectar datos.

- Proporciona ciclos de edición, ensamblado, carga y ejecución más cortos que si se utiliza placas de prototipo especialmente diseñadas para el aprendizaje (educativas).

- En muchos casos, los simuladores se distribuyen como software gratis, especialmente los desarrollados en entornos académicos y de investigación.

Page 10: Prac 1 Intro Win Dlx

Práctica 1 Introducción al entorno de simulación WinDLX

Estructura de Computadores 10

4.1 Descripción general del entorno de simulación Una vez abierta la aplicación puede observarse que aparece una ventana principal que a su vez contiene 6 ventanas inicialmente minimizadas, mostrando cada una de ellas diferentes aspectos relacionados con el procesador que se simula. El nombre de cada una de estas 6 ventanas es:

• Registros (register): Contenidos de registros. • Código (Code): Instrucciones DLX en memoria. • Cauce (Pipeline): Estados del pipeline con las instrucciones en curso. • Diagrama de múltiples ciclos de reloj (Clock Cycle): Muestra lo que hace cada etapa en un ciclo determinado. • Estadísticas (Statistics): Estadísticas acerca de la ejecución de las instrucciones. • Puntos de ruptura (Breakpoints): Gestión de puntos de parada o breakpoints.

Una característica de estas ventanas es que no pueden cerrarse, por lo que permanecen minimizadas o abiertas durante todo el tiempo de simulación. Además de estas ventanas, se pueden crear, dinámicamente, hasta un máximo de 10 ventanas de memoria en las que se visualizan contenidos de memoria.

4.1.1 Ventana principal: La barra de menús La ventana principal del simulador muestra una barra de 7 menús con los comandos necesarios para manejar las distintas posibilidades del simulador. En realidad, el número de menús es superior, ya que dependiendo de la ventana que esté activa, la última opción de la barra de menús cambia de significado mostrando información relativa a la ventana que en cada caso está activa.

Por ejemplo, en la figura podemos apreciar que la ventana de estadística está seleccionada, y que la última opción del menú también corresponde a estadísticas donde se nos permite activar diversas opciones de visualización de las mismas.

Page 11: Prac 1 Intro Win Dlx

Práctica 1 Introducción al entorno de simulación WinDLX

Estructura de Computadores 11

4.1.1.1 Menú File Las opciones disponibles en este menú son:

• Reset DLX o Borrado-limpieza del pipeline o Reset de estadísticas. o Inicialización de todos los registros a 0 excepto el PC que se inicializa con $TEXT o Borrado de la historia de instrucciones ejecutadas o Cierre de todos los ficheros abiertos o Cancelación de todas las redirecciones de la entrada/salida. o Borrado de la pantalla de visualización DLX-I/O. o Los contenidos de memoria y todos los símbolos definidos permanecen sin cambios.

• Reset All

o Esta opción ejecuta todas las acciones de "Reset DLX" y, además, inicializa a cero la memoria y borra los símbolos excepto $TEXT y $DATA que mantienen su valor.

• Load Code or Data

o Cuando se selecciona esta opción aparece un cuadro de diálogo. En él se pueden seleccionar los módulos de programa (ficheros con extensión “.S”) que se quieren cargar en el simulador. Después de realizar la carga de los programas se tiene la posibilidad de ejecutar un Reset-DLX. Si nos equivocamos al seleccionar un módulo podemos borrar la selección pulsando el botón de “delete”. Se pueden cargar múltiples módulos y usar variables globales.

• Quit WINDLX

o Si seleccionamos esta opción, se nos preguntará para confirmar alguna de las siguientes operaciones: guardar configuración, salir del programa o cancelar operación.

Page 12: Prac 1 Intro Win Dlx

Práctica 1 Introducción al entorno de simulación WinDLX

Estructura de Computadores 12

4.1.1.2 Menú Window Los comandos de este menú son los típicos de cualquier aplicación Windows, por lo que no entraremos en mayor detalle. En el menú desplegable se puede seleccionar la forma en que se presentan en pantalla las diferentes ventanas así como activar una de las seis ventanas disponibles.

Page 13: Prac 1 Intro Win Dlx

Práctica 1 Introducción al entorno de simulación WinDLX

Estructura de Computadores 13

4.1.1.3 Menú Execute En este menú se encuentra los comandos necesarios para ejecutar, según diferentes modos, el código ensamblado residente en la memoria y visualizar la ventana de entrada/salida (DLX-I/O).

• Single cycle: Ejecuta la simulación de un sólo un ciclo. La ventana DLX-IO será actualizada siempre que se produzca una entrada o salida durante este ciclo.

• Múltiple Cycles: Esta opción permite definir el número de ciclos que se simulan en cada paso. • Run: Comienza la ejecución simulada del programa hasta que:

o Se detenga por medio del botón “Cancel” en la ventana DLX-I/O. o Ocurra un error. o Se alcance un punto de ruptura o de parada (breakpoints). o Se procese un TRAP indefinido.

• Run to: Similar a Run, excepto que permite asignar un punto de parada temporal por medio de una ventana de diálogo.

• Display DLX-I/O: La activación de este comando provoca la visualización de la ventana DLX-I/O aunque la simulación no esté funcionando.

Page 14: Prac 1 Intro Win Dlx

Práctica 1 Introducción al entorno de simulación WinDLX

Estructura de Computadores 14

4.1.1.4 Menú Memory Este menú proporciona comandos para crear ventanas de memoria, cambiar el contenido de las posiciones de memoria y manipular símbolos. Los comandos del menú son:

• Display: Permite la creación de forma dinámica de hasta 10 ventanas en las que se visualiza contenidos de

memoria en varios tipos y formatos. La activación de esta opción da lugar a la presentación de una ventana como la mostrada en la figura en la que se configuran determinadas características de la visualización de contenidos de memoria.

• Change: Mediante esta opción se puede cambiar o modificar el contenido de una posición de memoria. • Symbols: Permite la manipulación de símbolos (visualizar, definir, cambiar y borrar) a través de una ventana

de diálogo.

Page 15: Prac 1 Intro Win Dlx

Práctica 1 Introducción al entorno de simulación WinDLX

Estructura de Computadores 15

4.1.1.5 Menú Configuration Los comandos de este menú están relacionados con la configuración del procesador DLX. Las opciones dentro de este menú son las siguientes:

• Floating Point Stages: En este comando se define el número de unidades funcionales y sus latencias. • Memory size: Permite modificar el tamaño de la memoria disponible: mínimo 512 bytes y máximo 16Mb. • Symbolic Addresses: Cuando se visualiza contenidos de memoria, la información de los símbolos se

presentan como símbolo+desplazamiento o sólo por su dirección en hexadecimal. • Absolute Cycle Count: Si se habilita esta opción los ciclos se cuentan desde 0, reiniciando el procesador y las

estadísticas. • Enable Fordwarding: Permite activar o desactivar el mecanismo de adelantamiento de datos. • Load: Carga un fichero de configuración del procesador. Los contenidos de memoria y los símbolos

permanecen sin cambios. • Save: Permite guardar la configuración actual del procesador en un archivo con la extensión “.WDC”. Si no se

especifica el nombre se utiliza por defecto “WINDLX.WDC. El almacenamiento de la configuración puede realizarse al finalizar la sesión de trabajo con el simulador o mediante este comando.

4.1.1.6 Menú Help El menú Help contiene un conjunto de comandos que permiten acceder al sistema de ayuda del entorno de simulación WinDLX. La mayor parte de la información de este cuaderno de práctica ha sido extraída del menú Help con objeto de realizar una guía en castellano que sea de utilidad al estudiante. Se recomienda al alumno acudir a esta ayuda para cualquier consulta no cubierta en este documento. En cualquier instante se puede obtener información de ayuda presionando la tecla F1.

Page 16: Prac 1 Intro Win Dlx

Práctica 1 Introducción al entorno de simulación WinDLX

Estructura de Computadores 16

4.1.2 Ventana y menú Register En esta ventana se visualizan todos los registros disponibles del procesador. En el menú “Register” de la barra de menús puede configurarse los registros que se desean visualizar y el formato en el que se visualizan (decimal o hexadecimal).

Además de los registros de propósito general y el conjunto de registros de punto flotante, el procesador dispone de un conjunto de registros de propósito especial que son los siguientes:

• FPSR (Floating-Point Status Register). Es un registro de estado de 1 bit de longitud, utilizado para comparaciones y excepciones en punto flotante. Todos los movimientos desde y hacia este registro se realizan a través de los registros de propósito general.

• PC (Program Counter). Registro cuyo contenido apunta siempre a la siguiente instrucción a ejecutar. Las

instrucciones de salto y bifurcación pueden cambiar el contenido de este registro.

• IMAR (Instruction Memory Address Register). Este registro es inicializado con el contenido del PC en la etapa IF y tiene conexión directa con la memoria mientras que el PC no.

• IR (Instruction Register): En la etapa IF este registro se carga con la instrucción que llega de la memoria y que

será la próxima instrucción en ejecutarse.

• A, B. Son registros que se encuentran a la salida del banco de registros. En la etapa ID son cargados con valores leídos de los registros y son luego operandos para la ALU en la siguiente etapa del pipeline, EX. En WinDLX , además existen dos pseudo-registros AHÍ y BHI que contienen los 32 bits superiores para valores de punto flotante de doble precisión.

• BTA (Branch Target Address). En la etapa ID, la dirección de salto/bifurcación es calculada y escrita en este

registro.

• ALU (Arithmetic Logical Unit). El resultado de una operación realizada por la ALU es transferido a este registro.

• DMAR (Data Memory Address Register). La dirección de memoria a la que se va acceder es transferida a este

registro en la etapa EX. En la etapa MEM se accede a la dirección de memoria especificada por este registro.

Page 17: Prac 1 Intro Win Dlx

Práctica 1 Introducción al entorno de simulación WinDLX

Estructura de Computadores 17

• SDR (Store Data Register). El dato que se va a escribir en memoria mediante la instrucción store es escrito

previamente en este registro. En WINDLX existe un pseudo-registro llamado SDRHI que contiene los 32 bits más significativos para valores de punto flotante de doble precisión.

• LDR (Load Data Register). El dato que es leído de memoria se almacena en este registro. Al igual que en

algunos registros anteriores, existe un pseudo-registro llamado LDRHI que contiene los 32 bits más significativos para valores de punto flotante de doble precisión.

4.1.3 Ventana y menú Code En la ventana Code son visualizadas las instrucciones DLX almacenadas en memoria tanto en formato hexadecimal como desensambladas. Por otra parte, los puntos de ruptura o parada de cada instrucción son indicados con Bxx, siendo xx el tipo de punto de ruptura. Las instrucciones que se encuentran en el cauce o pipeline del procesador en fase de ejecución son coloreadas utilizándose un color de fondo para cada etapa de segmentación. Para obtener más información de la ejecución de una instrucción se puede hacer doble clic sobre ella apareciendo una nueva ventana en la que se puede obtener más información acerca de la ejecución de la misma.

Page 18: Prac 1 Intro Win Dlx

Práctica 1 Introducción al entorno de simulación WinDLX

Estructura de Computadores 18

Por último, decir que desde el menú Code podemos iniciar la ejecución del programa desde una dirección determinada y definir y borrar puntos de parada o breakpoints.

4.1.4 Ventana y menú Pipeline En la ventana pipeline se visualizan las diferentes etapas por las que pasan las instrucciones para ser ejecutadas dentro de la estructura segmentada del procesador DLX. Con el tamaño de ventana adecuado las cajas pueden mostrar las instrucciones que en ese instante se está ejecutando en cada una de las etapas. Haciendo doble clic sobre las cajas se puede obtener más información de las instrucciones que se encuentren en ellas. El menú Pipeline contiene una única acción denominada Display Floating Point Stages. Su utilidad es visualizar las etapas en punto flotante existentes o por el contrario mostrar sólo las cinco etapas del pipeline.

Page 19: Prac 1 Intro Win Dlx

Práctica 1 Introducción al entorno de simulación WinDLX

Estructura de Computadores 19

4.1.5 Ventana y menú Clock Cycle Diagram En esta ventana se visualizan las operaciones que se realizan en cada ciclo de reloj y en cada etapa. Como puede apreciarse cada columna representa el estado de las diferentes etapas del pipeline en un determinado ciclo de reloj. El estado actual del pipeline es mostrado en la columna marcada en gris mientras que el resto de las columnas muestran el estado del pipeline en ciclos anteriores. Es posible obtener más información de una instrucción haciendo doble clic sobre ella.

Las detenciones del pipeline (stalls) son representadas en cajas coloreadas en el color asociado a la etapa detenida. La etiqueta que aparece en interior de las cajas proporciona más información sobre el tipo de detención:

• R-Stall (RAW): Una flecha roja indica la instrucción que está provocando la detención del cauce. • T-Stall: Esta detención sólo se produce ante una instrucción de TRAP. La instrucción de TRAP permanece en

la etapa de IF hasta que no queden más instrucciones en el pipeline. • W-Stall (WAW): Una flecha roja indica la instrucción que causa la detención. En el WinDLX estas

detenciones sólo se pueden producen para las instrucciones en punto flotante no en las de aritmética entera. • S-Stall (Structural Stall): Se producen cuando no hay suficientes recursos hardware para ejecutar el conjunto

de instrucciones residentes en el pipeline. • Stall: Cuando una instrucción de punto flotante está en la etapa de MEM, la próxima instrucción será detenida

en la etapa intEX etiquetándola com la palabra Stall. El menú Clock Diagran Cycle contiene los siguientes comandos:

• Display Fordwarding: Visualiza la anticipación de los datos con una flecha verde. • Display Cause of Stalls: Si se selecciona esta opción la instrucción que provoca la detención es marcada con

una flecha roja. • Delete History: Borra el historial de instrucciones ejecutadas • Set History Length: Selecciona el tamaño de la historia a visualizar que ha de estar entre 0 y 100.

Page 20: Prac 1 Intro Win Dlx

Práctica 1 Introducción al entorno de simulación WinDLX

Estructura de Computadores 20

4.1.6 Ventana y menú Statistics En esta ventana se muestra numerosas estadísticas acerca de la ejecución de los programas. También se puede configurar las estadísticas que se han de mostrar a través del menú Statistics. Para más información consultar la ayuda del WinDLX.

Page 21: Prac 1 Intro Win Dlx

Práctica 1 Introducción al entorno de simulación WinDLX

Estructura de Computadores 21

4.1.7 Ventana y menú Breakpoints El contenido de esta ventana es el conjunto de instrucciones que tienen puntos de ruptura o parada asignados. El número máximo puntos de parada que podemos definir es de 20. El menú Breakpoints nos permite definir, borrar y cambiar puntos de parada.

Page 22: Prac 1 Intro Win Dlx

Práctica 1 Introducción al entorno de simulación WinDLX

Estructura de Computadores 22

5 Traps Los traps son el interfaz entre los programas DLX y el sistema de entrada/salida. Hay cinco traps definidos en WinDLX:

• Trap #0: Fin del programa. • Trap #1: Abrir un archivo. • Trap #2: Cerrar un archivo. • Trap #3: Leer un bloque de un archivo. • Trap #4: Escribir un bloque en un archivo. • Trap #5: Formatear y enviar información hacia la salida estándar.

Para todos los traps se cumple lo siguiente:

• Representan respectivamente las llamadas al sistema UNIX/DOS de la biblioteca de funciones C: open(), close(), read(), write() y printf().

• Los descriptores de archivo 0, 1 y 2 están reservados para stdin, stdout y stderr. La entrada y la salida hacia la ventana I/O puede ser controlada con estos descriptores.

• La dirección del primer parámetro requerido por una llamada al sistema debe almacenarse en el registro R14. Los siguientes argumentos se situarán en la dirección R14+4, R14+8, etc.

• De acuerdo a lo anterior todos los parámetros tienen que ser de 32 bits de longitud, excepto los números en doble precisión que son de 64 bits.

• El resultado es devuelto en R1 • Si durante la ejecución de una llamada al sistema ocurre un error, el registro R1 es asignado a –1 y si al

símbolo “_errno” se le asigna el valor A, entonces el código de error es almacenado en la dirección de memoria A y la simulación continuará; en caso contrario, la simulación será abortada.

A continuación se detallan las llamadas al sistema tomadas directamente de la ayuda de WinDLX (menú help)

Page 23: Prac 1 Intro Win Dlx

Práctica 1 Introducción al entorno de simulación WinDLX

Estructura de Computadores 23

5.1 Trap #1 Abrir un archivo Parameter:

1. Filename: Address of a zero-terminated string, that contains the path of the file to be opened. 2. Mode, to open the file: Following modes can be combined using logical or-operation:

0x0001 O_RDONLY (read only) 0x0002 O_WRONLY (write only) 0x0004 O_RDWR (read and write) 0x0100 O_CREATE (create file) 0x0200 O_TRUNC (truncate file) 0x0400 O_EXCL (open file exclusively (with SHARE)) 0x0800 O_APPEND (append to file) 0x4000 O_TEXT (Convert CR/LF) 0x8000 O_BINARY (No conversion of CR/LF) (Warning: These flags are predefined in MS-DOS and not compatible to UNIX.)

3. Additional Flags:

0x0000 S_IFREG (Normal file, no directory etc.) 0x0100 S_IREAD (read access permission) 0x0080 S_IWRITE (write access permission) 0x0040 S_IEXEC (execute permission) (Warning: These flags are predefined in MS-DOS and not compatible to UNIX.) (See C-Library functions for more details.)

The file descriptor is returned in register R1. Example: .data FileName: .asciiz "c:\\BSP\\DATEI.DAT" .align 2 Par: ;*** Parameters for Trap1 (OPEN) .word FileName ;create for R/W: .word 0x0104 ;R/W-access permission: .word 0x0180 FileDescr: .space 4 .text lhi r14,Par>>16 ; upper 16 bits addui r14,r14,Par&0xffff ; lower 16 bits trap 1 sw FileDescr,R1

Page 24: Prac 1 Intro Win Dlx

Práctica 1 Introducción al entorno de simulación WinDLX

Estructura de Computadores 24

5.2 Trap #2 Cerrar un archivo Parameter:

1. File descriptor of the file to be closed.

Zero is returned in register R1, if it was successful, -1 otherwise. Example: .data FileDescr: .space 4 .text ;... lhi r14,FileDescr>>16 ; higher 16 bits addui r14,r14,FileDescr&0xffff ; lower 16 bits trap 2

5.3 Trap #3 Leer un bloque de un archivo A file block or a line from stdin can be read with this trap. Parameter:

1. File descriptor of the file 2. Address, for the destination of the read operation 3. Size of block (bytes) to be read

The actual number of bytes read is returned in register R1. Example: .data Buffer: .space 500 Par: ;File descriptor, Adr. of buffer, size of block .space 4 .word Buffer .word 500 .text ;... lhi r14,Par>>16 ; higher 16 bits addui r14,r14,Par&0xffff ; lower 16 bits trap 3

Page 25: Prac 1 Intro Win Dlx

Práctica 1 Introducción al entorno de simulación WinDLX

Estructura de Computadores 25

5.4 Trap #4 Escribir un bloque en un archivo A block can be written to the memory or the standard output. Parameter:

1. File descriptor of file 2. Address of block to be written 3. Size of the block (bytes)

The actual number of bytes written is returned in register R1. Example: .data Buffer: .space 500 Par: ;File descriptor, Adr. of buffer, size of block .space 4 .word Buffer .word 500 .text ;... lhi r14,Par>>16 ; higher 16 bits addui r14,r14,Par&0xffff ; lower 16 bits trap 4

5.5 Trap #5 Enviar información al dispositivo de salida This function is equivalent to the C-library function printf(). Parameter:

1. Format string see C-function printf() 2. Arguments according to format string; see C-function printf()

The number of bytes transferred to stdout is returned in register R1. Example: .data FormatStr: .asciiz "Pi=%f, N=%d\n" .align 2 Par: ;Adr. of format string, values .word FormatStr .double 3.141592654 .word 17 .text ;... lhi r14,Par>>16 ; higher 16 bits addui r14,r14,Par&0xffff ; lower 16 bits trap 5

Page 26: Prac 1 Intro Win Dlx

Práctica 1 Introducción al entorno de simulación WinDLX

Estructura de Computadores 26

6 Realización práctica La actividad práctica a realizar consiste en la realización de pequeños programas que demuestre que comprende y sabe utilizar el lenguaje ensamblador y el entorno de simulación objeto de esta práctica. Los programas a desarrollar son los siguientes:

1. Programa para sumar dos números enteros (positivos o negativos!) suministrados por el usuario por teclado y mostrar el resultado en pantalla.

2. Programa que lea una string desde el teclado, convierta las mayúsculas a minúsculas y las minúsculas a mayúsculas y visualice el resultado de la conversión por pantalla.

3. Programa para calcular el producto escalar de dos vectores suministrados en un fichero cuyo nombre lo suministra el usuario por teclado. Una línea por vector y terminada en retorno de carro. Los elementos de los vectores estarán separados por una coma (,). Una vez realizado el producto escalar visualizar los elementos de los vectores y el resultado.

7 Defensa y entrega de la memoria Una vez realizada la práctica, el alumno deberá elaborar una memoria que consistirá en los listados de los programas convenientemente documentados y un organigrama o diagrama de flujo para cada uno de ellos. Además, el alumno deberá mostrar al profesor el funcionamiento correcto de los programas y contestar a cuantas preguntes éste formule. La fecha límite para la entrega de las memorias es siempre la fecha de comienzo de la siguiente práctica.