Как указано в заголовке, почему набор инструкций ARM различает подписанные и неподписанные только по делению?Почему ARM различает SDIV и UDIV, но не с ADD, SUB и MUL?
SDIV и UDIV доступны, но это не относится к ADD, SUB и MUL.
Как указано в заголовке, почему набор инструкций ARM различает подписанные и неподписанные только по делению?Почему ARM различает SDIV и UDIV, но не с ADD, SUB и MUL?
SDIV и UDIV доступны, но это не относится к ADD, SUB и MUL.
Сложение и вычитание чисел с одинаковым размером и без знака производят точно такие же битовые шаблоны в математике дополнений двух (что используется ARM), поэтому для отдельных инструкций нет необходимости. Например, если мы возьмем байты размера значения:
0xFC +4
signed: -4+4 = 0
unsigned: 252 +4 = 256 = 0x100 = 0x00 (truncated to byte)
результата умножения делает изменение в зависимости от того, интерпретируются операнды, как знак или без знака, однако MUL
инструкции производит только низкий 32 бит из результата, который в обоих случаях одинаковы. В последних процессорах ARM есть инструкции, которые производят полный 64-разрядный результат, и те приходят пары так же, как SDIV и UDIV: UMULL, UMLAL, SSMULL, SMLAL:
Подписи и Unsigned Long Multiply, с дополнительным суммированием с 32 -битные операнды и 64-битный результат и аккумулятор.
Возможный дубликат [Как правильно выполнить ADD/SUB или беззнаковое целое?] (Http://stackoverflow.com/questions/21359298/how-to-do-add-sub-signed-or-unsigned -integer-правильно) (в «подписанной арифметике _is_ беззнаковой арифметики, потому что смысл двоичного дополнения») – Notlikethat
Возможная дубликация [Почему для разных команд x86 (-64)? вопросы/14063599/why-are-signed-and-unsigned-multipication-different-instructions-on-x86-64) –
[Какие арифметические операции одинаковы для неподписанных и дополненных друг другу номеров?] (http: // stackoverflow. com/q/21475286/995714), [арифметическая реализация с подписью и без знака на x86] (http://stackoverflow.com/q/25241477/995714), http://stackoverflow.com/a/13229313/995714 –