Está en la página 1de 10

ARQUITECTURA

DE
COMPUTADORAS
Laboratorio 1
Integrantes
Alejandra Richter

Profesora
Celeste Gabriela Gaugliano

Comisión
Miércoles 20:00hs
Laboratorio 1: Assembler básico.

En todos los casos realizar el diagrama de flujo correspondiente a cada programa y luego
codificarlo. Utilizar el simulador MSX88 para visualizar el funcionamiento de cada programa.

Ejercicio 1: Codifique un programa que sume dos números con las siguientes
características:

a) Los dos números a sumar se encuentran en los registros AX y BX.


b) Uno de los números a sumar se encuentra en un registro, mientras que el otro se
encuentra en memoria.
c) ¿Cómo realizaría la suma de dos números que se encuentran almacenados en la
memoria?
d) ¿Qué ocurre si el resultado de la suma excede el tamaño del registro en el que se
almacena?

Ejercicio 2: Codifique un programa que reste dos números. ¿Qué ocurre si el resultado es
menor a 0?

Ejercicio 3: Codifique un programa que sea capaz de multiplicar dos números teniendo en
cuenta el set de instrucciones del MSX88. Para ello:

a) Dividir la memoria entre el espacio para las variables necesarias y el espacio del
código principal del programa.
b) Modifique el código anterior y realice una subrutina para la multiplicación que sea
llamada desde el programa principal.

Ejercicio 4: Codifique un programa que sea capaz de contar la cantidad de letras “a”
presentes en una cadena de caracteres.
Ejercicio 1: Codifique un programa que sume dos números con las siguientes
características:
a) Los dos números a sumar se encuentran en los registros AX y BX.

Se guarda el valor en los dos registros y al ser sumado se guarda en el registro AX.

Su diagrama de flujo correspondiente:

COMIENZO

CARGAR EN AX 20

CARGAR EN BX 30

SUMAR

20 + 30

INTERRUMPIR

END
b) Uno de los números a sumar se encuentra en un registro, mientras que el otro se
encuentra en memoria.

Uno de los números se encuentra en memoria (variable) y el otro se carga directamente en el registro.
Esa suma se guarda en el registro AX.

Su diagrama de flujo correspondiente:

COMIENZO VARIABLE num1

CARGAR EN AX 10

SUMAR

10 + 100

INTERRUMPIR

END
c) ¿Cómo realizaría la suma de dos números que se encuentran almacenados en la
memoria?

Si ambos números están en la memoria y se carga en un mismo registro. El nuevo número no se sumaría,
si no que se cargaría en el registro. Así, no logrando concretar la suma

Su diagrama de flujo correspondiente:

VARIABLE num1
COMIENZO
VARIABLE num2

CARGAR EN AX num1

SUMAR

AX + num2

INTERRUMPIR

END
Caso contrario sería:

En este caso al cargarlo en diferentes registros, se logra hacer la suma correctamente, perder el valor
anterior. La suma se guardaría en AX.

Su diagrama de flujo correspondiente:

VARIABLE num1
COMIENZO
VARIABLE num2

CARGAR EN AX num1

CARGAR EN BX num2

SUMAR

AX + BX

INTERRUMPIR

END
d) ¿Qué ocurre si el resultado de la suma excede el tamaño del registro en el que se
almacena?

Las sumas que excede el tamaño del registro podría causar comportamientos anómalos en la aplicación,
a la hora de ejecutar el programa.

Ejercicio 2: Codifique un programa que reste dos números. ¿Qué ocurre si el resultado es
menor a 0?

Se guarda las variables en los registros correspondientes y se hace la suma. Guardando el resultado en el
registro AX.
Su diagrama de flujo correspondiente:

VARIABLE num1
COMIENZO
VARIABLE num2

CARGAR EN AX num1

CARGAR EN BX num2

RESTAR

AX - BX

INTERRUMPIR

END
¿Qué ocurre si el resultado es menor a 0?

En este caso al dar el resultado en negativo, el resultado que se guarda en el registro AX, da un numero
que en realidad no sería el que corresponde. En vez de ser negativo da FFF8 (65528).
Como se puede ver a continuación:

Ejercicio 3: Codifique un programa que sea capaz de multiplicar dos números teniendo en
cuenta el set de instrucciones del MSX88. Para ello:

a) Dividir la memoria entre el espacio para las variables necesarias y el espacio del
código principal del programa.
Se generan dos variables. La primera es valor(multiplicando) que es el numero a multiplicar y la segunda
es multiplicador que es cuantas veces se multiplica.
Como bien se demuestra esta separado el programa por 1000h y 2000h.
En este caso se usa Iterar como etiqueta para poder volver a repetir si en CMP no se cumple la condición.
Caso contrario se finalizaría con la etiqueta Fin. Habiendo guardado el valor en el registro CX, para no
pisar el valor que esta en el registro AX.

Su diagrama de flujo correspondiente:

VARIABLE valor

COMIENZO
VARIABLE multiplicando

CARGAR EN AX valor

CARGAR EN BX multiplicando

NO
BX = 0 CX + AX

SI
BX - 1
END

b) Modifique el código anterior y realice una subrutina para la multiplicación que sea
llamada desde el programa principal.
Ejercicio 4: Codifique un programa que sea capaz de contar la cantidad de letras “a”
presentes en una cadena de caracteres.
Ejercicio resuelto en clase. Se cambio el texto y la letra a buscar está en ASCII:

En la consola se muestra lo siguiente:

También podría gustarte