

















Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Asignatura: Introducció als Computadors, Profesor: , Carrera: Enginyeria Informàtica, Universidad: UPC
Tipo: Ejercicios
Subido el 21/11/2017
1 / 25
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!


















Objetivos que se deben haber alcanzado antes de realizar la práctica
Antes de preparar esta práctica se deben haber alcanzado los objetivos específicos que se indican en la siguiente tabla. Para ello, es recomendable haber estudiado las secciones de la documentación que se indican en la primera columna de la tabla.
Secciones de la documentación a estudiar Objetivos específicos a alcanzar
Capítulo 8. Completo 8.7, 8.8, 8.9 y 8.
Estos objetivos serán evaluados en parte del informe previo que debéis entregar al inicio de la sesión de laboratorio y en la prueba previa individual que se hará al inicio de la sesión.
Objetivos que se deben alcanzar al realizar la práctica
Después de realizar esta práctica, además de haber mejorado el nivel de consecución de los objetivos necesarios para preparar la práctica (citados en la tabla anterior) el alumno será capaz de:
Diseñar e implementar dos versiones de un multiplicador de números naturales con Entradas/Salidas síncronas formado por una unidad de control de propósito específico y la UPG. En la primera versión la multiplicación tarda siempre el mismo número de ciclos mientras que en la segunda versión (denominada de terminación temprana) el número de ciclos depende del valor concreto de los bits del multiplicador. En concreto: a) Dibujar el grafo de estados de la unidad de control de propósito específico del multiplicador. b) Dibujar el esquema lógico del circuito que implementa el grafo de estados de la unidad de control del multiplicador mediante dos memorias ROM y un registro. c) Implementar en LogicWorks la unidad de control del multiplicador mediante dos memorias ROM y un registro.
Directorio de la práctica Aularios en módulo A5 y C6: Mi PC\I:\ic\Prac Aularios en el módulo D6: Mi PC\R:\Logic\Ver_4.1\Ic\Prac
En esta práctica implementamos un multiplicador secuencial de dos números naturales codificados en binario con 16 bits. Es equivalente al diseño de propósito específico que hicimos en la práctica 3 pero ahora usando la unidad de proceso general, UPG, que hemos estudiado en clase. Como la UPG ya está diseñada, nos centramos en el diseño de la unidad de control (UC). La comunicación de este multiplicador con el subsistema que le proporciona los datos y recoge el resultado es síncrona, como en la práctica 3. Por ello, os recomendamos que para hacer esta práctica repaséis profundamente la práctica 3 de este curso, así como la documentación sobre la unidad de proceso general UPG (Etapa I de la documentación del tema 7).
A modo de repaso de la UPG, en las siguientes figuras se muestra su estructura a nivel de bloques, la tabla que indica las operaciones que realiza la ALU en función del valor de los bits de selección OP y F de 2 y 3 bits respectivamente y por último los 33 bits que forman la palabra de control. Por razones de espacio, los 16 bits del campo N se expresan en hexadecimal con 4 dígitos. La palabra de control está
formada por los bits que cada ciclo tiene que generar la unidad de control para indicarle a la UPG qué debe hacer durante ese ciclo. Todos los conectores que entran a la UPG llegan de la UC excepto RD-IN que viene del exterior del multiplicador, de donde le llegarán los operandos. De las señales que salen de la UPG, z va a la UC para indicarle si el resultado que sale por la ALU en ese ciclo es cero o no y WR- OUT va al exterior para entregar el resultado de la multiplicación.
RD-IN
WR-OUT
In/Alu
WrD Clk
Rb/N
MUX
10
MUX
10
@A 3 3 @B
3 @D
N
X (^) Y
ALU
OP z
F 3 F OP 2 z
REGFILE
D
A
@B B
@D
@A
WrD
Unidad de Proceso General (UPG)
Funcionalidades de la ALU de la UPG
@A @B
Rb/N
OP F
In/Alu
@D
WrD
N ( Hexa )
b 2 b 1 b 0 b 2 b 1 b 0 b 1 b 0 b 2 b 1 b 0 b 2 b 1 b 0 D
3 D
2 D
1 D
0
x x x x x x x x x x x x x x x x x X X X X
Palabra de control de la UPG
Antes de pasar al diseño del multiplicador usando la UPG, vamos a hacer algunos ejercicios para familiarizarnos con ella y con el diseño de unidades de control específicas para controlar a la UPG.
de menor peso (los 3 bits de más peso de este dígito los codificaremos como 0, ya que no se refieren a ninguna señal binaria de la palabra de control)
Mnemotécnico Palabra de control hexadecimal AND R3, R1, R5 (^) 06C ADD R1, R2, R3 // NOT R2, R1 (^) -------------- SHAI R7, R7, - ADDI R4, R7, - OUT R5 // IN R IN R1 // ADD R2, R3, R MOVEI R3, 327 SHLI R6, R6, 1 CMPEQ -, R3, R SUBI -, R2, 1
¿Cómo se modifican los registros de la UPG al final del ciclo en el cual la UPG ha estado controlada por la palabra de control que se especifica para cada uno de los siguientes apartados? Cada fila de la tabla es un ejercicio independiente. Debe suponerse, para cada fila/ejercicio, que desde el inicio del ciclo que estamos considerando, el estado de la UPG (el contenido de los registros de la UPG) y el valor presente en el bus de datos de entrada de la UPG es: Ri vale i +3 para 0 ≤ i ≤ 7 RD-IN = 23. Sólo tenéis que especificar los cambios ocurridos en el estado del computador tras la llegada del flanco de reloj que indica el final del ciclo. Los registros que no se modifiquen no deben especificarse. (Los dos primeros apartados los hemos completado nosotros, como muestra).
a) AND R3, R1, R Respuesta: R3 = 0 b) ADD R1, R2, R3 // NOT R2, R Respuesta: ------- c) SHAI R7, R7, -
d) ADDI R4, R7, -
e) OUT R5 // IN R
f) MOVEI R3, 327
g) IN R1 // ADD R2, R3, R
h) SHLI R6, R6, 1
i) CMPEQ -, R3, R
j) SUBI -, R2, 1
En toda unidad de control puede considerarse que hay dos circuitos combinacionales (que se pueden implementar con dos ROM), uno para generar en cada ciclo el estado siguiente (para indicar el nodo que se ejecutará al ciclo siguiente) y otro para generar las salidas de la unidad de control (la palabra de control más algún bit de salida del procesador para sincronizar y/o validar el resultado de la operación. Hemos practicado un poco con la palabra de control, que le indica a la UPG la acción que debe realizar en cada ciclo. Ahora vamos a practicar además con la generación del estado siguiente, con el secuenciamiento (la secuencia de ejecución de los nodos del grafo). El secuenciamiento se indica mediante los arcos del grafo de estados de la unidad de control (las flechas etiquetadas entre nodos).
Para cada uno de los apartados siguientes, dibujad el fragmento del grafo de estados de la unidad de control de propósito específico para que la UPG realice la funcionalidad que se indica. Indicad la palabra de control en hexadecimal que genera la unidad de control para cada nodo. Indicad con una flecha la llegada al primer nodo del fragmento y con otra flecha la salida del último nodo del fragmento. Consideramos que los contenidos de los registros son números naturales codificados en binario ( unsigned integers ). El apartado a) lo damos resuelto, escribiendo al lado de cada nodo
la palabra de control con mnemotécnicos que debe generar la unidad de control cuando ejecuta el nodo. a) if (R2 ≤^ R3) R3 = R1 – 1; Respuesta:
b) if (R1 != 1) R2 = R2 + R2; else R2 = R2 + 5;
c) for (R2 = 3; R2 <= R5; R2 = R2+1) R7 = R7 + 3;
d) if (R1<3> = 1) R2 = R2 + R5; (Nota: R1<3> se refiere al bit 3 del registro R1. La acción ANDI de R3 con un valor inmediato adecuado da como resultado 0 si el bit 3 de R1 vale 0 y distinto de 0 si vale 1).
1.3 Multiplicación en la UPG
1.3.1 Repaso de la práctica 3
Algoritmo MUL
el que se implementa la iteración j del algoritmo de multiplicación.
escribir el algoritmo de multiplicación anterior con más detalle, y de acuerdo con la implementación
j, el bit 0 (bit de peso 0 2 ) de Y( j)sea y (^) j, en cada iteración del bucle hay que desplazar a la derecha el
contenido del registro superior derecho (división entera por 2). El algoritmo que se obtiene especificando
Algoritmo MUL (segunda versión)
1.3.2 Enunciado del problema
dibujad el grafo de la unidad de control, especificando la palabra de control con mnemotécnicos, que deje
detectar el caso de desbordamiento, esto es, el caso en el que el resultado de la multiplicación no puede representarse correctamente en binario con 16 bits.
1.3.3 Obtención del grafo de estados, sentencia por sentencia
Para resolver este problema vamos a utilizar el algoritmo MUL (segunda versión). De momento, y motivados por el enunciado del problema, asociamos los siguientes registros del banco de registros de la UPG con las variables del algoritmo MUL:
a) Sentencias anteriores al bucle
implementar con la acción:
(También puede hacerse, por ejemplo con XOR R5, R5, R5; o con SUB R5, R5, R5)
El nodo del grafo que especifica esta acción es el siguiente:
b) Implementación del bucle
En el diseño específico de la práctica 3 realizamos las 4 sentencias de cada iteración del bucle del algoritmo MUL en un solo ciclo, ya que la unidad de proceso específica fue diseñada para ello y se dispuso del hardware necesario para que pudiera actuar en paralelo (en el mismo ciclo). Ahora, en la UPG, tenemos una única ALU que sólo puede efectuar una operación por ciclo. Por ello, lo que en la práctica 3 hacíamos en un ciclo (un nodo de la unidad de control) ahora lo tendremos que hacer en varios ciclos (varios nodos de la unidad de control).
También, en la práctica 3 implementamos las 16 iteraciones del algoritmo MUL mediante una secuencia de 16 nodos del grafo de estados, uno por iteración del bucle for del algoritmo. De momento pensemos en hacer lo mismo, con la salvedad de que será una secuencia de 16 subgrafos, cada uno de ellos de varios nodos, ya que cada iteración del bucle necesita varios ciclos para ejecutarse.
Sentencias del cuerpo del bucle
Veamos ahora cómo implementamos cada una de las sentencias del cuerpo del bucle del algoritmo MUL.
Primera sentencia del cuerpo del bucle. La primera sentencia tiene cierta dificultad:
el valor 0 si el bit de menor peso de R7 es 0.
El valor 1 (representado en binario como todo ceros excepto el bit de menor peso que vale 1) hace el papel de una máscara que sólo nos deja ver el bit 0 de R7. Así, después de ejecutar la acción ANDI, el registro R4 valdrá 1 o 0 según el bit de menor peso de R7 sea 1 o 0 respectivamente. Dicho esto, podemos comprobar que el siguiente fragmento de grafo implementa eficientemente la primera sentencia del cuerpo del bucle (carga en R4 un 0 si el bit 0 de R7 vale 0 y si no carga el valor de R6):
El resto de sentencias del cuerpo del bucle son muy fáciles de implementar en la UPG pues sólo requieren un nodo (un ciclo de reloj) para su ejecución.
Segunda sentencia del cuerpo del bucle. Con el uso de los registros que hemos establecido, la sentencia,
del grafo, en vez de con los 3 que hemos usado y sin requerir el registro temporal R4.
Completad la tabla de las palabras de control del nuevo grafo optimizado. A la izquierda os damos el original, para que os sirva de ayuda.
Con esta optimización que acabáis de hacer, completad la implementación definitiva del cuerpo del bucle con 4 nodos que se encuentra en la siguiente figura (simplemente volved a copiar los mnemotécnicos de los nodos C y D ya que los antiguos nodos N y O de la implementación con 5 nodos son iguales a los que ahora se llaman E y F en la implementación con 4 nodos).
Veamos ahora la implementación del control del bucle.
Control del bucle
En la práctica 3 implementamos una versión del algoritmo MUL con el bucle totalmente desenroscado usando un total de 16+2 nodos, uno para cada iteración del bucle más el estado inicial y final. Ahora, con la UPG, cada iteración del bucle requiere 4 nodos por lo que una implementación desenroscada requeriría al menos 64 nodos (4x16), y esto ya empieza a ser excesivo. Por ello, en esta práctica vamos a hacerlo de otra forma. En la unidad de control tendremos solamente una instancia de los 4 nodos que implementan el cuerpo del bucle de forma que la ejecución del algoritmo suponga reutilizar estos pocos nodos, pasar por ellos, 16 veces, una por iteración del bucle. Se requerirá un registro en la UPG para contar el número de iteraciones hechas. Cada vez que se ejecute una iteración la unidad de control ordenará incrementar este contador. Vamos a ver esto en detalle a continuación.
Es muy importante observar que lo que en la unidad de proceso específica de la práctica 3 se hacía en un ciclo (un nodo), ahora requiere 3 o 4 ciclos, dependiendo del valor del bit del multiplicador que se esté tratando. Al implementar la unidad de control con un bucle, reutilizando los 4 nodos del cuerpo del bucle 16 veces, se usan poco más de 4 nodos en total (muchos menos de 64) pero se necesita más tiempo de ejecución, pues a los 3 o 4 ciclos por iteración del cuerpo del bucle habrá que añadirles algún nodo extra (ciclo extra) para ordenar a la UPG que actualice el registro contador y que compruebe si se han realizado las 16 iteraciones para saber cuándo terminar.
Vamos a implementar el bucle
accionesdelcuerpodel bucle
Una forma eficiente de hacerlo, ya que sabemos que hay que ejecutar al menos 1 vez las acciones del cuerpo del bucle (de hecho se tienen que ejecutar 16 veces), consiste en usar la estructura de control do while que ejecuta el cuerpo del bucle y después pregunta si hay que volver al ejecutar otra iteración. Consiste en inicializar un registro contador con el valor 16 y decrementarlo una unidad en cada iteración. En el ciclo en el que se decrementa el registro, la unidad de control puede saber si vale cero mirando el valor del bit z que llega de la ALU. Si z = 1 ya se ha terminado y si vale 0 hay que volver a ejecutar otra vez el bucle. El grafo resultante es el siguiente:
c) Grafo completo de la Unidad de Control del algoritmo MUL
Antes de dar por terminado el grafo completo de la unidad de control decir que la última sentencia del algoritmo MUL, que se encuentra fuera del bucle, no necesita ningún nodo para su implementación, simplemente debemos saber que el resultado de la multiplicación se encuentra en el registro R5 de la UPG.
Ciclo Mnemotécnico Estado actual de los registros R2 R5 R6 R 0 MOVEI^ R5,^0 X X X X X X X X 0 0 1 1 0 1 0 1 1 MOVEI^ R2,^4 0 0 0 0 2 ANDI^ -,^ R7,^1 0 1 0 0 3 4 5 6 7 8 9
Además de rellenar la tabla, responded a las siguientes preguntas:
a) ¿Cuántos ciclos tarda en ejecutarse el algoritmo?
b) ¿Cuál es el estado de la UPG (el valor de los registros de la UPG) después de ejecutarse el algoritmo?
1.4 Un algoritmo de multiplicación con terminación temprana
Dibujad el grafo de estados del algoritmo de multiplicación de la pregunta 6 del informe previo modificado adecuadamente para que no tengan que ejecutarse siempre 16 iteraciones del bucle.
peso, debemos ahorrarnos las últimas k iteraciones del algoritmo. Esto es posible porque el resultado parcial de la multiplicación que se encuentra en R5 al final de la iteración n-1-k ya es el definitivo. Si continuáramos con el algoritmo sumaríamos un 0 a R5 en cada iteración y esto no modifica R5. Dibujad el grafo de la unidad de control para implementar este algoritmo de multiplicación que denominamos “ con terminación temprana ”. Indicad claramente las etiquetas de los nodos, la palabra de control y las etiquetas en los arcos. Una pista: Os podéis hacer dos preguntas que os ayudarán a encontrar el nuevo grafo, ¿Cómo se modifican los arcos del grafo para poder detectar la terminación temprana? Una vez hecha esta modificación preguntaos ¿Qué nodos del grafo son innecesarios ahora? Después de responder a estas preguntas veréis que el grafo resultante tiene solamente 5 nodos en vez de los 7 nodos que tiene el de la pregunta 6. Completad el grafo siguiente, añadiendo los arcos con sus etiquetas e indicando la palabra de control de cada nodo usando mnemotécnicos.
1.5 Añadiendo Entradas/Salidas síncronas
El grafo que implementa el algoritmo de multiplicación con terminación temprana usando la UPG puede incrustarse en un grafo más complejo. Cada vez que se desea multiplicar dos números, sólo hay que cargar los números en R6 y R7 antes de pasar a ejecutar el grafo que hemos diseñado y después recoger el resultado de R5.
En esta práctica vamos a usar el multiplicador en un entorno equivalente al de la práctica 3. Entramos los operandos de forma síncrona desde un teclado hexadecimal de 4 dígitos y vemos el resultado en un display hexadecimal de 4 dígitos. El circuito se muestra a continuación.
X X X X
b
b
b 0 1 2 3 b 4 5 6 7 8 9 A B b4 C D E F
b
b 0 1 2 3 b 4 5 6 7 8 9 A B b8 C D E F
b
b 0 1 2 3 b 4 5 6 7 8 9 A B b12 C D E F
b
b 0 1 2 3 b 4 5 6 7 8 9 A B C D E F
1000,1000 1000
Pulse
Ld REG
X X X X
MUX
10
0 0
MULwUPG FinMul WR-OUT
IniMul (^) RD-IN
FinMul
IniMul
W
IniMul
Clk
FinMul
RD-IN WR-OUT UPG
RD-IN WR-OUT
In/AluWrD@D@AOPFRb/N@BN
z
IniMul UC-MULwUPG FinMul
z In/AluWrD@D@AOPFRb/N@BN
En la siguiente figura mostramos el esquema interno de la unidad de control específica para la multiplicación. La hemos diseñado con dos memorias ROM, la ROM_Q+_MUL para calcular el estado siguiente, en función de las entradas a la unidad de control y del estado actual (implementa la tabla de transiciones que se obtiene del grafo de estados), y la ROM_OUT_MUL para calcular las salidas de la unidad de control en función del estado actual (tabla de salidas que se obtiene del grafo de estados). Observad que de los 4 bits (un dígito hexadecimal) de menor peso de la salida de la ROM, solamente usamos el bit de menor peso, para codificar la señal FinMul. Hemos usado un dígito en vez de un bit para codificar FinMul, para que sea más fácil escribir el contenido de la ROM en hexadecimal, aunque por esto se necesite una ROM con 3 bits más por palabra. Además hemos usado 9 dígitos hexadecimales para la palabra de control, de 33 bits, aunque no se usen los 3 bits de más peso de la ROM
z
Clk
b b b b b b b b b b b b b b b b b b b b b b
b b b b b b
Rb/N
WrD In/Alu
IniMul REG b b b0b1 b b
b b b
FinMul
3 @B
(^3) F
3 @A
3 @D
N
b b
2 OP
In In In In In
Out Out Out Out
ROM_Q+_MUL
200
In In In
Out Out Out Out Out Out Out Out Out Out Out Out Out Out Out Out Out Out Out Out Out Out Out Out Out Out Out Out Out Out Out Out Out Out Out Out Out Out Out Out ROM_OUT_MUL
200
Indicad el contenido de cada una de las dos memorias ROM, para que el multiplicador funcione como se ha especificado (y de acuerdo con el grafo de 8 estados que habéis diseñado en la pregunta 9 del informe previo). Los bits de salida de las ROM que no se usan haced que sean siempre 0. Expresad el contenido de cada una de las dos ROM en hexadecimal, separando cada palabra por un espacio o un cambio de línea acordando que la primera palabra corresponde a la palabra con dirección 0, la siguiente a la de dirección 1, etc. Usad el espacio siguiente.
El circuito ProbeMxx, que se encuentra en la carpeta Prac5 y que hemos construido para vosotros, es una implementación completa del multiplicador que hemos visto aquí junto con los dispositivos para entrar datos y visualizar el resultado. El problema es que no funciona, ya que el contenido de las ROM de la unidad de control no es correcto.
Implementad en el laboratorio, usando el LogicWorks, cada una de las dos ROM que habéis diseñado en la pregunta 10 del informe previo. Para construir un dispositivo de tipo ROM tenéis que seguir los pasos
que os indica el PROM/RAM/PLA Wizard que se encuentra en la barra de herramientas del LogicWorks. Después de hacer clic en el icono tenéis que seleccionar PROM (ya que la ROM que usamos es realmente una Programmable ROM, PROM), en la siguiente ventana poner el número de líneas de dirección ( Address Lines ) y de datos ( Bits per Word ), seleccionar Enter hex data manually y por último entrar los datos del contenido de la ROM en hexadecimal, separando cada palabra con un espacio o con un return. Podéis hacer clic en Format Help para saber cómo tenéis que separar cada palabra del contenido de la ROM. Como las ROM son bastante grandes para entrar los datos manualmente es fácil cometer errores. Hay un problema, que una vez creada una ROM no se puede ver su contenido ni modificarlo. Si se quiere cambiar el contenido hay que crear otra ROM. Así si se produce un error al entrar los datos es muy difícil detectarlo y corregirlo. Podéis escribir el contenido de la ROM en un fichero tipo texto (con el bloc de notas, por ejemplo) y recortar y pegar su contenido en la ventana de entrada de datos manual.
Para que los símbolos de las ROM que creéis tengan el mismo tamaño que las que nosotros hemos puesto en el circuito de la unidad de control, tenéis que darles el mismo nombre: ROM_Q+_MUL y ROM_OUT_MUL. Si dais nombres con más caracteres, cuando tengáis que sustituir en el circuito vuestras ROM por las nuestras, no tendréis espacio suficiente y tendréis que mover componentes del circuito, cosa engorrosa. Para poder salvar la ROM tenéis que tener abierta una librería de dispositivos en el escritorio, ya que en el disco donde está LibPrac5 no podéis escribir.
Una vez creadas vuestras dos ROM, eliminad las dos ROM que se encuentran en la unidad de control del multiplicador y colocad las vuestras. Haced reset del sistema y comprobad que el multiplicador funciona correctamente.
Cuando estéis seguros del correcto funcionamiento del multiplicador con terminación temprana, avisad al profesor de laboratorio y pedidle que revise vuestro trabajo y firme en el informe final.
Indicad si realizasteis correctamente el grafo de la pregunta 9 y el contenido de las ROM de la pregunta 10 del informe previo. En caso de que haya algo incorrecto en los grafos o en el contenido de las ROM del informe previo decid el qué es incorrecto y por qué es incorrecto. Copiad aquí el grafo correcto y el contenido de las ROM correctos.
Apellidos y nombre: ................................................................................................................ Grupo: .......
Apellidos y nombre: ................................................................................................................ Grupo: .......
(por orden alfabético)
@A @B
Rb/N
OP F
In/Alu
@D
WrD
N ( Hexa )
b^2 b^1 b^0 b^2 b^1 b^0 b^1 b^0 b^2 b^1 b^0 b^2 b^1 b^0 D
3 D
2 D
1 D
0
ADD R1, R2, R3 // NOT R2, R
SHAI R7, R7, -
ADDI R4, R7, -
OUT R5 // IN R
IN R1 // ADD R2, R3, R
MOVEI R3, 327
SHLI R6, R6, 1
CMPEQ -, R3, R
SUBI -, R2, 1
Mnemotécnico Palabra de control hexadecimal AND R3, R1, R5 (^) 06C ADD R1, R2, R3 // NOT R2, R1 (^) -------------- SHAI R7, R7, - ADDI R4, R7, - OUT R5 // IN R IN R1 // ADD R2, R3, R MOVEI R3, 327 SHLI R6, R6, 1 CMPEQ -, R3, R SUBI -, R2, 1
a) AND R3, R1, R Respuesta: R3 = 0
b) ADD R1, R2, R3 // NOT R2, R Respuesta: -------
c) SHAI R7, R7, -
d) ADDI R4, R7, -
e) OUT R5 // IN R
f) MOVEI R3, 327
g) IN R1 // ADD R2, R3, R
h) SHLI R6, R6, 1
i) CMPEQ -, R3, R
j) SUBI -, R2, 1
a) Ya está resuelto en el enunciado
b) if (R1 != 1) R2 = R2 + R2; else R2 = R2 + 5;
c) for (R2 = 3; R2 <= R5; R2 = R2+1) R7 = R7 + 3;