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 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 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 en RTSFormatos de datos de empuje y popalDirección de crecimiento del puntero de pilaConvenciones de llamada y framesInteracción con interrupcionesLección 2Instrucciones aritméticas y lógicas: ADD, SUB, AND, OR, CMP con comportamiento de flags 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 flags, 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 pruebaFlags 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, balanceando 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 opcodeBalance 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 instrucción de longitud variableEjemplos de codificaciones compactasLección 5Taxonomía de clases de instrucción: movimiento de datos, aritmética/lógica, flujo de control, pila/subrutina e I/OEsta sección clasifica instrucciones en grupos de movimiento de datos, aritmética y lógica, flujo de control, pila y subrutina, e I/O, mostrando cómo una taxonomía clara ayuda en documentación, decodificación y diseño de backend de 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 I/O y sistemaLección 6Tabla de temporización y tamaño de instrucción: 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 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 delay slots o predicción de ramas.
Codificaciones de salto incondicionalConjunto de condiciones de salto condicionalObjetivos relativos vs absolutosRango de salto y dimensionamiento de offsetInteracción con pipelinesLección 9Instrucciones de acceso I/O y mapeado en memoria: IN/OUT o cargas/almacenamientos mapeados y consideraciones de efectos secundariosEsta sección explica instrucciones I/O 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 software.
I/O aislado vs mapeado en memoriaSemántica de instrucciones IN y OUTTemporización I/O y manejo de estados de esperaEfectos secundarios y semántica volátilGarantías de atomicidad y ordenamientoLección 10Instrucciones de movimiento de datos: equivalentes LDA/STA, modos soportados, efectos en flags y ciclosEsta sección examina instrucciones estilo carga y almacenamiento, modos de direccionamiento soportados, interacción con flags 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 flags en cargas y almacenamientosConteo de ciclos para variantes de movimiento