!!! Asm Tutorial Vol. 1 !!!
---------------------------
by LiMiTer oNe member of APOLLO

      apollo.mtv.to


Was ist ASSAMBLAER?

Die der Vater aller Programmiersprachen! Alle anderen Programmiersprachen (Turbo Pascal, C, C++, Basic, Visual Basic, Delphi, Java, ... um nur ein paar zu nennen) sind sogenannte Compiler (bersetzer), die den Quellcode in assambler bersetzen. Assambler ist die Programmiersprache des Prozessors, so untersttzen die kleinen PIC Controller (keine Angst wenn ihr nicht wisst was das ist, es reicht wenn ihr wisst dass das sehr kleine Prozessoren sind !) ca 32 Asmbefehle. Die Prozessoren wie ihr sie in eurem Computer habt (K2, Pentium, Alpha, 486 ...) untersttzen mehrere Hundert Befehle! Die wichtigsten die ihr jedoch kennen solltet habe ich mal in meinem Tur ein paar aufgelistet und erklrt.

Halt! noch was Asmbefehle sind nur leicht zu merkende Krzel:
so steht Jmp z.B. fr den Befehl (wie ihn der Prozessor versteht) EB (hex)

Ich hoffe ich habe euch jetzt nicht zu sehr verwirrt! Es reicht wenn ihr wisst dass Assambler eine Programmiersprache ist. :)) Der Rest sind nur Randinfos!

Die Befehle!

- ADD -
~~~~~~~
Syntax: ADD Operand1, Operand2
ADD adidiert Operand2 zu Operand1 und legt das Ergebnis in Operand1 ab.


- SUB -
~~~~~~~
Syntax: ADD Operand1, Operand2
SUB subtrahiert Operande2 von Operande1 und legt das Ergebnis in Operand1 ab.

- DEC -
~~~~~~~
Syntax: DEC Operand1
DEC verringert den Wert von Operand1 um 1.

- INC -
~~~~~~~
Syntax: DEC Operand1
DEC erhht den Wert von Operand1 um 1.

- AND, XOR, OR -
~~~~~~~~~~~~~~~~
Syntax: AND Operand1, Operand2
        XOR Operand1, Operand2
        OR Operand1, Operand2
AND, OR und XOR fhren die jeweilige Logische Verknpfung mit den Operanden bitweise durch, das Ergebnis wandert wieder in den Operand1.

Operand1 XOR Operand2 -> Operand1
   1            0     ->    0
   0            1     ->    0
   1            1     ->    1
   0            0     ->    1

Operand1 AND Operand2 -> Operand1
   1            0     ->    0
   0            1     ->    0
   1            1     ->    1
   0            0     ->    0

Operand1 OR Operand2  -> Operand1
   1            0     ->    1
   0            1     ->    1
   1            1     ->    1
   0            0     ->    0

- CMP -
~~~~~~~
Syntax: CMP Operand1, Operand2
CMP fhrt ein Vergleich zwischen Operand1 und Operand2 durch. Dabei wird formal (d.h. halt ned wirklich!) Operand2 von Operand1 abgezogen, und dann die Bits gesetzt. Operand1 und 2 behalten jedoch ihre Werte bei.

- TEST -
~~~~~~~~
Syntax: TEST Operand1, Operand2
Fhrt wie CMP auch ein Vergleich durch, jedoch wird Operand1 und Operand2 durch eine Logische UND Verknpfung verknpft (formal) und die jeweiligen BITs gesetzt. Die Operanden verndern sich jedoch auch nicht.

- Unbedingter Sprung -
~~~~~~~~~~~~~~~~~~~~~~
Syntax: JMP ADDRESSE
JMP ist ein Sprung zu einer Addresse der immer durchgefhrt wird (halt unbedingt). Das heist sollte der Prozesser ber diesen Befehl stulpern macht er mit der Code Abarbeitung an der ADDRESSE weiter.

- Bedingte Sprnge -
~~~~~~~~~~~~~~~~~~~~
Syntax: z.B. JNE ADDRESSE
Kommen meist nach einem TEST oder CMP Befehl und Springen oder auch nicht kommt auf das ergebnis der Vergleiche an. Von bedingten Sprngen gibt es sehr viele, nennen werde ich jedoch nicht alle. Fr die genaue Beschreibung was ein Sprung ist siehe Unbedingter Sprung.

JE  = Jump if equal            Springe wenn gleich
JNE = Jump if not equal        Springe wenn nicht gleich
JA  = Jump if above            Springe wenn hher
JNA = Jump if not above        Springe wenn nicht hher
JB  = Jump if below            Springe wenn niedriger
JNB = Jump if not below        Springe wenn nicht niedriger
JBE = Jump if below or equal   Springer wenn niedriger oder gleich
JG  = Jump if greater          Springe wenn grsser
JNG = Jump if not greater      Springe wenn nicht grsser

- NOP -
~~~~~~~
Syntax: NOP
NOP steht fr No Operation und sagt dem Prozessor er soll nix machen. Er soll einfach den nchsten vollgenden Befehl ausfhren.

- MOV -
~~~~~~~
Syntax: MOV Operand1, Operand2
MOV kopiert den Operand2 in Opearnd1. Dier Inhalt von Operand1 wird gnadenlos berschrieben.

- LEA -
~~~~~~~
Syntax: LEA Operand1, Operand2
LEA speichert den Offsetanteil des Operanden2 im Operan1. LEA knnte man auch mit MOV Operand1, OFFSET Operand2
ausdrcken.

- CALL, RET -
~~~~~~~~~~~~~
Syntax: CALL ADDRESSE
        RET
Call ruft eine Procedure ader besser ein Unterprogramm auf. Dieses Unterprogramm MUSS mit einem RET wieder beendet werden. Der Programmablauf nimmt dann seinen gewohnten Gang (nach dem CALL Befehl).

- PUSH, POP -
~~~~~~~~~~~~~
Syntax: PUSH Operand
        POP Operand
PUSH kopiert den Wert des Operanden auf den STACK, und POP hohlt ihn wieder.

- STACK -
~~~~~~~~~
Ist kein Befehl, Ich denke jedoch dass ihr nicht wisst was das ist, wenn doch dann knnt ihr diesen Teil berspringen.
Der, Das Stack erklre ich am besten an einem kleinen Modell. (vorab info: Der Stack ist ein Speicherbereich) Den Stack stellen wir uns am besten mal als einen Stapel mit Notizen vor. Nehmen wir mal als Notizen ein paar Telefonummern. Die Notizen mit den Telefonnummer legen wir mit dem Befehl PUSCH Tel1, PUSCH Tel2, PUSCH Tel3, ...PUSCH Teln zu einem Stapel. Wollen wir nun Tel1 haben knnen wir sie ja nicht einfach nehmen, sondern wir mssen alle anderen die auf dem Stapel liegen erst wegrumen. (POP TELn, POP TELn-1, ... POP TEL3)
Das heist von dem Stack knnen wir immer nur den obersten Wert hohlen, und genauso auch nur AUF den Stack kopieren.
Ich hoffe ihr wisst nun so ungefhr was der Stack ist. :)


---------------------------------------VORERST-SCHLUSS---------------------------------------

Etzt mach ich vorerst Schluss! Ich habe genug! Werde diese Befehls Reverrenz jedoch nicht aufgeben. vielleicht habe ich in ein paar wochen wieder Lust weiter zu schreiben. Ich hoffe ich habe euch weitergeholfen.

GReeTZ gehen raus an
 Alle Membaz und Trial Membaz von APOLLO
 Big_Daddy a Friend
 und all die anderen die ich vergessen habe (Ausnahme all die RSCHE die meinen sie wren groe Cracker weil sie ein paar                                                 Cracks geklaut haben! >:-( ) 


