Арифметическое переполнение против арифметического переноса
Один из моих лекционных слайдов дает пример арифметического переполнения и переносит в тему условных ветвящихся флагов на чипе ARM, приведенном ниже:
- V (переполнение)
- 7FFFFFFF + 1
- C (переносить)
- FFFFFFFF + 1
Предположительно, для примера, адрес может содержать только 8 байтов. Поэтому мне кажется, что добавление 1 до 7FFFFFFF дает 80000000. Я думал, что 80000000 все равно поместится в 8-байтовый адрес.
Почему это арифметическое переполнение? Неправильно ли это на слайде? Или мое понимание ошибочно?
Спасибо за любые ответы
Ответы
Ответ 1
- Флаги переполнения устанавливаются, когда регистр не может правильно представить результат в виде знакового значения (вы переполнили бит знака).
- Флаги переноса устанавливаются, когда регистр не может надлежащим образом представить результат в виде значения без знака (без знакового бита).
Ответ 2
Вы получаете переполнение, если бит знака поврежден. Итак, вы знаете, что вам нужно настроить свой результат.
Вы получаете перенос, если результат не соответствует этому значению. (требуется больше бит, чем у вас).
В старые времена вам приходилось писать собственные подпрограммы добавления и умножения для значений нескольких байтов.