0

我正在创建一个简单的程序,允许用户键入输入,然后在用户输入某个键时退出程序。但是,我不确定我目前拥有的代码在哪里:

            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

谢谢你的帮助。

4

2 回答 2

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
于 2016-10-20T17:45:33.187 回答
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 会很好,但如果您的程序是从 ProDOS 磁盘操作系统中调用的,则需要使用 QUIT 命令调用 API。

请注意,版本“A”仅在 COUT 保留 A 的内容时才有效,就像在 Apple II 固件中一样。记住每个寄存器中的内容以及在每条指令之后更改或保持不变的标志是简洁和紧凑的汇编语言的方法。

于 2016-10-21T09:36:03.833 回答