Müssen Sie jemals echten Code in Assembler schreiben?

7

Oft höre ich Leute um mich herum, die gerne über das Schreiben in Assembler sprechen und das ist einer der Gründe, warum ich auch lernen möchte, es zu schreiben. Momentan lerne ich Assembly und C zusammen.

Also, meine Frage ist, wann müssen Sie jemals Assembly in realem Code schreiben? Ist es gut zu lernen? Gibt es irgendwelche wirklichen Anwendungen davon, wenn man Code in C schreibt?

Irgendwelche hilfreichen Kommentare oder Antworten werden geschätzt!

    
user1086635 15.12.2011, 17:44
quelle

6 Antworten

8

Trotz der Tatsache, dass das Schreiben von Code in der Montage immer seltener wurde, ist es immer noch sehr gut, Montage zu lernen, einfach um zu verstehen, wie die Dinge unter der Haube funktionieren. Moderne Optimierungscompiler von C / C ++ ermöglichen es Ihnen, Code in C zu schreiben, der in Assembleranweisungen von sehr hoher Qualität übersetzt wird und oft übertrifft, was Sie manuell schreiben könnten, um das Ergebnis weniger lesbar zu machen (z. B. durch Einfügen leerer Anweisungen zur Optimierung der Verwendung von CPU-Pipeline).

Wenn Sie einen Compiler für eine neue Architektur, eine sehr niedrige Bibliothek oder ein eingebettetes System mit strengen Ressourcenbeschränkungen schreiben, müssen Sie möglicherweise assembly verwenden. Für alles andere werden C und C ++ ebenso gut oder besser sein.

    
dasblinkenlight 15.12.2011 17:53
quelle
5

Ich wollte einen langen Beitrag schreiben, entschied mich aber stattdessen zusammenzufassen:

  1. eingebetteter Code, Bootloader, Compiler-Backends
  2. Ja, es wird Ihnen helfen, Ihren kompilierten Code zu verstehen und zu debuggen
  3. das einzige Mal, dass ich es in c verwendet habe, ist das Lesen des Echtzeituhr-Registers
Bashwork 15.12.2011 17:51
quelle
4

Es ist selten. Ich habe noch nie in 23 Jahren Karriere gemacht. Aber ich arbeite hauptsächlich im Client Server DB-Anwendungsraum, es gibt Jobs, in denen Sie viel davon verwenden oder zumindest wissen müssen, wie Prozessoren tatsächlich funktionieren.

Aber es war das erste, was ich gelernt habe, ohne grundlegende digitale Elektronik zu zählen, und ich würde sagen, dass das Lernen eine große Hilfe für meine Karriere- und Hobbyprogrammierung war.

    
Tony Hopkinson 15.12.2011 17:49
quelle
3

Die professionelle Verwendung der Assemblersprache ist in der eingebetteten Welt ziemlich üblich. Es gibt viele Anwendungen, in denen Mikrocontroller einfache, aber nützliche Dinge tun. Schauen Sie sich zum Beispiel die tinyAVR-Familie an von Mikrocontrollern von Atmel, besonders der ATtiny13 mit seinem lächerlich kleinen 1kB Programmspeicher und überhaupt keinem RAM außer den 32 8-Bit CPU-Registern. Es ist erstaunlich, was diese Chips können . Dieser Chip kostet ungefähr einen Dollar, wenn er in großen Mengen gekauft wird. Wenn Sie also eine große Menge eines Geräts herstellen, das einfache (oder auch nicht ganz einfache) Logik benötigt, überwiegen die Einsparungen bei den Hardwareproduktionskosten bei weitem den Aufwand, den Code in Assembler manuell zu erstellen, damit er auf einer extrem begrenzten Plattform funktioniert.

    
Stefan Paul Noack 16.12.2011 09:11
quelle
2

Ich hatte viele Gelegenheiten, wenn ich bei der Arbeit asm-Code schreiben musste, wo man in C entweder gar nichts tun konnte (zB Zugriff auf spezielle CPU-Register oder CPU-Systembefehle), oder kompilierter C-Code zu langsam war oder zu groß (der Compiler war nicht gut genug).

Trotzdem war der Anteil des Asm-Codes oder der Zeit, die er für das Schreiben aufgewandt hatte, ziemlich unbedeutend.

Lernen asm ist gut. Es macht Sie durch Ihren C-Code "sehen", vorhersagen, welche Anweisungen und wie viel es in, grobe Geschwindigkeit der Teile des Codes zu schätzen. Dabei lernst du eine Reihe von Optimierungen und andere Tricks und ein paar coole Algorithmen / Methoden, die du dann in deinen C-Code übertragen kannst. Sehen Sie sich die zahlreichen Fragen über C-Zeiger oder die Umwandlung von Zahlen zwischen binärer und dezimaler oder beliebiger Präzisionsarithmetik an. Das Wissen um Asm hilft bei diesen und anderen Dingen.

    
Alexey Frunze 16.12.2011 00:25
quelle
2

Ich habe es bisher zweimal im Jahr 2011 gemacht und arbeite hauptsächlich an Java-Geschäftsanwendungen. Es war praktisch, um eine schnelle setup.exe zu erstellen, um eine JRE- und App-Installation zu integrieren. Könnte in C gemacht haben, aber es ist schneller zu greifen und einen Assembler als einen Compiler einzurichten und für solch eine einfache App ist die Schreibzeit in beiden Richtungen vergleichbar ... Auch verwendet, um an einem Problem mit einem USB-Gerät zu arbeiten. Scheiterte aus unbekannten Gründen über JNA, also schrieb ich es in Assembly, um sicherzustellen, dass ich wusste, wohin und wann jedes Bit ging.

    
Brian Knoblauch 16.12.2011 15:10
quelle

Tags und Links