L3 4 Lenguaje máquina de un computador Code 2

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 lhi y 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 valor ff. 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 por aa, manteniendo inalterados los menos significativos.

Instrucciones de Entrada y Salida

Instrucción IN

  • La instrucción in transfiere 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 out realiza 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ón ads 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 call ejecuta 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 return para 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 re la 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 re en ffff. 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ón cz para verificar si Z es 0.
  • Se carga en el registro Rd la dirección 00 f0 usando 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.
Video description

Más información acerca de mis videoclases sobre Fundamentos de Informática puede verse en: http://atc.ugr.es/pages/personal/propia/alberto_prieto/videoclases Lección correspondiente a la serie Fundamentos de Informática realizada por Alberto Prieto Espinosa, catedrático del Dto. de Arquitectura y Tecnología de Computadores de la Universidad de Granada. El material básico procede de los textos "Introducción a la Informática", A.Prieto, A.Lloris, J.C.Torres, McGraw-Hill, 2006 y "Conceptos de Informática", A.Prieto, B.Prieto, Serie Schaum, McGrawHill, 2005. En estos textos se incluyen numerosos ejercicios y problemas, algunos de ellos resueltos.