я создаю программу в z80 PIO с использованием conditional, но результат другой

#assembly #microprocessors #z80

#сборка #микропроцессоры #z80

Вопрос:

Программа для создания выходного порта B = FFH, тогда и только тогда, когда входной порт A = 01H (другой ввод, а затем вывод — 00)

Вот мой код:

        LD     A, 4FH
       OUT    (82H), A
       LD     A, 0FH
       OUT    (83H), A
LOOP:   IN     A,(80H)
        CP     01H
        JR     NZ,S1
        LD     A,00H
S1:     LD     A,FFH
        OUT    (81H),A
        JP     LOOP
  

проблема в том, что когда я даю ввод, отличный от 01, вывод по-прежнему FF

Комментарии:

1. Что делает начальный вывод 4F -> 82 и 0F -> 83 ?

Ответ №1:

Я немного устал, так как я не использовал ассемблер Z80 35 лет, но мне кажется, что вы будете LD A,FFH выводить каждый цикл.

Подумайте о добавлении label ( S2 ) и переходе к нему после загрузки A с 00H помощью — и разве вы не поменяли JR NZ логику местами? JR NZ переходит, если CP 01H не установлено Z .

         LD     A, 4FH
        OUT    (82H), A
        LD     A, 0FH
        OUT    (83H), A

LOOP:   IN     A,(80H)
        CP     01H
        JR     NZ,S1      ; jump to S1 if 01 was not read
        LD     A,FFH      ; we got 01, load FF
        JR     S2         ; ... and jump to S2

S1:     LD     A,00H      ; will only be reached if 01 was not read

S2:     OUT    (81H),A
        JP     LOOP       ; could probably be  JR LOOP