В вычислительной технике слово — это естественная единица данных, используемая конкретной конструкцией процессора . Слово — это данные фиксированного размера , обрабатываемые как единица набором инструкций или аппаратным обеспечением процессора. Количество бит или цифр [a] в слове ( размер слова , ширина слова или длина слова ) является важной характеристикой любой конкретной конструкции процессора или архитектуры компьютера .
Размер слова отражается во многих аспектах структуры и работы компьютера; большинство регистров в процессоре обычно имеют размер слова, а наибольший элемент данных, который может быть передан в рабочую память и из нее за одну операцию, является словом во многих (не во всех) архитектурах. Наибольший возможный размер адреса , используемый для обозначения местоположения в памяти, обычно является аппаратным словом (здесь «аппаратное слово» означает полноразмерное естественное слово процессора, в отличие от любого другого используемого определения).
Документация для старых компьютеров с фиксированным размером слова обычно указывает размеры памяти в словах, а не в байтах или символах. Иногда в документации правильно используются метрические префиксы , иногда с округлением, например, 65 килослов (кВт) означает 65536 слов, а иногда неправильно, когда килослова (кВт) означают 1024 слова (2 10 ), а мегаслова (МВт) — 1 048 576 слов (2 20 ). Со стандартизацией 8-битных байтов и байтовой адресуемости указание размеров памяти в байтах, килобайтах и мегабайтах со степенями 1024, а не 1000 стало нормой, хотя в некоторой степени используются двоичные префиксы IEC .
Несколько самых ранних компьютеров (и несколько современных) используют двоично-десятичные числа , а не простые двоичные числа , обычно имея размер слова в 10 или 12 десятичных цифр, а некоторые ранние десятичные компьютеры вообще не имеют фиксированной длины слова. Ранние двоичные системы имели тенденцию использовать длину слова, которая была кратна 6 битам, причем 36-битное слово было особенно распространено на мэйнфреймах . Введение ASCII привело к переходу к системам с длиной слова, которая была кратна 8 битам, причем 16-битные машины были популярны в 1970-х годах до перехода на современные процессоры с 32 или 64 битами. [1] Специализированные конструкции, такие как цифровые сигнальные процессоры , могут иметь любую длину слова от 4 до 80 бит. [1]
Размер слова иногда может отличаться от ожидаемого из-за обратной совместимости с более ранними компьютерами. Если несколько совместимых вариаций или семейство процессоров имеют общую архитектуру и набор инструкций, но различаются по размеру слова, их документация и программное обеспечение могут стать сложными в нотации, чтобы учесть разницу (см. Size families ниже).
В зависимости от того, как организован компьютер, единицы измерения размера слова могут использоваться для:
При проектировании архитектуры компьютера выбор размера слова имеет существенное значение. Существуют соображения проектирования, которые поощряют определенные размеры битовых групп для определенных целей (например, для адресов), и эти соображения указывают на различные размеры для различных целей. Однако соображения экономии при проектировании настоятельно требуют одного размера или очень немногих размеров, связанных кратными или дробными (дольными) числами с основным размером. Этот предпочтительный размер становится размером слова архитектуры.
Размер символа в прошлом (до кодирования символов переменного размера ) был одним из факторов, влияющих на единицу разрешения адреса и выбор размера слова. До середины 1960-х годов символы чаще всего хранились в шести битах; это позволяло использовать не более 64 символов, поэтому алфавит был ограничен заглавными буквами. Поскольку эффективно с точки зрения времени и пространства, чтобы размер слова был кратен размеру символа, размеры слов в этот период обычно были кратны 6 битам (в двоичных машинах). Тогда распространенным выбором было 36-битное слово , что также является хорошим размером для числовых свойств формата с плавающей точкой.
После внедрения дизайна IBM System/360 , который использует восьмибитные символы и поддерживает строчные буквы, стандартный размер символа (или, точнее, байта ) становится восемью битами. После этого размеры слов естественным образом кратны восьми битам, при этом обычно используются 16, 32 и 64 бита.
Ранние конструкции машин включали некоторые, которые использовали то, что часто называют переменной длиной слова . В этом типе организации операнд не имеет фиксированной длины. В зависимости от машины и инструкции длина может быть обозначена полем счета, разделительным символом или дополнительным битом, называемым, например, флагом или словесным знаком . Такие машины часто используют двоично-десятичное кодирование в 4-битных цифрах или в 6-битных символах для чисел. Этот класс машин включает IBM 702 , IBM 705 , IBM 7080 , IBM 7010 , UNIVAC 1050 , IBM 1401 , IBM 1620 и RCA 301.
Большинство этих машин работают с одной единицей памяти за раз, и поскольку каждая инструкция или данные имеют длину в несколько единиц, каждая инструкция требует несколько циклов только для доступа к памяти. Из-за этого такие машины часто бывают довольно медленными. Например, выборка инструкций на IBM 1620 Model I занимает 8 циклов (160 мкс) только для чтения 12 цифр инструкции ( модель II сократила это время до 6 циклов или 4 циклов, если инструкции не требовались оба поля адреса). Выполнение инструкции занимает переменное количество циклов в зависимости от размера операндов.
Модель памяти архитектуры сильно зависит от размера слова. В частности, разрешение адреса памяти, то есть наименьшая единица, которая может быть обозначена адресом, часто выбиралась в качестве слова. В этом подходе, подходе адресуемой по словам машины, значения адреса, которые отличаются на единицу, обозначают смежные слова памяти. Это естественно для машин, которые почти всегда имеют дело с единицами слова (или нескольких слов), и имеет преимущество, позволяя инструкциям использовать поля минимального размера для хранения адресов, что может позволить меньший размер инструкции или большее разнообразие инструкций.
Когда обработка байтов должна составлять значительную часть рабочей нагрузки, обычно выгоднее использовать байт , а не слово, в качестве единицы разрешения адреса. Значения адреса, которые отличаются на единицу, обозначают смежные байты в памяти. Это позволяет напрямую адресовать произвольный символ в строке символов. Слово по-прежнему может быть адресовано, но для используемого адреса требуется несколько больше бит, чем при альтернативном разрешении слов. Размер слова должен быть целым числом, кратным размеру символа в этой организации. Такой подход к адресации использовался в IBM 360 и с тех пор стал наиболее распространенным подходом в машинах, разработанных с тех пор.
Когда рабочая нагрузка включает обработку полей разных размеров, может быть выгодно обратиться к биту. Машины с битовой адресацией могут иметь некоторые инструкции, которые используют определяемый программистом размер байта, и другие инструкции, которые работают с фиксированными размерами данных. Например, на IBM 7030 [4] («Stretch») инструкция с плавающей точкой может адресовать только слова, в то время как целочисленная арифметическая инструкция может указывать длину поля 1–64 бита, размер байта 1–8 бит и смещение аккумулятора 0–127 бит.
В байт-адресуемой машине с инструкциями storage-to-storage (SS) обычно есть инструкции перемещения для копирования одного или нескольких байтов из одного произвольного места в другое. В байт-ориентированной ( байт-адресуемой ) машине без инструкций SS перемещение одного байта из одного произвольного места в другое обычно выполняется так:
Доступ к отдельным байтам на ориентированной на слова машине может осуществляться одним из двух способов. Байтами можно манипулировать с помощью комбинации операций сдвига и маски в регистрах. Перемещение одного байта из одного произвольного места в другое может потребовать эквивалента следующего:
В качестве альтернативы многие ориентированные на слова машины реализуют байтовые операции с инструкциями, используя специальные указатели байтов в регистрах или памяти. Например, указатель байта PDP-10 содержал размер байта в битах (позволяя получать доступ к байтам разного размера), позицию бита байта в слове и адрес слова данных. Инструкции могли автоматически настраивать указатель на следующий байт, например, при операциях загрузки и депозита (хранения).
Для хранения значений данных с разной степенью точности используются различные объемы памяти. Обычно используемые размеры обычно являются степенью двойки , кратной единице разрешения адреса (байту или слову). Преобразование индекса элемента в массиве в смещение адреса памяти элемента затем требует только операции сдвига, а не умножения. В некоторых случаях эта связь также позволяет избежать использования операций деления. В результате большинство современных компьютерных конструкций имеют размеры слов (и других размеров операндов), которые являются степенью двойки, умноженной на размер байта.
По мере усложнения компьютерных конструкций центральное значение одного размера слова для архитектуры снизилось. Хотя более производительное оборудование может использовать более широкий спектр размеров данных, рыночные силы оказывают давление, чтобы поддерживать обратную совместимость , расширяя возможности процессора. В результате то, что могло бы быть центральным размером слова в новой конструкции, должно сосуществовать как альтернативный размер исходному размеру слова в конструкции с обратной совместимостью. Исходный размер слова остается доступным в будущих конструкциях, формируя основу семейства размеров.
В середине 1970-х годов компания DEC разработала VAX как 32-битного преемника 16-битного PDP-11 . Они использовали слово для 16-битного количества, в то время как длинное слово относилось к 32-битному количеству; эта терминология та же самая, что и терминология, используемая для PDP-11. Это отличало их от более ранних машин, где естественная единица адресации памяти называлась словом , в то время как количество, составляющее половину слова, называлось полусловом . В соответствии с этой схемой, четверное слово VAX составляет 64 бита. Они продолжили эту терминологию 16-битного слова/32-битного длинного слова/64-битного четверного слова с 64-битным Alpha .
Другим примером является семейство x86 , процессоры которого выпускались с тремя разными длинами слов (16 бит, позже 32- и 64-бит), в то время как word продолжает обозначать 16-битную величину. Поскольку программное обеспечение регулярно переносится с одной длины слова на другую, некоторые API и документация определяют или ссылаются на более старую (и, следовательно, более короткую) длину слова, чем полная длина слова на ЦП, для которого может быть скомпилировано программное обеспечение. Кроме того, подобно тому, как байты используются для небольших чисел во многих программах, более короткое слово (16 или 32 бита) может использоваться в контекстах, где диапазон более широкого слова не нужен (особенно там, где это может сэкономить значительное пространство стека или кэш-памяти). Например, API Windows от Microsoft поддерживает определение языка программирования WORD как 16 бит, несмотря на то, что API может использоваться на 32- или 64-битном процессоре x86, где стандартный размер слова будет 32 или 64 бита соответственно. Структуры данных, содержащие такие слова разного размера, называются:
Аналогичное явление возникло в языке ассемблера Intel x86 — из-за поддержки различных размеров (и обратной совместимости) в наборе инструкций некоторые мнемоники инструкций содержат идентификаторы «d» или «q», обозначающие «double-», «quad-» или «double-quad-», что соответствует исходному 16-битному размеру слова архитектуры.
Примером с другим размером слова является семейство IBM System/360 . В архитектуре System/360 , архитектуре System/370 и архитектуре System/390 существуют 8-битные байтовые s, 16-битные полуслова s, 32-битные слова s и 64-битные двойные слова s. Архитектура z/Architecture , которая является 64-битным членом этого семейства архитектур, продолжает ссылаться на 16-битные полуслова s, 32-битные слова s и 64-битные двойные слова s, а также дополнительно имеет 128-битные квадрослова s.
Как правило, новые процессоры должны использовать ту же длину слов данных и ширину виртуального адреса, что и старый процессор, чтобы иметь двоичную совместимость с этим старым процессором.
Часто тщательно написанный исходный код, написанный с учетом совместимости исходного кода и переносимости программного обеспечения , можно перекомпилировать для работы на различных процессорах, даже с разной длиной слова данных или разной шириной адреса, или и тем, и другим.
[8] [9]
[...] Используется внутренний код данных: количественные (числовые) данные кодируются в 4-битном десятичном коде; качественные (буквенно-цифровые) данные кодируются в 6-битном буквенно-цифровом коде. Внутренний
код инструкций
означает, что инструкции кодируются в прямом двоичном коде.
Что касается внутренней длины информации, квант информации называется «
катена
», и он состоит из 24 бит, представляющих либо 6 десятичных цифр, либо 4 буквенно-цифровых символа. Этот квант должен содержать кратное 4 и 6 бит, чтобы представлять целое число десятичных или буквенно-цифровых символов. Было обнаружено, что 24 бита являются хорошим компромиссом между минимальными 12 битами, которые привели бы к слишком низкому потоку передачи из параллельно считываемой основной памяти, и 36 битами или более, что было оценено как слишком большой квант информации. Катена должна рассматриваться как эквивалент символа
в
машинах с переменной длиной слова, но ее нельзя так назвать, поскольку она может содержать несколько символов. Она передается последовательно в основную память и из нее.
Не желая называть «квант» словом, а набор символов буквой (слово — это слово, а квант — это что-то еще), было создано новое слово, и оно было названо «катена». Это английское слово, и оно есть в
словаре Вебстера
, хотя его нет во французском языке. Определение слова catena в словаре Вебстера — «связанная серия»; следовательно, 24-битный информационный элемент. Слово catena будет использоваться далее.
Таким образом, был определен внутренний код. А что такое внешние коды данных? Они зависят в первую очередь от задействованного устройства обработки информации. Gamma
60
предназначена для обработки информации, относящейся к любой двоично-кодированной структуре. Таким образом, 80-колоночная перфокарта рассматривается как 960-битный информационный элемент; 12 строк, умноженные на 80 колонок, равны 960 возможным перфорациям; хранится как точное изображение в 960 магнитных сердечниках основной памяти, при этом 2 столбца карты занимают одну катену. [...]
[...] Термины, используемые здесь для описания структуры, налагаемой конструкцией машины, в дополнение к
биту
, перечислены ниже.
Байт
обозначает группу бит, используемых для кодирования символа, или количество бит, передаваемых параллельно на и из устройств ввода-вывода.
Здесь используется
термин, отличный от
символа
, поскольку данный символ может быть представлен в разных приложениях более чем одним кодом, а разные коды могут использовать разное количество бит (т. е. разные размеры байтов). При передаче ввода-вывода группировка бит может быть совершенно произвольной и не иметь никакого отношения к фактическим символам. ( Термин образован от
bite
, но изменен, чтобы избежать случайной мутации, на
bit
.)
Слово
состоит из количества бит данных, переданных параллельно из памяти или в память за один цикл памяти. Таким образом,
размер слова
определяется как структурное свойство памяти. (Термин
catena
был придуман для этой цели разработчиками компьютера
Bull
GAMMA 60
.)
Блок
относится к количеству слов, переданных в или из устройства ввода-вывода в ответ на одну инструкцию ввода-вывода. Размер блока является структурным свойством устройства ввода-вывода; он может быть фиксированным по конструкции или оставлен на усмотрение программы. [...]
Три инструкции сгруппированы вместе в 128-битные и выровненные контейнеры, называемые
пакетами
. Каждый пакет содержит три 41-битных
слота инструкций
и 5-битное поле шаблона.