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

   Schön, daß du vorbeischaust! Ich halte jetzt mal das ganze Begrü­
ßungsgeblubber so kurz wie möglich, nur eben mal das wichtigste: Al­
so erst mal will ich mich vorstellen. Ich bin  der  MILKA,  wie  man
oben  sehen  kann,  und  beschere  euch diesen Assemblerkurs, in der
Hoffnung, viele viele neue Programmierer "anzuwerben". Ich fange mal
von gaaaaanz unten an (was ist eigentlich  ein  Bit?!),  aber  keine
Panik,  das wird nicht so ein Anfängerteil (und jetzt nehmen wir un­
seren Zeigefinger und tippen auf die  linke  Maustaste):  wir  gehen
ganz  durch  bis zur direkten Programmierung (Copper, Blitter, Lauf­
werk usw.) Natürlich liegen zwischendrinnen noch Libraries usw. Aber
fangen wir jetzt erst mal gaaanz von vorne an.

   BITTE, BITTE, sobald du eine Frage hast:  Schreibe  das  an  mich
über EMail oder an Nils, der wird die Sache dann weiterleiten.
#C31
"Los geht's !" oder "Der Speicher"
#C21

   Wir machen jetzt erst mal eine kleine Reise IN den Computer rein.
Da drin gibt es ja bekanntlich das RAM und  das  ROM.  Diese  Dinger
sind  ja  bekanntlich der SPEICHER (zumindest das RAM). Aber was ist
jetzt Speicher??

   Die beste Vorstellung wäre hier  SCHUBLADEN.  In  einem  Computer
hausen kleine Schubladen. Und zwar jede Menge.

   Wir numerieren jetzt jede einzelne  Schublade  von  0  durch  und
bezeichnen sie als ADRESSEN. Wir können jetzt also sagen: In Adresse
53  befindet  sich  X  und  Y. Jaa...aber...WAS befindet sich in den
Schubladen?

   Tja, die Schubladen sind klein, in jede Schublade paßt  nur  eine
Zahl,  eine stinknormale Zahl. Diese Zahl nennen wir BYTE. Und diese
Zahl kann zwischen 0 und 255 liegen. In  jeder  Schublade  MUß  eine
Zahl liegen, und zwar nur EINE Zahl.
   Du hast jetzt bestimmt schon gehört: "Mein Comp  hat  512KB!"  KB
bedeutet  nichts  weiter als KiloByte. Wie du in Mathe gelernt haben
solltest, bedeutet KILO nichts weiter als TAUSEND, so würde das  be­
deuten  dass  der  Comp 512000 Schubladen hat. Allerdings STIMMT DAS
NICHT!! Du mußt wissen, daß bei einem Computer ALLES auf der Zahl  2
basiert,  und  1000  paßt da nicht so ganz rein! Denn 1000 ist keine
Potenz von 2! Aber ganz in der Nähe haetten wir die Zahl  1024,  und
die  IST  eine Potenz von 2! Von daher bedeutet ein KByte 1024 Byte.
Demnach hat ein Comp mit 512K 512x1024  Byte=524288  Byte  (Schubla­
den).  Was  MByte ist kannst du dir jetzt wohl denken: MegaByte. Und
Mega bedeutet MILLIONEN. Da aber die Millionen auch keine Potenz von
2 ist, nimmt man 1024x1024=1048576 Byte. Ein Comp mit 1MB  hat  also
1048576 Byte.

   Schauen wir uns aber mal das Byte genauer an.  Du  hast  bestimmt
schon  gehört,  dass  1  Byte=8  Bit  sind. Und zufälligerweise sind
2^8=256! Na sowas...

   Hier wäre  es  vielleicht  ganz  angebracht  das  Binärsystem  zu
erklaeren...

#C31
Das Binärsystem
#C21

   VORERST NOCH WAS WICHTIGES: Hier kommt vielleicht eine Menge neu­
es auf dich zu! Falls dies der Fall ist, LAß DIR ZEIT!!! Lies  alles
ganz  langsam und verdaue es erstmal! Nicht alles auf einmal! Lieber
langsam und sauber als schnell und null gerafft!

   Also: In dem System, dass du  normalerweise  zum  rechnen  nimmst
gibt  es ZEHN Ziffern: 0123456789. Deshalb heißt es auch DEZIMALSYS­
TEM (DEZI=10).

Im Binärsystem (auch Dualsystem) gibt es nur ZWEI Ziffern: 0 und 1 !

Hier erklär ich es am besten an einem Beispiel:

DEZIMAL | BINAER     Es ist bei unserem System so: Du hast erst die 0.
   0    |   0        Bei jeder nächsten Zahl gehst du einfach eine
   1    |   1        Ziffer weiter, also erst 1, dann 2, dann 3,
   2    |  10        usw, bis zur 9, dann fängst du wieder bei der 0
   3    |  11        an. Allerdings gehst du dann eine Stelle weiter
   4    | 100        "nach links" und erhöhst da um eins (du weißt
   5    | 101        ja: falls da nix vorhanden ist denkt man sich
   6    | 110        eine 0, 5 bedeutet genausoviel wie 0005 oder
   7    | 111        00000005). Wenn vorher also 009 war kommt 010.
   8    |1000        Beim Binärsystem ist das genauso! Lediglich
                     gibt es nur zwei Ziffern.

   Und ein Bit ist nichts weiter als eine Ziffer  beim  Binärsystem.
Warum  das  so  ist?  Der Computer kennt ja nur JA/NEIN, oder besser
gesagt Strom oder Nicht-Strom (das ist hier die Frage--haha). Nicht-
Strom bedeutet 0, Strom bedeutet 1. So bildet er die  Bytes  und  so
bildet er dann auch den gesamten Speicher!

   Ein Byte besteht also aus 8 Bit. Übe dich jetzt mal im Umrechnen!
Rechne mal die Zahl 43 ins Binärsystem um! Und denk dran:  Ein  Byte
besteht aus ACHT Bit, d.h. selbst wenn die Zahl mit weniger als acht
Bits  auskommt,  du musst trotzdem acht ausfuellen!

Also 43= ... na,na?

Ganz einfach:

 43=%00101011

   Das Ausrufezeichen da ist kein Tippfehler, es ist das Zeichen für
das  BINÄRSYSTEM.  Das sollte man machen, sonst erkennt man ja nicht
was  Binär  und was Dezimal ist! Zeige mal die Gleichung 43=00101011
deinem Mathelehrer, der köpft dich.

Na gut, zweiter Versuch. Rechne um: 93.

Also:

 93=%01011101

   WICHTIG: Probiere mal die ersten Potenzen von 2 auswendig zu ler­
nen! Wirklich wissen solltest du (angefangen bei 2^0):

1 2 4 8 16 32 64 128

Danach kämen noch:

256 512 1024 2048 4096

Dann könntest du noch lernen:

8192 16384 32768 65536 131072 262144

Aber die sind echt nicht mehr wichtig.

   Und so geht es den ganzen Speicher durch. Ein Computer mit 1 MBy­
te hat also 1024x1024x8 Bit. Stell dir das mal vor!


#C31
Das Hexadezimalsystem
#C21

   Wichtig ist jetzt auch noch das Hexadezimalsystem.  Heute  bleibt
einem  auch nix erspart! Das ist aber ganz leicht erklärt. Hexadezi­
mal bedeutet 16. Also ein System mit 16  Ziffern.  Die  ersten  zehn
sind klar: 0123456789. Bei den restlichen Handelt es sich aber nicht
um  irgendwelche  Hieroglyphen,  sondern  um Buchstaben: ABCDEF. Der
Vorteil liegt auf der Hand: 16 ist eine Potenz von zwei,  von  daher
kann  man mit Hexadezimalzahlen viel beser umgehen! Das Zeichen fuer
Hexadezimal ist übrigens das Dollar-Zeichen $ Kleiner Test zum Abge­
wöhnen: Rechne 105 in Hexadezimal um.

105=$69

Und dann noch die 230...

230=$E6

   Hast bestimmt schon gesehen, falls du  einen  Taschenrechner  mit
Hexadezimalanzeige  hast,  daß  man  da ganz schöne Sachen schreiben
kann, zum Bleistift $FACE oder $CAFE oder sowas.

#C31
Jetzt schieben wir was in den Speicher.
#C21

   So, stellen wir uns vor, wir machen jetzt ein kleines Spiel.  Und
dann müssen wir ja erst mal die LEBEN festlegen.

Wie machen wir das?

   Wir nehmen einfach mal Adresse $40000 und sagen:  Da  kommen die
Leben  rein.  Jetzt  füllen wir einfach mal die Schublade mit 3, und
wenn der Spieler Murks baut, dann ändern wir den Wert auf 2,  später
auf  1  und  schließlich auf 0 (=GAME OVER). Schön. Jetzt ist aller­
dings ein Problem: Wir haben 1000 Level, diese wollen wir in Adresse
$40002 stopfen. Da passen sie aber nicht rein, denn wenn der Spieler
Level 255 geschafft hat, steht  man  vor  einem  Problem.  Tja...was
jetzt?  Ganz  einfach:  Ein  Byte  ist offensichtlich eine Nummer zu
klein für uns. Wir nehmen ein WORT.
   Das WORT ist die nächsthöhere Stufe zum Byte. Wie du  dir  denken
kannst,  nimmt  ein  Wort  nicht  eine, sondern ZWEI Adressen in An­
spruch. Jetzt heißt's mitdenken: Mit zwei Adressen hast  du  16  Bit
frei.  Wie hoch kann jetzt der maximale Inhalt sein?? Na? Wer hat da
die Potenzen nicht auswendig gelernt??

   Aber okay, die Zahl ist ziemlich hoch, muß  man  nicht  auswendig
koennen. Es ist die 65535. (Nicht 65536, es fängt ja von 0 an! Nicht
vergessen!)

   Und jetzt etwas sehr wichtiges: Ein Wort muß IMMER bei einer  ge­
raden  Adresse  anfangen!!! Wenn du also probierst die Zahl 65535 in
die Adresse $40001 zu pumpen, erfolgt ein GURU!!!!

   Und nochwas: Wir stecken jetzt also das  Wort  in  $40002/$40003.
Du  kannst  jetzt das Wort von $40002 und erhälst damit die Zahl, du
kannst trotzdem noch einfach nur ein Byte von $40002 oder $40003 ra­
usholen. Was dabei rauskommt? Stell  dir  vor  wir  haben  die  Zahl
$1234. Und wenn wir jetzt das Wort $1234 in $40002 getan wird, kommt
also  automatisch  $12  in $40002 und in $40003 kommt $34. Du kannst
jetzt also getrost das Byte von $40003 lesen, dann kriegste $34.  Du
kannst auch das Byte von $40002 lesen, Ergebnis: $12. Du kannst aber
auch  das  Wort von $40002 lesen, raus kommt dann $1234! Hier siehst
du auch den Vorteil vom Hexadezimalsystem. Bei $1234 kannst du genau
sehen, daß die Bytes folgendermassen aussehen: $12,$34.  Beim  Dezi­
malsystem  ist  das  unmöglich! Oder erkennst DU vielleicht, daß bei
4660 das eine Byte 18 und das andere 52 ist?!

   Gut, also die Levelzahl waere  untergebracht.  Was  ist  mit  der
Punktzahl?? Die könnte 65535 übersteigen?!

   Tja, hier hilft nur noch das LANGWORT. Hier hast du ganze 32 Bit.
Hier weiß ich selbst nicht, wie hoch die maximale  Zahl  genau  ist,
sie  liegt  so um die 4 Milliarden. Dürfte für den Punktezähler rei­
chen. Auch hier gilt: GERADE Zahl als Anfangsadresse!!!!

   Noch was wichtiges: Du willst  vielleicht  auch  NEGATIVE  Zahlen
einsetzen.  Ob  eine  Zahl  positiv oder negativ ist, erkennst du am
höchstwertigen Bit,d.h. bei einem Byte erkennste an  Bit  7,  ob  ne
Zahl  +  oder - ist, beim Wort an Bit 15 und bei Langwort an Bit 31.
Ach, ich hab noch nicht erkl#rt, welches Bit wo ist? Es fängt  immer
rechts an, also:

Bit   76543210
Zahl  01001011

   Es MUß aber nicht so sein! Du kannst auch das  höchstwertige  Bit
als  ganz normales Bit ansehen! Hier gibt es geniale Befehle die al­
les erlauben. Es  ist  allerdings  NICHT  so,  daß  -1  einfach  als
%10000001  dargestellt  wird.  Nee,  das ganze geht von %11111111 an
rückwaerts, schwer zu erklaeren, aber das mußt du auch  nicht  unbe­
dingt wissen, das macht schon der Assembler. Du solltest nur wissen:
Bei Bytes ist halt !11111111 einfach -1!

#C31
Wozu braucht man denn diese Zahlen ?
#C21

   Tja. Die Zahlen sind vielseitig, sie können alles  sein:  Grafik,
Programm, Sound.

   Der Sound ist einfach erklaert: Ein Sound besteht  ja  aus  einer
Wellenform.  Und die Zahlen geben immer die Entfernung der Wellenli­
nie vom Nullpunkt an. Dabei geht's halt so: 0-127=oberhalb von Null,
128-255=unterhalb von Null.

   Grafik ist ganz  lustig:  Hier  geht  das  am  besten  ueber  das
Binärsystem: Hier einmal ein Smilie.

00111100 Überall, wo eine 1 ist, wird jetzt ein Pixel    ....
01000010 (=ein Bildpunkt) auf'm Bildschirm dargestellt  .    .
10100101 bei Null wird nix dargestellt. Und so geht    . .  . .
10000001 das halt die gesamten 320x200 (je nach        .      .
10100101 Auflösung) durch,d.h. ein Bild mit zwei       . .  . .
10111101 Farben und einer Auflösung von 320x200        . .... .
01000010 verbraucht 320x200 Bits=8000 Bytes!! Ein       .    .
00111100 Bild mit vier Farben das doppelte, ein Bild     ....
         mit 8 Farben das vierfache usw. Die 4096-
Farb-Bilder verbrauchen genausoviel  wie  die  64-Farb-Bilder.  Aber
darauf  kommen  wir erst viel später zurueck. Rechts siehst du übri­
gens den Smilie, wie er aussehen sollte (natürlich etwas größer dar­
gestellt, höhö).

   Aber uns gehts ja um das PROGRAMM: Was hat ein Programm mit  Zah­
len  zu  tun? Wäre ja schrecklich, wenn ich mit Zahlen programmieren
müßte! So, beispielsweise: 75=Bildschirm löschen,  200=Farbe  ändern
usw. ... Besorg' dir einen guten Assembler, der wandelt dann die Be­
fehle in Zahlen um, als FD-Software ist beispielsweise der A68k sehr
zu empfehlen.

   So, schreiben wir einfach mal schnell ein  Spiel  und  legen  das
in  Adresse $50000 bis $50400 ab. Toll. Jetzt liegt es da, wie rufen
wir es auf? Nun, es gibt den PC (hat nix mit IBM zu  tun).  Das  ist
der  PROGRAM COUNTER. Das ist ein REGISTER. Register stellen wir uns
einfach als 4 Extra-Schubladen vor. Diese Schubladen beinhalten  na­
türlich ein Langwort. Und dieses Langwort zeigt auf die Adresse, auf
der der Befehl liegt, der als nächstes abgearbeitet wird. Wir setzen
einfach den PC auf $50000 und los gehts! In Basic könnte man das als
"GOTO" uebersetzen! GOTO $50000 bedeutet also: Setze PC auf $50000!

   Achja, ganz am Anfang hab ich RAM und ROM angesprochen:  ROM  ist
das READ ONLY MEMORY. Da stehen die Sachen drinnen, die der Computer
unbedingt wissen muß, und die nicht verändert werden dürfen und kön­
nen! Das RAM ist das RANDOM ACCESS MEMORY und schon wesentlich inte­
ressanter,  da  spielt  die  Musik,  und nur darum geht es momentan.
1MByte bedeutet 1Mbyte RAM, das ROM zählt gar nicht.

PFFFUUUUHHHH... das war viel! Jetzt erst mal verdauen!

Und denk dran: Bei Fragen sofort schreiben!

   Ich geb's ja zu. Im ersten Teil ging's trocken wie in der  Sahara
zu.  Denk jetzt aber bloß nicht, daß es so weitergeht. In den nächs­
ten Teil vielleicht noch etwas, okay. Aber DANN  geht's  los!  Hilft
aber nix, wenn du die nächsten Teile überspringst. Du MUßT da durch.
Aber ES LOHNT SICH!
#Seitenende
#Y+60
Auf denn bis bald!

  MILKA
