Каково представление значений в инструкции LD в 8-битном процессоре Z80?

У меня возникают трудности с пониманием того, что происходит в этом коде:

LD A, -1;
LD B, 130;
ADD A, B;

И какие флаги установлены в 1 после ADD инструкция.

В принципе, я не знаю, какое значение хранится в регистре B,

Я не могу найти информацию о том, 130 в LD B, 130 означает "1000 0010" или "0 1000 0010" (поэтому впоследствии мы должны избавиться от MSB/LSB - я не знаю, какой именно).

В результате я не уверен, какое окончательное значение хранится в A,

1 ответ

Решение

Z80 - это 8-битный процессор, поэтому ваш 9-битный номер 0 1000 0010 не имеет никакого отношения Код, который вы разместили

LD A, -1;
LD B, 130;
ADD A, B;

эквивалентно

LD A, 0hFF
LD B, 0h82
ADD A, B

и после добавления регистр А будет содержать 0h81

Добавление приведет к установке флага Carry, поскольку он генерирует "заем". Carry является результатом неподписанного дополнения.

Это приведет к очистке флага переполнения, поскольку отсутствует "внутренний перенос" с бита 6 на бит 7. Оба значения были отрицательными для начала, и A остается отрицательным. Флаг переполнения устанавливается, когда подписанная сумма не может быть правильно представлена ​​в реестре.

Нулевой флаг будет очищен, так как A отличен от нуля.

Флаг знака будет установлен, так как A отрицателен согласно биту 7.

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