Из Википедии, свободной энциклопедии
  (Перенаправлено с расширенного знака )
Перейти к навигации Перейти к поиску

Расширение Знака (сокращенно 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 .

См. Также [ править ]