Каковы особенности хранения 32-битного целого числа со знаком в регистре? - PullRequest
0 голосов
/ 20 октября 2018

Мой тип чисел - это целое число со знаком, состоящее из двух чисел со знаком.

В регистрах памяти% rdi / edi / di у меня есть 0xFFFFFFFF.В% rsi / esi / si у меня 0x80000000.

Моя инструкция addl %edi, %esi.

Как правильно добавить их?

Я думаю, что ответ:

Поскольку я добавляю полный 32-битный регистр, у меня есть преимущество добавления полных сумм 0xFFFFFFFF и 0x80000000.

Итак, к подписанному добавлено целое число со знаком, и они оба 32-разрядные.Я эффективно добавляю -2147483648 и 0x80000000.Поскольку 0x80000000 - это 2147483648 в шестнадцатеричном формате, я добавляю эти два и получаю ноль.

Флаг нуля активирован Флаг переноса активирован (так как я добавляю старшее значение 32-битного регистра)

1 Ответ

0 голосов
/ 20 октября 2018

В дополнении 32-разрядного двоичного числа 0xFFFFFFFF представляет -1, а 0x80000000 представляет -2,147,483,648.Сумма из них составляет -2,147,483,649.Это не умещается в 32 бита, поэтому оно переполняется.Вычисленный результат будет 0x7FFFFFFF, что соответствует 2 147 483 647

На уровне битов: FFFFFFFF plus 80000000 создает 17FFFFFFF, что означает, что 7FFFFFFF хранится в 32-битном получателеи 1 - результат.

...