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

  1.  
  2. ; Listing2m.s
  3.  
  4. ; Beweis dafür, daß wenn auf den Registern a0..a7 operiert wird, immer
  5. ; mit dem ganzen Longword gearbeitet wird, auch mit einem .W
  6.  
  7.  
  8. Anfang:
  9.     move.l    #$FFFFFF,d0
  10.     ADDQ.W    #4,d0        ; Zählt 4 .W zu d0 dazu, es arbeitet 
  11.                 ; aber nur auf dem WORD, da wir uns 
  12.                 ; in einem Datenregister befinden, 
  13.                 ; gleich wie bei einer Label
  14.     
  15.     lea    $FFFFFF,a0
  16.     ADDQ.W    #4,a0        ; Zählt 4 .W zu a0 dazu, da es aber auf 
  17.                 ; einem ADRESSREGISTER agiert, wird die 
  18.                 ; ganze Adresse davon in Mitleidenschaft 
  19.                 ; gezogen, also das ganze Longword
  20.     rts
  21.  
  22.     end
  23.  
  24. Probiert ein Debug dieses Listings zu machen (AD), und Schritt für Schritt
  25. werdet  ihr den Unterschied zwischen einem Daten- und einem Adressregister
  26. erkennen.  Das  gleiche  gilt  für   Label,   sie   verhalten   sich   wie
  27. Datenregister.  Der Unterschied liegt darin, daß bei Adressregistern immer
  28. auf der gesamten Adresse (Londword) gearbeitet  wird,  denn  es  ist  auch
  29. nicht  möglich,  darauf  mit  .B-Befehlen  zu  arbeiten.  Wenn  wir ein .W
  30. verwenden (nur möglich, wenn wir Zahlen subtrahieren/addieren/bewegen... ,
  31. die  kleiner  als ein Word sind, dann ist das Resultat das gleiche, als ob
  32. wir mit einem .L gespielt hätten. Deswegen kann man auch immer nur ein  .L
  33. verwenden,  es  ist aber nützlich, den Befehl in ein .W zu "optimisieren",
  34. wenn es möglich ist, da es schneller ist als ein .L. Mit  dem  Debug  seht
  35. ihr,  daß  das ADDQ.W #4,d0 nur auf dem Word arbeitet, im d0, es ändert in
  36. $00FF0003, da ja nach dem $FFFF von NULL ($0000) gestartet wird, und  dann
  37. bis  $0003  raufzählt.  Der  "höhere"  (höherwertigere) Teil der Zahl wird
  38. nicht beeinflußt. Wenn aber ein ADDQ.L #4,d0 gemacht  würde  (probiert!!),
  39. dann  würde  die  GANZE  Longword angesprochen, und sie würde in $01000003
  40. mutieren, denn nach dem $00FFFFFF kommt $01000000. Auf den Adressregistern
  41. hingegen  wirkt  sich  das  ADDQ.W  wie  ein  ADDQ.L aus, da gibt´s keinen
  42. Unterschied, nur kann es nicht immer verwendet werden, wie  z.B.  für  die
  43. Zahl  $123456.  Es  ist  zwar  kein  Fehler,  aber  versucht, immer ein .W
  44. einzusetzen, wenn es möglich ist, da es etwas schneller ist als das .L.
  45.  
  46.     ADD.L    #$123,a0    ; Optimisierbar in ADD.W #$123,a0
  47.     ADD.L    #$12345,a0    ; Nicht optimisierbar
  48.  
  49.  
  50.