2016-10-20 7 views
0

Ich erstelle ein einfaches Programm, mit dem der Benutzer Eingaben eingeben kann, und beendet dann das Programm, wenn der Benutzer einen bestimmten Schlüssel eingibt. Allerdings bin ich mir nicht sicher, wo ich mit dem Code, den ich derzeit habe, gehen:Wie verlasse ich eine Schleife?

  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 

Vielen Dank für jede Hilfe.

+2

Es sieht so aus, als ob Sie bereits Vergleiche und bedingte Verzweigungen kennen. Das sollte ausreichen, um dein Problem zu lösen. –

Antwort

2

In einfachen Worten, gerade testen Sie die Inhalte von .A für den keycode Sie, beenden verwenden möchten, und dann verzweigen, wenn gleich:

 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

Die Adressen und Tastaturverhalten Strobe wie ein Apple II aussehen, also werde ich das benutzen, um zu antworten. (Wenn es sich tatsächlich um eine Retrocomputing-Frage handelt, können Sie sie unter Retrocomputing veröffentlichen.)

Für eine etwas andere Antwort von Eight-Bit Gurus Antwort ist hier eine Version ("A") Ihres Codes, die Sie annehmen möchten Drucken Sie das Ende-Zeichen (da es oft Enter/Return wie folgt ist), was die Schleife sauberer macht. Sie können auch die CMP # $ 80 auslassen, weil LDA KYBD N. setzt

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 

Wenn Sie die Ende-Taste nicht drucken möchten, sollten Sie noch den Blitz löschen vor dem Verlassen:

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 

Die Exit-Code ist für die Umgebung spezifisch. Zum Beispiel wäre RTS in Ordnung, wenn es von Applesoft BASIC mit CALL 32768 aufgerufen würde, aber wenn Ihr Programm vom ProDOS Disk Operating System aufgerufen wurde, müssten Sie eine API mit dem Befehl QUIT aufrufen.

Beachten Sie, dass die Version "A" nur funktioniert, wenn COUT den Inhalt von A beibehält, wie es in der Apple II-Firmware der Fall ist. Wenn man bedenkt, was sich in jedem Register befindet und welche Flags nach jeder Anweisung geändert oder nicht verändert werden, ist dies der Weg zu einer übersichtlichen und kompakten Assemblersprache.

Verwandte Themen