инструкция вычитания в процессорах

Почему процессор должен реализовывать инструкцию вычитания? Почему компиляторы не могут изменить вычитание на сложение с дополнением до 2?


person Fredrick    schedule 01.04.2011    source источник


Ответы (2)


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

person Gareth McCaughan    schedule 01.04.2011
comment
Примечание. Если компилятор знает, что ЦП выполняет сложение или вычитание быстрее, и код использует константу для любого из операндов, ЦП может выполнить для вас отрицание константы и переключить операнд. Таким образом, x = y - 5 можно преобразовать в сборку, эквивалентную x = y + -5, если ЦП лучше справляется со сложением, чем с вычитанием. Но да, в общем случае изменение x = y - z на x = y + (-z) будет в лучшем случае эквивалентной скоростью, а в худшем случае будет страдать от всех проблем, упомянутых в этом ответе, для тривиального выигрыша (ЦП все еще может выбрать выполнение вычитания как отрицание, за которым следует добавление после все). - person ShadowRanger; 14.10.2016

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

person m4tt1mus    schedule 01.04.2011