Почему инструкция NEG мешает переносить флаг?

Я вижу эту информацию на сайте,

Во время отрицания (NEG) флаг переноса устанавливается, если операнд не равен нулю, и в этом случае он очищается.

Но это не помогает мне рассуждать о флаге переноса. Почему он так себя ведет и как NEG запускает флаг, который должен представлять выполнение.

В этом ответе они цитируют руководство,

Флаг CF устанавливается в 0, если исходный операнд равен 0; в противном случае он равен 1.

В моей голове, и то, как я это вижу, объясняется, я делаю побитовое отрицание и добавляю одно. Почему установлен флаг переноса? Есть ли какой-нибудь процесс, который поможет мне справиться с этим, не понимая правил, подобных приведенному выше?

1 ответ

Решение

Флаг переноса на вычитании представляет заем. Если вы отрицаете x, вы (практически) вычитаете x от 0, который нуждается в займе, если x это 0.

Поэтому имеет смысл установить флаг переноса, если только вы не вычли 0.

3 бит 2-х комплимент

 cf
[0]000  value = 0
[0]011  SUB 3
   ---
   Requires borrow.

 cf
[1]111  0 after carry (cf=1)
   011  SUB 3
------
[1]100  
    +1  2cp
   101

Вы можете мыслить мысленно как побитовое отрицание.

Другие вопросы по тегам