Арифметическое переполнение против арифметического переноса - PullRequest
22 голосов
/ 07 июня 2011

На одном из моих слайдов лекций приведен пример арифметического переполнения и приведена тема для условных флагов ветвления на чипе ARM, приведенная ниже:

  • В (переполнение) - 7FFFFFFF + 1
  • С (нести) - FFFFFFFF + 1

Предположительно, для примера, адрес может содержать только 8 байтов. Поэтому мне кажется, что добавление 1 к 7FFFFFFF дает 80000000. Я думал, что 80000000 все равно поместится в 8-байтовый адрес.

Почему это арифметическое переполнение? Это неправильный способ на слайде? Или мое понимание неверно?

Спасибо за любые ответы

Ответы [ 2 ]

37 голосов
/ 07 июня 2011
  • Флаги переполнения устанавливаются, когда регистр не может правильно представить результат в виде значения со знаком (вы переполнили бит знака).
  • Флажки переноса устанавливаются, когда регистр не может должным образом представить результат в виде значения без знака (без знака бита).
6 голосов
/ 07 июня 2011

Вы получаете переполнение, если бит знака поврежден. Итак, вы знаете, что вам нужно скорректировать свой результат.

Вы получаете перенос, если результат не соответствует этому значению. (нужно больше бит, чем у вас).

В старые времена вам приходилось писать собственные подпрограммы сложения и умножения для многобайтовых значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...