Loops 如何退出循环?
我正在创建一个简单的程序,允许用户键入输入,然后在用户输入某个键时退出该程序。但是,我不确定如何使用我目前拥有的以下代码:Loops 如何退出循环?,loops,6502,Loops,6502,我正在创建一个简单的程序,允许用户键入输入,然后在用户输入某个键时退出该程序。但是,我不确定如何使用我目前拥有的以下代码: OBJ $8000 KYBD EQU $C000 STROBE EQU $C010 COUT EQU $FDED HOME EQU $FC58 START JSR HOME LOOP LDA KYBD CMP #$80 BC
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
感谢您的帮助。简单地说,只需测试.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
OBJ$8000
KYBD等值$C000
选通相等$C010
相当于$FDED
家用EQU$FC58
启动JSR主页
回路LDA KYBD
CMP#80美元
BCC环路
化学机械抛光#$
BEQ出口
STA选通
JSR库特
JMP循环
出口编号
简单地说,只需测试.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
OBJ$8000
KYBD等值$C000
选通相等$C010
相当于$FDED
家用EQU$FC58
启动JSR主页
回路LDA KYBD
CMP#80美元
BCC环路
化学机械抛光#$
BEQ出口
STA选通
JSR库特
JMP循环
出口编号
地址和键盘选通行为看起来像苹果II,所以我将用它来回答。(如果这实际上是一个追溯计算问题,那么您可以将其发布到。)
与八位大师的答案略有不同的是,这里有一个版本(“a”)的代码,它假设您想要打印结束键字符(因为它通常按如下方式输入/返回),从而使循环结束更干净。您还可以省略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
退出代码将特定于环境。例如,如果RTS是通过调用32768从Applesoft BASIC调用的,那么RTS就可以了,但是如果您的程序是从ProDOS磁盘操作系统调用的,那么您需要使用QUIT命令调用API
请注意,版本“A”只有在保留A的内容时才有效,就像在Apple II固件中一样。记住每个寄存器中的内容以及每个指令后更改或保留的标志是简洁紧凑的汇编语言的方法。地址和键盘选通行为看起来像Apple II,因此我将用它来回答。(如果这实际上是一个追溯计算问题,那么您可以将其发布到。) 与八位大师的答案略有不同的是,这里有一个版本(“a”)的代码,它假设您想要打印结束键字符(因为它通常按如下方式输入/返回),从而使循环结束更干净。您还可以省略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
退出代码将特定于环境。例如,如果RTS是通过调用32768从Applesoft BASIC调用的,那么RTS就可以了,但是如果您的程序是从ProDOS磁盘操作系统调用的,那么您需要使用QUIT命令调用API
请注意,版本“A”只有在保留A的内容时才有效,就像在Apple II固件中一样。记住每个寄存器中的内容以及每个指令后更改或保留的标志是简洁紧凑的汇编语言的方法。看起来您已经知道如何进行比较和条件分支。这应该足以解决您的问题。看起来您已经知道如何进行比较和条件分支。这应该足以解决你的问题。