L3 4 Lenguaje máquina de un computador Code 2
¿Qué es el lenguaje máquina del procesador Code 2?
Introducción al lenguaje máquina
- Se presenta el tema 3 de estructura de computadores, enfocándose en el lenguaje máquina del procesador Code 2 utilizado como modelo a lo largo del curso.
Elementos accesibles desde el lenguaje máquina
- Se describen los elementos a los que se puede acceder directamente desde el lenguaje máquina, incluyendo registros, memoria y puertos de entrada/salida.
- La longitud de palabra del Code 2 es de 16 bits; todos los registros y datos operan con esta longitud.
- Existen 16 registros de uso general (r0 a rf), una unidad aritmético-lógica para operaciones básicas y biestables indicadores para estado (cero, signo, acarreo).
- La memoria tiene capacidad para 64k palabras (128 kb), con direcciones que van desde 00 hasta fff en hexadecimal.
- Hay un total de 256 puertos de entrada (ip00 a ipff) y 256 puertos de salida (op00 a opff).
Formato de datos e instrucciones
- Los datos son enteros de 16 bits en complemento a dos; se explica la representación del signo y valor absoluto.
- En la descripción del lenguaje máquina se hace referencia a bits individuales dentro de una palabra, identificando bit más bajo como bit 0 y más alto como bit 15.
Tipos y formatos de instrucciones
- Todas las instrucciones ocupan 16 bits; los primeros cuatro corresponden al código de operación.
- Se presentan cinco formatos diferentes para las instrucciones: F0, F1, F2, F3 y F4, cada uno con su estructura específica relacionada al código operativo y registros.
Ejemplo práctico: Instrucción ADD
- Se introduce un ejemplo práctico sobre la instrucción "ADD", que suma contenidos de dos registros almacenando el resultado en otro registro.
- Los registros fuente se denominan RS y RA; el registro destino donde se almacena el resultado es RX.
- El código binario asignado para la instrucción "ADD" es '0110' o '6' en decimal; utiliza formato F4.
Codificación binaria
- Para codificar la instrucción "ADD", se especifica primero el código operativo seguido por los registros involucrados en la operación.
Instrucciones de Suma y Acceso a Memoria en Código Máquina
Introducción a la Instrucción de Suma
- Se presenta la instrucción para sumar R1 (00 1 en binario) y R8 (1 en binario), resultando en R9. El código decimal correspondiente es 6918.
- La codificación de la suma se realiza utilizando el mnemotécnico "add", donde R9 es 9, R1 es 1 y R8 es 8.
Tipos de Instrucciones
- Las primeras seis instrucciones permiten transferir datos entre memoria y registros, incluyendo cargar, almacenar, dar valores iniciales y manejar entradas/salidas.
- Se introducen las instrucciones aritmético-lógicas que incluyen suma, restas, desplazamientos y control como saltos o llamadas a rutinas.
Ciclos de Ejecución
- Cada instrucción consume un número específico de ciclos; el tiempo de ejecución se calcula multiplicando los ciclos por el periodo del reloj.
- Se explica que las instrucciones de acceso a memoria son fundamentales para intercambiar datos entre memoria y procesador.
Instrucciones LD y ST
- La instrucción "LD" carga un dato desde memoria a un registro; "ST" almacena el contenido de un registro en una posición específica de memoria.
- La dirección efectiva se obtiene sumando el contenido del registro Rd con un valor V indicado en los bits menos significativos.
Ejemplos Prácticos
- Un ejemplo muestra cómo llevar el contenido desde la dirección m00 BB al registro R4 usando LD r4 BB, resultando en código DLD.
- Otro ejemplo ilustra cómo almacenar el contenido del registro RF en la dirección 007A usando ST storage 7A.
Direccionamiento Efectivo
- Se discute cómo las direcciones efectivas funcionan con registros índices cuando V se mantiene constante mientras Rd varía.
Instrucciones de Carga Inmediata y Transferencia de Datos
Carga Inmediata Baja
- La carga inmediata baja permite cargar un valor específico en la parte menos significativa de un registro, dejando los 8 bits más significativos en cero. El código de operación para esta instrucción es 0010 (2 en decimal).
Carga Inmediata Alta
- La carga inmediata alta reemplaza los 8 bits más significativos del registro especificado con el valor indicado, mientras que los bits menos significativos permanecen sin cambios. Su mnemónico es
lhiy su código de operación es 0011 (3 en decimal).
Ejemplo de Uso: LLI y LHI
- Al ejecutar
lli r7 ff, se establece a cero los 8 bits más significativos y se cargan los menos significativos con el valorff. En binario, esto se traduce a una serie específica de ceros y unos.
- Con la instrucción
lhi r7 aa, se cambian solo los 8 bits más significativos poraa, manteniendo inalterados los menos significativos.
Instrucciones de Entrada y Salida
Instrucción IN
- La instrucción
intransfiere datos desde un puerto de entrada a un registro. Se especifica el registro destino y el puerto involucrado. El código de operación es 4.
Instrucción OUT
- La instrucción
outrealiza la acción opuesta, enviando el contenido de un registro a un puerto de salida. Aquí también se especifica el registro origen y el puerto destino; su código es c.
Instrucciones Aritméticas y Lógicas
Operaciones Básicas
- Las instrucciones aritméticas incluyen suma, resta y operaciones lógicas como NAND. Cada una tiene su propio mnemónico y código correspondiente, siguiendo un formato estándar.
Tabla Resumen
- Se presenta una tabla que resume las operaciones aritméticas básicas junto con sus códigos operacionales para facilitar la comprensión.
Operaciones Lógicas: NAND
Definición e Implementación
- La operación lógica NAND combina dos entradas mediante una intersección lógica seguida del complemento. Los resultados son predecibles según las combinaciones binarias ingresadas.
Ejemplos Prácticos
Suma Aritmética
- Un ejemplo práctico muestra cómo sumar dos registros (
ra+rb) usando la instrucciónads r2 ra rb, donde el resultado se almacena en otro registro (r2).
Resta Aritmética
- Similarmente, restar valores entre registros puede ser realizado utilizando instrucciones específicas que almacenan resultados en registros designados.
Complemento mediante NAND
Aplicaciones del Complemento
- Utilizando la operación NAND con uno puede obtener el complemento bit a bit, lo cual permite manipular datos dentro del sistema computacional eficientemente.
Desplazamientos en Registros y Control de Instrucciones
Desplazamiento a la Izquierda
- Se utiliza el formato F1 para las instrucciones de desplazamiento, donde se desplazan todos los bits hacia la izquierda. El bit más significativo se almacena en el biestable de acarreo y se introduce un cero en la última posición.
Desplazamiento a la Derecha
- En el desplazamiento a la derecha, todos los bits se mueven hacia la derecha. El bit menos significativo se almacena en el biestable de acarreo y un cero es introducido como bit más significativo.
Tipos de Desplazamientos
- Los nemónicos para estas operaciones son:
shl(shift left)
shr(shift right)
shra(shift right aritmético).
Ejemplo Práctico de Desplazamiento
- Si el registro R7 tiene un contenido específico, al realizar un desplazamiento a la izquierda, el bit más significativo pasará al biestable de acarreo y todos los demás bits se desplazarán uno a la izquierda.
Resultados del Desplazamiento Aritmético
- Al ejecutar un desplazamiento aritmético a la derecha (
shra) sobre R7, todos los bits se desplazan hacia la derecha. El bit menos significativo entra al biestable C y el bit más significativo es replicado.
Instrucciones de Control: Saltos y Llamadas
Instrucciones de Salto
- Las instrucciones de salto permiten cambiar la dirección de ejecución del programa. Antes del salto, es necesario cargar en Rd la dirección objetivo.
Tipos de Saltos Condicionales
- Existen cinco tipos:
- Salto incondicional.
- Salto si Z = 1 (resultado cero).
- Salto si S = 1 (resultado negativo).
- Salto si hay acarreo.
- Salto si hay desbordamiento.
Formato e Identificación
- El formato para estas instrucciones es F2. Los primeros cuatro bits corresponden al código de operación y los siguientes cuatro al código de condición.
Ejemplos Prácticos
- Un ejemplo incluye saltar a una instrucción específica cargando previamente Rd con su dirección correspondiente usando instrucciones como carga inmediata baja o alta.
Llamadas a Subrutinas
Estructura General
- La instrucción
callejecuta una subrutina comenzando desde una dirección contenida en Rd. Es esencial cargar esta dirección antes del llamado.
Retorno desde Subrutinas
- Al finalizar una subrutina, se utiliza una instrucción
returnpara volver al punto donde fue llamada originalmente.
Variantes en Llamadas Condicionales
Introducción a la Pila y Subrutinas en Programación
Configuración de la Pila
- Antes de realizar la primera llamada a una subrutina, es necesario cargar en el registro
rela dirección de la cabecera de pila, que suele ser una dirección alta de memoria (ejemplo:fff). La pila se llena hacia direcciones bajas.
- Para evitar que la pila se solape con el programa o datos, se debe situar
reenffff. Esto se logra mediante dos instrucciones de carga inmediata.
Llamada a Subrutinas
- Al llamar a una subrutina que comienza en la dirección
00 f0, si la última operación fue cero, se utiliza la instrucciónczpara verificar si Z es 0.
- Se carga en el registro
Rdla dirección00 f0usando una instrucción de carga inmediata baja antes de hacer la llamada con el código D1 D1.
Instrucciones Importantes
- Todas las subrutinas deben finalizar con una instrucción
retour, que permite regresar al programa principal. Esta instrucción tiene un formato específico y solo utiliza el código de operación.
- La instrucción de parada detiene el funcionamiento del sistema y lo coloca en un estado denominado "espera". Este proceso implica fases iterativas de captación y ejecución.
Estado de Espera
- En ciertas condiciones, un B estable puede llevar al sistema a un ciclo indefinido hasta que se accione un pulsador para continuar. Luego vuelve a las fases normales hasta entrar nuevamente en espera.
- La instrucción mnemónica para parar es "Halt", cuyo código es F. Similarmente, solo usa el campo del código operativo.
Resumen y Conclusiones
- El computador Code2 opera con palabras de 16 bits; todos los registros y operaciones están organizados así. Las instrucciones utilizan los cuatro bits más significativos para definir su operación.
- Existen 16 instrucciones distintas disponibles; seis permiten transferir datos entre memoria y registros, además hay instrucciones específicas para entrada/salida.
- También hay seis instrucciones aritméticas lógicas (como suma y resta), junto con instrucciones de control como saltos condicionales e incondicionales.