Está en la página 1de 7

Escuela de Ingeniería Electrónica y de Telecomunicaciones

Curso de Arquitectura de Computadoras


Año: 2021-01 Grupo: IET4-1 Fecha:30/04/2021
Profesora: Angela M. Rendón García

Laboratorio N°2
Apellidos y Nombres:

Nota:

Aritmética de enteros

La suma y la resta se realizan en números de 32 bits contenidos en los registros de


propósito general (32 bits cada uno).

El resultado es un número de 32 bits en sí. Se incluyen dos tipos de instrucciones en el


conjunto de instrucciones para sumar y restar números enteros:

▪ Instrucciones para aritmética con signo: los números de 32 bits se consideran


representados en el complemento de 2. La ejecución de la instrucción (suma o
resta) puede generar un desbordamiento.
▪ Instrucciones para aritmética sin signo: se considera que los números de 32 bits
están en representación binaria estándar. La ejecución de la instrucción nunca
generará un error de desbordamiento, incluso si hay un desbordamiento real (el
resultado no puede representarse con 32 bits).

La multiplicación y la división pueden generar resultados mayores de 32 bits. La


arquitectura proporciona dos registros especiales de 32 bits que son el destino de las
instrucciones de multiplicación y división. Estos registros se denominan hi y lo para
indicar que contienen los 32 bits más altos del resultado y los 32 bits más bajos
respectivamente. También se proporcionan instrucciones especiales para mover datos de
estos registros a los de propósito general ($ 0 a $ 31).

Instrucció
Efecto
n

mfhi Rdest Rdest ← hi

mflo Rdest Rdest ← lo

mthi Rsrc hi ← Rsrc

mtlo Rsrc lo ← Rsrc

Se incluyen dos tipos de instrucciones en el conjunto de instrucciones para hacer la


multiplicación y división de enteros:

▪ Instrucciones para aritmética con signo: los números de 32 bits se consideran


representados en el complemento de 2. Una multiplicación entera nunca
generará un desbordamiento. La división puede desbordarse. Tenga en cuenta
sin embargo que la instrucción no indicará el desbordamiento: esto debe hacerse
en software.

1
Escuela de Ingeniería Electrónica y de Telecomunicaciones
Curso de Arquitectura de Computadoras
Año: 2021-01 Grupo: IET4-1 Fecha:30/04/2021
Profesora: Angela M. Rendón García

▪ Instrucciones para aritmética sin signo: se considera que los números de 32 bits
están en representación binaria estándar. La ejecución de la instrucción nunca
generará un error de desbordamiento, incluso si hay un desbordamiento real
(este es el caso de la división).
1. Un número negativo se representa como un patrón de bits cuyo bit más
significativo es 1 (en la representación del complemento de 2). El mismo
patrón de bits, cuando se mira como un entero sin signo, será un gran
número.
Complete la siguiente tabla (suponga una representación de número de 8
bits para simplificar)

Valor si el patrón de bits Valor si el patrón de


Patrón de bits representa un entero con bits representa un
signo entero sin signo

00000000 25 10

01111111 127 127

10000000 0 128

11111111

11100111

11010101

2. ¿En qué casos puede desbordarse la operación? En las columnas "Suma" y


"Resta" de la siguiente tabla, utilice una "Y" para indicar que la operación
puede desbordarse y una "N" para indicar que la operación no puede
desbordarse
Operando_1 Operando_2 Suma Resta¤

Positivo* Positivo Y N

Positivo Negativo# N Y

Negativo Positivo N Y

Negativo Negativo Y N

0 Positivo N N

0 Negativo N Y

Positivo 0 N N

2
Escuela de Ingeniería Electrónica y de Telecomunicaciones
Curso de Arquitectura de Computadoras
Año: 2021-01 Grupo: IET4-1 Fecha:30/04/2021
Profesora: Angela M. Rendón García

Negativo 0 N Y

¤: Operand_2 se resta de Operand_1


*: Estrictamente mayor que 0
# Estrictamente menor que 0
3. Cree el programa lab2.1.asm basado en la siguiente descripción:
▪ En "main" solicita al usuario que ingrese dos enteros. Almacenarlos en $t0 y
$t1
▪ Sume los dos números usando la instrucción nativa con signo; almacenar el
resultado en $t2
▪ Imprime el resultado
Ejecute el programa y complete el siguiente plan de prueba. Siempre que sea posible,
use números que hagan que la suma se desborde. En la columna "Desbordamientos",
utilice una "Y" para indicar que la operación se desborda y una "N" para indicar que no.
En la columna "Comentario", marque con una estrella los casos en los que se informa
un error de desbordamiento.
Nota: elija cuidadosamente los números que ingrese para la prueba. La función del
sistema que lee un número entero del usuario (read_int) truncará un número muy grande
para que quepa en un registro entero (32 bits). Lo que tiene en el registro puede ser algo
que no esperaba (intente, por ejemplo, ingresar un número como 8,589,934,593 y luego
busque en el registro donde almacena el número para ver lo que realmente se ha
almacenado allí).

Operando_1 Operando_2 Resultado Desbordamiento Comentario

+2000000000 +2000000000 0 OF Y overflow

+7123456789 N
-3698521472 -1183430317
1

-9632587413 +1478523694 435870873 N

-9874563211 -1123456789 0 OF Y overflow

4. Cree el programa lab2.2.asm basado en la siguiente descripción:

3
Escuela de Ingeniería Electrónica y de Telecomunicaciones
Curso de Arquitectura de Computadoras
Año: 2021-01 Grupo: IET4-1 Fecha:30/04/2021
Profesora: Angela M. Rendón García

▪ En "main" solicita al usuario que ingrese dos enteros. Almacenarlos en $t0 y


$t1
▪ Resta el segundo número del primero usando la instrucción nativa con signo;
almacenar el resultado en $t2
▪ Imprime el resultado

Ejecute el programa y complete el siguiente plan de prueba. Siempre que sea


posible, use números que hagan que la resta se desborde. En la columna
"Desbordamientos", utilice una "Y" para indicar que la operación se desborda y una
"N" para indicar que no. En la columna "Comentario", marque con una estrella los
casos en los que se informa un error de desbordamiento.
Operando_1 Operando_2 Resultado Desbordamiento Comentario

+ +

+ -

- -

- +

5. Cree el programa lab2.3.asm basado en la siguiente descripción:


▪ En "main" solicita al usuario que ingrese dos enteros. Almacenarlos en $t0 y
$t1
▪ Sume los dos números usando la instrucción nativa sin signo; almacenar el
resultado en $t2
▪ Imprime el resultado

Operando_1 Operando_2 Resultado Desbordamiento Comentario

+ +

+ +

+ +

+ +

4
Escuela de Ingeniería Electrónica y de Telecomunicaciones
Curso de Arquitectura de Computadoras
Año: 2021-01 Grupo: IET4-1 Fecha:30/04/2021
Profesora: Angela M. Rendón García

6. Cree el programa lab2.4.asm basado en la siguiente descripción:


▪ En "main" solicita al usuario que ingrese dos enteros. Almacenarlos en $t0 y
$t1
▪ Resta el segundo número del primero usando la instrucción nativa sin signo;
almacenar el resultado en $t2
▪ Imprime el resultado

Operando_1 Operando_2 Resultado Desbordamiento Comentario

+ +

+ +

+ +

+ +

7. ¿Cuáles son los resultados de las siguientes divisiones enteras?

Dividendo Divisor Cociente Resto

22 7

-22 7

22 -7

-22 -7

En MIPS, si uno de los operandos en una división es negativo, entonces el resto no está
especificado. El simulador QTSPIM devolverá un resultado basado en las convenciones
de la máquina en la que se ejecuta.
Para obtener el resultado correcto para la división, se deben realizar pasos adicionales:
▪ Convertir ambos operandos a enteros positivos
▪ Realizar la división
▪ Establecer el resultado en su representación real basada en los signos iniciales
del dividendo y el divisor.

8. Cree el programa lab2.5.asm basado en la siguiente descripción:

5
Escuela de Ingeniería Electrónica y de Telecomunicaciones
Curso de Arquitectura de Computadoras
Año: 2021-01 Grupo: IET4-1 Fecha:30/04/2021
Profesora: Angela M. Rendón García

▪ En "main" solicita al usuario que ingrese dos enteros; almacenarlos en $t0 y


$t1
▪ Multiplique los dos números usando la instrucción con signo nativo
▪ Imprime el resultado

Ejecute el programa y complete el siguiente plan de prueba En las últimas dos filas de la
tabla, ingrese los números que representan el entero con signo más grande posible y el
más pequeño posible respectivamente
Operando_1 Operando_2 Registro hi (hex) Registro lo (hex)

2 1

2 -1

262144=2^18 16384=2^14

9. En la segunda fila de este plan de prueba, el registro hi es todo 1. ¿Por qué?

10. Ejecute el programa nuevamente y complete el siguiente plan de prueba. Use los
mismos números que has usado en el anterior
Resultado Resultado
Operando_1 Operando_2
esperado imprimido

2 1

2 -1

262144=2^18 16384=2^14

11. Algunos de los resultados que imprime su programa no son correctos. ¿Por qué?

6
Escuela de Ingeniería Electrónica y de Telecomunicaciones
Curso de Arquitectura de Computadoras
Año: 2021-01 Grupo: IET4-1 Fecha:30/04/2021
Profesora: Angela M. Rendón García

12. Cree el programa lab2.6.asm basado en la siguiente descripción:


▪ En "main" solicita al usuario que ingrese dos enteros; almacenarlos en $t0 y
$t1
▪ Divide el primer número por el segundo, usando la instrucción nativa con
signo.
▪ Imprime el cociente y el resto
Ejecute el programa y complete el siguiente plan de prueba. Utilice números pequeños
que generarían un resto distinto de cero. Para la última fila use un par de números que
harían que la división se desborde. Tenga en cuenta que la división por cero (que es una
operación ilegal) y el desbordamiento son cosas diferentes. En la columna
"Comentario", marque con una estrella los casos en los que se informa un error.
Cociente Resto Comentario
Operando_1 Operando_2
imprimido imprimido

+ +

+ -

- +

- -

Resalte las celdas, cuyos resultados son incorrectos.

También podría gustarte