Estructura de Computadores. Examen 02.

Autor: Arturo Olivares Martos


  • Asignatura: Estructura de Computadores.
  • Curso Académico: 2023-24.
  • Grado: Doble Grado en Ingeniería Informática y Matemáticas.
  • Grupo: A.
  • Profesor: Ignacio Rojas Ruiz.
  • Fecha: 07-11-2023.
  • Descripción: Examen de Temas 1 y 2 de Teoría, y prácticas 1-3.

Cada persona tenía un examen, por lo que hubo muchas versiones de este examen. De una batería de preguntas del profesor (salía de forma aleatoria); por lo que no hay un único examen, sino muchos. Esta es la segunda versión subida.

Cada respuesta correcta suma 1 punto, y cada respuesta incorrecta resta 0.33 puntos. Las preguntas no respondidas no suman ni restan. La puntuación total es sobre 20.


  1. Dado un vector W de enteros (en %rdx), y un índice j (en %rcx). La expresión *(W+j-4) podría traducirse en una sentencias de ensamblador, del tipo:

  2. Se define struct S1{ int i[3]; char c[3]; double v} p[3]; y union U1{ int i[3]; char c[3]; double v} q[3];. Indica que afirmación es correcta.

  3. Para leer un dato de un array multi-nivel, se requieren acceder a memoria:

  4. Dada la siguiente estructura:
    struct W {int j[2]; char s[8]; short a[4]; long *j;};
    Indique el tamaño total de la estructura.

  5. Dadas las siguientes estructuras:
    struct W2 {char w[16]; char c[2]};
    struct W1 {short i; int c; int
    j; short *d};

    struct W {struct W2 q[2]; struct W1 z};

    Calcule el tamaño necesario para almacenar W:

  6. ¿Cuál será el código de una función cuya definición es int f(int a, int b, int c) y que se implementa así?
    mov %edi , %eax
    ret

  7. ¿Qué bandera se activará tras la ejecución de la instrucción cmp?
    xor %rax, %rax
    xor %rbx, %rbx
    inc %rbx
    cmp %rbx, %rax

  8. ¿Qué registros podemos modificar a nuestro antojo en el interior de una función que sigua el protocolo "System V AMD64 ABI", también llamados salva invocante?

  9. ¿Qué código se utilizaría para conseguir que un número entero contenido en el registro %eax se extieenda correctamente a la pareja de registros edx:eax?

  10. ¿Qué se obtiene al intentar observar en memoria un objeto de 8 bytes declarado "resultado .quad 0 x8877665544332211" mediante la orden de gdb: "x /4hx &resultado"? Nota: la dirección de memoria puede variar.

  11. Dado el siguiente fragmento de programa en ensamblador:
    mov $-11,%eax
    sar $0x83,%eax
    and $0xFF,%eax

    ¿Cuál es el valor del registro RAX al finalizar la última instrucción?

  12. ¿Qué función codifica el siguiente fragmento de código?
    0: cmp %esi , %edi
    2: setne %al
    5: retq

  13. ¿Qué contendrá el tope de la pila durante la ejecución de la función f() en el siguiente programa?
    401020 <_start >:
    401020: e8 08 00 00 00 callq 40102 d f
    401025: 48 31 ff
    xor %rdi , %rdi
    401028: e8 e3 ff ff ff
    callq 401010 exit@plt
    40102 d f :
    40102 d: eb fe
    jmp 40102d f
    40102 f: c3
    retq

  14. Dado el siguiente fragmento de programa en ensamblador:
    xor %rcx, %rcx
    sub $58, %rcx
    mov $0x1, %ebx
    rcr %cl,%rbx

    ¿Cuál es el valor del registro RBX al finalizar la última instrucción?

  15. Dado el siguiente fragmento de programa en ensamblador:
    mov $-18,%eax
    sar $0x46,%eax
    and $0xFF,%eax

    ¿Cuál es el valor del registro RAX al finalizar la última instrucción?

  16. Dado el siguiente fragmento de programa en ensamblador:
    mov $0, %rbx
    mov %rbx, %rax
    sub $1, %rax
    rcr $6,%rbx

    ¿Cuál es el valor del registro RBX al finalizar la última instrucción?

  17. ¿Cuanto vale rax tras ejecutar el programa dentro de gdb mediante las órdenes que aparecen como comentarios?
    . text # break bucle
    _start : . globl _start # run
    xor %rax , %rax # continue
    bucle : inc %rax # continue
    jmp bucle # print $rax

  18. Dado el siguiente fragmento de programa en ensamblador:
    mov $-14,%eax
    sar $0x3,%eax
    and $0xFF,%eax

    ¿Cuál es el valor del registro RAX al finalizar la última instrucción?

  19. Dado el siguiente fragmento de programa en ensamblador:
    mov $-14,%eax
    sar $0x3,%eax
    and $0xFF000000,%eax

    ¿Cuál es el valor del registro RAX al finalizar la última instrucción?

  20. ¿A qué función puede corresponder el siguiente código ensamblador?
    cmp %esi , %edi
    mov %esi , %eax
    cmovge %edi , %eax
    ret