home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / coders / assembler-kurs / listings / listing2e.s < prev    next >
Text File  |  1977-12-31  |  4KB  |  94 lines

  1.  
  2. ; Listing2e.s
  3.  
  4. Anfang:
  5.     lea    $dff006,a0    ; Gib $dff006 (VHPOSR) in a0
  6.     lea    $dff180,a1    ; Gib $dff180 (COLOR0) in a1
  7.     lea    $bfe001,a2    ; Gib $bfe001 (CIAAPRA) in a2
  8. Waitmouse:
  9.     move.w    (a0),(a1)    ; Gib den Wert von $dff006 in COLOR0
  10.     btst    #6,(a2)        ; linke Maustaste gedrückt?
  11.     bne.s     Waitmouse    ; Wenn nicht, zurück zu waitmouse
  12.     rts            ; Ende
  13.  
  14.     END
  15.  
  16. Wie man sieht, ist der  Waitmouse-Zyklus  aus  indirekten  an  Stelle  der
  17. direkten  Adressierungen  aufgebaut,  es  wird  also  nicht direkt mit den
  18. Adressen gearbeitet, diese werden in Register geschrieben  und  mit  denen
  19. wird  hantiert.  Die  -  unter  Klammern  gesetzten  - Register werden für
  20. Schreib- oder  Leseoperationen  verwendet  ->  Indirekt.  Das  erhöht  die
  21. Geschwindigkeit  der  Schleife, da die Register bekanntlich schneller sind
  22. als die  direkten  Adressierungen.  Es  müßte  eine  leichte  Änderung  im
  23. Flimmern  des Bildschirmes feststellbar sein, in Vergleich zu Listing1a.s,
  24. da die Abarbeitung schneller ist. Nach der Ausführung kann man überprüfen,
  25. daß  die  Register  a0,  a1  und  a2  dementsprechend die Adressen $dff006
  26. (VHPOSR), $dff180 (COLOR00) und  $bfe001  (CIAAPRA)  enthalten.  Wenn  man
  27. wirklich alle Zahlen aus dem Loop (Schleife) entfernen will, dann kann man
  28. das BTST #6,$bfe001 mit einem BTST d0,$bfe001 ersetzen, wobei in d0 die  6
  29. steht:
  30.  
  31. Anfang:
  32.     lea    $dff006,a0    ; Gib $dff006 (VHPOSR) in a0
  33.     lea    $dff180,a1    ; Gib $dff180 (COLOR0) in a1
  34.     lea    $bfe001,a2    ; Gib $bfe001 (CIAAPRA) in a2
  35.     moveq     #6,d0        ; Gib den Wert 6 in d0
  36.  
  37. Waitmouse:
  38.     move.w    (a0),(a1)    ; Gib den Wert von $dff006 in COLOR0
  39.     btst    d0,(a2)        ; linke Maustaste gedrückt?
  40.     bne.s     Waitmouse    ; Wenn nicht, zurück zu waitmouse
  41.     rts            ; Ende
  42.  
  43.     END
  44.  
  45. (Verwendet Amiga+b,c um dieses Listing mit dem oberen zu vertauschen)
  46.  
  47. Anmerkung: Um die 6 in d0 zu schreiben, habe ich statt dem üblichen MOVE.L
  48. #6,d0  ein  MOVEQ  #6,d0  verwendet, weil die Zahlen unter $7f (also 127),
  49. seine sie negativ oder  positiv,  mit  diesem  speziellen  Befehl  in  die
  50. Datenregister  gegeben  werden können. MOVEQ ist immer ein MOVE.L, es gibt
  51. also kein .b, .w oder .l, es ist wie das LEA. Beispiele:
  52.  
  53.     MOVEQ    #100,d0    ; weinger als 127
  54.     MOVE.L    #130,d0    ; mehr als 127, ich verwende das normale move.l
  55.     MOVEQ    #-3,d0    ; bis -128 kann das MOVEQ eingesetzt werden.
  56.  
  57. Bemerkung2: Es ist üblich, alle Register zu verwenden, indem man  Adressen
  58. und  Daten  darin  speichert,  die für die Routinen (Unterprogramme) nötig
  59. sind, da sie sehr schnell sind. Aber es leuchtet ein, daß die Programme so
  60. ihre Klarheit verlieren und nicht mehr recht "leserlich" sind, stellt euch
  61. vor, ihr bekommt ein Programm vorgesetzt, bei dem, irgendwo  mitten  drin,
  62. so was steht:
  63.  
  64. Routin:
  65.     move.w    (a0),(a1)
  66.     btst    d0,(a2)
  67.     bne.s    Routin
  68.  
  69. Hier sehen wir nur (a0),(a1), d0,(a2) usw. WENN WIR NICHT WISSEN,  WAS  IN
  70. DEN  REGISRTERN  DRINSTEHT,  WIRD  UNS  DAS  ALLES  OHNE  SINN ERSCHEINEN,
  71. deswegen versichere ich euch, lernt euch die  Adressierungsarten  gut  und
  72. erinnert  euch,  an welchen Punkten im Programm ihr Daten oder Adressen in
  73. Register gegeben habt, um zu verstehen, was man auch nur  vor  ´ner  Woche
  74. getan  hat.  Eine  Stärke des 68000 liegt darin, INDIREKT mit dem Speicher
  75. umgehen zu können, darin liegen aber auch die Schwierigkeiten. Um zu üben,
  76. schreibt  einige  unsinnige, aber total verquirlte Listings mit indirekten
  77. Adressierungen etc. um zu verstehen, was am Ende rauskommt. Am Ende  könnt
  78. ihr  es  testen und überprüfen, ob eure Vermutungen stimmen. Ich gebe euch
  79. einen Anfang, ihr fahrt mit dem Durcheinander fort, fast  so,  als  würdet
  80. ihr ein Rätsel lösen:
  81.  
  82.     lea    SCHLUMPF,a0
  83.     move.l    (a0),a1
  84.     move.l    a1,a2
  85.     move.l    (a2),d0
  86.     moveq    #0,d1
  87.     move.l    d1,a0
  88.     .....
  89.     rts
  90.  
  91. SCHLUMPF:
  92.     dc.l    $66551
  93.  
  94.