Проблемы с пониманием книги и флагов Z80.

Я читаю официальное руководство пользователя Zilog, и у меня возникли проблемы с пониманием раздела флагов для каждой инструкции.

В книге сказано:

      Condition Bits Affected:
    ...
    H: Set if carry from bit 3; reset otherwise
    ...
    C: Set if carry from bit 7; reset otherwise
    ...

Что означает установка флага «при переносе с бита n». Также довольно часто встречается еще одно предложение: «Установить, если заимствовать из бита n». Что эти вещи означают?

Спасибо!

1 ответ

По сути перенос(C) флаг сообщает вам, что результат сложения слишком велик, чтобы поместиться в аккумуляторе. Или, аналогично, если результат вычитания был слишком мал, чтобы поместиться в аккумуляторе. Вернусь к полукерри(H) флаг через мгновение.

Предположим, что в аккумуляторе (регистре) есть 37. Затем инструкция выполняется. Это поместит 37+20 = 57 в . Поскольку можно хранить значения от 0 до 255, результат подходит и перенос отсутствует. Флаг переноса будет равен 0 (часто говорят, что «перенос свободен»).

Но если в нем 250 иADD A,20случается, то вы получаете 14, а флаг переноса равен 1 (эквивалентно, он «установлен»). Процессор говорит, что 270 не подходит, поэтому он устанавливает флаг переноса, чтобы указать, что результат больше 255, и помещает остаток (270–256) в регистр.

Логически вы можете рассматривать это как утверждение, что послеADD Aрезультат 256*перенос плюс регистр.

При вычитании перенос будет установлен, если результат меньше 0. По сути, послеSUB Aрезультат -256*перенос плюс регистр.

Половинный перенос аналогичен переносу, но он сообщает вам, что происходит с четырьмя младшими битамиAрегистр и что в него добавили. Под младшими 4 битами я имею в виду остаток от деления на 16.

Вернёмся к сложению 37 + 20. 16 входит в 37 два раза с остатком 5. В 20 входит только один раз с остатком 4. Теперь сложим 4 и 5, чтобы получить 9. Поскольку это меньше 16, то будет умещаться в 4 бита, а половина переноса будет равна 0 (или очищена).

Но предположим, что остатки были 10 и 10. Тогда у нас было бы 20, что больше 16, поэтому полуперенос был бы 1 (или сет).

Вы должны иметь в виду, что полукерри не очень важен и полезен. Он предназначен только для поддержки инструкции, и даже тогда вам не нужно знать, как он работает, чтобы использоватьDAA.

В руководстве используются описания, потому что они ясно и точно показывают, как влияют флаги, если вы знакомы с двоичной арифметикой. Они также представляют собой почти буквальное описание того, что делает оборудование. Для тех, кто не знаком с такими вещами (а кто сначала?) описание довольно неясное.

Я советую вам углубиться в это и изучить двоичную арифметику. Чудеса записи отрицательных чисел с дополнением до двух и взаимодействие между арифметическими и логическими операциями просто изумительны.

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