Расширение знака
Расширение знака (иногда сокращенно секст , особенно в мнемонике ) — это операция в компьютерной арифметике увеличения количества бит двоичного числа при сохранении знака числа (положительного/отрицательного) и значения. Это делается путем добавления цифр к наиболее значимой стороне числа в соответствии с процедурой, зависящей от конкретного используемого представления числа со знаком .
Например, если для представления числа используются шесть битов " 00 1010
" (десятичное положительное 10) и операция расширения знака увеличивает длину слова до 16 бит, тогда новое представление просто " 0000 0000 0000 1010
Таким образом, сохраняется и значение, и тот факт, что значение было положительным.
Если для представления значения используются десять битов " 11 1111 0001
" (десятичное отрицательное 15) с использованием дополнения до двух , и это знак, расширенный до 16 бит, новое представление " 1111 1111 1111 0001
«. Таким образом, дополняя левую часть единицами, сохраняется отрицательный знак и значение исходного числа.
Например, в наборе инструкций Intel x86 есть два способа расширения знака:
- используя инструкции
cbw
,cwd
,cwde
, иcdq
: преобразовать байт в слово, слово в двойное слово, слово в расширенное двойное слово и двойное слово в четверное слово соответственно (в контексте x86 байт имеет 8 бит, слово — 16 бит, двойное слово и расширенное двойное слово — 32 бита, а четверное слово — 64 бита). биты); - используя один из знаковых расширенных ходов, выполняемый
movsx
(«перемещение с расширением знака») — семейство инструкций.
Нулевое расширение
[ редактировать ]Аналогичная концепция — нулевое расширение (иногда сокращенно zext ). В операции перемещения или преобразования нулевое расширение означает установку старших битов назначения в ноль, а не установку их в копию старшего бита источника. Если источником операции является беззнаковое число, то нулевое расширение обычно является правильным способом переместить его в поле большего размера, сохраняя при этом его числовое значение, тогда как знаковое расширение подходит для чисел со знаком.
В наборах команд x86 и x64 movzx
инструкция («перемещение с нулевым расширением») выполняет эту функцию. Например, movzx ebx, al
копирует байт из al
зарегистрироваться в младшем байте ebx
а затем заполняет оставшиеся байты ebx
с нулями.
В x64 большинство инструкций, которые записывают все младшие 32 бита любого из регистров общего назначения, обнуляют старшую половину регистра назначения. Например, инструкция mov eax, 1234
очистит старшие 32 бита rax
[ а ] зарегистрироваться.
См. также
[ редактировать ]Ссылки
[ редактировать ]- Мано, Моррис М.; Кайм, Чарльз Р. (2004). Основы логики и компьютерного дизайна (3-е изд.), стр. 453. Пирсон Прентис Холл. ISBN 0-13-140539-X .