SQUOZE (сокращенно SQZ ) — это эффективное с точки зрения памяти представление комбинированного исходного и перемещаемого объектного программного файла с таблицей символов на перфокартах , которое было представлено в 1958 году с ассемблером SCAT [1] [2] в операционной системе SHARE (SOS) для IBM 709. [3] [4] Программа в этом формате называлась колодой SQUOZE . [5] [6] [7] Она также использовалась на более поздних машинах, включая IBM 7090 и 7094 .
Колода SQUOZE содержит закодированную двоичную форму исходного кода на языке ассемблера; колоды SQUOZE преобразуются в абсолютный машинный код и сохраняются в памяти программой-загрузчиком. [8] [9] [10]
В кодировке SQUOZE идентификаторы в таблице символов были представлены в 50-символьном алфавите , что позволяло 36-битному машинному слову представлять шесть буквенно-цифровых символов плюс два флаговых бита, тем самым экономя два бита на каждые шесть символов, [6] [1], поскольку шесть бит, обычно выделяемых для каждого символа, могли хранить до 64 состояний, а не только 50 состояний, необходимых для представления 50 букв алфавита, и 50 6 < 2 34 .
Использование базы 50 уже экономит один бит на каждые три символа, поэтому она использовалась в двух трехсимвольных кусках. В руководстве [1] есть формула для кодирования шести символов ABCDEF:
Например, «SQUOZE», обычно 36 бит: 35 33 37 31 44 17
(основание 8) будет закодировано двумя 17-битными частями, чтобы уместиться в 34 бита, как ( 0o220231 << 17 ) | 0o175473 == 0o110114575473
.
Более простым примером той же логики может служить тот факт, что трехзначное число BCD занимает 12 бит, например, 987: 9 8 7
(основание 16) 1001 1000 0111
(основание 2) , но любое такое значение можно сохранить непосредственно в 10 битах, сэкономив два бита, например, 987: 3db
(основание 16) 11 1101 1011
(основание 2) .
«Squoze» — шутливое причастие прошедшего времени глагола «to squeeze». [5] [6]
Название SQUOZE было позже заимствовано для похожих схем кодирования символов, используемых на машинах DEC ; [4] они имели алфавит из 40 символов (50 в восьмеричной системе ) и назывались DEC RADIX 50 и MOD40 , [11] но иногда их называли DEC Squoze .
[…] Используемые позиции бит […] Бит 0 […] Бит 1 […] Биты 2–35 […] Представление символа с заголовком в системе счисления 50. […] Представление символа с заголовком в системе счисления 50 получается следующим образом: […] а. Если символ имеет менее пяти символов, он озаглавлен (пробелом, если он находится в области без заголовка). […] б. Символ с его заголовком выравнивается по левому краю, а все неиспользуемые позиции младшего разряда заполняются пробелами. […] в. Каждый символ в символе заменяется его эквивалентом в системе счисления 50. […] г. Затем результат преобразуется следующим образом: если символ после замены каждого символа его эквивалентом в системе счисления с основанием 50 равен ABCDEF, то его представление в системе счисления с основанием 50 равно (A*50 2 +B*50+C)*2 17 +(D*50 2 +E*50+F). […][1][2]
[…] Есть интересная особенность, связанная с кодированием символов для включения в словарь. В обычном режиме выражения символы могут быть составлены из набора из 50 символов. Если бы кодирование было посимвольным, для представления каждого такого символа потребовалось бы шесть бит. Поскольку символ может содержать до шести символов, для представления каждого символа потребовалось бы в общей сложности 36 бит. Это может показаться удобным, так как длина слова 709 составляет ровно 36 бит, но минутное размышление показывает, что это неудачно, так как было бы желательно иметь бит или два, доступные в том же слове, что и представление символа, давая ключ к природе символа. Эти биты маркировки могут быть получены. Пусть каждый возможный символ представляет цифру в системе счисления с основанием
пятьдесят
. Теперь шесть символов символов могут быть прочитаны как натуральные числа в системе с основанием пятьдесят. Если эти числа преобразуются в обычную систему с основанием два, для максимального числа требуется всего 34 бита, и достигается выигрыш в два бита маркировки. Это имеет побочную особенность уменьшения необходимого количества бит для представления всего кода, но время преобразования значительно перевесило бы экономию, если бы не особая длина слова 709. Вот наглядная иллюстрация критического влияния точных спецификаций соответствующей машины на детали схемы кодирования. […](7 страниц)
[…] SCAT - это двухкомпонентный ассемблер, который вкратце работает следующим образом: программы, написанные символически как один заказ на карту, усваиваются на первом этапе "компилятором", который сканирует программу на наличие символов и выводит сжатую колоду карт (колоду SQUOZE), содержащую таблицы этих символов и сжатую и эффективно закодированную программу. Во время второй фазы эта колода SQUOZE поглощается программой «изменить и загрузить», которая преобразует объектную программу в двоичный машинный язык, который по выбору может быть загружен готовым к запуску или выведен на абсолютные двоичные карты (23 порядка на карту) для загрузки и запуска в более позднее время. «Листер» может создать печатную версию программы на любой из этих стадий. Символические исправления в программу могут быть вставлены во вторую фазу вместе с колодой SQUOZE. […]
[…] Программы для систем
PDP-11
часто обрабатывают символы в специально закодированной форме, называемой
RADIX 50
(эту форму иногда называют
MOD40
). Эта форма позволяет упаковать 3 символа в 16 бит […][3]