Так как процессоры следуют за соглашением о представлении чисел в качестве дополнения 2, как узнать, является ли это число результатом добавление двух положительных чисел остается положительным и не отрицательным.Как процессор (esp. ARM) интерпретирует результат переполнения на более позднем этапе выполнения, когда результат возвращается в память
Например, если добавить два числа 32bit:
Пусть r2 содержит ценностно 0x50192E32
Пример кода:
add r1, r2, #0x6F06410C
str r1, [r3]
Здесь Переполнение флаг установлен , Теперь, если я хочу использовать сохраненный результат из памяти в последующих командах (где-то в коде ... и теперь из-за различные инструкции пусть процессоры CPSR был изменен), как показано ниже:
ldr r5, [r3]
add r7, r5
в результате первой команды добавить имеет в это MSB ienow r5 имеет 1 в его MSB как процессор интерпретировать значение. Так как правильный результат при добавлении двух положительных чисел положителен. Это просто потому, что у MSB есть 1, он интерпретируется как отрицательное число? В этом случае мы получаем разные результаты от ожидаемого.
Пусть, например, в 4 битной машине:
2 дополнением: 4 = 0100 и 5 = 0101; -4 = 1100 и -5 = 1011
Теперь 4 + 5 = 9 и если она хранится в регистре/памяти как 1001, а затем, если доступ к нему осуществляется с помощью другой инструкции и с учетом процессор хранит номера в формате дополнения 2 и проверяет MSB и считает, что он отрицательный 7.
Если все зависит от программиста, то как сохранить правильные результаты в регистре/памяти. Есть ли в любом случае, что мы можем сделать с нашим кодом, чтобы сохранить правильные результаты?
Я не совсем понимаю, что вы спрашиваете. Дополнение от 2 означает, что подпись не имеет отношения к арифметическим операциям, поэтому 'add' просто добавляет числа. Ничто не интерпретируется как подписанное _or_ unsigned здесь, потому что ни один код не тестирует флаги каким-либо образом (обратите внимание также, что ничто даже не устанавливает их, это будет 'добавление'). – Notlikethat
Я согласен, что неясно. Я думаю, что между комментарием notlikethat и ответом Джейсонхарпера это просто охватывает все интерпретации. – rjp
В зависимости от того, какой синтаксис ни один из тех, кто касается флагов, часто вам нужно добавить S, добавляет vs add. –