Слово. Полуслово. Двойное слово
Если набор бит называется байтом, то как называется набор байт? Словом. Если байт может состоять из разного количества бит, то как обстоят дела со словами? Так же. Количество байт в слове зависит от типа процессора. В шестнадцати разрядных процессорах слово состоит из двух байт. В тридцати двух разрядных процессорах слово состоит из четырех байт. Двойное слово, как и следует из названия, содержит ровно в два раза больше байт, чем просто слово. Встает вопрос, как тогда называется набор из двух байт для тридцати двух разрядного процессора? От специалистов, пришедших в мир персональных компьютеров с больших ЭВМ, можно услышать термин - полуслово. Теперь перейду к конкретному типу процессора - Intel 80х86. Как Вы знаете, младшие модели этих процессоров были 16-разрядными, а начиная с 80386 стали 32-разрядными. Несмотря на это, фирма Intel сохранила терминологию 16-разрядных моделей. В официальной документации на процессоры Intel словом, или коротким словом, называется набор из 2 байт, то есть 16 разрядов. Это верно даже для Pentium. Набор из 4 байт, или 32 разряда, называется двойным словом, или длинным словом. Очевидно, что это сделано для единства терминологии, независимо от конкретной модели. Хотя вопрос спорнный.
Формат длинного слова (с точки зрения Intel) показан на рисунке 5. Для представления отрицательных чисел используется дополнительный код, как и в случае байта. Теперь рассмотрим порядок байт в слове, а точнее, порядок байт в слове, хранящемся в оперативной памяти. Суть вот в чем. Процессор, а следовательно и написанная Вами программа, может получить доступ как к слову в целом, так и к каждому из составляющих его байт в отдельности. Сразу возникают вопросы. Адрес какого байта, составляющего слово, будет считаться адресом слова? Если известен адрес слова, то какой адрес будет, например, у младшего или старшего байта? Это зависит от типа процессора. Например длинное слово 14AFB820, состоящее из 4 байт, может храниться в таком порядке: 20, B8, AF, 14. А может и в таком: 14, AF, B8, 20. Это имеет значение, если Вам надо, например, преобразовать длинное слово в два коротких, или наоборот. Это имеет значение, если Вам надо обмениваться информацией с компьютерами, собранными на процессоре другого типа, например PC и Mac, PC и ЕС ЭВМ, PC и специализированный вычислитель. В процессорах Intel слова хранятся в памяти начиная с младшего байта, и за адрес слова принимается адрес младшего байта. То есть короткое слово 53C6 в памяти хранится так: С6, 53. А длинное слово 14AFB820 так: 20, B8, AF, 14.
В беззнаковом слове можно хранить числа от 0 до 65535, в двойном слове от 0 до 4294967295. В слове со знаком можно хранить числа от -32768 до 32767, в двойном слове от -2147483648 до 2147483647.
Операции со словами. Все операции, которые можно выполнять над байтами, применимы и к словам. Однако существуют операции, которые трудно отнести к конкретному формату данных. Это операции преобразования байта в слово, слова в двойное слово, и им подобные. Эти операции я так же рассмотрю здесь.
· Операция ИНВЕРСИИ СЛОВА (NOT). Полностью идентична операции ИНВЕРСИЯ БАЙТА.
· Операция ДВОИЧНОЕ ДОПОЛНЕНИЕ СЛОВА (NEG). Полностью идентична операции ДВОИЧНОЕ ДОПОЛНЕНИЕ БАЙТА.
· Операция ПОРАЗРЯДНОГО ЛОГИЧЕСКОГО И (AND). Полностью идентична операции ПОРАЗРЯДНОЕ ЛОГИЧЕСКОЕ И для байт.
· Операция ПОРАЗРЯДНОГО ЛОГИЧЕСКОГО ИЛИ (OR). Полностью идентична операции ПОРАЗРЯДНОЕ ЛОГИЧЕСКОЕ ИЛИ для байт.
· Операция ПОРАЗРЯДНОГО ИСКЛЮЧАЮЩЕГО ИЛИ (XOR). Полностью идентична операции ПОРАЗРЯДНОЕ ИСКЛЮЧАЮЩЕЕ ИЛИ для байт.
· Операция ПОРАЗРЯДНОГО ВЗЯТИЯ ПО МОДУЛЮ 2 (М2). Полностью идентична операции ПОРАЗРЯДНОЕ ВЗЯТИЕ ПО МОДУЛЮ 2 для байт.
· Операция СЛОЖЕНИЯ (ADD). Полностью идентична операции СЛОЖЕНИЯ для байт.
· Операция ВЫЧИТАНИЯ (SUB). Полностью идентична операции ВЫЧИТАНИЯ для байт.
· Операция ИНКРЕМЕНТА (INC). Полностью идентична операции ИНКРЕМЕНТА для байт.
· Операция ДЕКРЕМЕНТА (DEC). Полностью идентична операции ДЕКРЕМЕНТА для байт.
· Операция УМНОЖЕНИЯ (MUL). Полностью идентична операции УМНОЖЕНИЯ для байт.
· Операция ДЕЛЕНИЯ (DIV). Полностью идентична операции ДЕЛЕНИЯ для байт.
· Операции ЛОГИЧЕСКИХ СДВИГОВ ВПРАВО (SHR) И ВЛЕВО (SHL). Полностью идентичны операциям ЛОГИЧЕСКИХ СДВИГОВ ВПРВО И ВЛЕВО для байт.
· Операции АРИФМЕТИЧЕСКИХ СДВИГОВ ВПРАВО (SAR) И ВЛЕВО (SAL). Полностью идентичны операциям АРИФМЕТИЧЕСКИХ СДВИГОВ ВПРАВО И ВЛЕВО для байт.
· Операции ЦИКЛИЧЕСКИХ СДВИГОВ ВПРАВО (ROR), ВЛЕВО (ROL), ВПРАВО ЧЕРЕЗ ПЕРЕНОС (RCR), ВЛЕВО ЧЕРЕЗ ПЕРЕНОС (RCL). Полностью идентичны операциям ЦИКЛИЧЕСКИХ СДВИГОВ для байт.
· Операции ПРЕОБРАЗОВАНИЯ БАЙТА В СЛОВО, СЛОВА В ДВОЙНОЕ СЛОВО, ДВОЙНОГО СЛОВА В СЛОВО, СЛОВА В БАЙТ. Преобразование байта в слово мы уже рассматривали, когда разбирались с делением байтов. Там же было упомянуто другое название этой операции, расширение знака. Преобразуемый байт помещается на место младшего байта слова, каждый бит старшего байта слова принимает значение знакового бита преобразуемого байта. Проще это звучит так, в старший байт слова заносится 11111111 если в исходном байте хранится отрицательное число, и 00000000, если положительное. Абсолютно так же выполняется операция преобразования слова в двойное слово, только знаковый бит в этом случае распространяется на старшее слово. Заметим, что расширение знака имеет смысл только для знаковых данных. Для беззнаковых достаточно заполнить старшый байт или слово нулями. В процессорах Intel 80х86 для этих операций есть специальные команды.
Преобразование слова в байт выполняется отбрасыванием старшего байта. Для беззнаковых данных, условием корректности операции является равенство старшего байта 0. Для знаковых данных, все биты старшего байта и знаковый бит младшего должны иметь одинаковое значение, иначе изменится знак результата. Преобразование двойного слова в слово выполняется аналогично.
Вот пожалуй и все, что можно сказать о словах и операциях с ними. Большая часть машинных типов данных нами уже пройдена. Осталось разобраться с машинным представлением чисел с плавающей запятой. Представление адресов и адресную арифметику я рассмотрю в другой статье.