Исключение переполнения MIPS

Я прочитал несколько постов здесь об исключении переполнения для подписанного и неподписанного дополнения MIPS, но мне все еще не ясно.

1) Что означает исключение переполнения и когда оно возникает? 2) Когда переполнение игнорируется для неподписанного дополнения?

Предположим, у меня есть два числа, давайте начнем с 4-битного со знаком и затем перейдем к 4-битному без знака

Signed negative addition

   1010    -6
 + 1101    -3
  ------
 1 0111    +7 with a carry(overflow) of 1, but result should have been -9. 

Signed positive addition

   0110    +6
 + 0011    +3
--------
   1001    -7 with no carry(probably an overflow of 1), but actual result should have been +9. 

Next is an unsigned addition

   1111    +15
 + 1010    +10
---------
 1 1001    +9 with an overflow/carry of 1, but actual result is +25.

Пожалуйста, дайте мне знать, в каком случае мы игнорируем исключение переполнения и в каком случае мы поднимаем исключение переполнения и почему. Я прочитал это для unsigned, мы всегда игнорируем переполнение, но тогда, если результат неправильный (9 вместо 25), почему мы игнорируем переполнение?

1 ответ

Решение

Различие в инструкциях добавления со знаком MIPS и без знака состоит в том, что исключение целочисленного переполнения генерируется для дополнений со знаком в случае переполнения дополнений 2, при котором исключение не генерируется для исключений без знака.

Инструкции описаны здесь: MIPS - Целое число - Арифметика.

Таким образом, в ваших примерах два "подписанных дополнения" (например, инструкция ADD) будут генерировать исключение, так как и переполнение дополнения 2 происходит, а "добавление без знака" (например, инструкция ADDU) не будет, даже если результат здесь также неверен, Таким образом, программист может контролировать, когда должно сгенерироваться переполнение дополнения 2 и возникнет исключение. Однако тогда набор инструкций не допускает 32-разрядного сложения без знака с переполнением от бита 32, поэтому, если вам действительно нужен последний бит, выполните 64-разрядную арифметику.

Смотрите эти посты также:

Другие вопросы по тегам