Saltar al contenido

Fundamentos del procesador

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

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

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 + 中文 quemados en pantalla

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 de Von Neumann 冯·诺依曼体系结构 subyace en casi todas las computadoras de propósito general:

  • una memoria única — la Memoria de Acceso Inmediato 立即存取存储器 (IAS) — almacena tanto instrucciones del programa como datos (el concepto de programa almacenado 存储程序).
  • un procesador 处理器 (CPU) busca instrucciones de la memoria y las ejecuta una a la vez.
  • 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.

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 (suma, resta, ...) y lógicas (AND, OR, comparaciones). Toma operandos de los registros 寄存器 y coloca los resultados de vuelta en un registro.

Unidad de Control (CU)

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

Reloj del sistema

El reloj envía un flujo constante de pulsos que mantienen al CPU sincronizado. Cada instrucción toma 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 memorias pequeñas y muy rápidas dentro del CPU. Los registros de uso especial 专用寄存器 tienen cada uno una función fija en el ciclo:

  • Contador de Programa 程序计数器 (PC) — la dirección de la siguiente instrucción.
  • 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 vienen de la memoria.
  • Registro de Instrucción Actual 当前指令寄存器 (CIR) — la instrucción que se está decodificando.
  • Acumulador 累加器 (ACC) — el valor sobre el que trabaja la ALU.
  • Registro de Estado 状态寄存器 — mantiene banderas 标志 (acarreo, cero, negativo, desbordamiento) usadas por las ramificaciones. Cada bandera es un bit, establecido o eliminado por la ALU después de una operación: la bandera cero tras una comparación que coincidió, la bandera de acarreo cuando una suma desbordó el registro, la bandera negativa cuando un resultado es negativo. Un salto condicional lee las banderas para decidir si debe ramificar, y una bandera de desbordamiento puede generar una interrupción.
  • Registro de Índice 变址寄存器 — un desplazamiento añadido a una dirección en el direccionamiento indexado; incrementarlo permite recorrer un array un elemento a la vez.

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 uso 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] ("copia el contenido del PC en el 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
Inglés Chino Pinyin
Von Neumann architecture/vɒn ˈnɔɪmən ˈɑːkɪtektʃə/ 冯·诺依曼体系结构 féng · nuò yī màn tǐ xì jié gòu
Immediate Access Store/ɪˈmiːdɪət ˈækses stɔː/ 立即存取存储器 lì jí cún qǔ cún chǔ qì
stored program/stɔːd ˈprəʊɡræm/ 存储程序 cún chǔ chéng xù
processor/ˈprəʊsesə/ 处理器 chǔ lǐ qì
arithmetic and logic unit/ˌærɪθˈmetɪk ənd ˈlɒdʒɪk ˈjuːnɪt/ 算术逻辑单元 suàn shù luó jí dān yuán
ALU/ˌeɪ el ˈjuː/ 算术逻辑单元 suàn shù luó jí dān yuán
buses/ˈbʌsɪz/ 总线 zǒng xiàn
address bus/əˈdres bʌs/ 地址总线 dì zhǐ zǒng xiàn
data bus/ˈdeɪtə bʌs/ 数据总线 shù jù zǒng xiàn
word size/wɜːd saɪz/ 字长 zì cháng
number of cores/ˈnʌmbə ɒv kɔːz/ 核心 hé xīn
cores/kɔːz/ 核心 hé xīn
amount of RAM/əˈmaʊnt ɒv ræm/ 随机存取存储器 suí jī cún qǔ cún chǔ qì
RAM/ræm/ 随机存取存储器 suí jī cún qǔ cún chǔ qì
page/peɪdʒ/ 页 yè
cache memory/kæʃ ˈmeməri/ 高速缓存 gāo sù huǎn cún
cache/kæʃ/ 高速缓存 gāo sù huǎn cún
secondary storage/ˈsekəndəri ˈstɔːrɪdʒ/ 辅助存储器 fǔ zhù cún chǔ qì
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
Inglés Chino Pinyin
port/pɔːt/ 端口 duān kǒu
peripheral/pəˈrɪfərəl/ 外围设备 wài wéi shè bèi
register transfer notation/ˈredʒɪstə ˈtrænsfɜː nəʊˈteɪʃn/ 寄存器传送记法 jì cún qì chuán sòng jì fǎ
interrupt service routine/ˈɪntərʌpt ˈsɜːvɪs ruːˈtiːn/ 中断服务程序 zhōng duàn fú wù chéng xù
interrupt register/ˈɪntərʌpt ˈredʒɪstə/ 中断寄存器 zhōng duàn jì cún qì
stack/stæk/ 栈 zhàn
assembly language/əˈsemblɪ ˈlæŋɡwɪdʒ/ 汇编语言 huì biān yǔ yán
machine code/məˈʃiːn kəʊd/ 机器码 jī qì mǎ
mnemonics/nɪˈmɒnɪks/ 助记符 zhù jì fú
assembler/əˈsemblə/ 汇编器 huì biān qì
symbol table/ˈsɪmbl ˈteɪbl/ 符号表 fú hào biǎo
label/ˈleɪbl/ 标签 biāo qiān
forward references/ˈfɔːwəd ˈrefrənsɪz/ 前向引用 qián xiàng yǐn yòng
4.1

Factores que afectan el rendimiento

  • velocidad del reloj — más ciclos por segundo.
  • número de núcleos 核心 — una CPU multi-núcleo ejecuta varios hilos a la vez.
  • 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 de trabajo; poca RAM obliga al SO a paginar 页 en disco.
  • tamaño de la 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.

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
Inglés Chino Pinyin
fetch-execute cycle/fetʃ ˈeksɪkjuːt ˈsaɪkl/ 取指-执行周期 qǔ zhǐ - zhí xíng zhōu qī
special purpose registers/ˈspeʃl ˈpɜːpəs ˈredʒɪstəz/ 专用寄存器 zhuān yòng jì cún qì
Program Counter/ˈprəʊɡræm ˈkaʊntə/ 程序计数器 chéng xù jì shù qì
Memory Address Register/ˈmeməri əˈdres ˈredʒɪstə/ 内存地址寄存器 nèi cún dì zhǐ jì cún qì
Memory Data Register/ˈmeməri ˈdeɪtə ˈredʒɪstə/ 内存数据寄存器 nèi cún shù jù jì cún qì
Current Instruction Register/ˈkʌrənt ɪnˈstrʌkʃn ˈredʒɪstə/ 当前指令寄存器 dāng qián zhǐ lìng jì cún qì
accumulator/əˈkjuːmjʊleɪtə/ 累加器 lěi jiā qì
Status Register/ˈsteɪtəs ˈredʒɪstə/ 状态寄存器 zhuàng tài jì cún qì
flags/flæɡz/ 标志 biāo zhì
4.1

Interrupciones

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

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 interrupción 中断服务程序 (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.

"Explica cómo se detecta y maneja una interrupción de un dispositivo de entrada en el ciclo B-E" es una respuesta de cuatro puntos con estos elementos: el dispositivo envía una señal de interrupción que activa 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 haya terminado de ejecutarse; si una bandera está activada y la interrupción tiene mayor prioridad que la tarea actual, el contenido del PC y los otros registros se guardan en la pila 栈; la dirección de la rutina de servicio de interrupción se carga en el PC y la rutina se ejecuta; cuando termina, 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
Inglés Chino Pinyin
interrupt/ˈɪntərʌpt/ 中断 zhōng duà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 pasadas manejan 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

El paso 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. El paso 2 lee el programa nuevamente y traduce cada línea a código máquina, reemplazando cada mnemotécnico por su opcode 操作码 y cada dirección simbólica por el número de la tabla de símbolos: LDD COUNT se convierte en el opcode para LDD con operandos 操作数 105, y JPN LOOP se convierte en el opcode para JPN con operandos 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 podría, por eso el ensamblador realiza dos.

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
Inglés Chino Pinyin
operand/ˈɒpərænd/ 操作数 cāo zuò shù
register/ˈredʒɪstə/ 寄存器 jì cún qì
control unit/kənˈtrəʊl ˈjuːnɪt/ 控制单元 kòng zhì dān yuán
clock speed/klɒk spiːd/ 时钟频率 shí zhōng pín lǜ
opcode/ˈɒpkəʊd/ 操作码 cāo zuò mǎ
4.2

Modos de direccionamiento

El modo de direccionamiento 寻址方式 (los modos de acceso) indica cómo encuentra el operando la CPU:

  • 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 el dato. LDI 200.
  • direccionamiento indexado 变址寻址 — la dirección efectiva es address + index register; usado para arreglos. LDX 100 con IR = 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: dirección 200 = 250, dirección 250 = 99, dirección 105 = 7. El registro índice contiene 5. ¿Qué hay en el acumulador después de cada una de⟩LDM #200, LDD 200, LDI 200 y LDX 100? Siga la distancia que debe recorrer cada modo. LDM #200 es inmediato: el operando es el número escrito en la instrucción, por lo que el acumulador contiene 200. LDD 200 es directo: vaya a la dirección 200 y tome lo que haya allí: 250. LDI 200 es indirecto: la dirección 200 contiene 250, que es otra dirección, así que continúe hasta la dirección 250: 99. LDX 100 es indexado: sume el registro índice a la dirección, $100 + 5 = 105$, y lea la dirección 105: 7. Cuente los saltos para diferenciarlos: inmediato 0, directo 1, indirecto 2, indexado 1 (una vez que se ha añadido el índice).

Vocabulario Entrenar
Inglés Chino Pinyin
Index Register/ˈɪndeks ˈredʒɪstə/ 变址寄存器 biàn zhǐ jì cún qì
indexed addressing/ˈɪndekst əˈdresɪŋ/ 变址寻址 biàn zhǐ xún zhǐ
general-purpose registers/ˈdʒenərəl ˈpɜːpəs ˈredʒɪstəz/ 通用寄存器 tōng yòng jì cún qì
register transfer/ˈredʒɪstə ˈtrænsfɜː/ 寄存器传送 jì cún qì chuán sòng
control bus/kənˈtrəʊl bʌs/ 控制总线 kòng zhì zǒng xiàn
addressing mode/əˈdresɪŋ məʊd/ 寻址方式 xún zhǐ fāng shì
immediate addressing/ɪˈmiːdɪət əˈdresɪŋ/ 立即寻址 lì jí xún zhǐ
direct addressing/daɪˈrekt əˈdresɪŋ/ 直接寻址 zhí jiē xún zhǐ
indirect addressing/ɪndaɪˈrekt əˈdresɪŋ/ 间接寻址 jiàn jiē xún zhǐ
relative addressing/ˈrelətɪv əˈdresɪŋ/ 相对寻址 xiāng duì xún zhǐ
logical shift/ˈlɒdʒɪkl ʃɪft/ 逻辑移位 luó jí yí wèi
cyclic shift/ˈsaɪklɪk ʃɪft/ 循环移位 xún huán yí wèi
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.

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
AND <dirección> Operación AND bit a bit del contenido del ACC con el contenido de <dirección>
XOR #n / Bn / &n Operación XOR bit a bit del contenido del ACC con el operando
XOR <dirección> Operación XOR bit a bit del contenido del ACC con el contenido de <dirección>
OR #n / Bn / &n Operación OR bit a bit del contenido del ACC con el operando
OR <dirección> Operación OR bit a bit del contenido del ACC con el contenido de <dirección>
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 a la ubicación de memoria con contenido
Todas las preguntas asumirán que solo hay un registro de propósito general disponible (Acumulador). ACC denota Acumulador. IX denota Registro Índice. <dirección> 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 a la derecha por algún lugar, rellenando las 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 con signo negativo permanezca negativo. Un desplazamiento cíclico (rotar) introduce el bit que cae de un extremo de nuevo en el otro extremo, por lo 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 suelen utilizar un único bit 位 de un registro por señal (p. ej., bit $n$ = LED $n$). Mediante una máscara 掩码 — enmascaramiento de bits—, puedes:

  • 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
Inglés Chino Pinyin
bit/bɪt/ 位 wèi
mask/mæsk/ 掩码 yǎn mǎ
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