SQUOZE (abreviado como SQZ ) es una representación de memoria eficiente de un archivo de programa de objeto fuente y reubicable combinado con una tabla de símbolos en tarjetas perforadas que se introdujo en 1958 con el ensamblador SCAT [1] [2] en el sistema operativo SHARE (SOS) para el IBM 709. [ 3] [4] Un programa en este formato se llamaba baraja SQUOZE . [5] [6] [7] También se utilizó en máquinas posteriores, incluidas las IBM 7090 y 7094 .
Una baraja SQUOZE contiene una forma binaria codificada del código de lenguaje ensamblador original; las barajas SQUOZE se convierten a código de máquina absoluto y se almacenan en la memoria mediante un programa de carga. [8] [9] [10]
En la codificación SQUOZE , los identificadores en la tabla de símbolos se representaban en un alfabeto de 50 caracteres , lo que permitía que una palabra de máquina de 36 bits representara seis caracteres alfanuméricos más dos bits de bandera, ahorrando así dos bits por cada seis caracteres, [6] [1] porque los seis bits normalmente asignados para cada carácter podían almacenar hasta 64 estados en lugar de solo los 50 estados necesarios para representar las 50 letras del alfabeto, y 50 6 < 2 34 .
El uso de la base 50 ya ahorra un bit cada tres caracteres, por lo que se utilizó en dos bloques de tres caracteres. El manual [1] tiene una fórmula para codificar seis caracteres ABCDEF:
Por ejemplo, "SQUOZE", normalmente de 36 bits 35 33 37 31 44 17
(base 8) , se codificaría en dos partes de 17 bits para que quepan en los 34 bits como ( 0o220231 << 17 ) | 0o175473 == 0o110114575473
.
Un ejemplo más simple de la misma lógica sería cómo un número BCD de tres dígitos ocuparía 12 bits, como 987: 9 8 7
(base 16) 1001 1000 0111
(base 2) , pero cualquier valor de este tipo podría almacenarse en 10 bits directamente, ahorrando dos bits, como 987: 3db
(base 16) 11 1101 1011
(base 2) .
"Squoze" es un participio pasado jocoso del verbo "apretar". [5] [6]
El nombre SQUOZE se tomó prestado más tarde para esquemas de codificación de caracteres similares utilizados en las máquinas DEC ; [4] tenían un alfabeto de 40 caracteres (50 en octal ) y se llamaban DEC RADIX 50 y MOD40 , [11] pero a veces se les apodaba DEC Squoze .
[…] Posiciones de bit utilizadas […] Bit 0 […] Bit 1 […] Bits 2–35 […] Representación en base 50 del símbolo con carácter de encabezamiento. […] La representación en base 50 de un símbolo se obtiene de la siguiente manera: […] a. Si el símbolo tiene menos de cinco caracteres, se encabeza (con un espacio en blanco si está en una región sin encabezado). […] b. El símbolo con su carácter de encabezamiento se justifica a la izquierda y cualquier posición de orden inferior no utilizada se llena con espacios en blanco. […] c. Cada carácter del símbolo se reemplaza por su equivalente en base 50. […] d. El resultado se convierte entonces de la siguiente manera: si el símbolo, después de que cada carácter se reemplaza por su equivalente en base 50, es ABCDEF, su representación en base 50 es (A*50 2 +B*50+C)*2 17 +(D*50 2 +E*50+F). […][1][2]
[…] Hay una característica interesante relacionada con la codificación de símbolos para su inclusión en el diccionario. En el modo habitual de expresión, los símbolos pueden construirse a partir de un conjunto de 50 caracteres. Si la codificación fuera carácter por carácter, se necesitarían seis bits para la representación de cada uno de esos caracteres. Como un símbolo puede contener hasta seis caracteres, se necesitaría un total de 36 bits para la representación de cada símbolo. Esto puede parecer conveniente, ya que la longitud de una palabra 709 es exactamente de 36 bits, pero si se considera un momento se ve que es desafortunado, ya que sería deseable tener uno o dos bits disponibles en la misma palabra que la representación del símbolo, lo que daría una pista sobre la naturaleza del símbolo. Estos bits de señalización se pueden obtener. Supongamos que cada carácter posible representa un dígito en un sistema numérico que tiene una
base de cincuenta
. Ahora, seis símbolos de caracteres se pueden leer como números naturales en un sistema de base cincuenta. Si estos números se convierten al sistema de base dos habitual, solo se requieren 34 bits para el número máximo y se ha logrado una ganancia de dos bits de señalización. Esto tiene la característica incidental de disminuir el número necesario de bits para representar el código completo, pero el tiempo de conversión superaría el ahorro por un margen significativo si no fuera por la longitud peculiar de la palabra 709. Aquí hay una ilustración clara del efecto crítico que las especificaciones precisas de la máquina en cuestión tienen sobre los detalles de un esquema de codificación. […](7 páginas)
[…] SCAT es un ensamblador de dos partes que, en resumen, funciona de la siguiente manera: los programas escritos simbólicamente como un orden por tarjeta son ingeridos durante la primera fase por el "compilador" que escanea el programa en busca de símbolos y genera una baraja condensada de tarjetas (baraja SQUOZE) que contiene tablas de estos símbolos y el programa condensado y codificado de manera eficiente. Durante la segunda fase, el programa "modificar y cargar" ingiere esta baraja SQUOZE y la convierte en lenguaje de máquina binario, que puede cargarse listo para ejecutarse o imprimirse en cartas binarias absolutas (23 órdenes por carta) para cargarlas y ejecutarlas más tarde. El "lister" puede producir una versión impresa del programa en cualquiera de estas etapas. Las correcciones simbólicas de un programa se pueden insertar en la segunda fase junto con la baraja SQUOZE. […]
[…] Los programas de los sistemas
PDP-11
a menudo manejan símbolos en una forma especialmente codificada llamada
RADIX 50
(esta forma a veces se denomina
MOD40
). Esta forma permite empaquetar 3 caracteres en 16 bits […][3]