Home UC3M
Home IT


Fundamentos de Ordenadores 2

Febrero-Junio 2006

Arq. Ord.

Página de Entrega

Práctica 1: Traducción de ensamblador a lenguaje máquina

Plazo termina: 7 de abril de 2006


Datos de los autores

Un error en el NIA hace que la práctica no se reciba correctamente.

Autor 1
NIA@EMAIL
(9 dígitos + @alumnos.uc3m.es)
Nombre
Apellidos
Autor 2
NIA@EMAIL
(9 dígitos + @alumnos.uc3m.es)
Nombre
Apellidos
Autor 3
NIA@EMAIL
(9 dígitos + @alumnos.uc3m.es)
Nombre
Apellidos
Email de confirmación*
* Se envia a esta dirección una copia de la información recibida por el sistema de entrega. Las direcciones de email deben ser completas. Si se incluye más de una dirección deben ir separadas por comas. Se recomienda guardar este mensaje para posibles reclamaciones.

Traducción de lenguaje ensamblador a lenguaje máquina

Responder a todas las preguntas antes de pulsar el botón de envío al final del formulario.

  1. ¿Cuántos bytes ocupa la traducción a lenguaje máquina de la línea 3?

  2. En la tercera columna de la línea con el número 5 aparece el número 0x61FCFFFF. ¿Cómo se ha obtenido este número?

  3. En la línea 6 se utiliza la orden .space seguida de un número. ¿Qué significa este número? (puedes probar a modificarlo y ver qué efecto tiene en el listado que muestra el compilador).

  4. A la vista del resultado de la traducción de la línea 3, ¿cuál es el código ASCII en hexadecimal que representa el símbolo “=”?

  5. ¿Cuál es la codificación en hexadecimal de la instrucción push %eax?

  6. La instrucción push seguida de un registro se codifica con 8 bits. El procesador dispone de ocho registros con nombres %eax, %ebx, %ecx, %edx, %esi, %edi, %ebp y %esp. Deducir con esta información qué bits del byte que codifica la instrucción son los que más probablemente se utilicen para codificar el registro (se permite modificar el código).

  7. ¿Por qué crees que la codificación de las instrucciones en las líneas 20 y 21, a pesar de ser ambas del tipo push tiene diferente tamaño?

  8. La instrucción add %eax, result se codifica con 6 bytes. El procesador dispone de ocho registros con nombres %eax, %ebx, %ecx, %edx, %esi, %edi, %ebp y %esp. Deducir con esta información qué bits de los seis bytes que codifican la instrucción son los que más probablemente se utilicen para codificar el registro (se permite modificar el código).

  9. La instrucción add $8, %esp se codifica con tres bytes. ¿Cuántos bits se utilizan para codificar la constante que aparece como primer operando de la suma?

  10. Explica qué sucede con la codificación de la instrucción anterior si la constante del primer operando es mayor que 127.

  11. Para definir un string, además de la directiva .asciz que se utiliza en la línea 3, el ensamblador también permite la directiva .ascii. ¿En qué se diferencian?

  12. En la línea 6 se utiliza la directiva .space. Esta directiva permite que en lugar de ir seguida de un número, vaya seguida de dos números separados por comas. ¿Cuál es el efecto del segundo número?

  13. ¿Cuál es la longitud en bytes de la codificación de los datos del programa?

  14. ¿Cuál es la longitud en bytes de la codificación del código del programa?

  15. En las líneas finales del listado se incluye una sección con título DEFINED SYMBOLS. Esta sección consta de cinco líneas que comienzan por el nombre del fichero seguido de dos puntos, seguido de un número, luego aparece la palabra .data o .text, a continuación un número, y termina con un nombre. ¿Qué crees que significa el número que aparece en penúltimo lugar?

  16. La representación en lenguaje máquina de la instrucción mov valor1, %eax debe contener en su interior un conjunto de bits que codifique el símbolo valor1. ¿Qué bits de su codificación se utilizan para esto? (se permite modificar el código y se sugiere consultar la información de la sección DEFINED SYMBOLS al final del listado).

  17. La última sección del listado lleva por título UNDEFINED SYMBOLS. ¿Por qué crees que esta sección incluye el símbolo printf?


Distancia entre dos etiquetas

Fichero distancia.s (entregar tan sólo el fichero de texto con el programa, ni ficheros *.o ni el ejecutable).


Volcado de valores de registros por pantalla

Fichero regdump.s (entregar tan sólo el fichero de texto con el programa, ni ficheros *.o ni el ejecutable).


ASCII en mayúscula o minúscula

Fichero comprobarCaracter.s (entregar tan sólo el fichero de texto con el programa, ni ficheros *.o ni el ejecutable).


© Universidad Carlos III de MadridCreative Commons License
Material bajo licencia Creative Commons .
Última modificación: