Computadora de Instrucción Simplificada - Enciclopedia
El Computador Instruccional Simplificado (abreviado como SIC) es un sistema de computadora hipotético presentado en System Software: An Introduction to Systems Programming, por Leland Beck. Debido al hecho de que la mayoría de los microprocesadores modernos incluyen funciones sutiles y complejas con el fin de la eficiencia, puede ser difícil aprender programación de sistemas utilizando un sistema real. El Computador Instruccional Simplificado resuelve este problema abstrayendo estos comportamientos complejos a favor de una arquitectura que es clara y accesible para aquellos que desean aprender programación de sistemas.
Arquitectura del SIC
La máquina SIC tiene una dirección básica, almacenando la mayoría de las direcciones de memoria en formato de entero hexadecimal. Similar a la mayoría de los sistemas informáticos modernos, la arquitectura del SIC almacena todos los datos en binario y utiliza el complemento a dos para representar valores negativos a nivel de máquina. El almacenamiento de memoria en SIC consiste en bytes de 8 bits, y todas las direcciones de memoria en SIC son direcciones de bytes. Cualquier tres bytes consecutivos forman un valor de 'palabra' de 24 bits, dirigido por la ubicación del byte con el número más bajo en el valor de palabra. Los valores numéricos se almacenan como valores de palabra, y los valores de caracteres utilizan el sistema ASCII de 8 bits. La máquina SIC no admite hardware de coma flotante y tiene como máximo 32,768 bytes de memoria. También hay una máquina más compleja construida sobre SIC llamada Computador Instruccional Simplificado con Equipo Adicional (SIC/XE). La expansión XE de SIC agrega un tipo de datos de coma flotante de 48 bits, un modo adicional de direccionamiento de memoria y memoria extra (1 megabyte en lugar de 32,768 bytes) a la máquina original. Todo el código ensamblador de SIC es compatible hacia arriba con SIC/XE.
Las máquinas SIC tienen varios registros, cada uno de 24 bits de longitud y tiene tanto una representación numérica como de caracteres:
A (0): Utilizado para operaciones aritméticas básicas; conocido como el registro acumulador.
X (1): Almacena y calcula direcciones; conocido como el registro índice.
L (2): Utilizado para saltar a direcciones de memoria específicas y almacenar direcciones de retorno; conocido como el registro de enlaces.
PC (8): Contiene la dirección de la siguiente instrucción a ejecutar; conocido como el registro del contador de programa.
SW (9): Contiene una variedad de información, como banderas de carry o desbordamiento; conocido como el registro de palabra de estado.
Además de los registros estándar de SIC, hay también cuatro registros generales adicionales específicos de la máquina SIC/XE:
B (3): Utilizado para direccionamiento; conocido como el registro base.
S (4): Sin uso especial, registro general.
T (5): Sin uso especial, registro general.
F (6): Registro acumulador de coma flotante (Este registro es de 48 bits en lugar de 24).
Estos cinco/nueve registros permiten que la máquina SIC o SIC/XE realice la mayoría de las tareas simples en un lenguaje ensamblador personalizado. En el libro de System Software, esto se utiliza con una serie teórica de códigos de operación para ayudar a entender los ensambladores y cargadores-enlazadores necesarios para la ejecución del código ensamblador.
Modos de Direccionamiento para SIC y SIC/XE
El Computador Instruccional Simplificado tiene tres formatos de instrucción, y el complemento de Equipo Adicional incluye un cuarto. Los formatos de instrucción proporcionan un modelo para la gestión de memoria y datos. Cada formato tiene una representación diferente en memoria:
Formato 1: Consiste en 8 bits de memoria asignada para almacenar instrucciones.
Formato 2: Consiste en 16 bits de memoria asignada para almacenar 8 bits de instrucciones y dos segmentos de 4 bits para almacenar operandos.
Formato 3: Consiste en 6 bits para almacenar una instrucción, 6 bits de valores de bandera y 12 bits de desplazamiento.
Formato 4: Únicamente válido en máquinas SIC/XE, consiste en los mismos elementos que el formato 3, pero en lugar de un desplazamiento de 12 bits, almacena una dirección de 20 bits.
Tanto el formato 3 como el formato 4 tienen valores de bandera de 6 bits, que consisten en los siguientes bits de bandera:
n: Bandera de direccionamiento indirecto
i: Bandera de direccionamiento inmediato
x: Bandera de direccionamiento índice
b: Bandera de dirección base relativa
p: Bandera de dirección del contador de programa relativa
e: Bandera de instrucción de formato 4
Modos de Direccionamiento para SIC/XE
Regla 1:
e = 0 : formato 3
e = 1 : formato 4
formato 3:
b = 1, p = 0 (relativo a base)
b = 0, p = 1 (relativo al PC)
b = 0, p = 0 (direccionamiento directo)
formato 4:
b = 0, p = 0 (direccionamiento directo)
x = 1 (índice)
i = 1, n = 0 (inmediato)
i = 0, n = 1 (indirecto)
i = 0, n = 0 (SIC)
i = 1, n = 1 (SIC/XE compatible con SIC)
Regla 2:
i = 0, n = 0 (SIC)
b, p, e forman parte de la dirección.
Sintaxis del ensamblador SIC
SIC utiliza un lenguaje ensamblador especial con sus propios códigos de operación que contienen los valores hexadecimales necesarios para ensamblar y ejecutar programas. A continuación se proporciona un programa de muestra para obtener una idea de cómo podría verse un programa SIC. En el código siguiente, hay tres columnas. La primera columna representa un símbolo forward que almacenará su ubicación en memoria. La segunda columna denota una instrucción SIC (opcode) o un valor constante (BYTE o WORD). La tercera columna toma el valor del símbolo obtenido pasando por la primera columna y utiliza eso para ejecutar la operación especificada en la segunda columna. Este proceso crea un código objeto, y todos los códigos objeto se colocan en un archivo de objetos para ser ejecutados por la máquina SIC.
COPY START 1000
FIRST STL RETADR
CLOOP JSUB RDREC
LDA LENGTH
COMP ZERO
JEQ ENDFIL
JSUB WRREC
J CLOOP
ENDFIL LDA EOF
STA BUFFER
LDA THREE
STA LENGTH
JSUB WRREC
LDL RETADR
RSUB
EOF BYTE C'EOF'
THREE WORD 3
ZERO WORD 0
RETADR RESW 1
LENGTH RESW 1
BUFFER RESB 4096
.
. SUBRUTINA PARA LEER REGISTRO EN BUFFER
.
RDREC LDX ZERO
LDA ZERO
RLOOP TD INPUT
JEQ RLOOP
RD INPUT
COMP ZERO
JEQ EXIT
STCH BUFFER,X
TIX MAXLEN
JLT RLOOP
EXIT STX LENGTH
RSUB
INPUT BYTE X'F1'
MAXLEN WORD 4096
.
. SUBRUTINA PARA ESCRIBIR REGISTRO DESDE BUFFER
.
WRREC LDX ZERO
WLOOP TD OUTPUT
JEQ WLOOP
LDCH BUFFER,X
WD OUTPUT
TIX LENGTH
JLT WLOOP
RSUB
OUTPUT BYTE X'06'
END FIRST
Si se ensamblara este programa, se obtendría el código objeto descrito a continuación. El comienzo de cada línea consta de un tipo de registro y valores hexadecimales para las ubicaciones de memoria. Por ejemplo, la primera línea es un registro 'H', los primeros 6 dígitos hexadecimales significan su ubicación de inicio relativa, y los últimos 6 dígitos representan el tamaño del programa. Las líneas a lo largo son similares, con cada registro 'T' que consta de 6 dígitos hexadecimales para indicar la ubicación de inicio de la línea, 2 dígitos hexadecimales para indicar el tamaño (en bytes) de la línea y los códigos objeto creados durante el proceso de ensamblado.
HCOPY 00100000107A
T0010001E1410334820390010362810303010154820613C100300102A0C103900102D
T00101E150C10364820610810334C0000454F46000003000000
T0020391E041030001030E0205D30203FD8205D2810303020575490392C205E38203F
T0020571C1010364C0000F1001000041030E02079302064509039DC20792C1036
T002073073820644C000006
E001000
Programa de muestra
A continuación se presenta un programa que ilustra el movimiento de datos en SIC.
LDA FIVE
STA ALPHA
LDCH CHARZ
STCH C1
ALPHA RESW 1
FIVE WORD 5
CHARZ BYTE C'Z'
C1 RESB 1
Emulando el sistema SIC
Dado que las máquinas SIC y SIC/XE no son máquinas reales, la tarea de construir un emulador de SIC es a menudo parte del curso en una clase de programación de sistemas. El propósito del SIC es enseñar a los programadores de sistemas de nivel introductorio o a los estudiantes universitarios cómo escribir y ensamblar código por debajo de lenguajes de nivel superior como C y C++. Con eso dicho, hay algunas fuentes de programas de emulación de SIC en la web, aunque sean poco frecuentes.
Un ensamblador y un simulador escritos por el autor, Leland en Pascal, están disponibles en su página web educativa en ftp://rohan.sdsu.edu/faculty/beck
Simulador y ensamblador SIC/XE descargable en https://sites.google.com/site/sarimohsultan/Projects/sic-xe-simulator-and-assembler
Emulador SIC, ensamblador y algunos programas de ejemplo escritos para SIC descargables en http://sicvm.sourceforge.net/home.php
SicTools - máquina virtual, simulador, ensamblador y enlazador para la computadora SIC/XE disponible en https://jurem.github.io/SicTools/
Ver también
Computadora
MIX – Computadora hipotética por Donald Knuth
Software de sistema
Lenguaje ensamblador
Registro del procesador
Máquina virtual
Referencias
Beck, Leland (1996), System Software: An Introduction to Systems Programming (3 ed.), Addison-Wesley, ISBN 0-201-42300-6
Información de sistemas SIC y SIC/XE: https://web.archive.org/web/20121114101742/http://www-rohan.sdsu.edu/~stremler/2003_CS530/SicArchitecture.html
Lista de instrucciones SIC y SIC/XE: http://teaching.yfolajimi.com/uploads/3/5/6/9/3569427/_sp04.ppt
Información breve sobre direccionamiento de memoria: http://www.unf.edu/~cwinton/html/cop3601/s10/class.notes/basic4-SICfmts.pdf
Direccionamiento en modo SIC/XE: http://uhost.rmutp.ac.th/wanapun.w/--j--/ch2-2.pdf
Enlaces externos
SICvm Una máquina virtual basada en un Computador Instruccional Simplificado (SIC)