Вопрос

Предположим 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 Как вы описали. Другими словами, несущий перевернут для вычзя, поэтому его можно использовать для вычести с несколькими точками.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top