¢******** Verzweigungen ********¢¢Was waere ein Computer, wenn es keine¢IF...THEN Bef. geben wuerde...??"#$?!¢¢In diesem Teil besprechen wir , wie¢Verzweigungen in die Prg. bauen koennen¢(CMP, CPX , CPY).¢¢Nun soll ein Prg. geschrieben werden,¢welches aus dem Zufallsregister RANDOM¢(53770 = $D20A) solange liest , bis¢dieses der Wert 50 hat.¢Der Bildschirm soll sich dann jeweils¢anders faerben.¢¢Das Prg.:¢¢10 *=$5000¢20 .OPT OBJ ¢30 LDA #0 ; BILDSCHIRM¢40 STA 710 ; SCHWARZ¢50 LOOP LDA 53770 ; IF PEEK(RANDOM) 60 CMP #50 ; =50?¢70 BNE LOOP ; <> 50¢80 ; THEN¢90 LDA #50 ; BILDSCHIRM¢91 STA 710 ; ROT¢92 BRK ; = STOP¢¢Was bewirkt CMP im Computer ?:¢Wenn der Wert hinter CMP gleich dem¢des Akkumulators dann setzt dieser Bef.¢das ZERO FLAG. Ist der Wert ungleich¢dem des Akkus, dann wird das ZERO FLAG¢auf 0 gesetzt.¢¢Der Bef. BNE verzweigt nun immer dann¢zu dem angegebenen LABEL, wenn das ¢ZERO FLAG 0 ist.Im obigen Prg. ist ¢das Zero Flag ja solange auf 0 bis¢der RANDOM Wert gleich 50 ist.¢So ist koennte man das obige Prg.¢in Basic so schreiben:¢¢10 IF PEEK(53770)<>50 THEN 10¢20 POKE 710,50¢¢¢Der Bef. BEQ + Label ist genau das¢Gegenteil zu BNE. Dieser verzweigt¢naemlich immer dann, wenn das ZERO FLAG¢gesetzt ist.¢Mit dem BEQ koennte das Prg. folgender-¢massen aussehen:¢¢100 *=$5000¢110 .OPT OBJ¢120 LDA #0¢130 STA 710¢140 LOOP LDA 53770¢150 CMP #50¢160 BEQ GLEICH¢170 JMP LOOP¢180 GLEICH LDA #50¢190 STA 710 ¢200 BRK¢¢Mit JMP (JuMP) wird immer zum LABEL¢oder Adr. gesprungen. (Waere also¢ungefaehr identisch mit GOTO)¢¢Die Arbeitsweise der Bef. BNE & BEQ:¢¢Wichtig ist , dass BNE & BEQ keine¢Sprungbefehle sind. BNE & BEQ sind¢2 Byte Befehle:¢Im 1. Byte steht der Befehl und im¢2. Byte in welche Richtung ver-¢zweigt werden soll.¢Steht im 2. Byte also 10, so wird¢der Befehl als naechstes ausgefuehrt,¢der 10 Bytes weiter steht.¢Mit BNE & BEQ kann man vorwaerts als ¢auch rueckwaerts maximal 128 Bytes(in¢jeder Richtung) verzweigen.¢¢Wir wollen an diser Stelle nicht weiter¢in diese Bef. eingehen, da dieses nur¢Verwirrung schaffen wuerde.¢¢Sollte eine Verzweigung ueber diese¢128 Bytes hinausgehen, so wird der¢Assembler einen Fehler ausgeben.¢¢Alle בompare Befehle arbeiten natuer-¢lich identisch, so das auch das X, so-¢wie Y-Register mit einem bestimmten¢Wert verglichen werden kann:¢¢CPX¢CPY¢¢@¢