Assembler erlernen

Thomas Findeisen root at linuxbu.de
Die Mai 2 21:16:03 CEST 2000


> Ich hab' da mal ein paar Fragen. Ich hab' jetzt nämlich vor, Assembler zu
> erlernen.

Herzlichen Glückwunsch und gleichzeitig mein herzlichstes Beileid.

> Soweit ich aber gehört hab', soll es da verschiedene Versionen
> geben. Jetzt meine Fragen: Wie unterscheiden sich die versionen voneinander,

Also für einen einzigen Prozessor ist der Syntax immer gleich (also wenn du
dir als Prozessor den 386er aussuchst dann beherrscht jeder assembler für
diesen Prozessor die selben befehle), unter verschiedenen Prozessoren oder gar
Prozessorfamilien ist die Syntax teilweise vollständig anders, wobei die Logik
jedoch immer die selbe ist. Wenn man einmal Assembler auf einem Prozessor
fließend konnte kann man dieses Wissen durchaus auch weiter anwenden (ähnlich
dem Unstieg von Pascal auf C, beide wollen das selbe mann muss sich nur ein
wenig umgewöhnen).

Die meisten Befehle haben so zwischen 2 und 4 Buchstaben (sogenannte
Mnemonics) die in sich meist eine Abkürzung sind, z.B.

lda #$04

...ist ein Befehl der 65xx Serie und heißt nix anderes als LADE ('ld') den
Akku ('a') mit dem impliziten ('#') Wert, Hexadezimal ('$') , 4 ('04'). Und
schon hast du dem Akku den Wert 4 zugewiesen.
Das ganze ist z.B. beim X-Register ein 

ldx #$04

und beim Schreiben wird aus dem lda #$04 ein sta $c000, was nix anderes heißt
wie schreibe ('s'=store) den wert im akku ('a') nach Adresse hex $c000
(=49152). Naja, und so weiter... beim Z80 ist das ganze dann z.B. respektive
ld a,e und push (man, ist das lange her ;-)). 

> und welche der Versionen ist einfacher zu erlernen. Und dann hab' ich auch
> schon die nächste Frage: Wie erlerne ich Assembler am besten?? Ich hab'

uuuuh, du willst dir nicht Assembler geben ! Zumindest nicht ix86... wenn doch
würde ich dir raten dir einen guten Assembler zu besorgen und auf XT
(8086/8088) Basis anzufangen, das ist naemlich noch relativ menschlich und
abwaertskompatibel von Pentium und Konsorten. Eine gute Doku habe ich unter
ftp.intel.com gefunden, da sind gute Datenblätter zur Intelreihe und vor allem
gute Dokus (zumindest waren sie mal da), lernen kann man am besten durch
durchforsten von fremden Sources (erstmal versuchen etwas zu verstehen, nicht
gleich selber machen). Dazu ist OpenSource wie geschaffen, viele Programme
haben in Ihren Sources auch Assembler-includes. Ich persoenlich habe mich nie
mit der Intel-Reihe beschäftigt, erstens is mir die Sache zu komplex geworden
und macht keinen sooo großen Spass mehr, und Spass ist absolutes Muss, sonst
wird man schizo.

Zu den guten alten Zeiten von U880(=DDR Z80),6502,8500,8502,602,65816 etc. 
gab es noch keine Compiler oder die Rechner waren nicht schnell genug um
mit dem Compilerresultat ordentlich arbeiten zu koennen. Bei den heutigen
Laufzeitoptimierenden Compilern ist Ass fast nicht mehr vertretbar 
und wird nur noch in extrem zeitkritschen Situationen angewandt.

> schon auf verschiedenen Sites gesucht, aber nirgendwo eine Einführung in
> Assembler gefunden. Könnte mir vielleicht jemand eine Addy nennen, wo ich
> sowas finde, oder mir einen Buchvorschlag machen?? Ich wäre sehr dankbar.

siehe oben, ansonsten 'learning by doing' gilt hier wie nirgenwo anders... Im
alten TurboPascal von Borland war ein Assembler eingebaut, in dem werden
vielleicht ein paar gute Hilfen und Beispiele enthalten sein (vor allem war's
gar kein schlechter Editor).

...viel Spass beim hacken.

Thomas Findeisen


P.S. Check dazu auch 'man nasm' und /usr/doc/packages/nasm/... ansonsten bei
http://www.freshmeat.net saugen, sollte sowieso der beste Assembler fuer 
Linux sein. 
P.P.S. noch eine kleine Begriffsklaerung: ein Assembler ist nur das Programm
       zum Übersetzen der Mnemonics in den, für den Prozessor verständlichen,
       Maschienencode 

(also um aus dem lda #$04 des 6502 ein a9 04 zu wandeln was der Prozessor 
dann als 1010100100000100 vor'n Latz bekommt in Form von 3.3 Volt (o.ä.)
Stromstößen ;-) )







------------ und der 6510 is doch der beste ;-) --------