2016-10-20 5 views
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 

Спасибо за любую помощь.

+2

Похоже, вы уже знаете, как делать сравнения и conditíonal ветви. Этого должно быть достаточно, чтобы решить вашу проблему. –

ответ

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 
2

Адреса и клавиатура поведение строб выглядеть как Apple II, поэтому я буду использовать это, чтобы ответить. (Если это на самом деле ретрокомпьютерный вопрос, вы можете опубликовать его на Retrocomputing.)

Для немного другого ответа от ответа 8-битного Гуру, вот версия («A») вашего кода, предполагающая, что вы хотите напечатайте символ конечного ключа (поскольку он часто вводит/возвращает, как показано ниже), что делает очистку конца цикла. Вы можете также опустить КСС # $ 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 будет хорошо, если бы он был вызван из Applesoft BASIC с CALL 32768, но если ваша программа была вызвана из операционной системы ProDOS Disk, вам нужно будет вызвать API с командой QUIT.

Обратите внимание, что версия «A» работает только в том случае, если COUT сохраняет содержимое A, как в прошивке Apple II. Имея в виду, что находится в каждом регистре и какие флаги изменены или остаются нетронутыми после каждой инструкции, это способ сжатого и компактного языка ассемблера.