Почему инструкция 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
Вы можете мыслить мысленно как побитовое отрицание.