Usted está aquí: Inicio Ver Cursos Archivados Arquitectura de Ordenadores ejercicios-1 Problemas de Arquitectura de Ordenadores

Problemas de Arquitectura de Ordenadores

Acciones de Documento
  • Vista de contenidos
  • Marcadores (bookmarks)
  • Exportación de LTI
Autor: Abelardo Pardo

 


 

1. La pelota que rebota

Una aplicación gráfica tiene que crear la ilusión de que una pelota rebota dentro de una caja rectangular en pantalla. El programa dispone de las siguientes definiciones en su zona de datos:

.data

xPos: .int 0

yPos: .int 0

width: .int 19

height: .int 39

dirX: .int -1

dirY: .int -1

ball: .string "0"

noball: .string " "

moves: .int 10

El rectángulo en el que se mueve la pelota se manipula mediante dos coordenadas y el origen, con valor (0, 0) está situado en la esquina superior izquierda. Las variables xPos y yPos almacenan las coordenadas del punto en el que se encuentra la pelota. Las variables width y height representan el valor máximo que pueden tomar estas coordenadas. El valor mínimo es cero. Las variables dirX y dirY sólo pueden tener el valor 1 o -1 y almacenan el incremento en coordenadas que hay que aplicar a la pelota para simular su movimiento.

El programa principal encargado de crear el movimiento ejecuta en un bucle infinito una secuencia de pasos en la que primero borra la pelota, luego actualiza su posición, la dibuja de nuevo, y finalmente ejecuta un bucle vacío para retrasar al procesador y que así la animación no vaya demasidado rápido.

Se pide escribir la porción de código que actualiza la posición de la pelota.

2. Tabla de strings

La directiva del ensamblador .space nos permite reservar un espacio en memoria de cierto tamaño y a ser inicializado con cierto valor. La sintaxis de esta directiva es:

.space <tamaño>, <relleno>

donde el campo <tamaño> especifica el tamaño en bytes a reservar, y el campo <relleno> especifica el valor con el que el ensamblador ha de inicializar el espacio.

Crear un fichero args.s en cuyo segmento de datos se incluyan las definiciones de los siguientes strings con las siguientes etiquetas:

m1:     .asciz "Mensaje 1\n";

m2: .asciz "Mensaje 2\n";

m3: .asciz "Mensaje 3\n";

m4: .asciz "Mensaje 5\n";

A continuación definir en el segmento de datos una porción de memoria inicializada toda a ceros del tamaño suficiente para almacenar las direcciones de los cuatro mensajes anteriores pero en orden (m2, m1, m4, m3). Nótese que se tiene que almacenar las direcciones y no los mensaje propiamente dichos.

Se pide:Escribir el programa args.s que dados estos cuatro mensajes realice las siguientes operaciones:

  • Colocar en el espacio en memoria reservado con la directiva .space las direcciones de los cuatro strings por ese orden. Utilizar para ello el modo base + desplazamiento.

  • Imprimir los cuatro mensajes uno tras otro pero accediendo a sus direcciones en el array recién creado utilizando el modo de direccionamiento base + desplazamiento. La solución en la que se accede a la dirección de los strings utilizando los valores de las etiquetas $m1, $m2, $m3 y $m4 no será válida.

El programa debe producir la siguiente salida:

Mensaje 2

Mensaje 1

Mensaje 4

Mensaje 3

shell$

3. Intercalar los elementos de un array

Se dispone de un programa ensamblador con las siguientes definiciones en su segmento de datos:

.data

array1: .int 10, 30, 50, 70

array2: .int 20, 40, 60, 80

array3: .space 32, 0

msg: .string "array3[%d]=%d\n"

Se pide:Escribir el programa eileave.s que dadas las definiciones de datos descritas anteriormente traslade el contenido de los elementos de array1 y array2 a la tabla array3 pero de manera intercalada.

Es decir, el contenido final de la tabla array3 debe ser:

10, 20, 30, 40, 50, 60, 70, 80

Finalmente se debe imprimir el contenido de los 8 elementos de array3 por pantalla utilizando el string de formato definido.

El programa se debe escribir de acuerdo con las siguientes restricciones:

  • Los elementos de array1y array2 se deben acceder utilizando el modo de direccionamiento base + índice escalado (cuya sintaxis es idéntica a la de base + índice escalado + desplazamiento sólo que carece de este último).

  • Los elementos en array3 se deben almacenar y leer (para ser impresos) utilizando el modo de direccionamiento índice escalado + desplazamiento.

Sugerencia:Este código contiene dos bloques de instrucciones que se repiten varias veces. Si se diseñan correctamente estos bloques, la solución consiste en replicar estos bloques.

Reutilizar Curso
Descargar este curso