нам не нужны все 32 бита, чтобы показать, что происходит с вычитанием
5 - 3
из начальной школы мы знаем, что 5 - 3 = 5 + (- 3), как это делается в логике, особенность дополнения к двум состоит в том, чтобы получить -3 вы инвертировать и добавить один так
5 - 3
1
0101
+ 1100
=========
закончить
11011
0101
+ 1100
=========
0010
в общем (не специфично для процессора) 5 - 3 = 2. оба переноса и выведения ошибочного бита равны, так что переполнение со знаком не будет установлено, выполнение равно 1. Но некоторые архитектуры так же, как и инвертирующие второй операнд и перенос (к lsbit) также инвертируют выполнение, называя его заимствованием. Некоторые не делают.
Некоторые документируют это, когда вы смотрите на такие вещи, как «больше» и «меньше» относительно определения бита переноса
5 - 4
11111
0101
+ 1011
=========
0001
5 - 5
11111
0101
+ 1010
=========
0000
5 - 6
00011
0101
+ 1001
=========
1111
5 - 7
00011
0101
+ 1000
=========
1110
То, что это показывает, - то, что, если вы посмотрите на необработанный результат, он переключается, когда операнд b равен операнду a, когда b меньше a, он устанавливается, когда b равен или больше a, это ясно. Таким образом, если архитектура оставляет ее неизменной, вы можете использовать бит переноса для беззнакового значения, большего или меньшего (но не равного) в одном из случаев, превышающих или равных, определяется этим флагом, и какое направление зависит от архитектуры (если оно инверты выполняют в заем). В другом направлении вы либо переворачиваете операнды и используете один бит, либо используете N и C, чтобы определить нечто большее или равное.
Документы о вооружении, в отличие от некоторых других, показывают для каждого из условий, что представляют собой флаги, и, зная вышеизложенное или имея возможность повторить его в простом тесте, вы можете выяснить, инвертируют они или нет. инструкция sbb вычитается с заимствованием, а не sbc вычитает с переносом, который, но не сам по себе, подразумевает, как этот набор команд интерпретирует бит.