abc cr
000 00
001 01 x
010 01
011 10
100 01
101 10
110 10 x
111 11
переполнение со знаком - это когда выполнение не равно переносу. Если первые столбцы являются мсбитами операнда ab и переносят в мсбит (другие биты не имеют значения для переполнения со знаком или без знака), правые столбцывыполнить и привести.Если результат равен 1, то вы получите N бит.таким образом, это должно быть с мсбитами операндов, равными 1, и переносом, являющимся 0
0xxx (carrys)
1xxx (operand a)
1xxx (operand b)
0x80 + 0x80 = 0x00 (zero flag)
0x81 + 0x81 = 0x02 (need some other ones)
100000010
10000001
+ 10000001
============
00000010
-127 + -127 = -254, самый большой отрицательный результат, который вы можете получить, равен -128, 0x80, поэтомуэто переполнение со знаком.
, но выполнения не существует.
Так что, может быть, сработает вычитание -127 - 127
100000011
10000001
+ 10000000
============
00000010
, но, будучи вычитанием, оно инвертирует перенос в заем, оставляя 0 в бите переноса?Это не то, как работает ARM, другие процессоры / ядра будут делать это.
Поэтому для того, чтобы сделать это, вам нужен процессор, который определяет выполнение как заем для вычитания (инвертирует выполнениев конце добавления)
Вы редактировали свой вопрос, когда писали это, как операция сдвига изменила бы переполнение со знаком?Необходимо сложить или вычесть (необходимо использовать сумматор)