问题描述
程序仅当输入端口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