Ejercicios con el simulador de la Máquina Sencilla 1. Para cada uno de los casos siguientes, escribe un programa en lenguaje ensamblador de la máquina sencilla que realice la operación indicada, introduce el programa en la máquina sencilla y verifica que funciona correctamente. Caso 1 Escribir un programa que intercambie los contenidos de dos posiciones de memoria (por ejemplo, que intercambie el contenido de la 101 con el de la 102). Caso 2 Escribir un programa que realice la siguiente operación: If ( a = = b) c= a+1; else c= b+1; Supones que en la posición 101 hay un 1, que a está en la 102, que b está en la 103 y que el resultado c debe quedar en la 104. Caso 3 Escribir un programa que realice la siguiente operación: i = 0; while ( i < a) i = i + 1; La sentencia while hace que se ejecute la instrucción i=i+1 mientras se cumple la condición, es decir, mientras i sea menor que a. Asumir que en la posición 101 hay un 0, que en la 102 hay un 1, que a está en la 103 y que el resultado i debe quedar en la posición 104. 2. Supón los contenidos de memoria indicados abajo. Rellena la tabla indicando el contenido de los registros en los ciclos indicados. Después introduce el programa en la màquina sencilla y verifica si tus estimaciones han sido correctas. 0: 1: 2: 3: 4: 5: 6: 101: 102: 103: 104: 105: ADD MOV CMP BEQ CMP BEQ 32 1500 18 9 21 103, 105, 104, 6 101, 0 105 104 102 101 Ciclo ¿Qué valor contiene cada uno de estos elementos en el ciclo indicado? PC IR A B 10 20 30 40 50 3. El factorial de un número, en la máquina sencilla El factorial de un número a es el resultado de la siguiente operación: Factorial de n = 1*2*3*…*(a-1)*a Un algoritmo para calcular el factorial de un número a es el siguiente: Programa factorial Variables a, contador, factorial: entero; a = 10; contador = 1; factorial = 1; While (contador < a) { contador = contador +1; factorial = factorial * contador; } La sentencia While hace que se repitan las sentencias que hay entre las llaves mientras se cumpla la condición de que contador < a. A continuación tenéis un código incompleto en lenguaje máquina de la máquina sencilla. El código calcula el factorial, pero le faltan las instrucciones para realizar el cálculo factorial=factorial*contador El código es: 0: 1: 2: 3: 4: 5: MOV MOV CMP BEQ ADD . . . 102, 104 102, 105 104, 103 7+n 102, 104 . . . . . 5+n: CMP 101, 101 ;contador = 1; ;factorial = 1; ;Mientras contador < a ;Saltar a final ;contador = contador +1; ;factorial = factorial * contador ;supongamos que ocupa n posiciones 6+n: 7+n: . . . 101: 102: 103: 104: 105: BEQ . . . . . . 0 1 valor valor valor 2 . . . . . . . ;Saltar a Mientras ;final de a = 10 de contador de factorial Realiza ahora las tareas siguientes: 1. Completa el código en lenguaje máquina con las instrucciones necesarias para calcular factorial = factorial * contador. Para ello puedes aprovechar el código que hemos visto en clase para multiplicar dos números. El código se reproduce más abajo (aunque seguramente tendrás que retocarlo un poco para integrarlo en el código anterior). 2. Cuando el código esté completo, escribe al lado de cada instrucción el número de veces que el computador ejecutará esa instrucción. 3. Introduce el código obtenido en el simulador de la máquina sencilla. Comprueba que funciona correctamente (verifica que calcula correctamente el factorial de 5 y de 7). 4. Ahora rellena la tabla siguiente, sin la ayuda del simulador. Ciclo ¿Qué valor contiene cada uno de estos elementos en el ciclo indicado? PC IR A B 10 20 30 40 50 5. Comprueba ahora con la ayuda del simulador, que tus estimaciones son correctas. Código para multiplicar el contenido de la posición 104 por el contenido de la posición 105 y dejar el resultado en la posición 106. 0: 1: 2: 3: 4: 5: 6: 7: MOV ADD ADD CMP BEQ CMP BEQ … 101: 102: 0 1 101, 104, 102, 103, 7 101, 1 106 106 103 105 101 103: 0 4. Algunas preguntas sobre arquitectura de computadores Supongamos que aumentamos la memoria de la MS a 1K ¿Cómo afectaria a los siguientes elementos de la máquina sencilla?: -PC -Bus de direcciones -Bus de datos -RI -Longitud de las palabras de la memoria Y si lo que hacemos es aumentar la palabra de la memoria a 32 bits?