Kurz und Knapp noch hier im Thema erklärt,
Der Rechner besteht im Grunde aus nichts anderem als Registern in die du Werte zwischenspeichern kannst und vielen vielen vielen tausenden logischen, elektronischen Schaltungen, die Werte hin und her schubsen und "bearbeiten" können. Du hast ein paar Leitungen, die Daten annehmen und evtl. ausgeben können, Leitungen, die Daten ausgeben und Leitungen, die Befehle entgegennehmen. Wohlgemerkt, ALLES elektrische Signale.
Mal angenommen wir haben einen Prozessor mit 8051 Kern.
Hier würde eine Befehlszeile so aussehen:
Dieser Assemblerbefehl schreibt in den Akku (ein 8 Bit breiter Speicherplatz im RAM) den Hex-Wert 0x27. Dieser Wäre Binär 00100111.
Der Assembler übersetzt diesen Befehl in eine Folge von Nullen und Einsen, mov a,#konstante wäre 0x74, binär 01110100. (HEX-Werte für ASM-Befehle siehe Befehlsliste 8051)
Nun liest der "Prozessor" eben im Code-Speicher Byte für Byte die Stellen aus und sieht, "Aha, hier haben wir 01110100 (mov) und danach 00100111 (wert) und legt nun an die 8 Leitungen für die Befehle den Befehl an (Leitung 0 = LOW (Masse), Leitung 1 = LOW, Leitung 2 = HIGH (Spannung), ....) und den Wert an die Leitungen für die Daten.
Die Elektronik im Prozessorkern erkennt nun, dass es der mov Befehl ist um einen Wert in den Akku zu schreiben und gibt den Wert an die Elektronik weiter, die dafür zuständig ist, den Wert in den Akku, also RAM, zu schreiben.
Das ist im Grund zwar auch eine Programmiersprache, doch eben das, was der Prozessor mehr oder weniger direkt verarbeiten kann. Da dies sehr sehr aufwendig ist und auf einem Prozessor mit zum Beispiel einem x86 Kern (unsere "normalen" PCs) dieser mov Befehl oder ein vergleichbarer Befehl einen ganz anderen Wert hat (von den Grundlegenden Unterschieden mal ganz abgesehen, wie zB. 32/64Bit statt 8Bit...) wurden höhere Programmiersprachen entwickelt.
Wie zum Beispiel C. Der C-Compiler übersetzt deinen C Code in Assemblercode und assembliert diesen dann.
Dein Tree sind zig einzelne Assemblerbefehle, mit einem Disassembler kannst du .exen und .com Dateien unter die Lupe nehmen. Bei deinem Tree wird unter anderen auf die Festplatte zugegriffen, auf dem Bildschirm was ausgegeben, berechnet, ..., ...
Das kann sehr sehr aufwendig sein und in Assembler würde sowas viel zu viel Zeit kosten und wäre teilweise auch nicht mehr möglich (nicht mehr zu überschauen) und der, in meinen Augen, größte Vorteil von höheren Programmiersprachen ist, dass man den Code zu einem Programm auch auf anderen CPUs laufen lassen kann, man muss nur den Compiler für den anderen Prozessor anpassen, wenn zB. ein Hello World Programm auf dem Prozessor A so aussehen würde "AAABBBASASDKFFJASDHWEQDJHDASDJHVBKVSDA" und auf dem Prozessor B so "AS(§"Q)("§($)§EU"§DOIHJC", kümmert den Programmierer das gar nicht, da sein Quellcode (z.B. printf("Hallo Du da\n")
vom Compiler in den Maschinencode übersetzt wird.
Ich hoffe, ich habe jetzt nichts vergessen....