Флаг переполнения / переноса в MIPS - PullRequest
0 голосов
/ 11 ноября 2018

Я немного искал и не нашел ничего, что бы правильно объяснило это.

В MIPS у вас есть add и addu, чтобы делать дополнения. Основное отличие состоит в том, что addu не создает исключений переполнения.

Допустим, у нас есть этот двоичный файл (я использую четыре бита, хотя MIPS 32 для упрощения):

0111

Если мы добавим 1, оно станет 1000.

С инструкцией add происходит переполнение и отсутствие переноса, поскольку положительное число 7 становится отрицательным значением 1 (при условии дополнения до двух в MIPS). Это также создает исключение переполнения.

С addu нет переполнения и переноса, поскольку все прошло как ожидалось.

Теперь предположим, что у вас есть этот двоичный файл:

1111

Если мы добавим 1, оно станет 0000.

С помощью инструкции add переполнения не должно быть, поскольку отрицательное значение 1 стало 0. Как насчет флага выполнения, он меняется на 1?

А что происходит с инструкцией addu? Считается ли это переполнением, поскольку 15 стало 0? Я знаю, что нет исключения переполнения, но что происходит с флагом переполнения? Это установлено в 1? А как насчет флага переноса?

1 Ответ

0 голосов
/ 18 ноября 2018

В архитектуре MIPS отсутствует флаг выполнения.

Исключение переполнения в случае сложения происходит, когда знак результата отличается от ожидаемого знака, который может произойти:

  • Когда вы добавляете два положительных числа и в результате получаете отрицательное число
  • Когда вы добавляете два отрицательных числа и в результате получаете положительное число

Так что да, у вас гипотетический 4-битный MIPS 0111 + 1 приводит к переполнению с активированным соответствующим флагом.

...