Kann jemand von euch Maschinensprache (Assembler)?

6 Antworten

Früher habe ich Assembler unter DOS gelernt, weil mich interessiert hat, wie Computer-Viren funktionieren. Ich wollte unbedingt einen "polymorphen Bootsektorvirus" schreiben. (Habe meine "Erfindungen" allerdings nicht weiter verbreitet!)

Damals war ich so 8 Jahre alt, und habe ca. ein halbes Jahr gebraucht, um damit auch wirklich sinnvolle kleine Progrämmchen schreiben zu können.

Später habe ich die Kenntnisse genutzt, um Software zu optimieren; damals waren die Compiler nämlich noch nicht so intelligent.

Allerdings kann man auch heute mit Assembler unter Ausnutzung von AVX & Co in modernen CPUs bei vielen Algorithmen pro Kern locker auf die Leistung kommen, für die man normalerweise in einer Hochsprache auf allen verfügbaren Kernen parallel rechnen müsste. (Mehr als 30 Gigaflops pro Kern bei rund 3.0 GHz sind dabei leicht möglich! Das schafft kein C++-Compiler!)

Außerdem ist Assembler sehr nützlich, um sich anzusehen, wie Drittsoftware oder auch Malware funktioniert. Für ein geübtes Auge und mit vernünftigen Werkzeugen liest sich Assembler fast genauso schnell wie der Quelltext einer "richtigen" Programmiersprache.

Ich nutze auch immer einen Disassembler bei meiner Software, um nachträglich zu sehen, ob und wie gut der Compiler optimiert hat, bzw. ob es noch Potential nach oben gibt.

Wie schon jemand anderes geschrieben hat, lohnt sich Assembler auch bei Mikrocontrollern, und besonders bei den ganz kleinen, die nur 32 Byte RAM und 32 Byte ROM haben, schreibe ich grundsätzlich nur in Assembler, da jedes einzelne Byte zählt.

Da ich mir oft Disassemblate ansehe, und direkt daneben der Maschinencode steht, habe ich mir schon vor Jahrzehnten praktisch "im Vorbeigehen" die hexadezimale Repräsentation der gängigsten Befehle eingeprägt und für kleinere Dinge brauche ich gar keinen Disassembler oder Debugger mehr, da ein Hex-Editor reicht, um Funktionen aus einer Software raus zu patchen.

Direkt in Maschinensprache (also ohne einen Assembler rein im Hex-Editor) habe ich früher mal so eine Art "Hello World" geschrieben, aber da man dabei ständig gefühlt Millionen von Adressen im Hinterkopf haben muss, ist ein vernünftiger Assembler mit Labels deutlich vorzuziehen! Mehr ist im Hex-Editor sicher auch möglich, aber dazu fehlte mir die Zeit und die Muße ... man kann seine Zeit ja auch sinnvoller verplempern. :)

Früher habe ich mit Assembler für den 286er angefangen, und danach alle Generationen bis zu aktuellen x64ern mitgemacht. Zwischendurch hatte ich mit den gängigen Hobby-µCs wie PICs und AVRs zu tun, aber auch vielen anderen embedded Prozessoren von Industrieanlagen. Später kamen dann diverse ARM-Generationen hinzu.

Also Assembler-Software habe ich mich früher noch mit dem MASM gequält, aber der hingt allen anderen Alternativen seit jeher hinterher. Der TASM war früher richtig gut und verglichen mit dem MASM äußerst angenehm. In letzter Zeit nutze ich viel GAS, weil es kaum eine Plattform gibt, die der nicht unterstützt, aber NASM (bzw. davor YASM) gefällt mir noch besser. Dazu kommen dann noch unzählige proprietäre Assembler von irgendwelchen Hardwarebuden um deren Prozessoren ansteuern zu können.

Fazit: Ich halte Assembler auch heute noch für sehr sinnvoll, da ...

  • ... Einsteiger dadurch besser die Innereien einer CPU verstehen,
  • ... man mithilfe von Reversing nachsehen kann, wie eine Software genau arbeitet,
  • ... Flaschenhälse u. U. um den Faktor 1000 effizienter machbar sind (wenn man wirklich gut ist!),
  • ... die Resultate eines Kompiliervorgangs überprüfbar werden,
  • ... es einfach lustig ist, winzig kleine Software zu schreiben (Malprogramm wie MS-Paint in einer EXE unter 2KB, oder einen Webserver auf Linux in einer ELF unter 500 Byte z. B.).

Naja, schönen Abend noch! :)

PS: Ich habe auch mal eine kleine statisch linkbare C-Laufzeitbibliothek größtenteils in Assembler gebaut, einfach nur aus Interesse und um etwas zu lernen. Der Größenunterschied zwischen glibc und meiner Entwicklung war enorm. (Einfache Mini-Progrämmchen bei glibc ca. 10KB, mit meiner Bibliothek hingegen knapp über 500 Byte.)

Wir hatten zumindest die Grundlagen während des Informatik-Studiums im Modul Rechnerorganisation. 

Man muss aber auch die Plattform angeben, der Befehlssatz ist für jeden Prozessor anders - wir haben Xilinx PicoBlaze genutzt

Es ist prinzipiell nicht schwer, nur anders ... 

Das Code lesen und verstehen sowie die Strukturierung kann (je nach Code) anstrengend sein, da es eben nicht so schön lesbar aufgebaut ist wie "normale" Programmiersprachen

Ja wobei man hier dazu sagen muss für welchen Prozessor da hat jeder andere Befehle bis auf einge Standartbefehle wie mov jmp etc.

Für den AVR Assembler 1 Monat wobei ich vorher schon C konnte von da her wars nicht sonderlich schwer.

Nützen tut es eigentlich beinahe gar nichts mehr es sei denn man muss aktiv bestimmte Register des Prozessors beschreiben aber das wird auch schon meist über inline Assembler in C gelöst.

Ich sehe den Vorteil von Assembler eigentlich nur noch in der Lehre damit man 1:1 sieht was der Prozessor wirklich macht wenn man zb if i=0 then else schreibt.

Es gibt zwar noch die Möglichkeit in Assembler sehr schnellen Code zu schreiben durch die wachsende "intelligenz" der Compiler muss man aber den Prozessor schon sehr gut kennen, dass man da noch was rausholen könnte.

wie kan man Maschinensprache lernen?

Hi, zuerst mal, ich bin wirklich interessiert die maschinensprache zu lernen, ich meine damit nicht eine assemblersprache ich meine die wirkliche maschinensprache.

  1. Gibt es seiten, wo man alle befehle einsehen kann?
  2. Gibt es auch eine entwicklerkonsole (zb. notepad ++) für die maschinensprache ? wenn ja wie heisst das programm?
...zur Frage

Welches Buch soll ich lesen um meine Informatik-Kenntnisse zu verbessern?

von Computern an sich (Geschichte + Funktionsweise) weiß ich mittlerweile mehr als genug, jedoch bin ich auch hier für vorschläge offen

ich meine eher

  • (Computer)-Netzwerkysteme
  • Serversystem (alle Serverarten die es so gibt)
  • Frage: Wieso gibt es nicht eine Programmiersprache, an der seit jeher rumgeschraubt wird, warum gibt es tausende und warum werden in verschiedensten bereichen immer typischer weise die immer gleichen sprachen verwendet --> warum C++ für das, warum C# für dies usw.
  • nochmal zum ersten, den comutern an sich, ich weiß wie gesagt schon sehr viel, aber wie ein chip (cpu) im detail funktioniert, also wie genau er eine prgrammiersprache mit seinem befehlssatz usw interpretiert etc das ist mir noch nicht so ganz klar.
  • wie genau werden cpu's gebaut, dass da zig millarden transistoren draufpassen und wer hat das erfunden? --> meines wissens nach brachte intel den ersten prozessor raus, der programme von externen speichern ausführen konnte. wie also konnten das andere firmen wie amd z.b. dann einfach so übernehmen, intel hat doch bestimmt nichts an infos rausgerückt.

ihr dürft ruhig gnadenlos in die tiefe gehen, mir egal, ich will es ja wissen

...zur Frage

MaschinenSprache erlernen?

Hey, kann man Maschinensprache erlernen ?

Das ist doch sehr schwer und dauert sehr lange, oder ?

Bzw. kann das jemand von euch ? Und wie lernt man die am besten ?

Danke sehr.

...zur Frage

Verbindung von Netzwerken, wer kann mir den Sinn von folgenden Geräten erklären (siehe unten)?

Also ich schreib bald Abitur in meiner Fachrichtung (IT) und weiß die Funktion folgender Geräte noch nicht, das muss ich aber drauf haben:

Repeater, Hub, Switch, Bridge, Netzwerkkarte, Router, Gateway, Proxy

Also was ein Router ist weiß ich das ist wie zu Hause der dich ans Internet verbindet. Ein Switch weiß ich auch was das ist, ein Switch erweitert nur die Ports am Router mehr nicht, zb wenn der Router nur 4 Eingänge für LAN Kabel hat dann kann man sich eine Switch mit 20 Eingängen kaufen und halt mehr Geräte anschließen. Eine netzwerkkarte weiß ich auch was das ist die dient ja zum senden der Netzwerkdaten etc aber was ist der Rest?

Was ist ein repeater? Welchen Zweck hat er? Was ist eine Bridge, Gateway, Hub, USW? Bei mir zu Hause gibt’s keine Bridge, keinen hub, keine Gateway und wir haben dennoch Internet also was ist der Sinn dieser Geräte?

Mit freundlichen Grüßen

...zur Frage

Hochsprache und Maschinensprache Unterschied?

Hallo was ist der Unterschied zwischen einer Maschinensprache und Hochsprache?

Danke im vorrraus

...zur Frage

Programmieren lernen?

Wie kann man am besten Programmieren lernen. Bin schon seid längerer Zeit dabei und kann auch schon ein bisschen, aber ab jetzt komme ich nicht weiter. Hat jemand Tipps oder Empfehlungen für mich, die auch recht einfache Voraussetzungen haben?

...zur Frage

Was möchtest Du wissen?