Расширение Знака (сокращенно Sext ) является операцией, в компьютерной арифметике , увеличение количества бит одного двоичного числа при сохранении этого числа знака (положительный / отрицательный) и значения. Это делается путем добавления цифр к наиболее значимой части числа в соответствии с процедурой, зависящей от конкретного используемого представления числа со знаком .
Например, если шесть битов используются для представления числа « 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 .