Saltar al contenido

Fundamentos del procesador

A-Level Ciencias de la Computación · Tema 4

Lección de video para este tema Abrir la página de video
21:23

Arquitectura Von Neumann

Durante la mayor parte de la historia, una máquina hacía un solo trabajo. Un telar tejía tela. Una calculadora sumaba. Para hacerla hacer algo nuevo, la reconstruías. Luego llegó una sorprendentemente simple…

Narración en inglés · subtítulos en inglés y 中文 que puedes cambiar

4.1

Arquitectura de Von Neumann

Syllabus
Los candidatos deben ser capaces de: Notas y orientación
Demostrar comprensión del modelo básico Von Neumann para un sistema informático y el concepto de programa almacenado
Demostrar comprensión del propósito y papel de los registros, incluyendo la diferencia entre registros de propósito general y propósito especial Registros de propósito especial que incluyen: • Contador de Programa (PC) • Registro de Datos de Memoria (MDR) • Registro de Direcciones de Memoria (MAR) • El Acumulador (ACC) • Registro de Índice (IX) • Registro de Instrucción Actual (CIR) • Registro de Estado
Demostrar comprensión del propósito y roles de la Unidad Aritmética Lógica (ALU), la Unidad de Control (CU) y el reloj del sistema, Almacenamiento de Acceso Inmediato (IAS)
Demostrar comprensión de cómo se transfieren los datos entre los diversos componentes del sistema informático utilizando el bus de direcciones, el bus de datos y el bus de control
Demostrar comprensión de cómo los factores contribuyen al rendimiento del sistema informático Incluyendo: • tipo de procesador y número de núcleos • el ancho del bus • la velocidad de reloj • memoria caché
Comprender cómo los diferentes puertos proporcionan conexión a dispositivos periféricos Incluyendo conexiones a: • Bus Serial Universal (USB) • Interfaz Multimedia de Alta Definición (HDMI) • Matriz de Gráficos de Vídeo (VGA)
Describir las etapas del ciclo Búsqueda-Ejecución (F-E) Describir y utilizar la notación de 'transferencia de registro' para describir el ciclo F-E
Demostrar comprensión del propósito de las interrupciones Incluyendo: • posibles causas de interrupciones • aplicaciones de las interrupciones • uso de una Rutina de Servicio de Interrupción (ISR) • cuándo se detectan las interrupciones durante el ciclo búsqueda-ejecución • cómo se manejan las interrupciones

Fuente: Plan de estudios Cambridge International

El ciclo de búsqueda-decodificación-ejecución

La arquitectura Von Neumann· subyace en casi todos los ordenadores de propósito general:

  • una memoria única — la Almacén de Acceso Inmediato (IAS) — almacena tanto instrucciones del programa como datos (concepto de programa almacenado).
  • un procesador (CPU) obtiene instrucciones de la memoria y las ejecuta una a una.
  • las instrucciones se ejecutan en orden a menos que una ramificación cambie el flujo.

La idea del programa almacenado es lo que hace flexible a una computadora: cambia el programa y cambias lo que hace, sin necesidad de reconfigurar cables.

Explorar

Toca las partes de una computadora de Von Neumann

Explora cada bloque. La CPU (unidad de control, ALU, registros) se comunica con una única memoria principal a través de los buses —y esa memoria compartida para instrucciones Y datos es la idea de Von Neumann.

Vocabulario Entrenar
English Español
RAM/ræm/ RAM
page/peɪdʒ/ página
cache memory/kæʃ ˈmeməri/ memoria caché
cache/kæʃ/ Caché
secondary storage/ˈsekəndəri ˈstɔːrɪdʒ/ almacenamiento secundario
4.1

Partes principales de la CPU

Todas estas partes están dentro de un solo chip pequeño. El diagrama más adelante en esta sección muestra cómo se conectan; la foto de abajo muestra el dispositivo real.

La parte inferior de un chip CPU Intel sobre fondo blanco, un cuadrado plano cubierto por una rejilla de cientos de pequeñas almohadillas de contacto doradas que presionan contra el zócalo de la placa madre
Una CPU moderna: todo el procesador es un solo chip pequeño (aquí visto desde abajo, mostrando los contactos)
Un zócalo de CPU cuadrado en una placa madre, con una rejilla de pines diminutos y una palanca de retención metálica, rodeado de pistas de circuito
El zócalo correspondiente de la CPU en la placa base: los contactos del chip presionan sobre estos pines

Unidad Aritmética Lógica (ALU)

La ALU realiza operaciones aritméticas (sumar, restar, …) y lógicas (AND, OR, comparaciones). Toma operandos de los registros y devuelve resultados a un registro.

Unidad de Control (CU)

La unidad de control decodifica cada instrucción y envía las señales de control para ejecutarla: abre rutas de datos, indica a la ALU qué hacer y controla las lecturas y escrituras en memoria.

Reloj del sistema

El reloj envía una secuencia continua de pulsos que mantienen al CPU sincronizado. Cada instrucción requiere un número fijo de ciclos, y la velocidad del reloj (p. ej., 3.8 GHz) es un factor en el rendimiento.

"Explica cómo trabajan juntos la CU y el reloj del sistema": el reloj emite pulsos a una frecuencia fija; la unidad de control usa cada pulso para avanzar el ciclo de búsqueda-ejecución en un paso, enviando sus señales de control a tiempo con los pulsos, de modo que cada parte del procesador cambia de estado al mismo tiempo. Un reloj más rápido significa más pasos por segundo, hasta el punto en que los circuitos no pueden estabilizarse entre pulsos.

Registros

Los registros son pequeños y muy rápidos depósitos dentro del CPU. Los registros de uso especial tienen funciones fijas en el ciclo:

Diagrama de bloques de una CPU que contiene la unidad de control, la ALU y los registros, conectada a la memoria principal mediante los buses de direcciones, datos y control
La CPU contiene la unidad de control, la ALU y los registros; tres buses la conectan con la memoria principal
  • Contador de Programa (PC) — la dirección de la instrucción siguiente.
  • Registro de Dirección de Memoria (MAR) — la dirección que se está leyendo o escribiendo.
  • Registro de Datos de Memoria (MDR) — los datos que van hacia o provienen de la memoria.
  • Registro de Instrucción Actual (CIR) — la instrucción que se está decodificando.
  • Acumulador (ACC) — el valor sobre el que opera la ALU.
  • Registro de Estado — almacena banderas (acarreo, cero, negativo, desbordamiento) usadas por las ramas. Cada bandera es un bit, establecido o eliminado por la ALU tras una operación: la bandera de cero tras una comparación igualada, la bandera de acarreo cuando una suma desborda el registro, la bandera negativa cuando un resultado es negativo. Un salto condicional lee las banderas para decidir si ramificar, y una bandera de desbordamiento puede generar una interrupción.
  • Registro Índice — un desplazamiento añadido a una dirección en el direccionamiento indexado; incrementarlo permite recorrer un array elemento a elemento.

La pregunta "completa la tabla que describe el papel de cada registro" pide una oración precisa por registro en estos términos: el PC contiene la dirección de la siguiente instrucción que será buscada; el MAR contiene la dirección de la ubicación que se está leyendo o escribiendo; el MDR contiene los datos o instrucción leídos recientemente de, o a punto de ser escritos en, esa ubicación; el CIR contiene la instrucción que se está decodificando y ejecutando actualmente; el ACC contiene el resultado de la última operación aritmética o lógica.

Los registros de propósito general son usados por el programador para valores temporales durante un cálculo. Los movimientos de datos entre registros y memoria se escriben en notación de transferencia de registros, p. ej. MAR ← [PC] ("copiar el contenido del PC al MAR").

Diagrama de bloques de la CPU Von Neumann mostrando PC, MAR, MDR, CIR, ACC, registro de estado, unidad de control, ALU y reloj del sistema, vinculados a la memoria principal y entrada/salida por los buses de dirección, datos y control
La CPU de Von Neumann: registros, unidad de control y ALU conectados por buses
Vocabulario Entrenar
English Español
Von Neumann architecture/vɒn ˈnɔɪmən ˈɑːkɪtektʃə/ Arquitectura de Von Neumann
Immediate Access Store/ɪˈmiːdɪət ˈækses stɔː/ Almacenamiento de acceso inmediato
stored program/stɔːd ˈprəʊɡræm/ Programa almacenado
processor/ˈprəʊsesə/ procesador
arithmetic and logic unit/ˌærɪθˈmetɪk ənd ˈlɒdʒɪk ˈjuːnɪt/ unidad aritmética y lógica
ALU/ˌeɪ el ˈjuː/ Unidad aritmético-lógica (UAL)
operand/ˈɒpərænd/ Operando
bit/bɪt/ bit
buses/ˈbʌsɪz/ Bus
address bus/əˈdres bʌs/ Bus de direcciones
data bus/ˈdeɪtə bʌs/ Bus de datos
word size/wɜːd saɪz/ Tamaño de palabra
number of cores/ˈnʌmbə ɒv kɔːz/ número de núcleos
cores/kɔːz/ Núcleos
amount of RAM/əˈmaʊnt ɒv ræm/ cantidad de RAM
4.1

Buses

Tres buses internos (conjuntos de cables paralelos) conectan las partes:

  • bus de direcciones — transporta la dirección de memoria. Unidireccional (CPU → memoria).
  • bus de datos — transporta los datos. Bidireccional.
  • bus de control — transporta señales de control (lectura, escritura, interrupción). Bidireccional.

Un bus de direcciones de $n$ bits puede alcanzar $2^{n}$ ubicaciones de memoria. El ancho del bus de datos determina cuántos bits se mueven por acceso (a menudo el tamaño de palabra).

CPU, memoria y entrada/salida tocando cada uno el bus de dirección (unidireccional), bus de datos y bus de control dentro del bus del sistema
Los tres buses del sistema que conectan la CPU, la memoria y entrada/salida
Una placa madre vista desde arriba: el zócalo de CPU, las ranuras de memoria y las ranuras de expansión unidas por pistas impresas densas
Una placa base: la CPU, la memoria y E/S están todas en un solo conjunto de buses — las pistas impresas que corren entre ellas
Vocabulario Entrenar
English Español
port/pɔːt/ Puerto
peripheral/pəˈrɪfərəl/ Periférico
register transfer notation/ˈredʒɪstə ˈtrænsfɜː nəʊˈteɪʃn/ Notación de transferencia de registro
interrupt service routine/ˈɪntərʌpt ˈsɜːvɪs ruːˈtiːn/ Rutina de servicio de interrupción
interrupt register/ˈɪntərʌpt ˈredʒɪstə/ Registro de interrupción
stack/stæk/ Pila
assembly language/əˈsemblɪ ˈlæŋɡwɪdʒ/ Lenguaje ensamblador
machine code/məˈʃiːn kəʊd/ Código máquina
mnemonics/nɪˈmɒnɪks/ mnemotecnias
assembler/əˈsemblə/ Ensamblador
symbol table/ˈsɪmbl ˈteɪbl/ Tabla de símbolos
label/ˈleɪbl/ etiqueta
forward references/ˈfɔːwəd ˈrefrənsɪz/ referencias hacia adelante
opcode/ˈɒpkəʊd/ Opcode
4.1

Factores que afectan el rendimiento

  • velocidad del reloj — más ciclos por segundo.
  • número de núcleos — una CPU multicore ejecuta varios hilos simultáneamente.
  • tamaño de palabra — una CPU de 64 bits maneja bloques de 64 bits por ciclo y puede acceder a mucha más memoria que una de 32 bits.
  • cantidad de RAM — más RAM almacena más del conjunto activo; si hay poca, obliga al SO a hacer paginación al disco.
  • tamaño de memoria caché — más caché reduce el tiempo promedio de acceso a memoria.
  • tipo de almacenamiento secundario — un SSD carga programas mucho más rápido que un HDD.
  • ancho y velocidad del bus — buses más anchos/rápidos mueven datos más rápidamente.
Rendimiento en el centro con siete factores alrededor: frecuencia de reloj, núcleos, tamaño de palabra, RAM, caché, SSD frente a HDD, y ancho y velocidad del bus
Siete factores, cada uno con una razón que aportar en la respuesta.

Asigna las especificaciones a la carga de trabajo: un quad-core supera a un dual-core en tareas paralelas, pero mayor velocidad por núcleo gana en tareas de un solo hilo.

Cada factor es una respuesta de dos puntos con una razón adjunta:

  • Más núcleos: cada núcleo puede buscar y ejecutar su propia instrucción al mismo tiempo, así que varios programas, o los hilos de un programa, se ejecutan en paralelo. Pero un programa debe estar escrito para usar más de un núcleo, por lo que duplicar los núcleos no duplica la velocidad.
  • Mayor velocidad del reloj: más ciclos de búsqueda-ejecución por segundo, así que más instrucciones por segundo; el límite es el calor producido.
  • Bus más ancho: un bus de datos más ancho mueve más bits en cada transferencia, así que se necesitan menos transferencias para los mismos datos; un bus de direcciones más ancho puede acceder a más ubicaciones de memoria.
  • Memoria caché: una memoria pequeña y rápida dentro o junto al procesador que guarda las instrucciones y datos usados más recientemente o con mayor frecuencia. Leerlos desde la caché es mucho más rápido que desde la RAM, así que el procesador pasa menos tiempo esperando.

"Explica por qué la nueva computadora tiene mejor rendimiento" se responde comparando las dos especificaciones línea por línea: una mayor velocidad del reloj ejecuta más instrucciones por segundo, más núcleos ejecutan más tareas a la vez, más caché significa menos accesos lentos a RAM, y más RAM significa menos transferencias a disco.

4.1

Puertos

Un puerto es un conector físico para conectar un periférico:

  • USB (Universal Serial Bus) — de propósito general (teclados, unidades de almacenamiento, teléfonos).
  • HDMI (High Definition Multimedia Interface) — video y audio digitales a una pantalla.
  • VGA (Video Graphics Array) — salida de video analógica más antigua a un monitor.
  • Ethernet (RJ-45) — red local cableada. Jacks de audio — auriculares/micrófono.

Diferentes puertos utilizan diferentes señales, por lo que un cable HDMI no encajará en un puerto USB. USB-C es inusual al transmitir video, datos y energía simultáneamente.

"Explica cómo la computadora se conecta al monitor a través de HDMI": el puerto HDMI envía el video y el audio como una sola señal digital por un solo cable, por lo que no se necesita conversión a analógico y la imagen no se degrada; el cable transporta resoluciones de alta definición y el propio puerto del monitor decodifica la señal. Un dispositivo USB es plug-and-play: cuando se conecta, la computadora lo detecta, lo identifica, carga o instala el controlador necesario y puede proporcionarle energía, todo sin necesidad de reiniciar.

4.1

Ciclo de búsqueda-ejecución

La CPU repite el ciclo de búsqueda-ejecución, una ejecución por instrucción de máquina.

Búsqueda

  1. la dirección del PC se copia al MAR.
  2. el PC se incrementa para apuntar a la siguiente instrucción.
  3. una señal de lectura viaja por el bus de control.
  4. la memoria coloca la instrucción en el bus de datos.
  5. se copia en el MDR, luego en el CIR.

El examen pide estos pasos en notación de transferencia de registros, donde [X] significa el contenido del registro X y [[MAR]] significa el contenido de la ubicación de memoria cuya dirección está en el MAR:

MAR ← [PC]          the address of the next instruction goes to the MAR
PC  ← [PC] + 1      the PC now points to the following instruction
MDR ← [[MAR]]       the instruction at that address is read into the MDR
CIR ← [MDR]         the instruction is copied into the CIR for decoding

El orden importa: el PC se incrementa inmediatamente después de que su dirección se ha copiado, para que un salto ejecutado más tarde pueda sobrescribirlo. Durante la ejecución, la misma notación describe cada instrucción; por ejemplo, para LDD 200, MAR ← 200, MDR ← [[MAR]], ACC ← [MDR].

El registro de búsqueda transfiere en orden: 1 la dirección del PC va al MAR; 2 el MAR envía la dirección a la memoria; 3 la instrucción regresa al MDR; 4 el MDR la copia al CIR; mientras tanto el PC se incrementa
Las transferencias de registros en una búsqueda: PC → MAR → memoria → MDR → CIR, con el PC incrementado

Decodificación

La UC decodifica la instrucción en el CIR: qué operación y cuáles son los operandos o direcciones.

Ejecución

La UC la lleva a cabo: las operaciones aritméticas/lógicas van a la ALU (el resultado va al AC); una carga/almacenamiento mueve datos entre la memoria y un registro; un salto cambia el PC. Luego el ciclo se repite.

Diagrama de flujo del ciclo fetch-execute desde INICIO: la etapa de búsqueda (PC a MAR, incrementar PC, señal de lectura, memoria al bus de datos al MDR al CIR), la etapa de decodificación, la etapa de ejecución, luego una comprobación de interrupciones que vuelve a INICIO
El ciclo de búsqueda-ejecución, con una comprobación de interrupciones cada vez
Explorar

El ciclo de búsqueda-ejecución

Toca alrededor del bucle que la CPU repite miles de millones de veces por segundo. Observa cómo la búsqueda utiliza los registros PC/MAR/MDR/CIR, luego decodifica y ejecuta actúa sobre lo que se buscó.

Explorar

El ciclo de búsqueda-ejecución

Recorre cómo la CPU ejecuta una instrucción: buscala en la memoria, la decodifica y luego la ejecuta, repetidamente.

Vocabulario Entrenar
English Español
fetch-execute cycle/fetʃ ˈeksɪkjuːt ˈsaɪkl/ Ciclo de búsqueda-ejecución
special purpose registers/ˈspeʃl ˈpɜːpəs ˈredʒɪstəz/ Registros de propósito especial
Program Counter/ˈprəʊɡræm ˈkaʊntə/ Contador de programa
Memory Address Register/ˈmeməri əˈdres ˈredʒɪstə/ Registro de dirección de memoria
Memory Data Register/ˈmeməri ˈdeɪtə ˈredʒɪstə/ Registro de datos de memoria
Current Instruction Register/ˈkʌrənt ɪnˈstrʌkʃn ˈredʒɪstə/ Registro de instrucción actual
accumulator/əˈkjuːmjʊleɪtə/ Acumulador
Status Register/ˈsteɪtəs ˈredʒɪstə/ Registro de estado
flags/flæɡz/ bandejas
4.1

Interrupciones

Una interrupción es una señal que pausa el ciclo normal para que la CPU pueda manejar un evento urgente (una pulsación de tecla, la llegada de un paquete, un fallo de hardware, división por cero, el temporizador del SO).

Un ciclo: programa principal ejecutándose, luego en una interrupción la CPU guarda su estado, ejecuta la rutina de servicio de interrupciones, restaura el estado y retoma
En una interrupción, la CPU guarda su posición, ejecuta la rutina de servicio de interrupciones, luego restaura su posición y continúa

Para manejar una:

  1. terminar la instrucción actual.
  2. guardar el estado (PC y registros).
  3. cargar la dirección de la rutina de servicio de interrupciones (ISR) en el PC y ejecutarla.
  4. la ISR maneja el evento.
  5. restaurar el estado guardado y continuar.

Las interrupciones permiten que el sistema responda rápidamente sin que la CPU revise constantemente los dispositivos, y son la forma en que el SO gestiona la multitarea.

"Explique cómo se detecta y gestiona una interrupción de un dispositivo de entrada en el ciclo F-E" es una respuesta de cuatro puntos que incluye: el dispositivo envía una señal de interrupción que establece la bandera de interrupción en el registro de interrupciones; el procesador revisa ese registro al final de cada ciclo de búsqueda-ejecución, después de que la instrucción actual ha terminado su ejecución; si una bandera está establecida y la interrupción tiene mayor prioridad que la tarea actual, el contenido del PC y otros registros se guardan en la pila; la dirección de la rutina de servicio de interrupciones se carga en el PC y se ejecuta la rutina; cuando finaliza, los valores guardados se restauran desde la pila y el programa interrumpido continúa desde donde se detuvo.

Causas dignas de nombrar: una interrupción de hardware de un dispositivo (una tecla presionada, un búfer de impresora vacío, la llegada de un paquete de red), una interrupción de software causada por un fallo (división por cero, una instrucción ilegal, desbordamiento aritmético), una interrupción de temporizador del sistema operativo que marca el final de un intervalo de tiempo, y una advertencia de falla de alimentación.

Diagrama de flujo del manejo de interrupciones: el programa en ejecución se interrumpe, la CPU termina la instrucción actual, guarda su estado (PC y registros) en la pila, ejecuta la rutina de servicio de interrupción, restaura el estado y reanuda
Cómo se integra una interrupción en el ciclo de búsqueda-ejecución
Vocabulario Entrenar
English Español
interrupt/ˈɪntərʌpt/ Interrupción
4.2

Lenguaje ensamblador y código máquina

Syllabus
Los candidatos deben ser capaces de: Notas y orientación
Demostrar comprensión de la relación entre el lenguaje ensamblador y el código máquina
Describir las diferentes etapas del proceso de ensamblado para un ensamblador de dos pasadas Aplicar el proceso del ensamblador de dos pasadas a un programa dado en lenguaje ensamblador simple
Rastrear un programa dado en lenguaje ensamblador simple
Demostrar comprensión de que un conjunto de instrucciones se agrupan Incluyendo los siguientes grupos: • Movimiento de datos • Entrada y salida de datos • Operaciones aritméticas • Instrucciones incondicionales y condicionales • Instrucciones de comparación
Demostrar comprensión y poder utilizar diferentes modos de direccionamiento Incluyendo inmediato, directo, indirecto, indexado, relativo

Fuente: Plan de estudios Cambridge International

La CPU realmente ejecuta código máquina — patrones de bits, específicos de una arquitectura. El lenguaje ensamblador es una forma legible, con una instrucción por instrucción de máquina, escrita usando mnemotécnicos como LDD, ADD, JMP. Un ensamblador lo traduce a código máquina.

Un ensamblador traduce los mnemotécnicos del ensamblador a patrones de bits del código máquina
Un ensamblador convierte mnemotécnicos en patrones de bits de código máquina

Ensamblador de dos pasadas

Un ensamblador de dos pasadas lee el código fuente dos veces:

  • paso 1 construye una tabla de símbolos: cada vez que aparece una etiqueta (como LOOP:), se registra su dirección; aún no hay código.
  • paso 2 genera el código: traduce cada instrucción y, cuando una hace referencia a una etiqueta (como JMP LOOP), busca su dirección en la tabla de símbolos.

Dos pasos manejan las referencias hacia adelante (un salto a una etiqueta definida más adelante).

Ejemplo resuelto. Aplique el proceso de dos pasadas a este programa, cuya primera instrucción se almacena en la dirección 100.

        LDD  COUNT
LOOP:   DEC  ACC
        CMP  #0
        JPN  LOOP
        END
COUNT:  5

La pasada 1 lee cada línea, cuenta la dirección que ocupará y registra cada etiqueta en la tabla de símbolos: LOOP = 101 (la línea DEC) y COUNT = 105 (la línea de datos). No se produce código. La pasada 2 vuelve a leer el programa y traduce cada línea a código máquina, sustituyendo cada mnemónico por su código de operación y cada dirección simbólica por el número de la tabla de símbolos: LDD COUNT se convierte en el código de operación de LDD con el operando 105, y JPN LOOP se convierte en el código de operación de JPN con el operando 101. El salto de regreso a LOOP podría haberse resuelto en una sola pasada, pero un salto hacia adelante a una etiqueta aún no vista no; por eso el ensamblador realiza dos pasadas.

Conjunto de instrucciones de ejemplo

Cambridge utiliza un conjunto genérico pequeño, impreso en la tabla de referencias del examen, con un registro de propósito general, el acumulador (AC), y un registro índice (IX). Un operandos escrito #n es un número decimal, Bn un número binario y &n un número hexadecimal; <address> es un número de ubicación o una etiqueta.

Grupo Instrucción Lo que hace
Movimiento de datos LDM #n carga el número n en ACC (inmediato)
LDD <address> carga los contenidos de la dirección en ACC (directo)
LDI <address> la dirección contiene otra dirección; carga los contenidos de esta última en ACC (indirecto)
LDX <address> suma IX a la dirección y carga los contenidos del resultado en ACC (indexado)
LDR #n carga el número n en IX
MOV <register> copia ACC al registro nombrado (IX)
STO <address> almacena los contenidos de ACC en la dirección
Entrada y salida IN lee una pulsación de tecla y coloca su código ASCII en ACC
OUT muestra el carácter cuyo código ASCII está en ACC
Aritmética ADD <address> / ADD #n suma los contenidos de la dirección, o el número, a ACC
SUB <address> / SUB #n resta a ACC
INC <register> / DEC <register> suma 1 a, o resta 1 de, ACC o IX
Comparación CMP <address> / CMP #n compara ACC con los contenidos de la dirección, o con n, y establece la bandera
CMI <address> compara ACC con los contenidos de la dirección almacenada en la dirección (indirecto)
Salto JMP <address> salta a la dirección incondicionalmente
JPE <address> / JPN <address> salta si la última comparación fue igual / no igual
Manipulación de bits AND, OR, XOR con #n, Bn, &n o <address> operación bit a bit sobre ACC
LSL #n / LSR #n desplaza ACC lógicamente n posiciones a la izquierda o a la derecha
END finaliza el programa

La pregunta "las instrucciones del lenguaje ensamblador están agrupadas" pide los nombres de los grupos y una instrucción de cada uno: movimiento de datos, entrada y salida, aritmética, saltos incondicionales y condicionales, comparación y manipulación de bits.

Explorar

Cómo funciona un ensamblador de dos pasadas

Paso a paso. El ensamblador lee tu código dos veces: la pasada 1 solo encuentra dónde vive cada etiqueta, para que la pasada 2 pueda rellenar las direcciones; así es como un salto a una etiqueta definida más tarde todavía funciona.

Vocabulario Entrenar
English Español
register/ˈredʒɪstə/ register
control unit/kənˈtrəʊl ˈjuːnɪt/ Unidad de control
clock speed/klɒk spiːd/ Velocidad del reloj
4.2

Modos de direccionamiento

El modo de direccionamiento (los modos de direccionamiento) indica cómo la CPU encuentra el operando:

  • direccionamiento inmediato — el operando es el valor en la instrucción. LDM #10 carga 10.
  • direccionamiento directo — la instrucción contiene una dirección; el operando es el valor allí. LDD 200.
  • direccionamiento indirecto — la instrucción contiene una dirección que contiene otra dirección, que es los datos. LDI 200.
  • direccionamiento indexado — la dirección efectiva es address + index register; usado para arreglos. LDX 100 con IX = 5 lee la dirección 105.

(Direccionamiento relativo da la dirección como un desplazamiento desde el PC — usado para saltos.)

Cuatro modos de direccionamiento alcanzando su operando. Inmediato: LDM #10 da 10 directamente. Directo: LDD 200 lee la ubicación de memoria 200 (=42). Indirecto: LDI 200 lee la ubicación 200 (=250) luego la ubicación 250 (=99). Indexado: LDX 100 con registro de índice 5 lee la ubicación 105 (=7)
Cómo cada modo de direccionamiento accede a su operando — inmediato, directo, indirecto e indexado

Ejemplo resuelto. La memoria contiene: ubicación 200 = 250, ubicación 250 = 99, ubicación 105 = 7. El registro índice contiene 5. ¿Qué hay en el acumulador después de cada uno de LDM #200, LDD 200, LDI 200 y LDX 100? Siga cuánto debe buscar cada modo. LDM #200 es inmediato - el operando es el número escrito en la instrucción, así que el acumulador contiene 200. LDD 200 es directo - vaya a la ubicación 200 y tome lo que hay allí: 250. LDI 200 es indirecto - la ubicación 200 contiene 250, que es otra dirección, así que continúe a la ubicación 250: 99. LDX 100 es indexado - sume el registro índice a la dirección, $100 + 5 = 105$, y lea la ubicación 105: 7. Cuente los saltos para mantenerlos separados: inmediato 0, directo 1, indirecto 2, indexado 1 (una vez que se ha añadido el índice).

Vocabulario Entrenar
English Español
Index Register/ˈɪndeks ˈredʒɪstə/ Registro índice
indexed addressing/ˈɪndekst əˈdresɪŋ/ dirección indexada
general-purpose registers/ˈdʒenərəl ˈpɜːpəs ˈredʒɪstəz/ Registros de propósito general
register transfer/ˈredʒɪstə ˈtrænsfɜː/ Transferencia de registro
control bus/kənˈtrəʊl bʌs/ Bus de control
addressing mode/əˈdresɪŋ məʊd/ modo de dirección
immediate addressing/ɪˈmiːdɪət əˈdresɪŋ/ dirección inmediata
direct addressing/daɪˈrekt əˈdresɪŋ/ dirección directa
indirect addressing/ɪndaɪˈrekt əˈdresɪŋ/ dirección indirecta
relative addressing/ˈrelətɪv əˈdresɪŋ/ dirección relativa
logical shift/ˈlɒdʒɪkl ʃɪft/ desplazamiento lógico
cyclic shift/ˈsaɪklɪk ʃɪft/ desplazamiento cíclico
4.2

Rastrear un programa ensamblador

Para rastrearlo: haga una tabla con columnas para el PC, ACC, registro índice, cada variable y cualquier bandera. Pase por las instrucciones actualizando la tabla después de cada una; siga las ramas cuando cambien el PC; deténgase en END. Un patrón común es un bucle sobre un array utilizando direccionamiento indexado.

El programa desde la dirección 100 hasta 108 dibujado como un bucle: JMP 100 vuelve al principio, JPE 108 sale cuando ACC es 0; con 5 en la dirección 200 muestra 5, 4, 3, 2, 1
Sigue los saltos para identificar el bucle antes de realizar su traza.

Ejemplo resuelto. Rastree este programa. La dirección 200 contiene 5 y la dirección 201 contiene 0.

100   LDD  200
101   CMP  #0
102   JPE  108
103   OUT
104   DEC  ACC
105   STO  200
106   LDD  201
107   JMP  100
108   END

Escriba una fila por cada instrucción ejecutada, rellenando solo las columnas que cambian:

Instrucción ACC 200 201 Salida
inicio 5 0
LDD 200 5
CMP #0
JPE 108 no tomada
OUT carácter con código 5
DEC ACC 4
STO 200 4
LDD 201 0
JMP 100
LDD 200 4

y así sucesivamente, hasta que LDD 200 carga 0, la comparación establece la bandera de igualdad, JPE 108 es tomada y el programa termina. Tres cosas que revisa el examinador: un CMP no cambia ningún registro, solo una bandera; un salto no tomado sigue contando como ejecutado; y OUT emite un carácter, por lo que va en la columna de salida, no en la del ACC. "Indique el efecto de cambiar LDD 10 a LDM #10": el ACC contendría el número 10 en lugar del contenido de la dirección 10.

4.3

Desplazamientos binarios

Syllabus
Los candidatos deben ser capaces de: Notas y orientación
Demostrar comprensión y realizar desplazamientos binarios Lógica, aritmética y desplazamiento cíclico, a la izquierda y a la derecha
Demostrar comprensión de cómo se puede utilizar la manipulación de bits para monitorear/controlar un dispositivo Realizar operaciones de manipulación de bits. Verificar y establecer un bit (mediante enmascaramiento de bits)
Etiqueta de instrucción | Opcode | Operando Explicación
AND #n / Bn / &n Operación AND bit a bit del contenido del ACC con el operando
Y
Operación lógica Y bit a bit del contenido de ACC con el contenido de
XOR #n / Bn / &n Operación XOR bit a bit del contenido del ACC con el operando
XOR
Operación lógica XOR bit a bit del contenido de ACC con el contenido de
OR #n / Bn / &n Operación OR bit a bit del contenido del ACC con el operando
OR
Operación lógica OR bit a bit del contenido de ACC con el contenido de
LSL #n Los bits en el ACC se desplazan lógicamente n posiciones hacia la izquierda. Se introducen ceros en el extremo derecho
LSR #n Los bits en el ACC se desplazan lógicamente n posiciones hacia la derecha. Se introducen ceros en el extremo izquierdo
Etiqueta una instrucción
Asigna una dirección simbólica
Todas las preguntas asumirán que solo hay un registro de propósito general disponible (Acumulador) ACC denota Acumulador IX denota Registro de Índice
puede ser una dirección absoluta o simbólica # denota un número decimal, ej. #123 B denota un número binario, ej. B01001010 & denota un número hexadecimal, ej. &4A

Fuente: Plan de estudios Cambridge International

Un desplazamiento lógico mueve todos los bits a la izquierda o derecha un cierto número de lugares, rellenando nuevas posiciones con 0.

  • desplazamiento a la izquierda en 1 (LSL #1) — los bits se mueven a la izquierda, entra un 0 por la derecha; para un número sin signo esto es × 2.
  • desplazamiento a la derecha en 1 (LSR #1) — los bits se mueven a la derecha, entra un 0 por la izquierda; para un número sin signo esto es división entera ÷ 2.

Desplazar $n$ lugares multiplica o divide por $2^{n}$. Ejemplo: 00001011 (11) LSL #1 → 00010110 (22).

Los bits desplazados fuera del extremo se pierden, por lo que la multiplicación solo es correcta mientras esos bits fueran ceros. LSL #2 en el entero de complemento a dos 11001010 da como resultado 00101000: los dos 1s que cayeron por la izquierda han desaparecido, el bit de signo ha cambiado y el resultado ya no es cuatro veces el valor original.

Un desplazamiento aritmético a la derecha mantiene el bit de signo para que un número negativo con signo permanezca negativo. Un desplazamiento cíclico (rotación) introduce el bit que cae en un extremo de nuevo en el otro extremo, de modo que no se pierden bits.

"Muestra el resultado de un desplazamiento aritmético a la derecha de 3 posiciones sobre 10011110": copia el bit de signo en cada posición vacante, 11110011. El mismo desplazamiento aplicado a 01011100 produce 00001011. Un desplazamiento cíclico a la izquierda de 1 sobre 10000110 da como resultado 00001101: el 1 inicial reaparece a la derecha.

Tres desplazamientos de 8 bits: LSL #1 convierte 00001011 en 00010110 (multiplicado por 2, un 0 entra por la derecha); LSR #1 lo convierte en 00000101 (división entera por 2, un 0 entra por la izquierda); ASR #1 convierte 10110100 en 11011010, copiando el bit de signo
Desplazamiento lógico a la izquierda ($\times 2$), desplazamiento lógico a la derecha ($\div 2$) y desplazamiento aritmético a la derecha (mantiene el bit de signo)

La diferencia entre los dos desplazamientos a la derecha es un solo bit. Toma 11110000, que vale 240 si se lee sin signo y $-16$ si se lee con signo. LSR #1 introduce un 0 y produce 01111000 $= 120$, que es la mitad correcta de 240. En cambio, ASR #1 copia el bit de signo y produce 11111000 $= -8$, que es la mitad correcta de $-16$. Ninguno es incorrecto; cada uno reduce a la mitad el valor bajo una interpretación concreta.

El byte 11110000 desplazado a la derecha dos veces: LSR introduce un 0 por la izquierda dando 01111000 que es 120, mientras que ASR copia el bit de signo dando 11111000 que es menos 8; los dos resultados difieren solo en el bit que entró
Desplazamiento lógico y aritmético a la derecha en el mismo byte: solo difiere el bit que entra por la izquierda

Manipulación de bits para monitoreo/control

Los dispositivos embebidos a menudo usan un bit de un registro por señal (p. ej., bit $n$ = LED $n$). Usando una máscara — enmascaramiento de bits — puede:

  • establecer el bit $n$: R = R OR una máscara con el bit $n$ establecido.
  • borrar el bit $n$: R = R AND una máscara con el bit $n$ borrado y el resto establecido.
  • invertir el bit $n$: R = R XOR una máscara con el bit $n$ establecido.
  • comprobar el bit $n$: R AND la máscara, luego verificar si el resultado es distinto de cero.
Enmascaramiento de bits en el byte 01001000: establecer bit 2 con OR 00000100 para obtener 01001100; borrar bit 6 con AND 10111111 para obtener 00001000; alternar bit 3 con XOR 00001000 para obtener 01000000
Establecer un bit con OR, borrarlo con AND, invertirlo con XOR — cada operación utilizando una máscara

La manipulación de bits es rápida, consume poca memoria y permite que un solo byte almacene hasta 8 estados encendido/apagado.

En el conjunto de instrucciones del examen, estas operaciones son AND, OR y XOR con una máscara escrita como operando decimal, binario o hexadecimal. Con el ACC conteniendo 10101100:

Instrucción Máscara Resultado en ACC Efecto
AND B00001111 00001111 00001100 mantiene solo los cuatro bits menos significativos (desactiva los demás)
OR #1 00000001 10101101 establece el bit menos significativo, dejando el resto sin cambios
XOR &FF 11111111 01010011 invierte cada bit
AND B00001000 seguido de CMP #0 00001000 00001000 prueba el bit 3: la comparación no es igual, por lo que el bit 3 estaba establecido
LSL #2 10110000 desplaza a la izquierda dos posiciones, perdiendo los dos bits más significativos
LSR #3 00010101 desplaza a la derecha tres posiciones, introduciendo ceros por la izquierda

"Escriba la instrucción que establece el bit menos significativo en 1 y deja los demás sin cambios": OR #1, o OR B00000001. Para desactivar un bit utilice AND con una máscara que tenga un 0 en esa posición y 1s en las demás; para probar un bit, AND con una máscara que tenga un 1 solo en esa posición, luego compare el resultado con cero. En un dispositivo de monitorización, un bit de registro por sensor permite que una sola AND compruebe si un sensor particular está activo, y una OR activa el bit de control de un actuador sin perturbar los demás.

Explorar

Desplaza y enmascara los bits de un byte

Elige un operador y observa cada bit resultante. Un desplazamiento a la izquierda (<<) moves every bit up one place (×2); a right shift (>>) los mueve hacia abajo (÷2); AND con una máscara borra los bits que no quieres.

Vocabulario Entrenar
English Español
mask/mæsk/ máscara
4.3

Definiciones aceptadas por el examinador

Una pregunta de definición se califica según un texto fijo. Aprende estas definiciones exactamente, y da solo una respuesta.

Término Definición
concepto de programa almacenado las instrucciones del programa y los datos están ambos almacenados en la memoria principal, y las instrucciones se buscan y ejecutan una a la vez
registro una ubicación de almacenamiento pequeña y muy rápida dentro del procesador con un propósito específico
Contador de Programa el registro que contiene la dirección de la siguiente instrucción que será buscada
Registro de Dirección de Memoria el registro que contiene la dirección de la ubicación de memoria que se está leyendo o escribiendo
Registro de Datos de Memoria el registro que contiene los datos o la instrucción leídos recientemente, o a punto de ser escritos en la memoria
Registro de Instrucción Actual el registro que contiene la instrucción que se está decodificando y ejecutando actualmente
Acumulador el registro de propósito general que contiene el resultado de la última operación aritmética o lógica
memoria caché memoria pequeña y rápida cercana al procesador que contiene instrucciones y datos de uso frecuente
interrupción una señal de un dispositivo o programa que hace que el procesador pause la tarea actual y ejecute una rutina de servicio de interrupción
lenguaje ensamblador un lenguaje de bajo nivel en el cual cada instrucción mnemotécnica corresponde a una instrucción de código máquina
direccionamiento inmediato el operando es el valor escrito en la instrucción
direccionamiento directo el operando es el contenido de la dirección escrita en la instrucción
direccionamiento indirecto la dirección en la instrucción contiene la dirección del operando
direccionamiento indexado la dirección del operando es la dirección en la instrucción más el contenido del registro índice
direccionamiento relativo la dirección del operando se da como un desplazamiento desde la dirección de la instrucción actual
desplazamiento lógico cada bit se mueve el número dado de posiciones y los ceros rellenan las posiciones vacantes
4.3

Consejos para el examen

  • Aprenda el ciclo de búsqueda-ejecución en términos de transferencia de registros (PC, MAR, MDR, CIR, ACC) y qué incrementa el PC.
  • Nombre la función de cada registro; el bus de direcciones es de un solo sentido, el bus de datos es de doble sentido.
  • Distinga los modos de direccionamiento (inmediato, directo, indirecto, indexado) — una pregunta frecuente.
  • Explique cómo la velocidad del reloj, el número de núcleos, el tamaño de la caché y la longitud de palabra afectan el rendimiento.
  • Para un desplazamiento binario, indique si es lógico o aritmético; un desplazamiento a la izquierda multiplica por 2, un desplazamiento a la derecha divide por 2.

Errores comunes

  • Decir que el PC contiene la instrucción actual, o que el MDR contiene una dirección. El PC contiene la dirección de la siguiente instrucción; el MDR contiene datos o una instrucción, nunca una dirección.
  • Dejar fuera el incremento del PC en la búsqueda, o ponerlo después de la ejecución. Ocurre tan pronto como la dirección ha sido copiada al MAR.
  • Leer LDD 10 como "cargar 10". LDD 10 carga el contenido de la dirección 10; LDM #10 carga el número 10.
  • Poner un valor en la columna ACC para CMP o OUT. Una comparación establece una bandera únicamente; una salida va a la columna de salida.
  • Decir que una interrupción se maneja "inmediatamente". El procesador termina la instrucción actual y verifica las interrupciones al final del ciclo.
  • Usar un desplazamiento lógico a la derecha en un número complementario a dos negativo. Solo un desplazamiento aritmético mantiene el bit de signo.

Lecciones interactivas sobre este tema

Trátalo paso a paso, con ejercicios de verificación instantánea.

Exámenes Anteriores

Más temas en A-Level Ciencias de la Computación

Iniciar sesión o crear cuenta

IGCSE, A-Level & AP