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

  1.  
  2. ; Listing2d.s
  3.  
  4. Anfang:
  5.     lea    NILPFERD,a0    ; gib in A0 die Adresse von NILPFERD
  6.     move.l    (a0),d0        ; gib in d0 den .L-Wert, den wir
  7.                 ; an der Adresse in a0 finden, also
  8.                 ; das erste Longword, das bei NILPFERD steht
  9.     move.l    NILPFERD,d1    ; in d1 geben wir den Inhalt des ersten
  10.                 ; longword (4 bytes=4 Adressen) von NILPFERD
  11.     move.l    a0,d2        ; in d2 geben wir die in a0 enthaltene Zahl,
  12.                 ; also die Adresse von NILPFERD, das zuerst
  13.                 ; mit dem LEA NILPFERD,a0 geladen wurde
  14.     move.l    #NILPFERD,d3    ; in d3 geben wir die Adresse von NILPFERD
  15.     rts
  16.  
  17. NILPFERD:
  18.     dc.l    $123
  19.  
  20.     END
  21.  
  22.  
  23. Bei  diesem  Beispiel  erkennt  man  den  Unterschied  zwischen  direkter,
  24. indirekter und absoluter Adressierung: einmal  assembliert,  macht  ein  D
  25. Anfang,  um  die  Ausgangssituation anzusehen, und nach einem J werdet ihr
  26. den Unterschied in  den  Registern  bemerken:  in  d0  und  d1  wird  $123
  27. enthalten sein, also der Inhalt
  28. von NILPFERD:
  29.  
  30.     lea    NILPFERD,a0    ; gib in A0 die Adresse von NILPFERD
  31.     move.l    (a0),d0        ; gib in d0 den .L-Wert, den wir
  32.                 ; an der Adresse in a0 finden, also
  33.                 ; das erste longword, das nach NILPFERD steht
  34.                 ; (Mit dem MOVE.L kopiert man das Byte an
  35.                 ; der Adresse in a0 selbst und die drei
  36.                 ; folgenden, denn ein Long ist ja 4 Byte lang).
  37.  
  38.  
  39. Das ist identisch mit:
  40.  
  41.     move.l    NILPFERD,d1    ; in d1 geben wir den .L-Inhalt von NILPFERD
  42.  
  43. In beiden Fällen wird der .L-Inhalt (d.h. 4 Bytes ab der angegebenen Adresse)
  44. von NILPFERD ins Datenregister kopiert.
  45.  
  46. In d2, d3 und a0 hingegen werdet ihr die Adresse von NILPFERD bemerken,denn:
  47.  
  48.  
  49.     lea    NILPFERD,a0 ; in A0 geben wir die Adresse von NILPFERD
  50.     move.l    a0,d2        ; in d2 geben wir den Wert, der in a0 enthalten
  51.                 ; ist, also der Adresse von NILPFERD, die mit dem
  52.                 ; LEA geladen wurde
  53.  
  54. ist identisch mit:
  55.  
  56.     move.l    #NILPFERD,d3    ; in d3 geben wir die Adresse von NILPFERD
  57.     
  58.  
  59.  
  60. Diese Differenzen in der Adressierung müßen klar  sein,  denn  wenn  diese
  61. einmal  sitzen, dann reicht es, sich an die Befehle und deren Bedeutung zu
  62. erinnern, denn sie verwenden alle die gleichen Adressierungsarten.
  63.  
  64. Beispiele von bisher gelernten Adressierungen:
  65.  
  66. DIREKT:
  67.     move.l    a0,a1
  68.  
  69. INDIREKT:
  70.     clr.l     (a0)
  71.     move.l    (a3),(a4)
  72.  
  73. ABSOLUT:
  74.     move.l    #LABEL,d0
  75.     MOVE.L    #10,d4
  76.  
  77.