EC. Preguntas Tipo Test de Teoría + Prácticas.

Autor: Jose Juan Urrutia Milán 'JJ'.
Autor: Lucas Hidalgo Herrera.
Autor: Roberto González Lugo.
Autor: Elías Monge Sánchez.
Autor: Jesús Muñoz Velasco.
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.
  • Descripción: Este documento tiene como objetivo servir para estudiar la asignatura de Estructura de Computadores. En él, se pueden encontrar una gran variedad de preguntas de EC de los últimos años.

Es importante destacar que hay preguntas de todos los temas de la asignatura. Además, algunas preguntas podrán ser sobre IA32, que actualmente ya no entra prácticamente en la asignatura. Por último, puede ser que haya preguntas repetidas. En tal caso, se ruega nos lo comuniquen.

Las preguntas se encuentran en esta web.

Las explicaciones de cada pregunta se pueden encontrar en el archivo Markdown correspondiente, que se encuentra pinchando aquí.


  1. Respecto a direccionamiento a memoria en ensamblador x86-64, de la forma D(Rb, Ri, S), sólo una de las siguientes afirmaciones es FALSA. ¿Cuál?

  2. La extensión de signo a m bits de un número original N de n bits, con m > n, consiste en:

  3. En x86-64, ¿cuál de los siguientes fragmentos de programa tiene un efecto sobre los flags distinto al resto?

  4. Si %rsp vale 0xdeadbeefdeadd0d0, ¿cuál será su nuevo valor después de que se ejecute pushq %rbx?

  5. ¿Cómo se devuelve en ensamblador x86-64 Linux gcc el valor de retorno de una función long int al terminar esta?

  6. Comparando las convenciones de llamada de gcc Linux IA32 con x86-64 respecto a registros (IA32 ya no entra).

  7. Son funciones de la unidad de control:

  8. Respecto a MBR y MAR

  9. Una instrucción máquina puede desglosarse en las siguientes operaciones elementales:
    sp := sp-1; m[sp] := pc; pc:= x
    Probablemente se trate de una instrucción de:

  10. En una unidad de control microprogramada con formato de microinstrucciones vertical, un subcampo que debe especificar 16 señales de control codificadas de tal forma que pueda activarse sólo una o ninguna harbá de tener una anchura mínima de:

  11. Dado un camino de datos concreto, un posible formato de microprogramación se caracteriza como horizontal o vertical según tenga más o menos (señalar la respuesta falsa)

  12. El control residual se utiliza para:

  13. Un procesador está segmentado en las etapas F, D, E, M y W. Cada una de ellas consume un tiempo t. La aceleración ideal (si no hay riesgos) al ejecutar n instrucciones respecto a un procesador no segmentado será:

  14. En un procesador con segmentación de cauce, aumentar el número de etapas (p.ej. de 2 a 4, o de 4 a 8), tiene en general como consecuencia:

  15. En la secuencia de instrucciones siguiente, siendo el primer registro el destino, ¿cuántos riesgos se dan?
    sub r2,r1,r3
    or r8,r6,r2

  16. La precaptación (cola de instrucciones) está relacionada con...

  17. Respecto a la segmentación, ¿cuál de las siguientes afirmaciones es falsa?

  18. ¿Cuál de los siguientes modos de direccionamento es menos preferible para un procesador de 32 bits y con tamaño de instrucción de 32 bits?

  19. La conexión entre un dispositivo de E/S y el procesador mediante bus:

  20. El fragmento de código ensamblador de un microprocesador de 8 bits:
    lds IOBuf ; Apuntar puntero pila a ...área mem.intermedia
    ldx Count ; Inicializar x-contador
    poll lda a Status; Leer estado en A
    bpl poll ; Signo (A) != 1 => repetir
    lda a Data ; Leer dato en A
    psh a ; transferir dato a pila
    dex ; decrementar contador x
    bne poll ; Seguir leyendo si x!=0

    Corresponde a:

  21. En la E/S controlada por interrupciones:

  22. La instrucción máquina DI (Disable Interrupts), conocida como CLI (Clear Interrupt Flag) en x86, se utiliza para desactivar:

  23. Con nueve controladores de interrupciones 8259 se pueden manejar exactamente:

  24. ¿Cuál de los siguientes es un registro de un controlador de DMA?

  25. Respecto al refresco de memorias DRAM, ¿cuál de las siguientes afirmaciones es falsa?

  26. La tasa de aciertos \(A_i\) del nivel i de una jerarquía de memoria no depende de:

  27. La política de correspondencia de una memoria cache con 1 único conjunto es:

  28. La política de correspondencia de una memoria cache con la mitad de conjuntos que líneas es:

  29. Para construir una DRAM de 4GB con pastillas de 512Mx4bit hacen falta

  30. Para diseñar una memoria con ancho de palabra \(k\times m\) (y mismo no palabras que los módulos) a partir de módulos con ancho de palabra \(m\), se utilizan k módulos

  31. ¿Cuál de las siguientes afirmaciones sobre el benchmark SPEC CPU es falsa?

  32. ¿En qué generación, dentro de la historia de los computadores digitales, aparecieron la microprogramación, la segmentación de cauce, la memoria cache, los S.O. multiusuario y la memoria virtual?

  33. Respecto a tamaños de tipos integrales en x86 y x86-64, la excepción es que:

  34. Con el repertorio x86-64, para sumar %eax y %ebx dejando el resultado en %ecx se podría hacer lo siguiente:

  35. Cuál de las instrucciones máquina siguientes es incorrecta en x86-64:

  36. Si la variable val está almacenada en ebx y la variable x está almacenada en eax, la sentencia val ^= x; se puede traducir a ensamblador como:

  37. Para poner a 1 el bit 5 del registro %edx sin cambiar el resto de bits podemos usar la instrucción máquina:

  38. Si tenemos un número n, de 64 bits, almacenado en la pareja de registros EDX:EAX (EDX contiene los 32 bits más significativos y EAX los 32 bits menos significativos) y queremos realizar la división \(n/2^{32}\) entonces:

  39. ¿Dónde está ubicado el séptimo argumento a una función (suponer código ensamblador generado por gcc para x86-64) inmediatamente después de ejecutar la instrucción call?

  40. Dado el código C siguiente:
    struct data {
    char str[16];
    };
    char f(struct data ptr) {
    return &(ptr->str[2]);
    }

    La función se traducirá a ensamblador de x86-64 como:

  41. Respecto a requisitos de alineamiento de structs en gcc/IA32 x86 y x86-64, alguna de las siguientes afirmaciones es falsa:

  42. Si la estructura struct a ocupa un espacio de 28 bytes en memoria, ¿cuántos bytes ocupa la siguiente estructura struct b cuando se compila en 64 bits?
    struct b {
    struct a a1;
    int i;
    struct a a2;
    };

  43. Respecto a los términos microinstrucción y microcódigo:

  44. ¿Cuál de las siguientes afirmaciones es verdadera?

  45. Un procesador con una unidad de control microprogramada tiene una memoria de control de 300 palabras de 100 bits, de las que 200 son diferentes. Si se rediseñara como unidad de control nanoprogramada, ¿qué tamaño ocuparía la nanomemoria que contiene las microinstrucciones completas sin repeticiones?

  46. En el pseudocódigo usado para representar las microinstrucciones, la expresión goto f(IR):

  47. Respecto a la predicción de saltos, alguna de las siguientes afirmaciones es falsa:

  48. Respecto a los conceptos de procesamiento segmentado y superescalar, una de las siguientes afirmaciones es falsa:

  49. Respecto a los conceptos de interfaz de dispositivo, controlador(a), puerto de E/S:

  50. Respecto a los conceptos de procesador de E/S, canal de E/S, dispositivos de E/S:

  51. La E/S programada:

  52. Una puerta AND con 16 entradas conectada a un bus de direcciones de 16 bits, con todos los bits negados excepto A10 y A6, permite seleccionar un dispositivo (con CS activa en alta) en la dirección:

  53. Un computador con 15 líneas de direcciones tiene 3 módulos de memoria de \(2^{13}\) palabras y utiliza E/S mapeada en memoria. ¿Cuál es el número máximo de periféricos que pueden conectarse, si cada uno de ellos utiliza 8 direcciones?

  54. Un procesador accede en el instante de tiempo t a una posición de memoria d(t). Poco tiempo después (en el instante de tiempo t+k) accede a la posición anterior d(t)-1. Esos dos accesos son un ejemplo de:

  55. Una jerarquía de memoria consta de una cache de con una tasa de aciertos del 92% y 4 ns de tiempo de acceso y una memoria principal con una tasa de aciertos del 100% y 100 ns de tiempo de acceso. ¿Cuál es el tiempo promedio estimado de acceso a memoria?

  56. Una SRAM de 1Mx4bit (4Mbit) puede venir organizada en 2048 filas, dedicando por tanto al decodificador de columnas:

  57. Un sistema basado en un microprocesador con un bus de datos de n bits y un bus de direcciones de 16 bits direcciona la memoria por palabras de n bits y dispone de una memoria SRAM formada por dos módulos de 16 K x n cada uno. ¿Qué porcentaje del mapa de memoria está ocupado por la SRAM?

  58. Un módulo de memoria de 16 GB está formado por varios chips DRAM de 1024Mx4. ¿Cuántos chips DRAM necesita el módulo?

  59. Una cache de 256 B asociativa por conjuntos de 4-vías con líneas de 16 B tendría:

  60. En un sistema con memoria de bytes, ¿cuál sería el tamaño de una línea de cache, si la cache del procesador fuera de 4MB, asociativa por conjuntos de 16-vías, y contuviera 4096 conjuntos?

  61. El conjunto de todos los atributos de un sistema que son visibles para el programador y son necesarios para programar en lenguaje máquina se denomina:

  62. ¿Cuál de las siguientes afirmaciones es cierta?

  63. En una máquina little-endian con memoria de bytes y representación en complemento a dos que permite accesos a memoria de tamaño byte (1 B), media palabra (2 B) y palabra (4 B), se almacenan a partir de la posición 0xCAFEBAB0 cuatro palabras con valores -1, -2, -3, -4. ¿Qué se obtendría al consultar la media palabra de la posición 0xCAFEBABE?

  64. Se pretende almacenar una palabra de 4 B en una memoria de bytes a partir de una dirección determinada. ¿Cuál de las siguientes es válida, si la palabra debe quedar alineada?

  65. En una arquitectura de acumulador, la instrucción LOAD X:

  66. Una instrucción máquina del tipo Add M,R podría formar parte del repertorio de:

  67. ¿Cuál de los siguientes no es un modo de direccionamiento IA-32?

  68. Un bus se compone de:

  69. ¿Cuál de los siguientes no es un tipo de bus?

  70. Si en un bus de direcciones de 32 bits se decodifica parcialmente la dirección de un dispositivo de 32 posiciones usando 22 bits, ¿cuántas veces aparecerá repetido en el mapa de memoria?

  71. Para obtener una única velocidad comparativa final, el benchmark SPEC CPU combina las velocidades de ejecución de una serie de tests, respecto a un ordenador de referencia, usando la media:

  72. El primer computador electrónico basaba su funcionamiento en:

  73. En Linux IA-32, si gcc usa la instrucción leave se puede asegurar que en ese punto del programa:

  74. Usando el repertorio IA-32, para intercambiar el valor de 2 variables (por ejemplo A: .int 1 y B: .int 2) se pueden usar:

  75. Respecto a registros base e índice en IA-32, la excepción es que:

  76. El registro SP / ESP / RSP:

  77. Diferencias gcc Linux IA-32/x86-64: marcar la respuesta falsa:

  78. ¿Cuál de los siguientes fragmentos de código deja en %eax un resultado distinto a los otros tres fragmentos?

  79. Si A y B son dos enteros almacenados respectivamente en %eax y %ebx, ¿cuál de las siguientes implementaciones de:
    if(!A && !B){... then part ...} es incorrecta?

  80. Dada la siguiente declaración en lenguaje C, una estructura de este tipo podría ocupar en un sistema Linux IA-32 o bien en uno x86- 64 un total de:
    struct a {
    int i;
    double d;
    char c;
    short s;
    };

  81. En un sistema Linux x86-64, ¿cuál de las siguientes expresiones es equivalente a la expresión C (x[2] + 4)[3]? Suponer que previamente se ha declarado int **x.

  82. Una unidad de control microprogramada se denomina "con secuenciamiento de microinstrucciones explícito" según tenga o no tenga:

  83. Motivos que impiden que la ganancia (aceleración) de un cauce segmentado sea ideal (señalar la respuesta falsa):

  84. La técnica de "adelanto de registros" (register forwarding) en un cauce segmentado se usa para limitar el impacto de los riesgos:

  85. Las técnicas principales de E/S son (señalar la respuesta falsa):

  86. Para determinar la causa de una interrupción se pueden usar las siguientes técnicas (señalar la respuesta falsa):

  87. Utilizar una cache en el mismo chip del procesador:

  88. En un sistema Linux IA-32, ¿cuántos enteros se podrían almacenar en una línea de cache, si la cache del procesador fuera de 4 KB, asociativa por conjuntos de 4-vías, y contuviera 4 conjuntos?

  89. La cache con correspondencia directa se puede considerar como un caso límite de la asociativa por conjuntos, en donde:

  90. Si almacenamos según el criterio little-endian la palabra de 32 bits 0xFACEB00C a partir de la dirección 0xCAFEBABE, el byte 0xCE quedará almacenado en la dirección:

  91. ¿Qué novedad se desarrolló en la tercera generación de computadores?

  92. En x86-64, el registro contrador de programa se denomina:

  93. La primera letra (l) de la instruccion lea:

  94. ¿Cuál es la diferencia entre las instrucciones mov y lea?

  95. La instrucción not:

  96. La instrucción JGE / JNL provoca un salto si:

  97. Un overflow nunca puede ocurrir cuando:

  98. Después de ejecutar una instrucción de suma sobre dos números con signo de la que sabemos que no provocará overflow (los dos números son pequeños en valor absoluto), queremos comprobar si el resultado de la suma es menor que 0. ¿Qué flag necesita comprobar la instrucción de salto condicional equivalente a if (resultado<0) then goto label?

  99. La instrucción cmovb %edx, %eax:

  100. ¿Cuál de las siguientes afirmaciones sobre la instrucción leave es cierta?

  101. Para crear espacio en la pila para variables locales sin inicializar suele realizarse la siguiente operación:

  102. ¿Cuál de los siguientes lenguajes no permite el paso de parámetros por referencia?

  103. En la secuencia de programa siguiente:
    804854e:e8 3d 06 00 00 call 8048b90 (main)
    8048553:50 pushl %eax

    ¿Cuál es el valor que introduce en la pila la instrucción call?

  104. En el fragmento de código:
    804854e:e8 3d 06 00 00 call 8048b90 (main)
    8048553:50 pushl %eax

    La instrucción call suma al contador de programa la cantidad:

  105. Es responsabilidad del procedimiento llamado salvaguardar los registros:

  106. Al llamar a una función de 2 argumentos foo(arg1, arg2), ¿cuál es el orden correcto en el que se ejecutan las instrucciones? (suponiendo convención de llamada x86 cdecl, y que foo requiere ajustar marco de pila, esto es, salvar %ebp).

  107. Cuando se ejecuta la instrucción ret al final de una subrutina:

  108. En IA-32 la pila es:

  109. En IA-32 el puntero de pila es:

  110. ¿Cuál de las siguientes afirmaciones NO es cierta? (entender que x86=IA-32)

  111. Alguna de las siguientes NO es una operación básica de la unidad de control:

  112. Un computador tiene una memoria de control de 16000 palabras de 250 bits, de las que 447 son diferentes. ¿Cuántos bits ahorramos usando nanoprogramación en lugar de microprogramación?

  113. Un sistema no segmentado tarda 20 ns en procesar una tarea. La misma tarea puede ser procesada en un cauce (pipeline) de 4 segmentos con un ciclo de reloj de 5 ns. Cuando se procesan muchas tareas, la ganancia máxima de velocidad que se obtiene se aproxima a:

  114. En la técnica de salto retardado:

  115. Al método de interacción con los periféricos, en los que el procesador vigila periódicamente el estado de los dispositivos mediante una encuesta activa se le denomina:

  116. ¿Cuántas señales de control se necesitan como mínimo para implementar un sistema de gestión de interrupciones?

  117. Se dispone de un procesador con una frecuencia de reloj de 1 GHz. Se le conecta un dispositivo que genera 100.000 interrupciones por segundo. La rutina de servicio de interrupción ejecuta 500 instrucciones. El número medio de ciclos por instrucción es 2. ¿Qué porcentaje del tiempo dedica el procesador al dispositivo?

  118. ¿Cuál de las siguientes afirmaciones acerca de las memorias es FALSA?

  119. ¿Cuál de las siguientes afirmaciones acerca de la jerarquía de memoria es FALSA?

  120. En una máquina little-endian con memoria de bytes y representación en complemento a dos que permite accesos a memoria de tamaño byte (1B), media palabra (2B) y palabra (4B), si se almacena en la posición 0xBABC una palabra de valor -2, ¿qué se obtendría al consultar la media palabra en la posición 0xBABE?

  121. Según la clasificación m/n, las máquinas de acumulador son de tipo:

  122. Según la clasificación m/n las máquinas con arquitectura R/R son de tipo:

  123. El bus del sistema es

  124. Un sistema con direcciones de 8 bits utiliza una puerta NAND conectada a las líneas A7...A5 para atacar la entrada CS# (activa baja) de un módulo de memoria. En el mapa de memoria las siguientes posiciones corresponderán a dicho módulo

  125. La ecuación básica de rendimiento calcula

  126. Por x86-64 se entiende la misma arquitectura de repertorio (ISA) que

  127. ¿Qué combinación de flags aritmético- lógicos corresponde al código de condición b (below)?

  128. En los modos de direccionamiento del tipo Desplazamiento(Base,Indice,Factor Escala), puede usarse como

  129. La diferencia entre las instrucciones test y cmp consiste en que

  130. Para traducir una construcción if-then- else de lenguaje C a lenguaje ensamblador, gcc utiliza generalmente

  131. Para traducir una construcción do-while de lenguaje C a lenguaje ensamblador, gcc utiliza generalmente

  132. Alguna de las siguientes señales no sirve de entrada a la unidad de control. ¿Cuál?

  133. Alguna de las siguientes señales no es salida de la unidad de control. ¿Cuál?

  134. Tipos de riesgos que hemos estudiado en cauces segmentados (señalar la opción incorrecta)

  135. ¿Cuál de los siguientes modos de direccionamiento es menos preferible para un procesador con segmentación de cauce?

  136. La ganancia en velocidad ideal de un cauce de K etapas de igual duración T ejecutando un programa de N instrucciones es

  137. Respecto al salto retardado y al salto anulante, ¿cuál permite que se ejecute la siguiente instrucción, y cuál no?

  138. Respecto a las técnicas de direccionamiento por selección lineal, decodificación centralizada y distribuida

  139. Ventajas de la E/S independiente (separada, aislada) (señalar la opción incorrecta)

  140. Tipos de interrupción que suelen contemplar las CPUs comerciales actuales (señalar la opción incorrecta)

  141. Respecto a salvaguardar los registros de la CPU al inicio de una rutina de servicio de interrupción (ISR)

  142. En EC podemos usar la palabra directo para referirnos a... (señalar la opción incorrecta)

  143. Las técnicas write-through y write-back están relacionadas con

  144. En un sistema con direcciones de 32bits, memoria de bytes, cache de 1MB asociativa por conjuntos de 4 vías y líneas de 64B, el campo etiqueta en el formato de dirección cache es de

  145. ¿Por qué se impusieron las arquitecturas de registros de propósito general a las arquitecturas basadas en pila?

  146. ¿Cuál de las siguientes afirmaciones es incorrecta?

  147. ¿Cuál de las siguientes afirmaciones sobre el direccionamiento absoluto es falsa?

  148. ¿Cuál es la diferencia entre los desplazamientos a la derecha lógico y aritmético?

  149. La instrucción seta %al (seta significa set if above):

  150. Los arrays bidimensionales en lenguaje C se almacenan en orden...

  151. ¿Cuál sería el "equivalente x86-64" del "pseudo-código C" rcx = ((int*)rax)[rcx]?

  152. El direccionamiento directo a memoria utiliza

  153. ¿Cuál de las siguientes afirmaciones es falsa?

  154. Respecto a la segmentación:

  155. Respecto a la segmentación, ¿cuál de las siguientes afirmaciones es falsa?

  156. La predicción de saltos está relacionada con...

  157. ¿Cuál de los siguientes modos de direccionamiento es menos preferible para un procesador con segmentación de cauce?

  158. Si se dice que en un sistema computador cada dirección especifica uno o dos puertos de E/S, se refiere a que:

  159. Respecto a si un computador dispone de E/S independiente (separada) o usa E/S mapeada a memoria:

  160. Supongamos dos procesadores con bus de direcciones con idéntico número de líneas. Si uno de ellos emplea E/S mapeada en memoria y el otro E/S independiente, ¿cuál podrá acceder a una mayor cantidad de memoria?

  161. ¿Cuál de las siguientes afirmaciones es incorrecta?

  162. El fragmento de código:
    poll: in a, 0x20
    cmp a, $0
    jnz poll
    load a, 0x11
    out 0x21, a
    corresponde a:

  163. Un procesador con E/S en el mapa de memoria tiene un bus de direcciones de 10 líneas y uno de datos de 8. El mapa de memoria tiene 512 posiciones para instrucciones, 256 para datos y 256 para E/S, en ese orden. Los rangos de direcciones para esas tres zonas serán:

  164. El instrumento GIADA de la sonda espacial ROSETTA (diseñado en Granada) está basado en un microprocesador 8086 y el siguiente mapa de memoria: RAM volátil: 00000 - 0FFFF RAM no volátil: 10000 - 1FFFF ROM: F0000 - FFFFF ¿Cuál es el tamaño total de la memoria?

  165. Una memoria que está estructurada en palabras de 8 bits tiene una capacidad de 64 Kbits. ¿Cuántas líneas de dirección tiene dicha memoria?

  166. ¿Cuál de los siguientes es el ejemplo más acertado de localidad espacial?

  167. ¿Cuál de las siguientes es una idea fundamental de la jerarquía de memoria?

  168. ¿Cuál de las siguientes afirmaciones acerca de las memorias SRAM es falsa?

  169. Se dispone de un circuito integrado que actúa como módulo básico de memoria de 8K × 4. ¿Qué circuitos necesitamos para construir una memoria de 16K × 8?

  170. En la cache L1 de instrucciones, la tasa de fallos:

  171. Supongamos que una memoria cache de tamaño 512B con política LRU está inicialmente vacía. Si para la siguiente secuencia de direcciones enviadas a la cache: 0, 2, 4, 8, 16, 32, la tasa de acierto es 0.33, ¿cuál es entonces el tamaño de bloque de la cache?

  172. Un sistema tiene una cache asociativa por conjuntos de 2-vias con 16 conjuntos y líneas de 64B. ¿A qué conjunto le corresponde el byte con dirección 0xdeadbeef?

  173. ¿Cuál es el tamaño de la etiqueta de caché en un ordenador capaz de direccionar por bytes 1 MB de memoria principal y 32 KB de memoria caché y correspondencia asociativa por conjuntos con 32 bytes por línea y 16 líneas por conjunto?

  174. En el direccionamiento inmediato el operando reside en:

  175. Una instrucción máquina del tipo Add M,R podría formar parte del repertorio de

  176. La traducción a ASM de una función C con prototipo void fun(<tipo> arg1, <tipo> arg2); por parte de gcc empieza con el siguiente texto:
    fun:
    movl (%rdi), %eax
    movl (%rsi), %edx ...
    ¿Cuál es el posible mencionado en el prototipo?

  177. Se puede describir paso a paso la ejecución de la instrucción add (%rbx, %rdx,4), %eax; de la siguiente manera (marcar la opción falsa):

  178. ¿Qué valor contendrá el registro rdx tras ejecutar las dos instrucciones siguientes? movq $-1, %rdx
    movl $1, %edx
  179. En el fragmento de código
    400544:e807000000 callq 400550 f
    400549:488903 mov %rax,(%rbx)

    la instrucción call suma al contador de programa la cantidad:

  180. Una función C declarada como int get_var_digit(size_t index, size_t digit) genera como código ensamblador
    movq var(,%rdi,8), %rax
    movl (%rax,%rsi,4), %eax
    ret

    Se puede adivinar que:

  181. En el contexto de microprogramación, el control residual...

  182. Suponer que un procesador ideal que ejecuta cada instrucción en T segundos se segmenta en cuatro etapas ideales de duración T/4. ¿Cuál razonamiento es correcto?
  183. Un salto condicional del tipo "delayed branch", o salto retardado, ejecuta la(s) instrucción(es) siguiente(s)...
  184. Un computador con 20 líneas de dirección y memoria de bytes tiene 640KB de RAM, 128KB de ROM, y utiliza E/S mapeada en memoria. ¿Cuál es el número máximo de periféricos que pueden conectarse, si cada uno de ellos utiliza 32 direcciones?
  185. La consulta de estado que se puede llevar a cabo en una operación de salida mediante E/S programada sirve para…
  186. ¿Qué conjunto de componentes permite construir una memoria 256Mx32? (sin que sobren componentes)
  187. ¿Cuántas líneas de dirección (patillas) son necesarias para direccionar un chip de memoria DRAM de 256K x 4?
  188. ¿Qué arquitectura es típica en procesadores RISC?
  189. ¿Cuál de las siguientes características es posterior a la segunda generación de computadores?
  190. Si el registro rax contiene x, la sentencia en C x &= 0x1; se traducirá a ensamblador como:
  191. Para crear espacio en la pila para variables locales sin inicializar suele realizarse la siguiente operación

  192. Si la estructura struct a ocupa un espacio de 26 bytes en memoria, ¿cuántos bytes ocupa la siguiente estructura struct b cuando se compila en 64 bits?
    struct b{
    struct a a1;
    int i;
    struct a a2;
    };

  193. En la secuencia de programa siguiente:
    628: e8 cd ff ff ff callq 5fa suma
    62d: 48 83 c4 20 add $0x20, %rsp

    ¿Cuál es el valor que introduce en la pila la instrucción callq?

  194. Un archivo .o que contiene código objeto reubicable:

  195. ¿Cuál de las siguientes sentencias sobre la unidad de control es falsa?

  196. En una unidad de control microprogramada con formato de microinstrucciones vertical, un subcampo que deba especificar 16 señales de control, codificadas de tal forma que pueda activarse sólo una o ninguna señal de control, habrá de tener una anchura mínima de:

  197. La técnica de "adelanto de registros" (register forwarding) en un cauce segmentado se usa para limitar el impacto de los riesgos...

  198. Un sistema no segmentado tarda 10 ns en procesar una tarea. La misma tarea puede ser procesada en un cauce (pipeline) de 4 segmentos con un ciclo de reloj de 4 ns. Cuando se procesan muchas tareas, la ganancia máxima de velocidad que se obtiene se acerca a:

  199. ¿Cuál de las siguientes afirmaciones es cierta?

  200. ¿Cuál de las siguientes afirmaciones sobre la jerarquía de memoria es cierta?

  201. ¿Cuántas líneas de dirección (patillas) son necesarias para direccionar un chip de memoria DRAM de 4096 x 4?

  202. ¿Cuál de las siguientes instrucciones máquina copia en EAX la dirección efectiva resultante de la operación EDX*4 + EBX?

  203. ¿Cuál de las siguientes instrucciones máquina copia en EAX el entero almacenado en la posición de memoria cuya dirección efectiva es el resultado de la operación EDX*4 + EBX?

  204. Los switches –m elf_i386 y –m elf_x86_64 para trabajar en 32 bits / 64 bits corresponden a la herramienta...

  205. Si ECX vale 0, la instrucción adc $0,%ecx

  206. Dada la siguiente definición de datos:
    lista: .int 0x10000000, 0x50000000,
    0x10000000, 0x20000000
    longlista: .int (.-lista)/4
    resultado: .quad 0x123456789ABCDEF
    formato: .ascii "suma=%llu=%llx hex\n\0"

    La instrucción para copiar la dirección de memoria donde comienza lista en el registro EBX es:

  207. Dada la siguiente definición de datos:
    lista: .int 0x10000000, 0x50000000,
    0x10000000, 0x20000000
    longlista: .int (.-lista)/4
    resultado: .quad 0x123456789ABCDEF
    formato: .ascii "suma=%llu=%llx hex\n\0"

    La instrucción movl longlista, %ecx copia el siguiente valor:

  208. Dada la siguiente definición de datos:
    lista: .int 0x10000000, 0x50000000,
    0x10000000, 0x20000000
    longlista: .int (.-lista)/4
    resultado: .quad 0x123456789ABCDEF
    formato: .ascii "suma=%llu=%llx hex\n\0"

    y suponiendo que hemos llamado a una función suma que devuelve un número de 64 bits en la pareja EDX:EAX, las instrucciones que copian ese número en resultado son:

  209. Dada la siguiente definición de datos:
    lista: .int 0x10000000, 0x50000000,
    0x10000000, 0x20000000
    longlista: .int (.-lista)/4
    resultado: .quad 0x123456789ABCDEF
    formato: .ascii "suma=%llu=%llx hex\n\0"

    La llamada correcta a printf será:

  210. En la práctica "media" se pide sumar una lista de enteros con signo de 32 bits en una plataforma de 32 bits sin perder precisión, esto es, evitando overflow. ¿Cuál es el menor valor positivo que repetido en los dos primeros elementos de la lista causaría overflow con 32 bits al realizar la suma de esos dos primeros elementos de la lista? (Entendemos que la lista contiene 4 números, y se va a realizar la suma de la lista 4 veces).

  211. ¿Cuál de las siguientes afirmaciones es cierta respecto al lenguaje C?

  212. ¿Cuál de los siguientes registros tiene que ser salvaguardado (si va a modificarse) dentro de una subrutina según la convención cdecl para IA32?

  213. ¿En qué registro se pasa el primer argumento a una función en Linux gcc x86-64?

  214. La práctica "popcount" debía calcular la suma de bits (peso Hamming) de los elementos de un array. Un estudiante entrega la siguiente versión de popcount3:
    int popconut3 (unsigned* array, int len) {
    int , res = 0;
    unsigned x;
    for ( i=0; i < len; i++ ) {
    x = array[i];
    asm("ini3: \n"
    "shr %[x] \n"
    "adc $0, %[r] \n"
    "add $0, %[x] \n"
    "jne ini3 \n"

    : [r] "+r" (res)
    : [x] "r" (x) );
    }
    return res;
    }

    Esta función produce siempre el resultado correcto, a pesar de que una instrucción máquina en la sección asm() es distinta a la que se esperaba después de haber estudiado pcount_r en teoría. La instrucción distinta también se podría haber cambiado por...

  215. En la práctica de la bomba necesitamos estudiar el código máquina de la bomba del compañero. A veces dicho código no se visualiza directamente en el depurador ddd, y algunas de las técnicas que se pueden probar para conseguir visualizarlo son... (marcar la opción falsa)

  216. En la práctica de la bomba, el primer ejercicio consistía en "saltarse" las "explosiones", para lo cual se puede utilizar...

  217. En la práctica de la bomba, el segundo ejercicio consistía en crear un ejecutable sin "explosiones", para lo cual se puede utilizar...

  218. En la práctica de la bomba, el tercer ejercicio consistía en usar un editor hexadecimal para crear un ejecutable sin "explosiones". Para saber qué contenidos del fichero hay que modificar, se puede utilizar... (marcar la opción falsa)

  219. Suponer una memoria cache con las siguientes propiedades: Tamaño: 512 bytes. Política de reemplazo: LRU. Estado inicial: vacía (todas las líneas inválidas). Suponer que para la siguiente secuencia de direcciones enviadas a la cache: 0, 2, 4, 8, 16, 32, la tasa de acierto es 0,33. ¿Cuál es el tamaño de bloque de la cache?

  220. Abajo se ofrece el listado de una función para multiplicar matrices C = A x B.
    void mult_matr(float A[N][N]
    float B[N][N], float C[N][N]) {
    /*Assume val.ini. C=(0,0...)*/
    int i,j,k;
    for (i=0; i for (j=0; j for (k=0; k C[i][j] += A[i][k]*B[k][j];
    }

    Suponer que:

    • El computador tiene una cache de datos de 8 MB, 16-vías, líneas de 64 bytes.
    • N es grande, una fila o columna no cabe completa en cache.
    • El tamaño de los tipos de datos es como en IA32.
    • El compilador optimiza el acceso a C[i][j] en un registro.
    Aproximadamente, ¿qué tasa de fallos se podría esperar de esta función para valores grandes de N?

  221. Sea un computador de 32 bits con una memoria cache L1 para datos de 32 KB y líneas de 64 bytes asociativa por conjuntos de 2 vías. Dado el siguiente fragmento de código:
    int v[262144];
    for (i=0; i<262144; i+=8)
    v[i]=9;

    ¿Cuál será la tasa de fallos aproximada que se obtiene en la ejecución del bucle anterior?

  222. ¿Qué hace gcc -O0?

  223. ¿Qué modificador (switch) de gcc hace falta para compilar una aplicación de 32 bits en un sistema de 64 bits?

  224. La etiqueta del punto de entrada a un programa ensamblador en el entorno de las prácticas 1 a 4 (GNU/as Linux x86) es:

  225. La siguiente línea en la sección de datos de un programa en ensamblador de IA32
    result: .int 0,0

  226. El volcado mostrado abajo se ha obtenido con el comando...
    00000000 main:
    0: 55 push %ebp
    1: 89 e5 mov %esp, %ebp
    3: 83 e4 f0 and $-16, %esp
    6: 83 ec 10 sub $0x10, %esp
    9: c7 44 24 04 03 movl $3, 4(%esp)
    e: 00 00 00
    11: c7 04 24 01 00 movl $0x1, (%esp)
    16: 00 00
    18: e8 fc ff ff ff call \
    1d: c9 leave
    1e: c3 ret

  227. En la práctica "media" se desea invocar desde lenguaje ensamblador la función printf() de libC. Eso implica que este programa, como todo programa que use libC,

  228. En la práctica "media" se pide sumar una lista de 32 enteros SIN signo de 32 bits en una plataforma de 32 bits sin perder precisión, esto es, evitando perder acarreos. Un estudiante entrega la siguiente versión
    # $lista en EBX, longlista en ECX
    suma:
    mov $0, %eax
    mov $0, %edx
    mov $0, %esi
    bucle:
    add (%ebx, %edx, 4), %eax
    jnc seguir
    inc %edx
    seguir:
    inc %esi
    cmp %esi, %ecx
    jne bucle
    ret

    Esta función presenta una única diferencia frente a la solución recomendada en clase, relativa al indexado en el array. Esta función suma:

  229. En la práctica "media" se pide sumar una lista de 32 enteros SIN signo de 32 bits en una plataforma de 32 bits sin perder precisión, esto es, evitando perder acarreos. De entre los siguientes, ¿cuál es el mínimo valor entero que repetido en toda la lista causaría acarreo con 32 bits (sin signo)? Se usa notación decimal y espacios como separadores de millares/millones/etc.

  230. En la práctica "media" se pide sumar una lista de 32 enteros CON signo de 32 bits en una plataforma de 32 bits sin perder precisión, esto es, evitando desbordamiento. De entre los siguientes, ¿cuál es el valor negativo más pequeño (en valor absoluto) que repetido en toda la lista causaría desbordamiento con 32 bits (en complemento a 2)? Se usa notación decimal y espacios como separadores de millares/millones/etc.

  231. ¿Cuál es el popcount (peso Hamming, número de bits activados) del número 19?

  232. La práctica "popcount" debía calcular la suma de bits (peso Hamming) de los elementos de un array. Un estudiante entrega la siguiente versión de popcount3:

    int popconut3 (unsigned* array, int len) {
    int , res = 0;
    unsigned x;
    for ( i=0; i &lt len; i++ ) {
    x = array[i];
    asm("ini3: \n"
    "shr %[x] \n"
    "adc $0, %[r] \n"
    "add $0, %[x] \n"
    "jne ini3 \n"

    : [r] "+r" (res)
    : [x] "r" (x) );
    }
    return res;
    }

    Esta función solo tiene una diferencia con la versión "oficial" recomendada en clase. En concreto, una instrucción máquina en la sección asm() es distinta. Esta función popcount3:

  233. La práctica "popcount" debía calcular la suma de bits (peso Hamming) de los elementos de un array. Un estudiante entrega la siguiente versión de popcount3:

    int popconut3 (unsigned* array, int len) {
    long val = 0;
    int , res = 0;
    unsigned x;
    for ( i=0; i &lt len; i++ ) {
    x = array[i];

    do {
    val = x & 0x1;
    x >>= 1;
    } while (x);
    val += (val >> 16);
    val += (val >> 8);
    }

    return val & 0xFF;
    }

    Esta función es una mezcla inexplicada de las versiones "oficiales" de popcount2 y popcount4, incluyendo diferencias en 2 tipos de datos, la ausencia de la variable res y la diferente posición de la máscara 0xFF.
    Esta función popcount3:

  234. La práctica "popcount" debía calcular la suma de bits (peso Hamming) de los elementos de un array. Un estudiante entrega la siguiente versión de popcount4:

    int popconut3 (unsigned* array, int len) {
    int , res = 0;
    unsigned x;
    for ( i=0; i &lt len; i++ ) {
    x = array[i];
    asm("ini3: \n"
    "shr %[x] \n"
    "adc $0, %[r] \n"
    "add $0, %[x] \n"
    "jne ini3 \n"

    : [r] "+r" (res)
    : [x] "r" (x) );
    }
    return res;
    }

    Esta función presenta varias diferencias con la versión "oficial" recomendada en clase, incluyendo la ausencia de una variable auxiliar val y la diferente posición de los desplazamientos >> y máscara 0xFF. Esta función popcount4:

  235. La práctica "parity" debía calcular la suma de paridades impar (XOR de todos los bits) de los elementos de un array. Un estudiante entrega la siguiente versión de parity5:
    int parity5 (unsigned * array, int len) {
    int i, j, result=0;
    unsigned x;
    for (i=0; i < len; i++) {
    x ^= x >> j;
    result += x & 0x1;
    }
    return result;
    }

    Esta función solo se diferencia de la versión "oficial" recomendada en clase, en las condiciones del bucle for interno. Esta función parity5:

  236. La función gettimeofday() en la práctica de la "bomba digital" se utiliza para

  237. Un fragmento de una "bomba" desensamblada es:
    0x0804873f: call 0x8048504 <scanf>
    0x08048744: mov 0x24 (%esp), %edx
    0x08048748: mov 0x804a044, %eax
    0x0804874d: cmp %eax, %edx
    0x0804874f: je 0x8048756 <main+230>
    0x08048751: call 0x8048604 <boom>
    0x08048756: ...

    La contraseña/clave en este caso es...

  238. Una de las "bombas" utiliza el siguiente bucle para cifrar la cadena con la contraseña introducida por el usuario:
    80485bb: rolb $0x4, (eax)
    80485be: add $0x1, %eax
    80485c1: cmp %edx, %eax
    80485c3: jne 80485bb < encrypt+0x20>

    La intrucción rolb rota el byte destino hacia la izquierda tantos bits como indica el operando fuente. Si inicialmente eax apunta a la cadena del usuario, que se compara con otra cadena \x16\x26\x27\x16\x36\x16\x46\x16\x26\x27\x16, almacenada en el código, la contraseña es:

  239. Una de las "bombas" utiliza el siguiente código para cifrar la clave numérica introducida por el usuario y ahora almacenada en eax:
    804870d: xor $0xfff, %eax
    8048712: mov $0x2, %ecx
    8048717: cltd
    8048718: idiv %ecx
    804871a: cmp %eax, 0x804a034

    Si el entero almacenado a partir de 0x804a034 es 0x7ff, la clave numérica puede ser:

  240. En el programa line.cc de la práctica 5, si para cada tamaño de línea (line) recorremos una única vez el vector, la gráfica resultante es decreciente porque:

  241. ¿Cuál de las siguientes afirmaciones sobre el programa size.cc de la práctica 5 es cierta?

  242. El switch de gcc para que únicamente compile de lenguaje C a ensamblador, y no realice ningún paso adicional (ensamblar, enlazar, etc), es...

  243. Los switches --32 y --64 para trabajar en 32bit/64bit corresponden a la herramienta...

  244. El switch -l para indicar librerías NO funciona con la herramienta...

  245. ¿Cuál de las siguientes no es una sección de un fichero ELF?

  246. ¿Cuál de los siguientes contenidos no está incluido en un fichero ELF ejecutable?

  247. En la práctica media se programa la suma de una lista de 32 enteros de 4 B para producir un resultado de 8 B, primero sin signo y luego con signo. Si la lista se rellena con el valor que se indica a continuación, ¿en qué caso ambos programas producen el mismo resultado?

  248. En la práctica media se programa la suma de una lista de 32 enteros de 4 B para producir un resultado de 8 B, primero sin signo y luego con signo. Si la lista se rellena con el valor 0x0400 0000, ¿en qué se diferencian los resultados de ambos programas?

  249. En la práctica media se suma una lista de 32 enteros de 4 B con signo para producir una media y un resto usando la instrucción IDIV. ¿Cuál de las siguientes afirmaciones es falsa?

  250. En la práctica media un estudiante usa el siguiente bucle para acumular la suma en EBP:EDI antes de calcular la media y el resto:
    bucle:
    mov (%ebx,%esi,4), %eax
    cltd
    add %eax, %edi
    adc %edx, %ebp
    jnc nocarry
    inc %edx
    nocarry:
    inc %esi
    cmp %esi, %ecx
    jne bucle

    Estando bien programado todo lo además, este código:

  251. Alguno de los siguientes no es un nombre de registro en una máquina IA32 en modo 32 bits.

  252. Alguno de los siguientes no es un nombre de registro en una máquina x86-64 en modo 64 bits.

  253. Para comprobar si el entero almacenado en EAX es cero (y posiblemente saltar a continuación usando JZ/JNZ), gcc genera el código:

  254. La práctica paridad debía calcular la suma de paridades impar (XOR de todos los bits) de los elementos de un array. Un estudiante entrega la siguiente versión de parity3:
    int parity3(unsigned array, int len){
    int i, res=0, val;
    unsigned x;
    for(int i=0; i x=array[i];
    val=0;
    do{
    val += x;
    x >>= 1;
    } while (x);
    val &= 0x1;
    res += val;
    }
    return res;
    }

    Esta función
    parity3*:

  255. Un estudiante entrega la sigueinte versión de parity4:
    int parity4(unsigned array, int len){
    int val, i, res=0;
    unsigned x;
    for(int i=0; i x=array[i];
    val = 0;
    asm("\n")
    "ini3: \n\t"
    "xor %[x], %[v] \n\t"
    "shr %[x] \n\t"
    "test %[x], %[x] \n\t"
    "jne ini3 \n\t"
    :[v] "+r" (val)
    :[x] "r" (x)
    );
    val = val & 0x1;
    res += val;
    }
    return res;
    }

    Esta función
    parity4*:

  256. La sentencia asm() del listado anterior tiene las siguientes restricciones:

  257. Un estudiante entrega la siguiente versión de parity5:
    int parity5(unsigned array, int len){
    int i,j,res=0;
    unsigned x;
    for(i=0; i x=array[i];
    for(j=sizeof(unsigned)
    4; j>0; j=j/2){
    x^=x>>j;
    }
    x = x & 0x1;
    res += x;
    }
    return res;
    }

    Esta función parity5:

  258. Un estudiante entrega la siguiente versión de parity6:
    int parity6(unsigned array, int len){
    int i,j,res = 0;
    unsigned x;
    for(int i = 0; i x=array[i];
    asm("\n"
    "mov %[x], %%edx \n\t"
    "shr $16, %%edx \n\t"
    "xor %%edx, %[x] \n\t"
    "mov %[x], %%edx \n\t"
    "mov %%dh, %%dl \n\t"
    "xor %%edx, %[x] \n\t"
    "setpo %%cl \n\t"
    "movzx %%cl, %[x]"
    :[x] "+r" (x)
    :
    : "edx", "ecx"
    );
    res += x;
    }
    return res;
    }

    Esta función
    parity6*:

  259. La sentencia asm() del listado anterior tiene las siguientes restricciones:

  260. En el programa size de la práctica de la cache, si el primer escalón pasa de tiempo = 1 para todos los tamaños de vector menores o iguales que 32 KB a tiempo = 3 para los tamaños 64 KB y 128 KB, podemos asegurar que:

  261. El código del programa size de la práctica de la cache accede al vector saltando...

  262. 1.La dirección efectiva del primer parámetro de llamada a una función en pila suele calcularse desde el código de la función como:

  263. El comienzo e un procedimiento que siga la conveción cdecl es:

  264. Considere una función C declarada así:
    void fun4arg(int a, int b, int c, int d)
    Suponiendo que fun4arg se ha compilado para una máquina x86 IA-32 con enteros de 4 bytes, ¿cuál sería la dirección del argumento b relativa a %ebp, en el marco de la pila de fun4arg?

  265. ¿Cuál de las siguientes afirmaciones sobre las caches es FALSA?

  266. En un sistema Linux x86-64, ¿cuál de las siguientes variables ocupa más bytes en memoria?

  267. En la práctica suma se pide sumar una lista de 32 enteros SIN signo de 32bits en una plataforma de 32bits sin perder precisión, esto es, evitando acarreos. ¿Cuál es el mínimo valor entero que repetido en toda la lista causaría acarreo con 32bits (sin signo)?

  268. En la práctica suma se pide sumar una lista de 32 enteros CON signo de 32bits en una plataforma de 32bits sin perder precisión, esto es, evitando desbordamiento. ¿Cuál es el valor negativo más pequeño (en valor absoluto) que repetido en toda la lista causaría desbordamiento con 32bits (en complemento a 2)?

  269. ¿Qué valor contendrá edx tras ejecutar las siguientes instrucciones?
    xor %eax, %eax
    sub $1, %eax
    cltd
    idiv %eax

  270. La práctica popcount debería calcular la suma de bits de los elementos de un array. Un estudiante entrega lo siguiente:
    int popcount4(unsigned* array, int len){
    int i, j, res = 0;
    for(int i = 0; i < len; ++i){
    unsigned x = array[i];
    int n = 0;
    do{
    n += x & 0x01010101L;
    x >>= 1;
    } while(x);

    for(j = 16; j == 1; j /= 2){
    n^= (n >>= j);
    }
    res += n & 0xff;
    }
    return res;
    }

    Esta función popcount4:

  271. La práctica paridad debía calcular la suma de paridades impar (XOR de todos los bits) de los elementos de un array. Un estudiante entrega la siguiente versión de parity6:
    int parity6(unsigned* array, int len){
    int i, result = 0;
    unsigned x;
    for(int i=0; i x = array[i];
    asm("mov %[x], %%edx \n\t"
    "shr $15, %%edx \n\t"
    "shr $8, %%edx \n\t"
    "xor %%edx, %%edx \n\t"
    "setp %%dl \n\t"
    "movzx %%dl, %[x] \n\t"
    : [x] "+r" (x)
    :
    :
    );
    result += x;
    }
    return result;
    }

    Esta función parity6:

  272. En la práctica paridad se pide calcular la suma de paridades de una lista de enteros sin signo. Suponer que un estudiante entrega la siguiente versión:
    int paridad5(unsigned* array, int len){
    int i, k, result = 0;
    unsigned x;
    for(int i = 0; i < len; i++){
    x = array[i];
    for(k = 16; k == 1; k /= 2)
    x ^= x >> k;
    result += (x & 0x0x1);
    }
    return result;
    }

    Esta función:

  273. Utilizando la sentencia asm, las denominadas restricciones que se indican al final de dicha sentencia, involucran a:

  274. En la resalización de la práctica de la bomba digital, una parte del código máquina es el siguiente:
    0x080486e8 (main+120): call 0x8048524 (strncmp)
    0x080486ed (main+125): test %eax, %eax
    0x080486ef (main+127): je 0x80486f6 (main+134)
    0x080486f1 (main+129): call 0x8048604 (boom)

    ¿Cuál de los siguientes comandos cambiaría el salto condicional por un salto incondicional?

  275. En una bomba como las estudiadas en prácticas, del tipo...
    0x0804873f (main+207): call 0x8048504 (scanf)
    0x08048744 (main+212): mov 0x24(%esp), %edx
    0x08048748 (main+216): mov 0x804a044, %eax
    0x0804874d (main+221): cmp %eax, %edx
    0x0804874f (main+223): je 0x8048756 (main+230)
    0x08048751 (main+225): call 0x8048604 (boom)
    0x08048756 (main+230): ...

    La contraseña es:

  276. En una bomba como las estudiadas en prácticas, del tipo...
    0x080486e8 (main+120): call 0x8048524 (strcmp)
    0x080486ed (main+125): test %eax, %eax
    0x080486ef (main+127): je 0x80486f6 (main+134)
    0x080486f1 (main+129): call 0x8048604 (boom)
    0x080486f6 (main+134): ...

    La contraseña es:

  277. El servidor de SWAD tiene dos procesadores Xeon E5540 con 4 núcleos cada uno. Cada procesador tiene 4 caches L1 de instrucciones de 32 KB, 4 caches L1 de datos de 32 KB, 4 caches unificadas L2 de 256 KB y una cache unificada L3 de 8MB. Suponga que un proceso swad, que se ejecuta en un núcleo, tiene que ordenar un vector de estudiantes accediendo repetidamente a sus elementos. Cada elemento es una estructura de datos de un estudiante y tiene un tamaño de 4KB. Si representamos en una gráfica las prestaciones en función del número de estudiantes a ordenar, ¿para qué límites teóricos en el número de estudiantes se observarán saltos en las prestaciones debidos a accesos a la jerarquía de memoria?

  278. En la práctica de la cache, el código de line.cc incluye la sentencia: for(unsigned line=1; line<=MAXLINE; line<<=1){...}. ¿Qué objetivo tiene la expresión line<<=1?

  279. Sea un computador de 32 bits con una memoria caché L1 para datos de 32 KB y líneas de 64 bytes asociativa por conjuntos de 2 vías. Dado el siguiente fragmento de código: int v[262144];
    for(int i = 0; i < 262144; i+=2)
    v[i]=9;
    ¿Cuál será la tasa de fallos aproximada que se obtiene en la primera ejecución del bucle anterior?

  280. Con los mismos supuestos, imaginar que se modifica la última sentencia (el cuerpo anidado) por esta otra: C[i][j] += A[i][k] * B[j][k]; de manera que se calcule C = A x Bt (A por traspuesta de B). Aproximadamente, ¿qué tasa de fallos se podría esperar de esta nueva función para valores grandes de N?

  281. En contraposición a un ejecutable Linux ELF, un fichero objeto (obtenido con gcc -c):

  282. Tras ejecutar las tres instrucciones que se muestran desensambladas a continuación, el registro EAX toma el valor: 08048074 (_start):
    08048074: be 74 80 04 08 mov $_start, %esi
    08048079: 46 inc %esi
    0804807a: 8b 06 mov (%esi), %eax

  283. Si %edx contiene 0xf000 y %ecx contiene 0x0100, el direccionamiento 0x80(%ecx,%edx,2) se refiere a la posición:

  284. ¿Cuál de las siguientes secuencias de instrucciones multiplica %eaxpor 10?

  285. ¿Cuál de las siguientes secuencias de instrucciones calcula a=b-a, suponiendo que %eax es a y %ebx es b?

  286. Para desplazar %eax a la derecha un número variable de posiciones 32, indicado en %ebx, se puede hacer:

  287. Indicar cuál es la dirección de salto (en qué dirección se empiza la subrutina (main) para esta instrucción call): 0804854e: e8 3d 06 00 00 call (main)
    08048553: 50 pushl %eax

  288. El ajuste de marco de pila que gcc (Linux/IA-32) prepara para todas las funciones consiste en las instrucciones:

  289. Al traducir de lenguaje C a ensamblador, gcc en máquinas Linux/IA-32 almacena (reserva espacio para) una variable var local a una función fun en una dirección de memoria referenciable (en lenguaje ensamblador) como:

  290. En x86-64 se pueden referenciar los registros:

  291. Comparando las convenciones de llamada de gcc Linux IA-32 con x86-64 respecto a registros: (NO ENTRA EN TEMARIO DE EC)

  292. Si declaramos int val[5] = {1,5,2,1,3}; entonces:

  293. Al traducir la sentencia C r->i = val; gcc genera el código ASM mov %edx, 12(%eax). Se deduce que: