Язык ассемблера Z80 - флаг знака после INC r - PullRequest
0 голосов
/ 19 февраля 2011

одна вещь с языком ассемблера Z80 меня беспокоит.Всегда ли флаг знака представляет знак значения регистра A?Я имею в виду, когда я запускаю «INC B», результат возвращается к B, поэтому берется ли флаг знака из значения регистра A или B?Заранее спасибо

Ответы [ 4 ]

1 голос
/ 19 февраля 2011

Под Z80 все регистры (A, B, C, D, E, H, L) независимы, поэтому любая арифметическая или двоичная операция влияет на флаги в регистре F.

Проверка Z80Лист данных на стр. 160 для inc r затронутых флагов.

1 голос
/ 19 февраля 2011

Эта страница: http://icarus.ticalc.org/articles/z80_faq.html, по-видимому, указывает на то, что флаг знака представляет собой результат любого вычисления, а не только тех, которые указаны в регистре А.

0 голосов
/ 05 марта 2018

Флаги в Z80 всегда относятся к последней операции, которая их изменила. Такое поведение может быть полезным или не очень полезным. Просто чтобы дать вам несколько конкретных примеров:

ld l,0           ; L is non-zero, but loading does not affect flags,
                 ; so their state is undefined at this stage
xor a            ; this resets A to 0; affected flags are NC, Z
ld h,a           ; we still have NC, Z
inc hl           ; HL is now equal to 1, but inc/dec of register pairs does
                 ; not affect any flags at all
dec a            ; A is now 255 (i.e. -1). we have NZ (expectedly),
                 ; however flag C is still off (intuitively unexpectedly),
                 ; because DEC of individual registers does not affect state of flag C
add a,1          ; at the same time, addition modifies both Z and C,
                 ; so after this A=0 again and we have flags Z and C both on

Вообще говоря, это означает, что иногда вы можете создавать более сложные условия, которые отслеживают состояние флага C, в то же время выполняя другие операции, которые изменяют флаг Z без изменения флага C. Это также означает, что вы должны помнить для каждой операции, какие флаги он изменяет.

Лучший из известных мне онлайн-столов со всей этой информацией расположен по адресу http://clrhome.org/table/

0 голосов
/ 26 октября 2011

Флаг знака не всегда представляет A. Переполнение (вкл. На 255), побитовые операции (сдвиг и т. Д.) И логические операторы влияют на все флаги.

Однако Zilog настраивает каждый регистр по-разному, поэтому некоторые операции влияют на флаги с конкретным регистром, а не с другим. Распространенной оптимизацией является «XOR A», которая устанавливает флаг знака и эффективно сравнивает A с нулем. Я почти уверен, что это работает только на рег.

Вышеупомянутый документ Icarus объясняет флаги, и раньше был еще один текстовый документ еще меньшего размера, который объясняет флаги. Но в последний раз я видел это более 10 лет назад, и я понятия не имею, где это будет.

...