|
|
|
|
Assembler lernen |
phreak
Aufsteiger
Dabei seit: 12.10.2002
Beiträge: 42
Herkunft: Nähe Stuttgart
|
|
Assembler lernen |
|
hallo. Ich wollte mal wissen wie lange man braucht um einigermaßen in Assembler zu coden.Könnt ihr mir weiterhelfen?
|
|
13.10.2002 16:04 |
|
|
Glavis
Zocker
Dabei seit: 29.07.2001
Beiträge: 445
Herkunft: Genpool
|
|
So lang bis mans kapiert *fg*
Das kann man nicht so genau sagen,
kommt frauf an,
ob du vorher schon was gecodet hast usw.
__________________
Es gibt nicht Neues, immer bloß zeitgemäß Ausgedrücktes.
Viel Freud. Viel Leid. Irrungen, Wirrungen. Das alte Lied.
|
|
13.10.2002 16:21 |
|
|
phreak
Aufsteiger
Dabei seit: 12.10.2002
Beiträge: 42
Herkunft: Nähe Stuttgart
Themenstarter
|
|
Ich habe bis jetzt ein bischen C/C++, allerlei Arten von Basic und Batch gecodet. Ich bin eben am überlegen ob es sich lohnt Assembler zu lernen. Da ich momentan nicht gerade viel Zeit übrig habe und diese auch zum Teil mit anderen Dingen belagert werden macht man sich doch schon seine Gedanken ob man eine Menge Zeit in etwas investieren soll.
|
|
13.10.2002 16:46 |
|
|
sQuint
BlackBoarder
Dabei seit: 10.10.2001
Beiträge: 1.454
|
|
andere Programiersprachen bringen dir bei Assembler fast garnichts, da das ne ganz andere art ist! Kann man nicht mit hochsprachen vergleichen
|
|
13.10.2002 18:14 |
|
|
Andy
BlackBoarder
Dabei seit: 21.10.2001
Beiträge: 576
|
|
Zitat: |
Zitat aus "Schülerwissen":
Aus der englischen Sprache entlehnte prozessorspezifische Programmiersprachen. Bei den Assembler-Sprachen wird jeder binäre Maschinencode durch einen entsprechenden, aus Buchstaben und Ziffern bestehenden Assemblercode definiert. Ein Assembler-Programm ist daher nahezu fast direkt für den Prozessor verständlich, es muss nur noch durch ein entsprechendes Hilfsprogramm quasi Eins zu Eins übersetzt, kompiliert, werden. Eine Programmierung mit Assembler-Befehlen ist jedoch immer noch relativ schwer für den Menschen erlernbar. Da sie sehr prozessornah ist, führt sie meist zu schnellen und effizienten Programmen, eine Übertragung auf andere Prozessoren und Rechnertypen ist allerdings kaum möglich. |
Das hab ich in meinem Lexikon gefunden.
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
|
stdin equ 0
stdout equ 1
stderr equ 2
cr equ 0dh ; Zeilenruecklauf
lf equ 0ah ; Zeilenvorschub
DGROUP group _DATA,STACK
_TEXT segment word public 'CODE'
assume cs:_TEXT,ds:DGROUP,ss:STACK
main proc far
mov ax,DGROUP ; Datensegment einstellen
mov ds,ax
mov ah,40h ; Funktion: String ausgeben
mov bx,stdout ; Handle fÂr Standard Output einstellen
mov cx,msg_len ; L„nge der Meldung einstellen
mov dx,offset msg ; Offsetadresse der Meldung einstellen
int 21h ; Meldung ausgeben
mov ax,4c00h ; Programm mit Code 0 beenden
int 21h
main endp
_TEXT ends
_DATA segment word public 'DATA'
msg db cr,lf,'Hello World!',cr,lf
msg_len equ $-msg
_DATA ends
STACK segment para stack 'STACK'
db 256 dup (?)
STACK ends
end main |
|
Hier noch ein kleines Beispiel zu einem Quellcode, was der genau bewirkt weiß ich nicht
cYa Lupus
---
Edit: Ah doch, das ist wohl so eine Art "Hallo Welt" Programm.
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Andy: 13.10.2002 18:57.
|
|
13.10.2002 18:54 |
|
|
phreak
Aufsteiger
Dabei seit: 12.10.2002
Beiträge: 42
Herkunft: Nähe Stuttgart
Themenstarter
|
|
Ein bischen was habe ich schon mit Assembler zu tun gehabt, allerdings auf keiner x86er Architektur. Ich habe in meiner Ausbildung mit 8088 Prozessoren (glaube ich) zu tun gehabt und mich haben die Möglichkeiten einfach so fasziniert das ich das jetzt lernen möchte. Da aber x86er Programmierung doch was anderes ist dachte ich mir ich frag erst mal rum wie schwer so was ist. Wie lange habt ihr gebraucht bis ihr einigermaßen die Sprache beherrscht habt?
|
|
13.10.2002 19:05 |
|
|
CDW
eine Simulation
Dabei seit: 12.10.2002
Beiträge: 1.329
Herkunft: CreateRemoteThread
|
|
|
13.10.2002 19:08 |
|
|
CDW
eine Simulation
Dabei seit: 12.10.2002
Beiträge: 1.329
Herkunft: CreateRemoteThread
|
|
(bezieht sich auf phreaks letzten post):
also, ich hab auch schon C++ gemacht (hab sogar einige sachen geschrieben - OpenGl zeug und einen Persogenerator(auf meiner HP zu bewundern *g*)
Dazu noch muss ich in der schule Pascal machen (hab Info/Mathe als hauptfach) und VBS kenn ich auch schon... nur macht ASM süchtig, du kommst nicht mehr los ... ich mache das schon seit nem Jahr richtig (vorher nur codeschnipsel in C++/Pascal eingebaut
)
Du kreigst verdammt kleine und meist schnelle (wenn du kein Mist baust *g*) Programme. Zum vergleich hab ich mal ne rechenoperation mit VC++6.0, lcc (auch c++ compiler), Pascal,Freepacal, ASM und VBS geschrieben...
VC++ : 12 Sec
lcc: 10 sec
pascal 16 (da DOS)
freepascal 14
ASM:6 Sec
ASM mit MMX 2 Sec *g*
VBS: 20 (MINUTEN!!!)
PS:das was LUPUS vorgestellt hat, ist zwar richtig, aber das ist ein DOS progamm, in winAsm must du dich nicht mit datensegmenten rumschlagen, hier ein helloWorld programm (für win):
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
|
;-----HEADER--------
.386 ;Prozessorfamilie
.model flat,stdcall
OPTION CASEMAP: NONE
;-------------------------
;-------Includes-------
include \masm32\include\windows.inc ;wir möchten mit windows arbeiten
include \masm32\include\kernel32.inc ;den Kernel
includelib \masm32\lib\kernel32.lib
include \masm32\include\user32.inc ;und user32 nutzen wir für dialogboxen usw
includelib \masm32\lib\user32.lib
;-------------------------
;------Variablen------
.DATA
mbTitel DB "Title",0 ;wie bei c/c++ muss ein String mit 0 terminiert werden
mbMsg DB "Hello, World",0
;-----CODE----------
.CODE
Start:
invoke MessageBox,0,offset mbMsg,offset mbTitel,MB_OK ;winapi für DialogBox aufrufen
Exit:
invoke ExitProcess,0 ;0 heißt das programm wurde Fehlerfrei beendet
END Start
;-------------------------
|
|
in ASM ziehe ich es persönlich vor direkt mit WinApis (Application Programming Interface von Windows) zu arbeiten (das tut jede Programmiersprache, nur wird das ganze bis zum geht nicht mehr verschleiert)... das gibt die absolute kontrole, als Referenz benutze ich dem VC++6.0 beiligende Hilfe (aber es gibt die auch im netz), die einzige schwirigkeit ist manchmal die schlechte dokumentation von win, manche sachen gehn unter win2000 und unter win98 bewirkt dieser befehl nichts (hatte ich schon ein mal) und Microsschrott nimmt dazu ja keine Stellung... aber das kann man ja auch mit Bugs in den bibliotheken anderer Sprachen vergleichen (und es gibt VIELE in VB\Delphi) so dass es fast nicht ins gewicht fällt... Ansonsten bekommst unter ASM erst das richtige verständniss für alle Abläufe (besonders Zeiger und so, jetzt kann ich die mir bildlich vorstellen)
und das Wissen nutzt dir auf jedenfall in anderen Sprachen...
PPS:ach ja, noch eine gute, deutsche Seite:
www.deinmeister.de
Dieser Beitrag wurde 5 mal editiert, zum letzten Mal von CDW: 13.10.2002 19:53.
|
|
13.10.2002 19:16 |
|
|
phreak
Aufsteiger
Dabei seit: 12.10.2002
Beiträge: 42
Herkunft: Nähe Stuttgart
Themenstarter
|
|
Vielen Dank für die Links CDW_. Die sind wirklich sehr hilfreich. Wie lange programmierst du schon? Ich frage nur aus reiner Neugier.
Ich habe deinen MP3 Player begutachtet.Hast du alles in Assembler geschrieben???
Deine Website tut allerdings nicht bei mir. Irgendwie passiert nichts wenn ich auf das Menü klicke. Woran könnte das liegen? Ich habe JavaScript aktiviert. Naja, vielleicht finde ich noch den Fehler.Wäre ja schade um die website
PS Nochmals vielen Dank für die Links. Die werden mich bestimmt weiterbringen.
PSS Kannst du irgendwelche Literatur über Assemblerprogrammierung empfehlen?
|
|
13.10.2002 20:02 |
|
|
HeaD
Hoffnungsloser Sozialfall in Behandlung bei Styx
Dabei seit: 31.08.2001
Beiträge: 4.142
Herkunft: Mama
|
|
Ich würde aber nur Assembler lernen, wenn es "nötig" ist. Wenn man Treiber, Betriebssysteme oder sowas schreibt, ist es warscheinlich besser.
Aber wenn man einen MP3Player oder ähnliches Programmieren will, ist es fraglich ob sich der Herrmann lohnt da ASM zu lernen..
Ich hab mal damit angefangen und ich finds echt ätzend. Zwar irgendwie cool, aber unheimlich anstrengend und umständlich (im gegensatzt zu "klick an play"-C oder sowas *g*)
__________________
|
|
13.10.2002 21:48 |
|
|
CDW
eine Simulation
Dabei seit: 12.10.2002
Beiträge: 1.329
Herkunft: CreateRemoteThread
|
|
zu meiner seite: basiert ja eigentlich alles auf Java-Script (je ein eigenes für NC 4.x,NC 6.0 und IE), muss ich mal alles rausschmeißen, hier ist ein direktlink zu downloads:
http://www.cdw.de.vu/downloads.htm
@phreak, ja, ist alles in ASM geschrieben, etwa 1000 Zeilen Code (ist aber normal bei solchen projekten, hatte schon größere in Pascal geschrieben), wie erwähnt, programmiere ich fast seit nem Jahr, die erste Anwendung (shutdown => Quelltext offen) hab ich etwa nach 2 Monaten geschrieben, der Anfang ist sicherlich schwer, aber dann geht das schon
@head: der anwendungsbereich ist noch viel größer... du hast sicherlich recht, große Projekte damit zu schreiben ist umständlich (eimal auf www.Dreamer-Zone.tk
schauen, das ist ein professioneller Musikmaker komplett in ASM)... Aber ich hab schon einige Sachen geschrieben/gesehen, die man nur schwer mit C/c++ realisieren kann (man kann, aber der Quellcode ist dann so unübersichtlich...). Z.Bein Exe-Packer/Verschlüsseler, ein Exe-Joiner (ein tool, womit man zwei programme verschmelzen kann)
oder was ich noch hab, ein MsgBoxCreator, damit kann man seine eingenen WinMeldungen gestalten (jaja, banal, ich weiß, eigentlich in jeder Sprache umsetzbar
) UND man kann sie dann als Standalone-exe speichern (nicht mehr so ganz banal *g*).
Ich bin kein Gegner der Hochsprachen (höchstens von VB *ggg*), nur weiß ein Programmierer nachher oft gar nicht, was hinter den ganzen Klassen&Objekten steckt, die Programme in Delphi & VB sind teilweise wahre Ressourcenfresser und C++ ist auch nicht ohne...(und über JAVA rede ich gar net, das ist ein Monstrum). Und bis jetzt nutzen nur die wenigsten Compiler die Befehlssätze von .486 aus, ich will da gar nicht MMX/SSE erwähnen...
Ansonsten zum Aufwand: mit MASM Sysntax hält dieser sich in Grenzen (man kann IF/WHILE usw benutzen). Jede Sprache hat ihre Nachteile, versuch mal mit JAVA eine Textdatei nach bestimtem String zu scannen
, nur ist asm bis jetzt das mächtigste, was es gibt... ich hab schon von einigen gehört "was willst du mit ASM, das ist doch voll alt (!!!*g*!!!), das stribt bald aus, Java hat Zukunft, das ist plattformübergreifend)
Der Aufwand am Anfang ist mit den Möglichkeiten später zu vergleichen - lernst du VBS, ist es ganz einfach, aber du kannst später kaum was damit machen, lenst du c++ ist es schwer, doch später mächtig...
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von CDW: 14.10.2002 15:05.
|
|
14.10.2002 14:50 |
|
|
CDW
eine Simulation
Dabei seit: 12.10.2002
Beiträge: 1.329
Herkunft: CreateRemoteThread
|
|
ok, du lädst dir hier MASM32 runter:
http://www.movsd.com/
Damit bist du schon mal gut versorgt, da sind nähmlich viele Beipiele (EXAMPLES), Referenzen (API, Prozessorbefehle)
Damit hab ich ein halbes Jahr programmiert...
Es gibt zwar noch FASM/NASM aber die haben nicht so eine große bibliothek zur winprogrammierung (mit FASM macht man eher so Zeugs wie bootloader usw, jedenfalls ist MASM am besten zu lesen)
unter:
http://radasm.sonshinesoftware.com
gibts einen netten Editor mit Syntaxhighligting usw, vergelichbar mit VC++ Umgebung, ist gut, wenn du größere projecte machst, auf jedenfall ist die Syntaxhervorhebung nützlich...
unter:
http://spiff.tripnet.se/~iczelion/tutorials.html
bekommst du gute tutorials(vom meister iczelion persönlich *g*) sowie unmengen von Quellcodes und beispielen...
unter:
http://www.robsite.de/tutorials.php?tut=assembly
sowie:
www.deinmeister.de
gibts einige gute Tuts auf Deutsch... du kannst dir auch für den Anfang DOS antun, weil man da nicht so viel Overhead mit GUI(Grafical User Interface) und den WinNachrichten hat, außerdem bekommt man ein besseres gefühl dafür... zumindes sollte man erstmal bei Konsolmodeprogrammen bleiben.... Kannst du schon eine andere programmiersprache?
Oder schon unter Win direkt gecodet?
Ich überleg mir auch, einen win32 Einführungstut zu schreiben (wenn da nicht die verdammten Klausuren wären *g*)
PS: und unter:
http://board.win32asmcommunity.net
findest du meistens immer eine Antwort auf deine ASM fragen... ich schau da schon sein nem halben Jahr vorbei, brauchte noch nie eine Frage zu posten
Und zusätzlich hab ich mir ein buch gekauft:
Assembler Ge-Packt von J.Rohde, ISBN 3-8266-0786
14,95 Euro, das ist ne Superreferenz
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von CDW: 14.10.2002 19:29.
|
|
14.10.2002 19:20 |
|
|
phreak
Aufsteiger
Dabei seit: 12.10.2002
Beiträge: 42
Herkunft: Nähe Stuttgart
Themenstarter
|
|
@ Cdw_ |
|
Vielen Dank für die Infos und Links. Ich hab mir die Progs runtergeladen, hatte aber bisher noch keine grossartige Zeit um mir die genauer anzuschauen.
Die Tuts hab ich mal so grob überflogen, scheint wirklich sehr interessant und tiefgehend zu sein.
Kennst du noch andere Bücher über Assembler??
|
|
16.10.2002 20:13 |
|
|
CDW
eine Simulation
Dabei seit: 12.10.2002
Beiträge: 1.329
Herkunft: CreateRemoteThread
|
|
sorry, damit sind meine Quellen erschöpft... vielleicht haben aber andere noch Tipps....
|
|
16.10.2002 21:40 |
|
|
Compuholic
knows where he wants to go tomorrow
Dabei seit: 19.10.2002
Beiträge: 819
Herkunft: München
|
|
Ich finde, daß Assembler eigentlich leichter zu lernen ist als eine Hochsprache (vorausgesetzt man will Windows Programmierung machen, für Linux kann ich nicht sprechen). Was nur blöd ist, wenn man auf DOS Programmieren möchte. Diese Interrupts und Segmentregister können einen ganz schön nerven. Und bis man das auswendig kann, dauert es auch lange.
Der Befehlssatz ist im Gegensatz zu Hochsprachen sehr eingeschränkt, da der Prozessor nur Grundlegende Befehle ausführen kann (Kopieren von Speicherbereichen, einfache arithmetische Operationen, etc...).
Man sollte schon grundlegende Kenntnisse von anderen Programmiersprachen mitbringen wie z.B. die Nachrichtenverarbeitung von Windows. Dann behaupte ich mal, das Du in ca. 1-3 Wochen richtig mit ASM loslegen kannst. Die WinAPI kann (und muß) man ja benutzen, was viele Dinge wesentlich einfacher macht.
Eigentlich brauchst Du nur eine Befehlsreferenz (die von CDW benutze ich auch, und die ist wirklich gut) und ein paar Grundlagen, die Du Dir von oben beschriebenen Links aneignen kannst.
Auf jeden Fall viel Spaß mit Assembler...
|
|
19.10.2002 16:20 |
|
|
|
|
|
|