Über das Lernen von Assembler hinaus glaube ich, dass das Lernen, wie eine einfache Sprache wie C kompiliert wird, sehr wertvoll ist. Meine Antwort lautet also ja, aber andererseits bin ich wahrscheinlich voreingenommen, weil ich gerne auf niedriger Ebene programmiere.
Zum Beispiel nur verstehen, wie einfache Anweisungen kompiliert werden. Die folgende Funktion:
int func(int val)
{
int num = val * 5;
return num;
}
... wird (zumindest das interessante Stück):
movl %edi, -20(%rbp)
movl -20(%rbp), %edx
movl %edx, %eax
sall $2, %eax
addl %edx, %eax
Dieser Code nimmt das Argument aus dem Stapel (val, der Parameter zu func), verschiebt es um die linken 2 Stellen (multipliziert mit 2 ^ 2 oder 4) und addiert dann den ursprünglichen Wert zum Ergebnis. Das Endergebnis ist eine Multiplikation mit 5. Ein Beispiel wie dieses zeigt eine Reihe von Dingen, die Sie beachten sollten, z. B. Compiler-Optimierungen. Anstatt eine Anweisung zum direkten Multiplizieren mit 5 aufzurufen, werden zwei Stellen zum Multiplizieren mit 4 verschoben und dann der ursprüngliche Wert addiert. Ich habe Beispiele wie dieses gefunden, um mein Verständnis der Dinge auf einer niedrigeren Ebene erheblich zu verbessern.
Generieren Sie mit der -S
Option eine Assembler-Ausgabe von gcc . Beachten Sie jedoch, dass die Ergebnisse je nach Compiler und Optimierungsstufe variieren.
Wie auch immer, ich denke nicht, dass es dasselbe ist, Assembler-Programmierer zu sein, wie Assembler zu verstehen . Auch hier halte ich das Programmieren in einer Sprache wie C und das Wissen, wie es in Maschinencode eingefügt wird, für eine wertvolle Praxis.