我正在创建一个简单的程序,允许用户输入输入,然后在用户输入某个键时退出程序。但是,我不知道下面我的代码在哪里:
OBJ $8000
KYBD EQU $C000
STROBE EQU $C010
COUT EQU $FDED
HOME EQU $FC58
START JSR HOME
LOOP LDA KYBD
CMP #$80
BCC LOOP
STA STROBE
JSR COUT
JMP LOOP
感谢您的帮助。
答案 0 :(得分:2)
简单来说,只需测试.A的内容以获取要用于退出的键码,然后分支如果相等:
OBJ $8000
KYBD EQU $C000
STROBE EQU $C010
COUT EQU $FDED
HOME EQU $FC58
START JSR HOME
LOOP LDA KYBD
CMP #$80
BCC LOOP
CMP #$<KEYCODE>
BEQ EXIT
STA STROBE
JSR COUT
JMP LOOP
EXIT NOP
答案 1 :(得分:2)
地址和键盘选通行为看起来像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,则RTS会很好,但如果您的程序是从ProDOS磁盘操作系统调用的,则需要使用QUIT命令调用API。
请注意,版本“A”仅在COUT保留A的内容时有效,就像在Apple II固件中一样。记住每个寄存器中的内容以及每个指令后更改或保持不变的标记是简化汇编语言的方法。