Я немного искал и не нашел ничего, что бы правильно объяснило это.
В 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? А как насчет флага переноса?