Я занимаюсь компьютерной архитектурой, и моя проф. не смог дать удовлетворительного ответа.

Предполагая, что у нас есть 32-разрядный процессор, если у нас есть два целых числа без знака x и y, оба из которых больше 231 (так что они слишком велики для правильного преобразования в форму дополнения до двух) как мы выполняем вычитание?

Если бы вычитаемое было константой, я вижу, как компилятор мог бы компенсировать это в статическом анализе. Но как нам справиться с этой возможностью во время выполнения, особенно в статически компилируемом языке, таком как C? Это просто вызывает ошибку переполнения или некоторые архитектуры subu поддерживают специальные операции?

Все, что я нашел для MIPS, говорит, что он просто выполняет вычитание дополнения до двух, но в этом случае это не должно работать, не так ли?

1
J.M. 13 Апр 2011 в 08:56

1 ответ

Ситуация, которую вы представляете, не является проблемой. Конкретный пример:

  0xFFFFFFFF -  0xFFFF0000
= 0xFFFFFFFF + -0xFFFF0000
= 0xFFFFFFFF +  0x00010000
= 0x0000FFFF
1
rlibby 13 Апр 2011 в 09:07
Как-то я перепутал здесь свое вычитание на бумаге, так как получил разные результаты. Но это было то, что я думал, а также. +1.
 – 
Joey
13 Апр 2011 в 09:11