我使用有条件的在z80 PIO中制作了一个程序,但结果不同

问题描述

程序仅当输入端口A = 01H时,才使输出端口B = FFH (另一个输入,然后输出是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

解决方法

由于我已经有35年没有使用Z80汇编程序了,所以我有点生疏了,但是在我看来,您好像LD A,FFH会在输出每个循环之前使用。

考虑添加标签(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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...