![]() |
Anzeige:
|
|
|||||||
| Sonstige Programmiersprachen Das Sammel-Forum für alle weiteren Programmiersprachen wie z.B. Assembler, Delphi, Pascal, C# (C-Sharp), Java usw. |
|
![]() |
|
|
LinkBack | Themen-Optionen | Ansicht |
|
|
#1 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Kurs: Kleines Assembler-ABC (MASM32 oder JWASM, 32 Bit).
Das hier soll keine komplette Anleitung sein, um Assembler zu erlernen. Aber es sollte einem Programmierer, der einen Basic-ähnlichen-Dialekt verstehen kann gestatten, erste Assemblerprogrämmchen zu erstellen. mov eax,0hierhin: mov ebx,0Lea ist ähnlich wie mov. Nur übergibt lea nicht den Wert einer Variablen oder eines Registers, sondern den Zeiger auf die Variable/Register, also die Adresse der Variablen im Speicher: .data ;Datenbereich kennzeichnen vars dd 333,444,555,666 ;Hier 4 Longint's.code ;Codebereich kennzeichnen mov eax,vars ;In eax steht jetzt 333. Der erste Wert aus vars wird übergebenUps, die eckigen Klammern bedeuten, das nicht der Registerinhalt übergeben/gelesen wird, sondern der Inhalt, auf den das Register zeigt. Invoke ist eigentlich kein Assembler-Befehl, sondern auch schon High-Level-Syntax. Invoke startet eine Prozedure oder eine Dll-Funktion. Dahinter übergeben werden alle nötigen Parameter. invoke GetCurrentDirectory, 1024, addr speicherbereich Wenn eine API einen Rückgabewert übergibt, steht er nach dem Aufruf immer im Register eax. "addr speicherbereich" übergibt übrigens den Zeiger auf einen Variablenspeicher, ist aber nur bei invoke gestattet. Ebensogut hätte wir auch schreiben können: lea edx,speicherbereich invoke GetCurrentDirectory,255,edx So, das wären die versprochenen 10 Befehle Aber wie können wir jetzt Register und Variablen vergleichen und Bedingungen und Verzweigungen programmieren? Ganz einfach, den Rest können wir für den Anfang mit High-Level-Syntax machen. Ähnlich wie in Basic... .while und .endw ist das Assemblergegenstück zum bekannten While und EndWhile. mov eax,0 .while eax == 1 mov eax,[edx].endw .break und .continue gibt es auch, genauso wie z.B. in XProfan. Für Bedingungen und Verzweigungen gibt es .if, .elsif, .else und .endif. Und das funktioniert so wie in vielen Basic-Dialekten. .if eax==0 mov ebx,1.elseif ecx==0 mov edx,1.else mov ebx,2.endif Das == ist übrigens das Gleichzeichen. Weitere Vergleichsoperatoren sind: == Gleich != Ungleich > Größer als >= Größer gleich < Kleiner als <= Kleiner gleich ! Logisches NOT && Logisches AND || Logisches OR Sollen mehrere Bedingungen abgefragt werden, dann sollten die einzelnen Bedingungen in Klammen stehen, z.B.: .if ((eax==0) && (ebx>=0)) Dann gibt es noch eine .repeat / .until Schleife, eine fußgesteuerte Schleife. Die wird so lange ausgeführt, bis die Bedingung hinter .until eintritt. In diesem Fall also, bis ebx gleich Null ist: .repeat ;irgendein Sourcecode.until ebx==0 Eine .repeat / .until Schleife kann ebenfalls mittels .break verlassen, und mittels .continue neu gestartet werden. So, hier endet unser Assembler Crashkurs. Ich hab' wirklich alles für den Anfang Unnötige weggelassen. Das gibt dem User die Möglichkeit, von Grund auf anzufangen. Es gibt noch viele viele Befehle (Mnemonics) mehr, aber die meisten sind wirklich durch die konfortable High-Level-Syntax ersetzt worden. Anfänger jedenfalls werden mit den 10 beschriebene Befehlen schon gut zurecht kommen, und den Rest erledigt die alltägliche Routine. Ein gute Auflistung aller Assembler-Befehle gibt es hier: http://www.jegerlehner.ch/intel/IntelCodeTable.pdf Ich habe im ganzen Kurs darauf verzichtet, irgendwelche Optimierungen vorzunehmen (xor eax,eax anstatt mov eax,0), nur weil es ein paar Taktzyklen schneller ist. Assembler ist wirklich so schnell und die neuen Prozessoren arbeiten so gut, das solche Optimierungen heute kaum noch was hermachen. Einsteiger in Assembler sollten sich darum nicht damit belasten. Ich wünsche viel Spaß beim Lernen! (w) Frank Abbing
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. Geändert von Frabbing (20.08.2010 um 22:14 Uhr) Grund: Bild neu verlinkt |
|
|
|
|
|
|
#2 (Direktlink) |
|
MoRoGeP-Träger 2011
![]() Registriert seit: 06.02.2009
Ort: Heidelberg
Alter: 71
Beiträge: 1.877
|
@Frank
Endlich - da habe ich schon lange drauf gewartet. Einen Crash-Kurs für Menschen wie mich. (Miese Englisch-Kenntnisse und nur 8 Jahre Volksschule) - Habe mir die Geschichte rauskopiert und werde das jetzt ausdrucken und heute abend anfangen, zu büffeln ! Danke
__________________
Gruss, horst Computer werden kleiner und kleiner, bald verschwinden sie völlig. (Ephraim Kishon 1924-2005) http://www.web-treffpunkt.de |
|
|
|
|
|
#3 (Direktlink) |
|
Erfolgreich angemeldet
![]() Registriert seit: 07.09.2011
Alter: 18
Beiträge: 13
|
Falls sich jemand dafür richtig interessiert, kann ich im nur folgendes Buch empfehlen. (Sogar auf Deutsch)
Assembler: Maschinennahes Programmieren von Anfang an. Mit Windows-Programmierung: Amazon.de: Reiner Backer: Bücher |
|
|
|
|
|
#4 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Seltsamerweise ist auf dem Titel aber kein Assemblercode zu sehen, sondern C++.
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
![]() |
|
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Deutscher Assembler-Crashkurs | Frabbing | Schreibstube | 1 | 25.09.2009 11:32 |
| Deutscher Assembler-Crashkurs | Paule | f.) Programmierung | 0 | 25.09.2009 11:31 |
| crashkurs in internetgeschwindigkeiten | DNS | Netzwerke | 3 | 02.02.2009 00:28 |
| Assembler | Destruction | Sonstige Programmiersprachen | 2 | 29.10.2007 22:43 |
| Assembler ISR | Don_Pazo | Sonstige Programmiersprachen | 1 | 04.02.2007 19:59 |