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固件中一样。记住每个寄存器中的内容以及每个指令后更改或保留的标志是简洁紧凑的汇编语言的方法。

看起来您已经知道如何进行比较和条件分支。这应该足以解决您的问题。看起来您已经知道如何进行比较和条件分支。这应该足以解决你的问题。