#Logo Gadget2-13:pinsel/ag.prog
#Titel Programmieren / Assembler-Kurs Teil 2
#C31
#Font Frankfurter 16
       ASSEMBLER - VON ANFANG AN
#Font topaz 8
                                                           Von Milka
#C21

   So, heute fangen wir mal mit dem Programmieren an.  Erst  nochmal
ein kurzer Rückblick und Infos:

   Also, wie schon gesagt, besteht das fertige Programm  aus  Zahlen
(besser  gesagt aus Wörtern, also 2 Bytes), die nacheinander abgeru­
fen und ausgeführt werden. DU gibst allerdings nicht die Zahlen ein,
sondern Befehle, die dann der ASSEMBLER in Zahlen umwandelt.

   Es gibt den berühmten PC, das ist der PROGRAM  COUNTER.  Und  den
kann  man sich als Extra-Schublade vorstellen (bzw. Extra-4-Schubla­
den, denn er ist ein Langwort), diese beinhalten genau DIE  Adresse,
die  den nächsten zu bearbeitenden Befehl hat. Aber jetzt machen wir
weiter.


Nochmal die "Vorspänne" für die Zahlensysteme:

 $ = Hexadezimal
 ! = Dezimal
 % = Binaer

Also: $10 = !16 = %10000

Aber los jetzt.

#C31
Der erste Befehl: MOVE
#C21

   DER ERSTE BEFEHL, den wir heute lernen, ist auch der  wichtigste.
Mit dem kann man sehr viel machen. Es ist der Befehl.......

#C10
MOVE
#C21

Dieser Befehl hat einen bestimmten Syntax, d.h. es gibt eine
bestimmte Art, in der er aufgerufen werden MUß, denn sonst
macht der Assembler Probleme. Dieser Syntax geht so:

#C10
MOVE.<länge> <source>,<destination>
#C21

Toll! Damit können wir jetzt sehr viel anfangen! Hahaha...

   Also: <länge> besteht aus einem Buchstaben, und der ist  entweder
B,  W  oder L, also BYTE, WORD oder LONGWORD. Damit setzen wir fest,
ob wir nur auf ein BYTE, ein WORT oder ein LANGWORT greifen sollen.

   Aber jetzt: <source> und  <destination>  !!  Was  sollen  wir  da
schreiben? Für unsere Non-English-Men: source heißt QUELLE, destina­
tion  heißt  ZIEL.  Sollen wir jetzt etwa MOVE.L TIMBUKTU, FRANKFURT
schreiben, oder wie?

   <source> und <destination> werden wir  in  sehr  vielen  Befehlen
finden,  ja,  eigentlich  in  fast allen. Beide werden mit Hilfe der
"Adressierungsarten" angegeben. Aber WAS sind Adressierungsarten?

   Da gibt es sehr viele. Ich  glaub,  die  lassen  sich  am  besten
erklären, indem man sie einfach mal auflistet.

#C31
Die Adressierungsarten
#C21

1. Datenregister

   In Assembler haben wir 8 Datenregister. Diese darf man sich,  wie
den  PC,  als  Extra-Schubladen  vorstellen, aber halt als Langwort-
Schubladen sprich 4 Schubladen. Wenn man die  Datenregister  anspre­
chen  will, muß man einfach D+Register eingeben. Nicht kapiert? Also
ein Beispiel:

#C10
MOVE.L D0,D2
#C21

   Tut einfach das, was in der Schublade von D0 ist, in die Schubla­
de von D2. (Okay, ich wollte natürlich sagen, tur das, was in den  4
D0-Schubladen  ist  in  die  4 D2-Schubladen) Der alte Inhalt von D2
wird gelöscht, terminiert, vernichtet.
   VORSICHT! Wie schon gesagt, soll man sich jedes Datenregister als
VIER Schubladen vorstellen. Was passiert jetzt, wenn ich

#C10
MOVE.W D0,D2
#C21

   eingebe? Ganz einfach: Der Inhalt von  der  DRITTEN  und  VIERTEN
Schublade  von  D0  wird  in  den Inhalt von der DRITTEN und VIERTEN
Schublade in D2 getan. Der Inhalt von der ERSTEN und  ZWEITEN  Schu­
blade in D2 bleibt erhalten!

Und bei

#C10
MOVE.B D0,D2
#C21

   Wir eben nur die VIERTE Schublade  verändert!  Das  gleiche  gilt
auch für die
#Seitenende
2. Adreßregister

   Diese sind genauso wie die Datenregister: Wir haben 8 Stueck dav­
on, Extra-Schubladen, Langwort, blablabla.

Aufrufen tut man die folglicherweise mit

#C10
MOVE.L A0,A2
#C21

oder so. Warum haben wir jetzt 8 Datenregister und 8 Adreßregister?

   Hier mein Tip: Nehmt für Adressen Adressregister und  für  andere
Sachen Datenregister. Denn: Mit den Adressregistern kann man was ma­
chen,  was  man mit Datenregistern NICHT machen kann. Und dieses muß
man auch nur mit Adressregistern machen.  Und  nochwas:  Nehmt  nach
Moeglichkeit  bei  Adressregistern  immer  LANGWÖRTER. Und übrigens:
Laßt auf jeden Fall A7 in Ruhe!


3. Inhalt von Adressregistern

   Hier kommt schon der erste Unterschied zwischen Daten- und Adreß­
registern. Dies hier kann man mit Datenregistern NICHT machen!

   Also, nehmen wir an, wir machen gerade unser Spiel. Und A4  zeigt
gerade  auf die Adresse, in der wir die Anzahl der Leben haben. (Der
Einfachheit halber haben wir nur ein Byte genommen,  um  die  Anzahl
der  Leben  festzulegen --- wer hat schon mehr als 255 Leben?) Jetzt
wollen wir die Anzahl der Leben in D0 tun. Was jetzt? Wir nehmen den
Inhalt vom Inhalt von A4!! Und der Inhalt von etwas wird  im  allge­
meinen mit KLAMMERN ausgesagt, also:

#C10
MOVE.B (A4),D0
#C21

So einfach ist das! Achtung: Bei

#C10
MOVE.W (A4),D0
#C21

muß man aufpassen, daß  in  A4  eine  GERADE  Adresse  ist!!  Warum,
müßtest  du  inzwischen wissen. Wenn nicht --> SOFORT NOCHMAL TEIL 1
KONSUMIEREN, ähh....

4. Konstante

   Eine Konstante ist einfach eine feste Zahl. Angenommen, wir  wol­
len  die  Zahl  25  in D3 setzen, nehmen wir einfach eine Konstante.
Konstanten werden mit # angezeigt, also:

#C10
MOVE.L #25,D3
#C21

   Wenn wir unser Spiel neu starten, haben wir am  Anfang  3  Leben,
also:

#C10
MOVE.B #3,(A4)
#C21

Ist doch wirklich nicht schwer, oder?

Probier aber bloß nicht, irgendeinen Mist wie beispielsweise

#C10
MOVE.B D0,#5
#C21

zu  verbocken  oder  so.  Wie du dir denken kannst ist es hoffnungs­
los  die Zahl 5 neu zu definieren. Es sei denn, du willst dich erns­
thaft mit Adam Riese anlegen. An dieser Stelle wird dann der  Assem­
bler Probleme machen.

Nochwas wichtiges: Am Ende vom Prg muss RTS stehen!!

   Der Prozessor selbst kann ja nicht erkennen, wann das Prg zu Ende
ist, da muß man's ihm halt sagen. Wie gesagt: RTS!

Also hier ein kleines Programm:
#C10
MOVE.L #$50000,A3
MOVE.L #$20,D0
MOVE.L D0,(A3)
RTS
#C21
Was sollte nun passieren?
- Die Zahl $50000 wird in A3 abgelegt
- Die Zahl $20 wird in D0 abgelegt
- Der Inhalt von D0 wird in die Adresse, auf die A3 zeigt,gelegt.
  Zu Deutsch: Die Zahl $00000020 kommt in die Adressen
  $50000-$50003.

   Beim Seka gibts da auch den  Befehl  Q  (im  Hauptmenu!).  Mit  Q
$50000  kannste  gucken,  was ab Adresse $50000 im Speicher ist. Bei
Adrese $50000-$50003 müßte da sein:

#C10
00 00 00 20
#C21

   Hier ist eben die Frage, wie es bei anderen Assemblern ist.  Man­
che  Assembler  haben  so eine Funktion ueberhaupt nicht, und manche
eben mit einem anderen Namen. Hier müßt ihr eben  mal  ausprobieren.
Meistens  findet  man  diese  Funktion beim DEBUGGER, also sucht mal
schön im Handbuch.

   Schlage vor, du machst jetzt mal ein paar schöne Experimente. Bis
jetzt ist übrigens alles bei allen Assemblern gleich (eben  bis  auf
diesen Q-Befehl vom SEKA).

Na okay, dann will ich nicht länger stören.

Tschüß, Milka
