home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / Misc / Asm-Course2.lha / Teil01.TXT < prev    next >
Encoding:
Text File  |  1992-09-02  |  12.4 KB  |  260 lines

  1.           A S S E M B L E R - K U R S       (c)  Jeff Kandle 1990
  2.  
  3.                                  1.Teil...
  4.  
  5.  
  6. Es ist eigentlich nicht der erste oder soundsovielte teil, sondern der 1
  7. abschnitt, weil ich immer soviel tippe wie ich lust habe.
  8.  
  9. O.K....weiter mit den Zahlen.
  10. Wenn euch das mit dem -128 und +127 gewundert hat, wundert mich das nicht,
  11. denn ich hatte auch etwas probleme das zu verstehen.
  12. Also, es verhaelt sich bei der Zahlenverwaltung der Computer so das, man
  13. den Bereich in dem man rechnet vorher auswaehlt. Das heisst, wenn ich eine
  14. schleife mit 8000 durchlaeufen programmieren will, kann ich kein Byte als
  15. Zaehler nehmen, da es nur bis 255 Zaehlen kann. Ich muss schon ein Wort
  16. reservieren. Genauso verhaelt es sich umgekehrt, warum soll ich bei einer
  17. Schleife mit 6 durchlaeufen gleich ein Langwort reservieren, das ist doch
  18. platzverschwendung.
  19. Nun aber zum Pudels des kerns des Problems...Wenn ein Wort in einer Adresse
  20. dauernd um eins weiter gezaehlt wird, dann erreicht es irgendwann 65535.
  21. Das ist der letzte darstellbare wert den das wort darstellen kann. Wenn ich
  22. jetzt noch eins dazuzaehle, dann laeuft das wort sozusagen ueber. Der
  23. Uebertrag wird aber vernachlaessigt, und faellt links raus. Also steht
  24. wieder null in dem Wort. Also ist es irgendwie endlos mit den Zahlen, und
  25. da hat man sich gedacht, `Machen wir es wie ein Wanderer` der um die Erde
  26. spaziert. Er faengt irgendwo an zu gehen (tolles deutsch), und entfernt
  27. sich immer weiter von dem Punkt an dem er gestartet war...aber irgendwann
  28. hat er den punkt erreicht der genau unter dem liegt von dem er aus
  29. gestartet war. Wenn er nun weiter geht kommt er unweigerlich dem Punkt
  30. wieder naeher...und irgendwann steht er wieder dort. Da ihr die ihr das
  31. lest das nicht ausprobieren koennen muesst ihr mir das schon glauben.
  32.  
  33. Also, so ist es auch bei den Zahlen, wenn man die haelfte ueberschritten
  34. hat kommt man der null immer wieder naeher. Um das auch sichtbar zu machen
  35. zaehlt man von 0 bis zur Haelfte positiv also 1, 2, 3 usw. und ab der
  36. haelfte so bei 127 schlaegt man dann noch eins darauf um nennt es dann -128
  37.  und man zaehlt jetzt -127, -126.......
  38. und wenn ihr das jetzt zusammen zaehlt  127 + -128 dann kommt da -1 bei
  39. raus. Und -1 ist dasselbe wie 255, wobei wir dann wieder bei dem Byte
  40. waeren. Womit auch bewiesen waere das man mit einem Byte nur bis 255
  41. zaehlen kann. Trotzdem kann man mit einem Byte 256 Werte darstellen, denn
  42. die 0 ist eine Vollwertige zahl, findet euch damit ab.
  43.  
  44. So da ihr jetzt ungefaehr wisst wie das mit dem Zaehlen auf dem Compi geht,
  45. koennen wir so langsam anfangen etwas in richtung Assembler zu lernen.
  46. Dazu gehen wir in das naechste Kapitel
  47.  
  48. 2. Die Ersten Assembler Befehle (Mnemonics)
  49.  
  50. Tja, bevor wir allerdings damit anfangen muesst ihr noch wissen womit und
  51. wie man das eingibt, damit auch irgendetwas passiert, denn auf die Backe
  52. Taetowieren hat so glaube ich nicht viel sinn, habe es zwar nocht nicht
  53. ausprobiert, aber ich gehe mal nicht davon aus.
  54. Also, schnappen wir uns den Seka. Starten, und wie folgt vorgehen.
  55. Wenn ihr die gepachte version benutzt, sie heisst V3.2 dann fragt er
  56. erstmal was ihr fuer einen Arbeitsspeicher benutzen wollt...
  57.  
  58. Ihr habt drei moeglichkeiten, die ich mal kurz erklaeren will.
  59.  
  60. (C)hip  =   Chipram, sind die ersten 512 Kbyte im Amiga, also die
  61.             Grundkonfiguration, wenn ihr keine Speicher erweiterung habt
  62.             dann solltet ihr das eingeben.
  63.  
  64. (F)ast  =   Alles was rein oder dran gesteckt wird, zaehlt als Fastram.
  65.             Allerdings wurde ich davon abraten, da der Amiga meisten alle
  66.             Sachen in Vorhandenes fastram legt, somit auch den Seka, und
  67.             den wuerdet ihr ggf. ueberschreiben und damit loeschen.
  68.  
  69. (A)llocate  =  Einen ganz betimmten bereich auswaehlen. (braucht man nie !)
  70.  
  71.  
  72. Habt ihr euch entschieden C fuer Chiop zu druecken, dann fragt der
  73. neugierige Seka dann noch wieviel Speicher ihr braucht bzw. haben wollt.
  74. Wenn ihr mit `nur` 512 KB arbeitet solltet ihr nicht mehr als 150 eingeben,
  75. obwohl fuer die normalen sachen schon 20 oder 30 reichen. Wenn ihr
  76. allerdings `nen ganzen Megabyte habt koennt ihr bis dreihundert eingeben,
  77. hat aber nicht viel sinn, da meistens hundert reichen.
  78.  
  79. Wenn ihr das alles eingegeben habt dann kann es losgehen, die weiteren
  80. kommandos des Seka Assemblers lernt ihr wenn man sie braucht, so kann man
  81. sich das besser merken.
  82. Also der Modus in dem ihr euch jetzt befindet ist der kommando modus, indem
  83. alle sachen die irgendwie mit programmieren mit dem Seka zu tun haben
  84. eingeben kann, als da das laden und abspeichern von SourceCodes waeren.
  85.  
  86. Ein Teil von euch, hat warscheinlich noch keinen Schimmer von Assembler,
  87. ich meine bis auf das was ich bisher geschrieben habe, und sich deshalb
  88. auch noch nicht um irgendwelche SourceCode gekuemmert, also muessen wir
  89. erstmal etwas lauffaehiges schreiben damit wir es abspeicher koennen.
  90.  
  91. Also schreiben wir das Kuerzeste programm was es auf dem Amiga gibt,
  92. naehmlich.....
  93. Moment, erstmal muessen wir in den Editor, und zwar gelangen wir durch
  94. druecken von Escape dort hin wo wir SourceCodes eingeben koennen.
  95. Also wenn ihr Escape gedrueckt habt muesste der bildschirm sich jetzt in
  96. zwei teile teilen. Mit dem Unteren habt ihr im Moment nichts mehr zu tun,
  97. ihr befindet euch jetzt im Editor.
  98. Der Editor gibt euch die zahlen vor die am anfang der zeile stehen, also
  99. braucht ihr euch darum nicht zu kuemmern.
  100.  
  101. Das (End) was da steht kann man nicht loeschen, es ist wichtig, und liegt
  102. automatisch am Ende des SourceCodes.
  103.  
  104. So, jetzt kommt dieses Kuerzeste lauffaehige programm. Und zwar muesst ihr
  105. dazu dieses Woertchen eingeben.
  106.  
  107. rts
  108.  
  109. Es heisst ausgesprochen `Return from Subroutine`
  110. zu deutsch `Kehre vom Unterprogramm zurueck`
  111. Jetzt sage ich euch erstmal wie es lauffaehig gemacht wird, und dann was
  112. passiert.
  113.  
  114. Also, ihr habt das jetzt eingegeben, drueckt nun wieder Escape um aus dem
  115. Editor zu fluechten. Nun seit ihr wieder im Kommando Modus, und koennt das
  116. programm jetzt Assemblieren.
  117. Dazu muesst ihr `A` druecken und return. Jetzt fragt der Seka noch nach
  118. options. Da muesst ihr im Prinzip auch return druecken, da die einzige
  119. sache die man da eingeben kann und die fuer euch sinnvoll waere `VH` ist.
  120. Damit koennt ihr dem Seka bei der Arbeit zugucken.
  121.  
  122. So, nachdem er es assembliert hat, und `No Errors` ausgegeben hat koennt
  123. ihr das programm mit `J` starten.
  124.  
  125. Boooh, was ist das, nichts passiert...ganz klar das ist richtig.
  126.  
  127. Was ist passiert....Nach dem Start wird der PC wieder auf die neue Adresse
  128. verbogen, das heisst dahin wo der Seka das Prograemmchen geschrieben hat.
  129. Allerdings merkt sich der Prozessor von wo aus er gesprungen ist..das sieht
  130. dann so aus....
  131.  
  132. Stellt euch vor das der Prozessor gerade mit dem Abareiten des J-befehls
  133. des Seka zu tun hat...wenn er soweit ist, weiss er das er das programm was
  134. er irgendwo hingeschrieben hat jetzt als unterroutine abarbeiten soll.
  135. Dazu setzt er den PC auf die Adresse des Programms, allerdings merkt er
  136. sich vorher die adresse wo er im Moment arbeitet
  137.  
  138. Sagen wir mal das J-befehls-programm liegt bei $10000, und das programm mit
  139. dem RTS - befehl liegt bei $50000, beobachten wir den PC mal
  140.  
  141. . Normale bearbeitung von sachen               PC
  142. .
  143. . Bearbeitung des J befehls                  $10000
  144. . Jetzt kommt der aufruf des Prograemmchens
  145. . der Prozessor merkt sich die position an der er im Moment arbeitet, indem
  146. . den wert einfach auf einen Stapel legt wo er sich alle moeglichen sachen
  147. . merkt, dieser Stapel ist auch wie ein Stapel, das was man zuletzt darauf
  148. . gelegt hat bekommt man wieder. Also nachdem er sich die $10000 `gemerkt`
  149. . hat schreibt er die $50000 in den PC, und arbeitet da weiter.
  150. . Der Befehl der jetzt kommt macht das alles wieder rueckgaengig, den er
  151. . sagt das der prozessor sich die oberste adresse von Stapel nehmen soll,
  152. . und in den PC schreiben soll.
  153. . Jetzt arbeitet der Prozessor am J-befehl weiter. Der nur noch die
  154. . Kontrolle an den Seka zurueckgibt, weil er ebenfalls mit RTS endet.
  155.  
  156. Wie ihr seht tut dieses Kleine prograemmchen doch schon eine ganze menge.
  157. Nur halt nichts das man sieht.
  158. Trotzdem dieser Befehl `MUSS` hinter jedem programm stehen was zurueck
  159. kehren soll. Sonst wuerde der Prozessor weiterarbeiten, und wie ihr schon
  160. wisst, bei einer ungueltigen Bit-Kombination abstuerzen.
  161.  
  162. So ich hoffe das ihr das verstanden habt, den das war alles was man dazu
  163. sagen kann.
  164.  
  165. Jetzt wollen wir mal etwas Programmieren, wobei man auch etwas sehen kann.
  166. Es wird zwar nicht atemberaubendes, aber immerhin.
  167.  
  168. Vielleicht habt ihr schon bemerkt das der Seka nach abarbeitung eines
  169. programms eine kleine tabelle ausgibt. Die ist eigentlich nur zur fehler
  170. erkennung gedacht, allerdings gibt sie auch alle arbeitregister des
  171. Prozessor`s aus, und die koennen wir natuerlich gut gebrauchen...
  172. Was, ihr wisst nicht was Arbeitsregister sind, nun....achja hatte ich ja
  173. noch nicht erklaert. Nun gut
  174.  
  175. Es gibt in einem Prozessor einen haufen von register der er so benutzt, und
  176. wo wir nicht drankommen, allerdings gibt es beim MC 68000 16(15) stueck wo
  177. wir mit arbeiten koennen, als da waeren
  178.  
  179. Datenregister D0 - D7
  180. Adressregister A0 - A7
  181.  
  182. A7 ist ja wie ihr wisst nicht zu benutzen da der MC 68000 seinen PC da rein
  183. schreibt.
  184. Da diese register direkt im Prozessor sind koennt ihr euch vorstellen das
  185. er damit viel schneller arbeiten kann als wie mit anderen.
  186. Eine Muenze die in eurer Hosentasche steckt habt ihr auch schneller in der
  187. Hand als wie eine die im Schrank liegt.
  188.  
  189. Weil wir damit arbeiten koennen, koennen wir diese Register auch direkt
  190. benutzen, und uns das ergebnis, nach der wiederkehr ueber `RTS` in der
  191. tabelle die der Seka ausgibt anschauen.
  192.  
  193. Also, loeschen wir den SourceCode im Speicher erstmal. Dazu gehen wir in
  194. den kommando Modus, und tippe `KS` ein, was heissen soll Kill Source.
  195. Nach einer sicherheits abfrage, die wir natuerlich mit `J` beantworten
  196. loescht der Seka den Source mit dem `RTS`.
  197. Gehen wir in den Editor (Escape)....
  198.  
  199. So jetzt kommt der maechtigste und meist benutzten Befehl der MC 68000
  200. maschinesprache, er tritt auch auf sehr vielen anderen dialekten auf, also
  201. kennt ihr den auch wenn ihr mal einen anderen Compi besitzen werdet.
  202. Allerdings glaube ich nicht das er dort soviele Adressierungarten drauf hat
  203. wie bei unserer Freundin.
  204.  
  205. Also, dieser tolle Befehl heisst schlicht und ergreifend Move, und das ist
  206. auch genau das was er macht, er schiebt werte hin und her. Das ist an sich
  207. nichts tolles, aber wenn ihr wisst auf wieviele arten er das kann, dann
  208. werdet ihr schon merken wie toll dieser befehl ist.
  209. Wir geben uns aber erstmal nur mit der einfachsten art und weise ab,
  210. naemlich der Direkten.
  211. Das heisst....Einen ganz bestimmten wert in eine ganz bestimmte Adresse
  212. oder in ein ganz bestimmtes register zu schrieben.
  213. Es ist die einfachste sache, und sieht so aus.....halt, erinnert euch was
  214. ich gesagt habe, das wir vor jeder sache mit zahlen gucken muessen in
  215. welchem bereich wir arbeiten, je nach zahl muessen wir das zeichen hinter
  216. dem punkt veraendern. Und zwar in b, w oder l
  217. Wenn ich den bereichviel groesserangebe nimmt uns das der 68000 nicht krum
  218. aber bei unterschaetzung macht er manchmal zicken.
  219.  
  220. Move.w #$4000,$40000
  221.  
  222. wuerde das Word #$4000 nach der Adresse $40000 schreiben.
  223. Wir wollen das aber etwas einfacher zum kontrollieren machen, und deshalb
  224. nehmen wir einfach ein Datenregister, und zwar das mit der nummer null.
  225.  
  226. Move.w #$4000,d0
  227.  
  228. so, tippt das mal ein, und setzt noch ein RTS drunter.
  229.  
  230. Verlasst jetzt den Editor (Esc..) und assembliert das, ihr wisst ja wie.
  231.  
  232. So, jetzt koennt ihr das ding mit `J` starten.
  233. Ha, kaum gedrueckt ist der auch schon wieder da, denn Maschinensprache ist
  234. sehr schnell. Ich kann zwar nicht die genaue Zeit sagen die er dafuer
  235. gebraucht hat aber ich gehe mal von 2 oder 3 Hunderttausendstel Sekunden
  236. aus.
  237. Schnell wa.
  238.  
  239. So wenn ihr euch jetzt die tabelle anguckt, findet ihr irgendwo `D0` stehen
  240. und dahinter muesste dann eine 00004000 stehen,toll ne ?
  241. So das kann man Naturlich mit allen registern und werten machen.
  242. Jetzt kommt auch der beweis, fuer meine Aussage zum thema Zahlen.
  243.  
  244. Geht mal in den Editor und macht aus dem `w` hinter dem Move ein `l`.
  245. Und loescht mit del die `4000` und schreibt da `ffffffff` hin.
  246. Starten, und `D0` angucken...
  247. Jetzt steht da auch dieses `ffffffff`.
  248. Aber da man rueckwaerts und Negativ viel leichter an die `ffffffff` kommt
  249. kann man auch die ff... loeschen und dort einfach `-1` hinschreiben.
  250. Wenn ihr das jetzt startet kommt eben wieder dieses `ffffffff` raus.
  251.  
  252. Jetzt seht ihr auch wie wichtig die richtige bereichswahl ist.
  253. Denn -1 im Bytebereich ist $ff oder 255, und -1 im Langwortbereich ist
  254. nunmal $ffffffff oder 4294967295
  255. Also, immer daran denken.
  256.  
  257. see you later
  258.  
  259.                 Jeff Kandle
  260.