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