Wie schwer ist ASM zu lernen?
-
Habe mit C++ keine Probleme und überlege nun mir ASM beizubringen, aber da es ja sehr speziell ist, kann ich mir keinen wirklichen Vergleich ziehen zu C++, was Lernaufwand betrifft. Hauptsächlich interessiert mich 1. ist es viel schwieriger zu lernen? 2. Dauert es länger sich in Codes rein zu arbeiten bzw. selber welche zu entwickeln? Sicherlich dauert es länger, aber wie sieht ca das Größenverhältnis aus? 3. Wie lange braucht man im Durchschnitt um sich die Basics beizubringen? 4. Ich will damit fertige Programme umschreiben. Also hauptsähclich will ich nur ein bisschen Code manipulieren. Das ist zwar sehr unklar ausgedürckt, aber vielleicht kann man mir doch sagen, wie lnge ichca brauche, um das zu beherschen. Thx.
-
Hallo User123!
Ich bin wie Du auch ein Umsteiger, der von ANSI-C++ auf Assembler wechselt. Wenn Du ANSI-C++ beherrscht, sollte Assembler nicht schwer zu lernen sein.
Die Programmiersprache Assembler ist die Programmiersprache der zweiten Generation. Sie kennt nicht so viele Mnemoniken (Schlüsselwörter) wie die Programmiersprachen der dritten Generation zu denen BASIC, C, C++ und Java dazugehören, weil sie keine Objektorientierte-Programmierung kennt. Im Gegenteil, Assembler ist sehr einfach gehalten und sendet, im Gegensatz zu den höheren Programmiersprachen, die Daten und Anweisungen direkt an die einzelnen Register des Prozessors. Register sind kleine Speicherzellen, die sich im Prozessor selbst befinden. Man kann Sie dazu verwenden, um z. B. lokale Variablen oder Adressen zu speichern.
Es gibt vier verschiedene Arten von Registern, zu denen Universalregister, Segmentregister, Zeigeregister und Flagregister dazugehören.
Universalregister sind wie der Name schon verrät Register, die man für alles mögliche verwenden kann. Sie können beliebige Werte speichern oder sie als Argumente an Systemfunktionen (Interrupts) weitergeben.
Segmentregister sind Register, die auf die Segmente (Teile) deines Programmes verweisen, damit der Prozessor dein Quelltext auf der Festplatte findet.
Zeigerregister werden, wie in ANSI-C++ auch, für die Speicherung für Adressen verwendet. Einige Zeigerregister dienen auch als Indexregister und sagen den Prozessor, wo er sich gerade im Anweisungsblock befindet.
Flagregister sind Register, die nur zwei zustände kennen (TRUE und FALSE). Mit diese Optionen lassen sich die Eigenschaften der reserwirten Bytes ändern, um den Prozessor klar zu machen, ob es sich z. B. um einen Datentypen handelt der vorzeichen erlaubt oder nicht (unter ANSI-C++ währe es signed und unsigned) und ander Eigenschaften.
Die Unversalregister heisen:
AX – Akkumulatorregister
BX – Basisregister
CX – Zählregister
DX – DatenregisterZu den Segmentregister gehören:
CS – Codesegment-Register
DS – Datensegment-Register
ES – Extrasegment-Register
SS – Stacksegment-RegisterDamit der Assembler weis, führ welche Prozessor-Achitektur die Register gedacht sind, hängt man für 32-Bit-Prozessoren ein E vor alle benutzen Register an und für 64-Bit-Register ein R.
z. B.:
AX(16-Bit), EAX(32-Bit), RAX(64-Bit)
BX(16-Bit), EBX(32-Bit), RBX(64-Bit)
CX(16-Bit), ECX(32-Bit), RCX(64-Bit)
DX(16-Bit), EDX(32-Bit), RDX(64-Bit)Um mit dem Assembler richtig zu arbeiten oder die Grundlagen zu erlernen, empfehle ich dir ein Buch zu kaufen. Schaue dir dazu die Seite http://www.c-plusplus.net/forum/viewtopic-var-t-is-102805.html an, die sich im Assembler-FAQ befindet.
Zu Deine Frage, wie lange es dauern kann:
Wenn Du Grundwissen in ANSI-C++ hast, dauert der Umstieg nicht länger als Du denkst, da Assembler nicht so viele Schlüsselwörter kennt, wie ANSI-C++. Aber wie lange es genau dauert, kann ich Dir nicht sagen; das muss jeder selbst wissen.Ich zum Beispiel kenne mich in BASIC und ANSI-C++ aus. Trotzdem lerne und übe ich an den drei Programmiersprachen weiter, um Sie nicht in Vergessenheit zu bringen.
-
stefan2008 schrieb:
Die Programmiersprache Assembler ist die Programmiersprache der zweiten Generation.
Ach - und was sind dann Programmiersprachen der ersten Generation?
Assembler:
http://win32assembly.online.fr/tutorials.html
http://www.joachimrohde.com/cms/xoops/modules/articles/index.php?cat_id=2
http://andremueller.gmxhome.de/index.html
-
Die Programmiersprache der ersten Generation ist die Maschinensprache. Also das direkte schreiben in einer Binärdatei mit Hilfe eines Hexadezimal-Editors. Oder?
-
und die der 0-ten generation sind von hand gebastelte drahtverbindungen.
topic: wenn du c++ kannst, dürfte asm keine intellektuelle hürde für dich sein.
musst dir nur nen prozessor auswählen, mit dem asm-programmierung richtig spass macht. ich mag die alten 6502 und z80 ganz gern. aber ARM und 68000'er z.b. sind auch interessant. x86-asm finde ich eher bescheuert. aber das ist natürlich geschmackssache.
-
Programmierung von Mikroprozessoren macht den meisten Sinn (Elektronik, Robotik).
Gibt es eigentlich eine Sammlung von interessanten Inline-Assembler-Routinen für C/C++?
-
*kicher* Das gibt eine saubere Bauchlandung ...
Um es so einfach wie möglich auszudrücken: Der Assembler ist eine etwas
komfortablere Möglichkeit, Maschinencodes einzugeben. Den Prozessor kannst
Du damit voll ausfahren, das OS nicht. Denn aktuell verwendeten Prozessor
mußt Du aus dem FF kennen - nix Abstraktion (die nennt man dann C).Sinn macht das bei Singlechippern oder Singleboard-Computern.
Im Vergleich zu C ist es einfach eine Sauarbeit. Das Ergebnis ist vergleichbar
(Geschwindigkeit: C-Programme Faktor 1,8, hat IBM mal ermittelt).
-
Erhard Henkes schrieb:
Gibt es eigentlich eine Sammlung von interessanten Inline-Assembler-Routinen für C/C++?
wie stellste dir das vor?
-
Im Vergleich zu C ist es einfach eine Sauarbeit. Das Ergebnis ist vergleichbar (Geschwindigkeit: C-Programme Faktor 1,8, hat IBM mal ermittelt).
µP programmiert man heute auch eher in C, kein Wunder.
wie stellste dir das vor?
Naja, es gibt doch Funktionen, die sehr schnell sein Müssen, z.B. FAST Sqrt(...)
http://www.freewebz.com/gametutorials/tutorial2.html
und andere.
-
Gibt es eigentlich eine Sammlung von interessanten Inline-Assembler-Routinen für C/C++?
Ich finde folgende Seite empfehlenswert
http://www.agner.org/optimize/
mit vielen Tipps und Tricks...
-
Ja, diese Seite ist wirklich interessant. Danke!