地址和键盘频闪行为看起来像 Apple II,所以我会用它来回答。(如果这实际上是一个逆向计算问题,那么您可以将其发布在Retrocomputing上。)
对于与八位大师的答案稍有不同的看法,这是您的代码的一个版本(“A”),它假设您要打印结束键字符(因为它通常是如下所示的 Enter/Return),这使得循环结束更清晰。您也可以省略 CMP #$80,因为 LDA KYBD 设置 N。
START JSR HOME
LOOP LDA KYBD ;Key pressed?
BPL LOOP
STA STROBE ;Yes: clear key
JSR COUT ;Print key
CMP #$8D ;End key?
BNE LOOP
RTS ;Yes: return to caller
如果您不想打印结束键,您仍应在退出前清除频闪:
START JSR HOME
LOOP LDA KYBD ;Key pressed?
BPL LOOP
STA STROBE ;Yes: clear key
CMP #$8D ;End key?
BEQ EXIT
JSR COUT ;No: print key
JMP LOOP
EXIT RTS ;Yes: return to caller
退出代码将特定于环境。例如,如果从 Applesoft BASIC 中使用 CALL 32768 调用 RTS 会很好,但如果您的程序是从 ProDOS 磁盘操作系统中调用的,则需要使用 QUIT 命令调用 API。
请注意,版本“A”仅在 COUT 保留 A 的内容时才有效,就像在 Apple II 固件中一样。记住每个寄存器中的内容以及在每条指令之后更改或保持不变的标志是简洁和紧凑的汇编语言的方法。