Вопрос
Предположим AX = FFFE и BX = 1234
Теперь, если мы пишем cmp ax,bx
(BX будет вычитаться из топора, а отсрочные отложения будут обновлены) Теперь двоичное представление чисел в AX и BX дается путем
AX = 1111 1111 1111 1110
BX= 0001 0010 0011 0100
Поскольку BX будет вычитаться из топора, поэтому мы должны отрицать BX (в качестве результата = ax + (- Bx)), поэтому отрицаемый BX (2 дополнение к Bx) дается.
BX= 1110 1101 1100 1100
Теперь мы добавляем как топор, так и BX (как вычитание реализована добавлением в компьютере)
AX= 1111 1111 1111 1110
BX= 1110 1101 1100 1100
------------------------------------
1 1110 1101 1100 1010
Теперь, как вы можете увидеть, что результат имеет 17 бит, теперь 17-й бит должен перейти в переносном изгибе, но когда я проверял его, флаг «Носи» - это 0, которое является CF = 0, почему?
Решение
Нашел ссылку здесь:http://oopweb.com/assembly/documents/artofassembly/Volume/chapter_6/CH06-2.html.
Это как я ожидал. Флаг переноски устанавливается только в том случае, если требуется «заимствование». При выполнении вычитания вы устанавливаете флаг «Перенос» перед выполнением «вычитания», и новый флаг «Новый несущий», если вам пришлось брать. Ваш пример пропущен добавление 1 для предварительно установленного флагов для переноски в бит 17, который не приведет к несуществу в результате.
Другие советы
Подумайте о флаге «Носите» как заимствование, когда вычитается. Это инициализируется до 1, поэтому операция a−b−C
, т.е. a + not(b) + C
вместо a + not(b) + 1
Как вы описали. Другими словами, несущий перевернут для вычзя, поэтому его можно использовать для вычести с несколькими точками.