Почему некоторые процессоры имеют разные инструкции для выполнения операций со знаком и без знака? - PullRequest
0 голосов
/ 17 февраля 2020

Давайте предположим, что у нас есть следующие двоичные числа с их представлением:

| bin | unsigned | signed   |
|:---:|----------|----------|
| 110 | 6        | -2       |
| 111 | 7        | -1       |

Теперь независимо от того, подписано или без знака, 111 + 110 = 1101, Теперь я могу интерпретировать результат 1101 как со знаком или без знака, что :

| bin  | unsigned | signed   |
|:----:|----------|----------|
| 1101 | 13       | -3       |

Что соответствует десятичной операции:

6+7 = 13
-1-2 = -3

Не было разницы между выполнением signed addition или unsigned addition. Так почему бы ЦП иметь разные схемы / инструкции для такой операции?

Ответы [ 2 ]

2 голосов
/ 17 февраля 2020

Потому что дополнение / субдобавление 2 - это та же бинарная операция, что и для беззнакового надстройки / субдвига. Но для сравнения (и умножения на деление и расширение) интерпретация MSB как знакового бита или не имеет значения.

Некоторые процессоры просто имеют инструкцию cmp, которая устанавливает все флаги, и тогда вы получаете инструкцию ветвления проверяет указанное c условие флага (предикат). Другие процессоры без флагов / кодов условий (такие как MIPS и RIS C -V) нуждаются в предикатах в своих инструкциях сравнения в регистр.

Инструкции сравнения SIMD для x86 / ARM также сравниваются в регистр, не устанавливая несколько разных флагов, поэтому они также имеют предикат как часть инструкции сравнения (например, cmpps принимает непосредственный байт с предикатом, или для целого числа есть pcmpgtd / pcmpeqd.)

1 голос
/ 18 февраля 2020

Это зависит от двоичного представления. Это основной момент представления 2-дополнения - при использовании дополнения 2-х, сложение со знаком и без знака, вычитание и мультипликация операндов фиксированной ширины и одинаковые результаты по ширине идентичны, поэтому вы можете использовать одинаковые аппаратные инструкции для обоих.

Если вы используете 1-е дополнение или величину знака, вам нужны небольшие различия между операциями со знаком и без знака.

Здесь деление отличается, как и операции расширения.

...