Assembler

ActiveO2

Ensign
Registriert
Feb. 2009
Beiträge
161
Hallo,

hat jemand Erfahrung mit Assembler?
Ich würde mich gerne etwas damit auseinander setzen.
Ich bräuchte also:
Tutorials, Foren, Bücher, How To's,....

Vielleicht kennt jemand ja gute Quellen.
Ich habe schon eine Menge gefunden (google lässt grüßen, bing hab ich noch nicht benutzt ;) )aber ich weiß ja nicht welches Tutorial wirklich gut/empfehlenswert ist.

Was haltet ihr von Assembler?
Sinnvoll?


Gruß,
ActiveO2
 
Nun ja du wirst keine so schnelle Sprache finden wie Assembler, da Assembler ja eigentlich direkt nach dem Maschinencode kommt.
Die programmierung ist auch nicht schwer. Doch um etwas auf die Beine zu stellen bist du mit Assembler sehr lange dran.
Immerhin gibt es keinen Befehl für eine Schleife und kein Befehl für eine Verzweigung :D.

Es gibt einen tollen Microprozessor Emulator auf dem du mit Assambler rumspielen kannst. Müsste dir aber daheim nachsehen wie der nochmal heißt.

Warum willst du die Sprache lernen, bzw. was willst du damit machen?
Sinnvoll für Lernzwecke, ja.
 
ActiveO2 schrieb:
Was haltet ihr von Assembler?
Sinnvoll?

Die Frage ist nicht was andere davon halten, sondern was du davon hältst - Bevor du darüber urteilst, solltest du dir aber erst einmal einen Überblick darüber verschaffen. Aber sei gewarnt, die meisten Tutorials sind in 16-Bit (-DOS) gehalten, was einfach nicht mehr der Zeit entspricht (heute meistens x86-32bit,-64bit). Du solltest auf jeden Fall auch einmal 32Bit Programme anschauen und etwas damit herum experimentieren (z.B. ne einfach Win32-Anwendung). Zudem musst du dich (wohl) noch für eine Assembler und die Zielplattform entscheiden:
Für Windows: masm(+masm32-package), fasm, jwasm, GoAsm, Nasm, TASM ...
Linux: Gas, Nasm, fasm ...
(Die meisten unterstützen auch die x86-64 Architektur)

Generell kann ich dir nur empfehlen, einen Assembler mit Intel-Syntax zu nehmen (AT&T ist meiner Meinung nach einfach hoffnungslos Veraltet … aber wahrscheinlich doch nur eine Geschmackssache ^^) und zu anderem Hochsprachen ähnliche Ausdrücke wie if, while, repeat usw. unterstütz, da diese die Sache dann doch etwas einfacher und überschaubarer gestallten.

Nachdem du ein Anfänger-Tutorial durch gearbeitet hast kann ich für Windows nur das Folgende empfehlen: Iczelion's Tutorials (Win32)
 
Hauptsächlich Interesse.
Schade kann es bestimmt nicht (hab ich bisher gedacht)

schleife gibt es nicht?....Stichwort: 'loop'

Jo wäre cool wenn du den Emulator finden könntest (wird legal sein oder?^^)
Hast du Erfahrung in dem Gebiet?



tatsächliche Geschwindigkeit einer Funktion oder eines Programmes o.Ä. findet man doch auch nur mit asm heraus oder?




Aber sei gewarnt, die meisten Tutorials sind in 16-Bit (-DOS) gehalten, was einfach nicht mehr der Zeit entspricht (heute meistens x86-32bit,-64bit). Du solltest auf jeden Fall auch einmal 32Bit Programme anschauen und etwas damit herum experimentieren (z.B. ne einfach Win32-Anwendung). Zudem musst du dich (wohl) noch für eine Assembler und die Zielplattform entscheiden:
Für Windows: masm(+masm32-package), fasm, jwasm, GoAsm, Nasm, TASM ...
Linux: Gas, Nasm, fasm ...
(Die meisten unterstützen auch die x86-64 Architektur)

Generell kann ich dir nur empfehlen, einen Assembler mit Intel-Syntax zu nehmen (AT&T ist meiner Meinung nach einfach hoffnungslos Veraltet … aber wahrscheinlich doch nur eine Geschmackssache ^^) und zu anderem Hochsprachen ähnliche Ausdrücke wie if, while, repeat usw. unterstütz, da diese die Sache dann doch etwas einfacher und überschaubarer gestallten.
Danke dir.
Das ist jetzt natürlich die Frage.
Momentan benutze ich noch Windows, bin allerdings schwer am überlegen auf Linux umzusteigen.
Jeder Prozessor-Typ benötigt andere Syntax...stimmt das?
Sind die Assembler generell recht ähnlich oder gibt es große unterschiede? (schneller umstieg möglich oder alles neu lernen?)
Ich kann also nicht Assembler ....Systemübergreifend(?) programmieren?
Also an einem PC mit nem Intel-CPU nicht an nem anderen mit AMD-CPU die gleiche Syntax benützen? (Von x32 oder x64 mal abgesehen)
In der hinsicht frage ich mich ob es sinnvoll ist, solange man nicht geschäftlich damit zu tun hat.
 
Zuletzt bearbeitet:
ActiveO2 schrieb:
Momentan benutze ich noch Windows...
Meine empfehlung: masm32-SDK


ActiveO2 schrieb:
Jeder Prozessor-Typ benötigt andere Syntax...stimmt das?
Es kommt auf die Hardware-Architektur an: Die gewöhnlichen PC's (egal ob Amd oder Intel) basieren auf der x86-Arecetektur: Der Befehlsumfang änder sich mit den Jahren (aber immer Abwärtskompatibel), der Syntax nicht (wird ja durch den Assembler festgelegt).


ActiveO2 schrieb:
Sind die Assembler generell recht ähnlich oder gibt es große unterschiede?
ja, gibt es -> Which Assembler is the Best?

ActiveO2 schrieb:
Ich kann also nicht Assembler ....Systemübergreifend(?) programmieren?
generell nicht

ActiveO2 schrieb:
In der hinsicht frage ich mich ob es sinnvoll ist, solange man nicht geschäftlich damit zu tun hat.
Man muss schon etwas begeister von der Sache sein – oder Interesse an Optimierung von Algorithmen\Programmen haben. Ich kann dir da keine neutrale Antwort geben...
 
Es hilft mit Sicherheit, die Vorgänge auf Maschinenebene besser zu verstehen. Praktischen Nutzen wirst du damit kaum erzielen können.


Just my 2 Cents.
 
Wie gesagt die Interesse hat mich dazu gebracht^^
Mich fazinieren die Übergänge von IO zu den Programmiersprachen.
Vlt kennt ihr dazu ja auch etwas nach dem Prinzip:
1001011101000 == eax
|oder|
nop
nop
nop = Sleep(1);
nop

(Mir ist klar dass ich gerade Müll schreibe, ich weiß blos nicht wie ich es besser beschreiben könnte^^)

Exkurs:
In wie wie fern hängen Hochsprachen mit Assembler zusammen?
Tun sie es überhaupt?
Dürfen sie das überaupt da sich die Hochsprachen dann ja auch nur mit einem bestimmten Prozessor programmieren lassen....Ich würde mal sagen..nein!? ^^

Praktischen Nutzen wirst du damit kaum erzielen können.
 
Hochsprachen wie C, PL/1 oder C++ werden beim kompilieren alle in Assemblercode übersetzt, da Assemblercode eigentlich nichts anderes ist als Maschinencode in Englisch anstatt 0 und 1.

Aufpassen: Sprachen wie Java und C# werden nicht in Maschinencode übersetzt, sondern in Bytecode der von der Java VM bzw. .Net-Framework interpretiert wird.

Wenn du dich mit etwas Systemnahen beschäftigen möchtest empfehle ich C. Man kann Bit umherschieben wie man will, der Compiler verhindert das nicht.

Gruss
Elessar
 
So, hab da was für dich. Wir lernten in der Schule die Grundlagen von Assamber mit dem Intel 8086.
Mir hat das immer sehr viel Spaß gemacht, vorallem da die anderen oft nie eine Chance gegen mich hatten :D.
Mir persönlich ist leider nicht ganz ersichtlich wieviel startwissen du mitbringst. Falls du noch keins mitbringst würde ich dir echt empfehlen mit dem Intel 8086 anzufangen.
Ich mein, jede weitere CPU ist nur noch eine Zugabe. Außerdem ist es möglich alle Befehle des Intel 8086 auf einen A4 Zettel zu schreiben. :cool_alt:
Diesen Zettel kann ich dir auch geben.
Aber wie gesagt ich weiß nicht wieviel Grundlagenwissen du schon hast. Bzw wie weit du in Assembler einsteigen willst.

http://www.emu8086.com/

hier findest du den Emulator, er ist kostenpflichtig. Jedoch sind mehrer Testschritte erlaubt. Falls er dich nicht weiter programmieren lässt einfach speichern und Programm neu starten. Das ist zumindest die legale Lösung.
 
Assembler:
Also ich finde den ganz nett:
Code:
__asm{
...
};
Der funktioniert ganz gut.

Einfach in ein C oder C++ Programm einbauen und schon kannste assemblen so viel du willst.
(Visual C/C++ 2008 Express Edition, sogar kostenlos)

Dadurch muss man nicht den kompletten Code drumrum sondern nur noch das Wesentliche schreiben.
 
okey,
ich habe kaum Erfahrung mit Assembler... am besten wir gehen von >>nichts<< aus ;)
Habe mir nur auf ein paar Seiten etwas Code angesehen um einen groben Einblick zu bekommen.
Die A4-Seite wäre ganz nett.
Ich programmiere C++ in VS 2005 Prof.


Wie finde ich heraus was für eine Architektur mein CPU hat?

Für Windows: masm(+masm32-package), fasm, jwasm, GoAsm, Nasm, TASM ...
Linux: Gas, Nasm, fasm ...
Gas, NASM,.. sind doch auch Windowskompatibel oder? (<=http://webster.cs.ucr.edu/AsmTools/WhichAsm.html )
 
Zuletzt bearbeitet:
Was hast du denn für ne CPU ?
 
amd athlon 4000+2,4Ghz (SingleCore),
intel Core2Duo 2,4 GHz (die genaue bezeichnung weiß ich gerade nicht)
und
intel Core2Duo E6550 2,33 GHz
 
Zuletzt bearbeitet:
domi1511 schrieb:
So, hab da was für dich. Wir lernten in der Schule die Grundlagen von Assamber mit dem Intel 8086.
Mir hat das immer sehr viel Spaß gemacht, vorallem da die anderen oft nie eine Chance gegen mich hatten :D.
Mir persönlich ist leider nicht ganz ersichtlich wieviel startwissen du mitbringst. Falls du noch keins mitbringst würde ich dir echt empfehlen mit dem Intel 8086 anzufangen.
Ich mein, jede weitere CPU ist nur noch eine Zugabe. Außerdem ist es möglich alle Befehle des Intel 8086 auf einen A4 Zettel zu schreiben. :cool_alt:
Diesen Zettel kann ich dir auch geben.
Aber wie gesagt ich weiß nicht wieviel Grundlagenwissen du schon hast. Bzw wie weit du in Assembler einsteigen willst.

http://www.emu8086.com/

hier findest du den Emulator, er ist kostenpflichtig. Jedoch sind mehrer Testschritte erlaubt. Falls er dich nicht weiter programmieren lässt einfach speichern und Programm neu starten. Das ist zumindest die legale Lösung.

Haha, geil! genau so gings mir auch! wir haben aber auf nem richtigen alten Z80-Board programmiert... das einzige was wir hatten war ne komische eingabetastatur mit ein paar zahlen und den verschiedenen Registern (H,E,D) was weiß ich was... und 4x7-Segementanzeigen :D! das war noch richtiges hardwareprogrammieren... hihi, na aber im ernst, da haben wir wirklich gelernt wie so ein ding arbeitet.
 
Hm. Also als Informatikstudent lernst du zu Anfang wesentlich einfacheres MIPS Assembler. Und ich denke es könnte sogar Sinn machen, wenn du das auch tun würdest.
Geht es dir hier tatsächlich um praktischen Nutzen von Assembler-Kenntnissen (Exploits, Cracks, ...) oder eher um das Hintergrundwissen, welches ganz nett ist wenn man schon andere Programmiersprachen beherrscht.

Wenn es weniger um Praxisrelevanz geht kann ich dir einfaches MIPS Assembler empfehlen. Man lernt im Prinzip das gleiche und hat bei weitem nicht so viel komplizierten Mist dabei, der architekturabhängig ist.

Ein guter Emulator wäre zB http://courses.missouristate.edu/KenVollmar/MARS/
 
Ich besitze noch nicht allzuviel Praxiserfahrung im programmieren größerer Projekte aber ich könnte mir bisher ganz gut vorstellen asm auch in Projekte einzubeziehen.
Allerdings weiß ich noch nichteinmal was für eine CPU-Architektur ich habe oder was die Architektur Kennzeichnet...
zB. Athlon = Architektur?
ich hab bisher nur x86......8112 (oder so)....(Zahlen halt) gesehen.

oben habe ich mal meine cpu's angegeben, vlt kann mir jemand ja weiterhelfen und mir gleich erklären wie sie/er auf das Ergebnis kam.

PS: Danke schonmal für die ganzen Beiträge ;)
 
ActiveO2 schrieb:
Ich besitze noch nicht allzuviel Praxiserfahrung im programmieren größerer Projekte aber ich könnte mir bisher ganz gut vorstellen asm auch in Projekte einzubeziehen.
Darf ich fragen, warum?
 
Der Punkt ist: Der Compiler schreibt besseren Assembler als wir alle :)

Gab mal einen Artikel in der C't über Intels Compilerserie 11.x. In dieser zeigte sich der Autor recht erstaunt darüber dass der von ihm über Wochen in Assembler optimierter Code von Intel besser von C++ nach Assembler umgesetzt wurde.
Dementsprechend muss man davon ausgehen, dass du Maschinencode wohl nie Produktiv einsetzen wirst.
 
:D oke,
man kann ja nie wissen.

Darf ich fragen, warum?
klar ;),
- Wissensbegierde
und
- das, bisher erhoffte, optimieren der Programme bezüglich der Geschwindigkeit

dass asm von c++ (teilweise) besser gecodet wird habe ich auch schonmal gehört, trotzdem erspart man dem cpu die um-"rechnung" von c++-code in asm, wodurch er ja wieder schneller sein sollte oder?
(Es handelt sich natürlich nur um geringe Zeitersparnisse und die Programmierung ist natürlich, meines erachtens, aufwändiger).
 
Zurück
Oben