Simulador EGEL Ingeniería Computacional

🖥️ Arquitectura de computadoras y ensamblador

Arquitectura de computadoras y ensamblador

Este tema evalúa resolver ejercicios de organización y arquitectura mediante representación numérica, cálculo y traza de código ensamblador dado en texto. Comienza por los sistemas numéricos: en binario natural (sin signo) con n bits el rango es 0 a 2^n−1; con 8 bits, 0 a 255. Cada dígito hexadecimal equivale a exactamente 4 bits (un nibble) y cada dígito octal a 3 bits, lo que agiliza las conversiones entre bases. Para representar N símbolos distintos se necesitan ⌈log2(N)⌉ bits. En ASCII estándar (7 bits, 128 caracteres): 'A'=65 (0x41), 'a'=97 (0x61), '0'=48 (0x30) y el espacio=32 (0x20).

Complemento a dos: con n bits el rango con signo es de −2^(n−1) a 2^(n−1)−1 (8 bits: −128 a +127; 16 bits: −32,768 a +32,767). El negativo se obtiene invirtiendo todos los bits (complemento a uno) y sumando 1. Hay desbordamiento (overflow) en una suma solo cuando ambos operandos tienen el mismo signo y el resultado sale con signo contrario; nunca al sumar operandos de signos distintos. Un desplazamiento a la izquierda de k bits multiplica por 2^k y uno aritmético a la derecha divide entre 2^k conservando el bit de signo.

Punto flotante IEEE 754: precisión simple (32 bits) = 1 signo + 8 exponente + 23 mantisa, con sesgo 127; precisión doble (64 bits) = 1 + 11 + 52, con sesgo 1023. Un número normalizado vale (−1)^s × 1.f × 2^(E−sesgo), donde el 1 de la mantisa es implícito y E es el exponente almacenado.

Puntos clave de organización y ejecución:

Traza en ensamblador (x86): sigue registros y banderas paso a paso. MOV destino, fuente copia el operando sin modificar EFLAGS; ADD y SUB sí actualizan ZF (cero), SF (signo), CF (acarreo) y OF (desbordamiento). Para la jerarquía de memoria y la caché, y para la segmentación (pipeline) con sus riesgos (hazards), calcula el resultado por concepto antes de trazar cada instrucción.

Practica el banco completo y haz simulacros gratis

Preguntas de muestra (35)

1. En un sistema de representación en complemento a dos con 8 bits, ¿cuál es el rango de valores enteros con signo que se pueden representar?

  1. De −128 a +127
  2. De −127 a +128
  3. De 0 a +255
  4. De −256 a +255

Con n=8 bits en complemento a dos el rango es −2^(n−1) a 2^(n−1)−1, es decir −128 a +127, ya que el cero se cuenta del lado positivo. El rango −127 a +128 invierte incorrectamente esa asimetría. (William Stallings, Organización y Arquitectura de Computadoras, cap. Aritmética del computador (complemento a dos))

2. ¿Qué procedimiento se aplica sobre un número binario en complemento a dos para obtener su valor negativo?

  1. Invertir únicamente el bit de signo
  2. Invertir todos los bits y sumar 1 al resultado
  3. Invertir todos los bits sin sumar nada
  4. Rotar los bits una posición a la izquierda

El negativo en complemento a dos se obtiene invirtiendo todos los bits (complemento a uno) y sumando 1; invertir solo el bit de signo o no sumar el 1 produce un resultado incorrecto. (Patterson & Hennessy, Computer Organization and Design, cap. 2 (representación de números con signo))

3. En complemento a dos de 8 bits, el byte 11110110 representa el valor decimal:

  1. −9
  2. 246
  3. −10
  4. −246

Como el bit más significativo es 1, el número es negativo; invirtiendo los bits (00001001) y sumando 1 se obtiene 00001010 = 10, por lo que el valor es −10. Interpretarlo como binario sin signo da 246, un error común. (Patterson & Hennessy, Computer Organization and Design, cap. 2 (conversión de complemento a dos a decimal))

4. En representación binaria sin signo (natural) de 8 bits, ¿cuál es el rango de valores que se pueden representar?

  1. De 0 a 256
  2. De 1 a 255
  3. De −128 a 127
  4. De 0 a 255

Con n bits sin signo el rango es 0 a 2^n−1; para 8 bits equivale a 0 a 255, pues existen 2^8=256 valores distintos comenzando en cero. (William Stallings, Organización y Arquitectura de Computadoras, cap. Sistemas de numeración)

5. En el formato IEEE 754 de precisión simple (32 bits), ¿cómo se distribuyen los campos y cuál es el sesgo (bias) del exponente?

  1. 1 bit de signo, 8 bits de exponente y 23 bits de mantisa, con sesgo 127
  2. 1 bit de signo, 11 bits de exponente y 20 bits de mantisa, con sesgo 127
  3. 1 bit de signo, 8 bits de exponente y 23 bits de mantisa, con sesgo 1023
  4. 1 bit de signo, 11 bits de exponente y 52 bits de mantisa, con sesgo 1023

El estándar binary32 usa 1+8+23 bits con sesgo 127; la opción con 11 bits de exponente, 52 de mantisa y sesgo 1023 corresponde a la precisión doble (64 bits), una confusión típica entre formatos. (IEEE Std 754-2019, Standard for Floating-Point Arithmetic (binary32))

6. Un número en formato IEEE 754 de precisión simple tiene bit de signo 0, campo de exponente almacenado 10000010 y campo de fracción 01000000000000000000000. ¿Cuál es su valor decimal?

  1. 8.25
  2. 10.0
  3. 1.25
  4. 12.5

El exponente real es 130−127=3 y la mantisa normalizada es 1.01(binario)=1.25; el valor es 1.25×2^3=10.0. Omitir la multiplicación por el exponente da 1.25, un error frecuente. (IEEE Std 754-2019 (valor normalizado (−1)^s × 1.f × 2^(E−sesgo)))

7. Al convertir el número binario 10110110 a su equivalente en hexadecimal agrupando los bits en nibbles de 4 bits, se obtiene:

  1. B5
  2. 6B
  3. B6
  4. D6

Agrupando 1011|0110 se obtiene B (1011=11) y 6 (0110=6), es decir B6; cada dígito hexadecimal equivale exactamente a un nibble de 4 bits. (Andrew S. Tanenbaum, Structured Computer Organization, apéndice A (números binarios))

8. En el código ASCII estándar de 7 bits, ¿cuál es el valor decimal correspondiente al carácter mayúscula 'A'?

  1. 97
  2. 48
  3. 32
  4. 65

El carácter 'A' corresponde al código ASCII 65 (0x41); 97 es 'a' minúscula, 48 es el dígito '0' y 32 es el carácter espacio. (ANSI X3.4-1986 / ISO/IEC 646 (código ASCII))

9. En una CPU que opera con enteros en complemento a dos de 8 bits, se suman los valores 01111111 y 00000001. ¿Qué ocurre con el resultado?

  1. Ocurre desbordamiento, porque ambos operandos son positivos y el resultado aparenta ser negativo
  2. No ocurre desbordamiento, porque los operandos tienen signos distintos y eso lo impide
  3. Un acarreo (carry) hacia afuera corrige de forma automática el signo del resultado
  4. El resultado es correcto y equivale a +128 en complemento a dos de 8 bits

127 (01111111) + 1 (00000001) = 10000000, que en complemento a dos representa −128; como ambos operandos eran positivos y el resultado aparenta ser negativo, ocurre desbordamiento. (Patterson & Hennessy, Computer Organization and Design, cap. 2 (detección de overflow))

10. ¿Cuáles son, en orden, las fases básicas del ciclo de instrucción que ejecuta la unidad de control de la CPU?

  1. Decodificación, búsqueda y ejecución
  2. Búsqueda (fetch), decodificación (decode) y ejecución (execute)
  3. Ejecución, búsqueda y decodificación
  4. Búsqueda, ejecución y decodificación

El ciclo de instrucción consiste en buscar la instrucción en memoria (fetch), decodificarla (decode) y finalmente ejecutarla (execute); alterar este orden invalida el funcionamiento del procesador. (William Stallings, Organización y Arquitectura de Computadoras, cap. El funcionamiento del computador (ciclo de instrucción))

11. ¿Qué información almacena el contador de programa (PC, también llamado IP) dentro de la CPU?

  1. El código de operación de la instrucción actual
  2. El resultado de la última operación aritmética
  3. La dirección de memoria de la siguiente instrucción a ejecutar
  4. La dirección del último dato leído de memoria

El contador de programa (PC/IP) guarda la dirección de la próxima instrucción a buscar en memoria; el código de la instrucción en curso se almacena en el registro de instrucción (IR), no en el PC. (William Stallings, Organización y Arquitectura de Computadoras, cap. El funcionamiento del computador (ciclo de instrucción))

12. ¿Cuál es la diferencia fundamental entre la arquitectura von Neumann y la arquitectura Harvard?

  1. Von Neumann usa memorias separadas para instrucciones y datos, mientras que Harvard las unifica en una sola memoria
  2. Von Neumann solo se usa en microcontroladores, mientras que Harvard solo se usa en computadoras de escritorio
  3. Von Neumann no tiene unidad de control, mientras que Harvard sí la incluye
  4. Von Neumann usa una sola memoria y un mismo bus para instrucciones y datos, mientras que Harvard usa memorias y buses separados para cada uno

En von Neumann, instrucciones y datos comparten una única memoria y bus; en Harvard existen memorias y buses independientes para instrucciones y datos, permitiendo accesos simultáneos. (William Stallings, Organización y Arquitectura de Computadoras, cap. Estructura del computador)

13. Un microcontrolador está diseñado para leer simultáneamente, en el mismo ciclo de reloj, una instrucción desde su memoria de programa y un dato desde su memoria de datos, gracias a que cuenta con buses independientes para cada una. ¿Qué tipo de arquitectura describe mejor este diseño?

  1. Arquitectura Harvard
  2. Arquitectura von Neumann
  3. Arquitectura de pila (stack)
  4. Arquitectura de acumulador único

El acceso simultáneo a instrucciones y datos mediante buses y memorias separadas es la característica distintiva de la arquitectura Harvard, a diferencia de von Neumann donde ambos comparten un único bus. (William Stallings, Organización y Arquitectura de Computadoras, cap. Estructura del computador)

14. ¿Cuáles son los componentes principales que integran la unidad central de procesamiento (CPU) de una computadora?

  1. Memoria caché, memoria RAM y disco duro
  2. Unidad aritmético-lógica (ALU), unidad de control, registros y buses internos
  3. Tarjeta madre, fuente de poder y ventilador
  4. Sistema operativo, compilador y ensamblador

La CPU se compone esencialmente de la ALU, la unidad de control, un conjunto de registros y los buses internos que los interconectan; la memoria RAM y el disco son dispositivos externos a la CPU. (William Stallings, Organización y Arquitectura de Computadoras, cap. Estructura del computador)

15. ¿Cuál es la función principal de la unidad de control dentro de la CPU?

  1. Realizar directamente las operaciones aritméticas y lógicas sobre los datos
  2. Almacenar de forma permanente los programas y datos del usuario
  3. Generar las señales de control que coordinan y sincronizan la ejecución de cada instrucción
  4. Traducir el código fuente en lenguaje de alto nivel a lenguaje máquina

La unidad de control decodifica cada instrucción y genera las señales que coordinan a la ALU, los registros y la memoria; las operaciones aritméticas las ejecuta la ALU, no la unidad de control. (William Stallings, Organización y Arquitectura de Computadoras, cap. La unidad de control)

16. ¿Qué distingue a una unidad de control cableada (hardwired) de una unidad de control microprogramada?

  1. La cableada almacena las señales de control en una memoria de solo lectura, mientras que la microprogramada las genera con compuertas lógicas fijas
  2. La cableada solo puede usarse en procesadores RISC, mientras que la microprogramada solo se usa en procesadores CISC
  3. La cableada permite modificar el conjunto de instrucciones sin rediseñar el hardware, mientras que la microprogramada no lo permite
  4. La cableada genera las señales de control mediante lógica digital fija, mientras que la microprogramada las obtiene ejecutando microinstrucciones almacenadas en una memoria de control

En la unidad cableada las señales se producen con circuitos combinacionales fijos, rápida pero rígida; en la microprogramada cada instrucción se traduce en microinstrucciones almacenadas en memoria, lo que facilita modificar el conjunto de instrucciones, justo lo opuesto de un distractor común. (William Stallings, Organización y Arquitectura de Computadoras, cap. La unidad de control (control cableado vs. microprogramado))

17. ¿Qué diferencia existe entre el registro de instrucción (IR) y el contador de programa (PC) dentro de la CPU?

  1. El IR contiene la instrucción que se está ejecutando en el momento actual, mientras que el PC contiene la dirección de la siguiente instrucción a buscar
  2. El IR contiene la dirección de la siguiente instrucción, mientras que el PC contiene la instrucción actual
  3. El IR y el PC almacenan exactamente la misma información en todo momento
  4. El IR se usa solo en arquitecturas Harvard y el PC solo en arquitecturas von Neumann

El registro de instrucción (IR) guarda el código de la instrucción en curso, mientras que el PC apunta a la dirección de la siguiente instrucción a buscar; confundir ambos roles es un error común. (William Stallings, Organización y Arquitectura de Computadoras, cap. El funcionamiento del computador (ciclo de instrucción))

18. Un sistema almacena en memoria el valor de 32 bits 0x12345678 comenzando en la dirección 1000, usando ordenamiento little-endian. ¿Qué byte se encuentra almacenado en la dirección 1000?

  1. 0x12
  2. 0x78
  3. 0x34
  4. 0x56

En little-endian el byte menos significativo (0x78) se almacena en la dirección más baja; en big-endian sería el byte más significativo (0x12) el que ocuparía esa dirección. (Andrew S. Tanenbaum, Structured Computer Organization, cap. 2 (ordenamiento de bytes))

19. En la arquitectura MIPS clásica, ¿cuál es la longitud, en bits, de todas las instrucciones del conjunto de instrucciones?

  1. 16 bits para instrucciones aritméticas y 32 bits para saltos
  2. Longitud variable, entre 8 y 40 bits según la instrucción
  3. 32 bits, longitud fija para todas las instrucciones
  4. 64 bits, longitud fija para todas las instrucciones

MIPS es una arquitectura RISC en la que todas las instrucciones tienen una longitud fija de 32 bits, a diferencia de arquitecturas CISC con longitud variable. (Patterson & Hennessy, Computer Organization and Design (MIPS edition), cap. 2)

20. ¿Cuántos registros de propósito general de 32 bits posee la arquitectura MIPS clásica?

  1. 16 registros
  2. 64 registros
  3. 8 registros
  4. 32 registros

MIPS clásico define 32 registros de propósito general de 32 bits cada uno; 16 y 8 corresponden a arquitecturas con menos registros visibles al programador. (Patterson & Hennessy, Computer Organization and Design (MIPS edition), cap. 2)

21. En ensamblador x86, ¿qué efecto tiene la instrucción MOV destino, fuente sobre las banderas de estado (EFLAGS)?

  1. No modifica ninguna bandera de estado
  2. Actualiza las banderas ZF y SF según el valor copiado
  3. Actualiza únicamente la bandera de acarreo (CF)
  4. Actualiza todas las banderas aritméticas igual que ADD

MOV solo copia el operando fuente al destino y no altera ninguna bandera de EFLAGS, a diferencia de instrucciones aritméticas como ADD o SUB. (Intel 64 and IA-32 Architectures Software Developer's Manual, Vol. 2 (instrucción MOV))

22. En ensamblador x86, ¿qué banderas de estado actualizan las instrucciones ADD y SUB al ejecutarse?

  1. Únicamente la bandera de interrupción (IF)
  2. ZF (cero), SF (signo), CF (acarreo) y OF (desbordamiento)
  3. Únicamente ZF y CF, pero nunca SF ni OF
  4. Ninguna bandera, igual que la instrucción MOV

ADD y SUB actualizan las banderas ZF, SF, CF y OF según el resultado de la operación; a diferencia de MOV, que no afecta ninguna bandera. (Intel 64 and IA-32 Architectures Software Developer's Manual, Vol. 2 (instrucciones ADD, SUB))

23. Se ejecuta la siguiente secuencia de instrucciones en ensamblador x86, partiendo de un procesador recién reiniciado: MOV AX, 5 ADD AX, 3 SUB AX, 2 ¿Qué valor final queda almacenado en el registro AX?

  1. 8
  2. 10
  3. 6
  4. 3

MOV coloca 5 en AX, ADD lo incrementa a 8 y SUB lo reduce en 2, dejando el valor final en 6; el resultado 8 corresponde a omitir por error la resta final. (Intel 64 and IA-32 Architectures Software Developer's Manual, Vol. 2 (instrucciones MOV, ADD, SUB))

24. Se ejecuta en x86 la secuencia: MOV AL, 0FFh ADD AL, 1 considerando que AL es un registro de 8 bits sin signo. ¿Qué ocurre con el valor de AL y con la bandera de acarreo (CF) después del ADD?

  1. AL queda en FFh y CF se activa, porque ADD no modifica el registro destino
  2. AL queda en 00h y CF permanece desactivada, porque el resultado es exacto
  3. AL queda en 100h y CF se activa, porque el registro se extiende automáticamente a 16 bits
  4. AL queda en 00h y CF se activa, porque el resultado 256 no cabe en 8 bits

0FFh (255) + 1 = 256, valor que excede los 8 bits de AL; el resultado se trunca a 00h y se activa la bandera de acarreo (CF), pues ADD sí actualiza las banderas. (Intel 64 and IA-32 Architectures Software Developer's Manual, Vol. 2 (instrucción ADD, bandera CF))

25. En el modo de direccionamiento inmediato de una instrucción de ensamblador, ¿dónde se encuentra el operando que se va a utilizar?

  1. El operando es una constante que forma parte de la propia instrucción
  2. El operando está en una dirección de memoria indicada por la instrucción
  3. El operando está en un registro indicado por la instrucción
  4. El operando está en la dirección de memoria contenida en otra dirección de memoria

En el direccionamiento inmediato, el valor del operando viaja codificado directamente dentro de la instrucción, sin necesidad de acceder a memoria ni a un registro para obtenerlo. (William Stallings, Organización y Arquitectura de Computadoras, cap. Conjunto de instrucciones (modos de direccionamiento))

26. ¿Cuál es la diferencia entre el modo de direccionamiento directo y el modo de direccionamiento indirecto?

  1. En el directo la instrucción contiene el valor del operando; en el indirecto contiene la dirección del operando
  2. En el directo la instrucción contiene la dirección de memoria del operando; en el indirecto contiene la dirección de una celda que a su vez almacena la dirección del operando
  3. En el directo el operando está en un registro; en el indirecto el operando está en memoria
  4. En el directo y en el indirecto la instrucción siempre contiene el valor final del operando sin ningún nivel de indirección

El direccionamiento directo apunta a la dirección donde está el operando; el indirecto añade un nivel adicional, apuntando a una celda que contiene la dirección real del operando, útil para implementar apuntadores. (William Stallings, Organización y Arquitectura de Computadoras, cap. Conjunto de instrucciones (modos de direccionamiento))

27. En ensamblador MIPS, partiendo de $t0 = 5 y $t1 = 3, se ejecuta: ADD $t2, $t0, $t1 SUB $t3, $t2, $t1 ¿Qué valor queda almacenado en el registro $t3?

  1. 8
  2. 2
  3. 5
  4. 3

ADD coloca en $t2 el valor 5+3=8, y luego SUB calcula $t3=8−3=5; el resultado 2 correspondería a restar $t0 en vez de $t1, un error típico de confundir los operandos. (Patterson & Hennessy, Computer Organization and Design (MIPS edition), cap. 2 (conjunto de instrucciones aritméticas))

28. Para obtener el negativo de un número entero representado en complemento a dos, ¿qué procedimiento se debe aplicar sobre su representación binaria?

  1. Invertir todos los bits sin sumar nada
  2. Invertir todos los bits y sumar 1 al resultado
  3. Sumar 1 al número y después invertir los bits
  4. Desplazar todos los bits una posición a la izquierda

El negativo en complemento a dos se obtiene invirtiendo cada bit (complemento a uno) y sumando 1 al resultado; invertir los bits sin sumar 1 produce solo el complemento a uno, que no equivale al negativo correcto. (Patterson & Hennessy, «Computer Organization and Design», cap. 2 (representación de números con signo))

29. Un programador necesita almacenar el valor decimal -45 en una variable de 8 bits en complemento a dos. ¿Cuál es la representación binaria correcta?

  1. 11010010
  2. 10101101
  3. 11010011
  4. 11010100

45 en binario es 00101101; al invertir los bits se obtiene 11010010 y al sumar 1 resulta 11010011, que es -45 en complemento a dos. El valor 11010010 es solo el complemento a uno (falta sumar 1), y 10101101 resulta de invertir únicamente el bit de signo, un error común. (Patterson & Hennessy, «Computer Organization and Design», cap. 2 (representación de números con signo))

30. En una arquitectura de 8 bits con complemento a dos, se suman los valores 01111111 (127) y 00000001 (1). ¿Qué ocurre con el resultado de esta operación?

  1. No se produce desbordamiento, porque el acarreo de salida es igual al acarreo de entrada al bit de signo
  2. Se produce desbordamiento, porque los operandos tienen signos distintos
  3. No se produce desbordamiento, porque el resultado binario 10000000 representa correctamente el valor 128
  4. Se produce desbordamiento (overflow), porque ambos operandos son positivos y el resultado se interpreta como negativo

El resultado binario es 10000000, que en complemento a dos representa -128; como ambos operandos eran positivos y el resultado es negativo, existe desbordamiento. El overflow en complemento a dos nunca ocurre cuando los operandos tienen signos distintos, por lo que esa condición no aplica aquí. (Patterson & Hennessy, «Computer Organization and Design», cap. 2 (detección de overflow))

31. En representación binaria sin signo (natural) con 8 bits, ¿cuál es el rango de valores que se pueden representar?

  1. 0 a 255
  2. 0 a 256
  3. 1 a 255
  4. -128 a 127

Con n bits sin signo el rango es 0 a 2^n−1; para 8 bits es 0 a 255. El valor 256 requeriría 9 bits, y el rango -128 a 127 corresponde a la representación con signo en complemento a dos, no a la sin signo. (William Stallings, «Organización y Arquitectura de Computadoras», cap. Sistemas de numeración)

32. Un registro de 8 bits en complemento a dos contiene el valor 11110000 (-16). Si se aplica un desplazamiento aritmético a la derecha de 2 bits, conservando el bit de signo, ¿qué valor decimal resulta?

  1. -8
  2. -4
  3. 60
  4. -64

Un desplazamiento aritmético a la derecha de k bits equivale a dividir entre 2^k conservando el bit de signo; -16 ÷ 4 = -4. El valor 60 resultaría de aplicar un desplazamiento lógico, que no conserva el signo y es incorrecto para números representados con signo. (Patterson & Hennessy, «Computer Organization and Design», cap. 2 (operaciones lógicas y de desplazamiento))

33. Un ingeniero necesita convertir el valor hexadecimal 0x2F a su equivalente en binario de 8 bits. ¿Cuál es la conversión correcta?

  1. 00101110
  2. 01001111
  3. 00101111
  4. 00111101

Cada dígito hexadecimal equivale a exactamente 4 bits (un nibble): 2 = 0010 y F = 1111, por lo que 0x2F = 00101111. El valor 00101110 corresponde en realidad a 0x2E, un error de un solo bit en el nibble menos significativo. (Andrew S. Tanenbaum, «Structured Computer Organization», apéndice A (números binarios))

34. En el código ASCII estándar de 7 bits, ¿cuál es el valor decimal que corresponde al carácter 'A' mayúscula?

  1. 97
  2. 48
  3. 32
  4. 65

El carácter 'A' corresponde al valor decimal 65 (0x41) en ASCII; 97 es el valor de 'a' minúscula y 48 es el del dígito '0', ambos caracteres distintos dentro de la misma tabla. (ANSI X3.4-1986 / ISO/IEC 646 (código ASCII))

35. Un diseñador de un microcontrolador debe codificar 200 instrucciones distintas del repertorio de un procesador, asignando un código binario único a cada una. ¿Cuál es el número mínimo de bits necesarios para el campo de código de operación?

  1. 8 bits
  2. 7 bits
  3. 200 bits
  4. 100 bits

El número mínimo de bits es ⌈log2(N)⌉; para N=200, log2(200)≈7.64, por lo que se requieren 8 bits, ya que 2^7=128 es insuficiente y 2^8=256 sí alcanza. Usar 7 bits solo permite codificar 128 instrucciones, un error común de redondear hacia abajo. (M. Morris Mano, «Digital Design» (codificación binaria de la información))

Comienza gratis