WikiDer > Расширение знака

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.

Смотрите также