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

Операция в компьютерной арифметике

Расширение знака (иногда сокращенно секст , особенно в мнемонике ) — это операция в компьютерной арифметике по увеличению количества битов двоичного числа с сохранением знака числа (положительный/отрицательный) и значения. Это делается путем добавления цифр к старшей значащей стороне числа в соответствии с процедурой, зависящей от конкретного используемого представления числа со знаком .

Например, если для представления числа " 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[a] .

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

Ссылки

  • Мано, Моррис М.; Киме, Чарльз Р. (2004). Основы логики и проектирования компьютеров (3-е изд.), стр. 453. Pearson Prentice Hall. ISBN  0-13-140539-X .

Примечания

Взято с "https://en.wikipedia.org/w/index.php?title=Расширение_знака&oldid=1227083637"