Lección 1Operaciones de subrutina y pila: JSR/RTS, semántica de empuje/popal de pila y convenciones de puntero de pilaEsta sección detalla las instrucciones de llamada y retorno de subrutina, semántica de empuje y popal de pila, actualizaciones del puntero de pila, convenciones de llamada y cómo las llamadas anidadas, interrupciones y reentrancia dependen de un modelo de pila bien definido.
Comportamiento de instrucción JSR y llamadaManejo de dirección de retorno RTSFormatos de datos de empuje y popalDirección de crecimiento del puntero de pilaConvenciones de llamada y marcosInteracción con interrupcionesLección 2Instrucciones aritméticas y lógicas: ADD, SUB, AND, OR, CMP con comportamiento de banderas y manejo de acarreo/préstamoEsta sección cubre instrucciones aritméticas y lógicas como ADD, SUB, AND, OR y CMP, detallando comportamiento de banderas, manejo de acarreo y préstamo, interpretación con signo vs sin signo y estrategias de detección de desbordamiento.
Semántica de operaciones ADD y SUBComportamiento lógico AND, OR, XORInstrucciones de comparación y pruebaBanderas de acarreo, préstamo y desbordamientoResultados con signo vs sin signoLección 3Diseño de mnemónicos concisos y codificación de operandos para claridad e implementabilidadEsta sección cubre cómo crear mnemónicos legibles y formatos de operandos que se mapeen limpiamente al hardware, equilibrando ortogonalidad, densidad de codificación, simplicidad de decodificación y extensibilidad a largo plazo del conjunto de instrucciones.
Elección de nomenclatura consistente de mnemónicosOrden de operandos y convenciones de sintaxisCodificación de campos y subcampos de opcodeEquilibrio entre ortogonalidad y complejidadExtensibilidad para instrucciones futurasLección 4Codificación mínima de opcode: opcodes, bytes de operando, tamaños de instrucción y esquemas de codificación de ejemploEsta sección se enfoca en codificaciones compactas de opcode, separando bytes de opcode y operando, usando esquemas de prefijo o extensión, e ilustrando compensaciones entre codificaciones densas, complejidad de decodificación y escalabilidad futura.
Selección del ancho del campo de opcodeCodificación de especificadores de operandoEsquemas de opcode de prefijo y escapeFormatos de instrucciones de longitud variableEjemplos de codificaciones compactasLección 5Taxonomía de clases de instrucciones: movimiento de datos, aritmética/lógica, flujo de control, pila/subrutina y E/SEsta sección clasifica las instrucciones en grupos de movimiento de datos, aritmética y lógica, flujo de control, pila y subrutina, y E/S, mostrando cómo una taxonomía clara ayuda a la documentación, decodificación y diseño del backend del compilador.
Grupo de instrucciones de movimiento de datosGrupo de instrucciones aritméticas y lógicasGrupo de flujo de control y saltosGrupo de instrucciones de pila y subrutinaGrupo de instrucciones de E/S y sistemaLección 6Tabla de temporización y tamaño de instrucciones: cómo decidir longitud de bytes de instrucción y ciclos de ejecuciónEsta sección describe cómo asignar longitudes de bytes de instrucción y conteos de ciclos, relacionando ancho de bus, sistema de memoria y microarquitectura con tablas de temporización que guían a programadores, toolchains y ajuste de rendimiento.
Factores que afectan el tamaño de instrucciónComponentes de ciclo y micro-pasosTablas de temporización para cada modo de direccionamientoImpacto de cachés y estados de esperaUso de datos de temporización para optimizaciónLección 7Modos de direccionamiento: inmediato, directo (página cero/datos), absoluto, indirecto, registro e implícitoEsta sección explora modos de direccionamiento comunes, incluyendo inmediato, directo o página cero, absoluto, indirecto, registro e implícito, explicando patrones de codificación, cálculo de dirección efectiva y casos de uso típicos.
Operandos literales inmediatosDireccionamiento directo o página ceroDireccionamiento absoluto y extendidoDireccionamiento indirecto e indexadoModos de registro e implícitosLección 8Instrucciones de flujo de control: JMP, saltos condicionales (BEQ/BNE/BC/BN), direccionamiento relativo vs absoluto y su rangoEsta sección analiza instrucciones de flujo de control como saltos y saltos condicionales, comparando direccionamiento relativo y absoluto, codificando rangos de salto y manejando efectos de pipeline como ranuras de retardo o predicción de saltos.
Codificaciones de salto incondicionalConjunto de condiciones de salto condicionalObjetivos relativos vs absolutosRango de salto y dimensionamiento de desplazamientoInteracción con pipelinesLección 9Instrucciones de acceso a E/S y memoria mapeada: IN/OUT o cargas/almacenamientos mapeados y consideraciones de efectos secundariosEsta sección explica instrucciones de E/S y acceso mapeado en memoria, incluyendo puertos estilo IN y OUT, comportamiento de carga y almacenamiento mapeados, restricciones de ordenamiento y temporización, y cómo documentar efectos secundarios visibles para el software.
E/S aislada vs mapeada en memoriaSemántica de instrucciones IN y OUTTemporización de E/S y manejo de estados de esperaEfectos secundarios y semántica volátilAtomicidad y garantías de ordenamientoLección 10Instrucciones de movimiento de datos: equivalentes LDA/STA, modos soportados, efectos en banderas y ciclosEsta sección examina instrucciones estilo carga y almacenamiento, modos de direccionamiento soportados, interacción con banderas de condición, y cómo los conteos de ciclos y actividad de bus difieren entre operaciones de registro, memoria y movimiento de datos especiales.
Formas de carga de acumulador y registroInstrucciones de almacenamiento y efectos secundarios en memoriaModos de direccionamiento soportados para movimientosComportamiento de banderas en cargas y almacenamientosConteo de ciclos para variantes de movimiento