Habe gerade die x86-Assemblersprache abgeschlossen. Was kann ich damit machen?
Ich habe gerade Assembler zu lernen. Aber ich konnte nicht verstehen, was könnte ich implementieren (für die Praxis/wie kleines Projekt). Wäre toll, wenn Ihr etwas nützliches für jedermann.
Kommentar zu dem Problem
Es geht nicht immer um die Umsetzung. Geringe Kenntnisse der assembler kann helfen, eine ganze Menge beim Debuggen (vor allem, wenn du jemals in einem " code generation Fehler der compiler, den Sie verwenden).
Haben Sie gelernt, Montage ohne bestimmten Grund?
Ist diese community wiki? Nicht sicher, dass es eine einzige richtige Antwort hier.
@Victor: In Soviet Russia, computer zusammenbaut Sie!
Ich habe gelernt, zu verstehen, zu lenken. Gut jetzt weiß ich, wie die Dinge genau funktionieren.Ich kann Sie sehen. Ich kompilieren meine C-Code in asm und ihn anzeigen. Dinge machen für mich Sinn. Sollte man lernen, asm, für einen bestimmten Zweck allein?
InformationsquelleAutor der Frage claws | 2009-11-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eines meiner Liebsten Hobbys ist das Reverse Engineering.
Es erfordert ein fundiertes wissen über die Montage und die Verwendung von disassemblern/Debugger zu Fuß durch kompilierten code. Dies ermöglicht Ihnen, zu verändern, zu verstehen und reverse-kompilierte Programme. Jedes neue Programm ist wie ein puzzle warten darauf, gelöst werden!
Zum Beispiel, eine Menge Leute reverse-Spiele wie Minesweeper, wenn Sie zuerst anfangen.
Hier ist ein screenshot von einem key-code-Abschnitt, der in Minesweeper ich drehte eine Weile zurück (Kommentare auf der rechten Seite):
Dieser wurde entfernt, indem ein breakpoint auf Aufrufe der
rand()
Funktion und rückwärts zu gehen, in der Aufrufliste. Nachdem einige Graben es wird deutlich, dass:Mit diesem wissen wird es einfach, zu bestimmen, die Lage einer bestimmten mine in das Minenfeld von:
Dann, mit einer einfachen Schlinge und einige Anrufe zu
ReadProcessMemory()
du hast den ultimativen Minesweeper-hack!Lesen hand geschrieben, die Montage ist weit einfacher als das Lesen von Maschinen-generierten assembly. Moderne Compiler tun einige Magische und verrückte Dinge, um den code für die Optimierung, kann manchmal schwierig sein zu Folgen. So, dies wird auf jeden Fall schieben Sie Ihre Versammlung wissen!
Gibt es Tonnen von Aktivitäten, die sich verzweigen können aus dieser:
Mehr!
Wenn Sie interessiert sind, ich sehr empfehlen das Buch: Reversing: Secrets of Reverse Engineering
InformationsquelleAutor der Antwort mmcdole
Können Sie lernen, wie Sie OS arbeiten auf niedrigem Niveau (interrupts, virtuellem Speicher und so weiter).
Zuerst schreiben Sie einen bootloader, die Ihnen vollen Zugriff auf die hardware, dann können Sie anfangen zu spielen mit dem geschützten Modus, VGA-Programmierung und so weiter.
Zwei gute Mittel:
http://wiki.osdev.org/Main_Page
http://www.osdever.net/FreeVGA/home.htm
[Bearbeiten]
Wenn Sie lernen wollen, über Optimierungen, check-out Agner Fog website: http://agner.org/optimize/.
[Bearbeiten]
Kopiert von Simucal Kommentar:
InformationsquelleAutor der Antwort Bastien Léonard
Dies scheint sehr Klischee, aber Sie könnten versuchen, und einige Fragen beantworten, die über an projectueler mit Montage.
InformationsquelleAutor der Antwort Jonno_FTW
Heute, assembler ist in diesen Bereichen eingesetzt:
InformationsquelleAutor der Antwort Aaron Digulla
Optimierung. Lernen, wie Intel VTune, wenn Sie das Programm auf Windows. Hier können Sie sehen, wo Ihre Engpässe sind. Dann schreiben Sie diese Routinen in assembler.
Als die meisten modernen software-änderungen die ganze Zeit das ist mehr eine Intellektuelle übung und selbst-Befriedigung, etwas zu bekommen, schneller zu laufen, dann von benifit in der realen Welt.
Gibt es ein oder zwei Leute, die neu geschrieben haben, viele der core C primatives, memcpy, memset etc. in assembler zugeschnitten auf die Laufzeit der CPU. Also der code wird größer, da hat es extra-Routinen zu nutzen, CPU-extensions, SSE etc aber schneller. Diese C primatives oft am Ende in viele Pakete .dlls wie die meisten Programme-memory-Zeug die ganze Zeit.
InformationsquelleAutor der Antwort kingchris
Je nachdem, wie gut Sie gelernt, Montage, könnten Sie versuchen, schriftlich firmware für kleine Mikroprozessoren oder auch für kleine Geräte angeschlossen an Ihren computer. Sie könnten auch versuchen, schriftlich vollständige software-Anwendungen in der Montage und geben Ihnen eine gut aussehende GUI.
Generell, aus meiner Erfahrung, Assembler ist nicht so nützlich in der Programmierung mit massiven software-Projekte, weil für eine Vielzahl von Anwendungen, die Geschwindigkeit ist nicht wirklich wichtig (zumindest nicht in den Tagen von multi-core-Prozessoren), so was Sie tun können, ist etwas begrenzt.
InformationsquelleAutor der Antwort chustar
Konnte man einen Blick auf die liboil-Projekt:
http://liboil.freedesktop.org/wiki/
Seine Bibliothek für hoch optimierte innerloops.
Meisten Schleifen haben bereits ein x86-assembler-Implementierung, aber es gibt noch einige Schleifen Links umgeschrieben werden.
InformationsquelleAutor der Antwort Nils Pipenbrinck
Kann man sich einen Roboter oder ein controller, Anschluß an den Parallel-port und schreiben ein paar Coole key-Handler, um Sie zu kontrollieren. Sie können auch abfangen die BIOS-Int13-Aufrufe, wie für die Datenträger-und schreiben, disk-mirroring-tools, RAID-Treiber usw. Sie können hookup einige Schwinger wie Temp/vibration/Druck etc und einige der Datenerfassung.
InformationsquelleAutor der Antwort srini.venigalla
Ich nehme an, Sie könnten versuchen, code-golf
Gibt es auch mindestens eine O. S. geschrieben für den PC in der Montage: MenuetOS. (Ich habe keine Ahnung, warum.) Sie möchten die Beiträge.
Ich verstehen, dass vor der Erfindung von C in den frühen 1970er Jahren, die meisten Betriebssysteme waren eigentlich geschrieben in gerade Montage. Ich würde nicht empfehlen, tun, aber Sie könnten schreiben eine stand-alone-Programm, gerade für Spaß. Beachten Sie, dass die CPU im 16-bit Modus und es ist ziemlich schwierig, um es zu Umstieg auf 32-bit. Es ist wahrscheinlich am besten schreiben Sie einfach die stand-alone-Programm in 16-bit-x86. Sie könnten einen simulator für die Entwicklung.
InformationsquelleAutor der Antwort DigitalRoss
Zumindest können Sie nun die Ausgabe assembler von gcc wie diese:
gcc -c -S test.c -o test.asm
Dann können Sie überprüfen Sie die Ausgabe des generierten C-code für pädagogische Zwecke.
InformationsquelleAutor der Antwort PP.
Wenn Sie bereits ein Entwickler in einer höheren Programmiersprache, Assembler ermöglicht Ihnen die Erstellung von optimierten Routinen/Funktionen. Ich weiß nicht über die anderen, aber Delphi, zum Beispiel, können Sie sich perfekt integrieren Assembler-code in jeder Einheit, und kümmert sich um die Parameter für die Funktion etc.
InformationsquelleAutor der Antwort Domus
Haben Sie vertraut mit low-level-Betrieb von Computern. Zu können Lesen Montage kann Ihnen helfen zu verstehen, wie sich der compiler verhält.
Den rest nennen mag einige Kritik, weil es zeigt, dass eine polarisierte Sicht. Einen Tag nach einem leidvollen embedded Projekt, mein mentor sagte mir: "Wenn jemand für Sie arbeitet, schreibt in der Montage -, Feuer ihn, um Ihren eigenen job." Ich bin mit ihm einverstanden. Aus einer programmatischen Sicht schreiben in der Montage ist zu mühsam.
InformationsquelleAutor der Antwort Nick Alexeev