Kann eine CPU direkt Assembler Code ausführen
Meine Frage: Kann eine CPU direkt eine Datei mit Assembler Code ausführen oder muss diese in einem bestimmten Format sein?
2 Antworten
Ich versteh die Frage nicht ganz.
Was für ein Beispiel willst du damit umsetzen?
Meinst du dass du nur 10010101101100010 in eine .exe eintippst und die dann doppelklickst und auf einmal Hello World auf dem Bildschirm steht?
Kurze Erklährung zur erstellung/ausführung eines Programms.
Programm wird in Menschenleslicher sprache erstellt.
Dann durch einen Übersetzer(Compiler) in eine für die Maschiene verständliche sprache übersetzt und dann ausgeführt. Ein Code in C z.b. wird in die Endung .Exe umgewandelt. Und die Exe wird dann vom vom PC ausgeführt (nicht nur Prozessor sondern auch RAM, Festplatte, Graka etc.).
Im nachfolgenden bin ich nicht sehr kompetent aber ich denke so oder so ähnlich dürfte es sein.
Der Prozessor nimmt nur die Elementarsten anweisung eine nach dem andern wie sie in der Exe stehen und führt sie aus sprich "gibt der restlichen Hardware" bescheid was sie machen soll.
PS: das sind immer noch viel zu viele vorgänge in einer Zeile.
Neuer Speicherbereich B in RAM Sperren.
Hol Speicherbereich A aus der Festplatte
Schicke an Speicherbereich B Im RAM)
Neuer Speicherbereich D im Ram Sperren.
Hol Speicherbereich C aus der Festplatte
Schicke an Speicherbereich D Im RAM)
Lade D und C in den Prozesorspeicher.
Öffne Prozessorspeicher
Sperre Prozessorspeicher X
Beschreib X mit: Berechne D mit C mit im exe vogegebener Formel(muss natürlich auch wieder hin und hergeladen werden).
Sperre neuen RAM Bereich V.
Schick Prozessor X an RAM V.
Gib Prozessorspeicher X wieder frei
etc. etc. etc.
Im Großen und ganzen werden Speicherbereiche für Vorgänge definiert, beschreiben, gesperrt. etc.
Such mal nach kleinstes Hello World der welt o.ä.
Z.b. https://technik.blogbasis.net/brainfuck-teil-1-11-03-2013
Oder such im Internet wie man einen Compiler Programmiert.
Bin selbst nie wirklich Tief in die Thematik gekommen aber das würd mich sehr interressieren. Hoffe ich konnte dir Helfen.
MfG
New
Das Ziel dahiner wäre eigentlich ein möglichst kleines z.B. Hello World zu machen. Also wirklich nur mit Elementarsten Befehlen.
Dazu würde ich das Hello World wohl auch nicht in Assemble schreiben sondern eher ein C# Programm schreiben, kompilieren, in Assembler Dekompiliere(ist glaub gut Möglich) und dann in Assembler nochmal abspecken und wieder Kompilieren.
Autsch.
C# ist eine .NET Sprache. Das Ergebnis nach dem compilieren ist eine MSIL-Assembly, die von einer virtuellen Maschine (.NET Laufzeitumgebung) ausgeführt wird, ist also noch sehr viel weiter von der CPU entfernt als ne normale Native WIndows *.exe. MSIL lässt sich ziemlich einfach in C# oder VB.Net oder soagr F# dekompilieren. Aber damit hast du nix gewonnen, oder? Und so mörderisch schwer ist jetzt "Hello World" mit nem x86 Assembler Code auch nicht zu schreiben. Ansonsten dürfte es für C bestimmt genügend Cross-Compiler geben die C Code in Assembler-Code übersetzen.
Wenn dich dieses Thema Reizt Newb, dann geh Informatik studieren oder mach dich über Compilerbau und theoretische Informatik schlau. Und melde dich erst danach wieder zu diesen Themen bei Wort.
Nein.
Assemblercode ist zwar sehr maschinennah und lässt sich leicht 1:1 in Maschinencode umsetzen, aber ist immer noch menschenlesbar und kann Symbole enthalten, die vom "Assembler"-Programm noch in echte Adressen (oder Vergleichbares) umgewandelt werden müssen.
Der Prozessor selbst versteht nur Maschinencode, das sind Bitsammlungen (Bytes oder Worte), die er aus dem Speicher lädt und als Befehle interpretiert. Diese Maschinenbefehle haben nichts direkt mit den Buchstabencodes des Assemblercodes zu tun; die Übersetzung erfolgt rein symbolisch.
Gibt es irgendwelche einfache Browser-Programme mit denen ich einfache Assembler-Programme ausführen kann, z. B. auf meinem Windows 11 Rechner? Wenn ja, welche?
Für die Prozessoren, die vor 40 Jahren im Hausgebrauch am verbreitetsten waren:
https://www.google.com/search?q=6502+browser+emulator
https://www.google.com/search?q=z80+browser+emulator
Aber allein damit wirst du nicht viel Freude haben, wenn du nicht ein sehr, sehr spezieller Lerntyp bist. Tutorials dürfte es genug geben, aber mit welchen du klarkommst, musst du selbst beurteilen.
Eine CPU beschreibt bei weitem nicht nur (und eigentlich überhaupt nicht) den Speicher und Speicherbereiche sperren tut eine CPU eigentlich auch nicht.
Eine CPU versteht meist einen ganz ordentlichen Satz an Befehlen. Einer davon ist "hole den Wert von Adresse XY aus dem Arbeitsspeicher in das CPU Register A". Oder "schiebe Wert aus Register B um ein Byte nach links". Oder " addiere Wert A mit Wert B nach Register C" usw. Assembler Code ist relativ nahe an diesen CPU Befehlen dran, weshalb er als Maschinennaher Code bezeichnet wird. Allerdings wird heutzutage eher selten in reinem Assemblercode gearbeitet, sondern meist kommen sogn. "Macro-Assembler" zum Einsatz, welche viele Wiederkehrende Einzehlbefehle bündeln und den Code verständlicher machen. Eine CPU kann eine Textdatei, die Assemblercode enthält nicht direkt ausführen, auch dieser Code muss erst in CPU Befehle übersetzt werden. Je nach CPU Architektur kommt dabei etwas anderes heraus. Allerdings wird man eher selten ein Programm direkt auf der CPU laufen lassen, zumindest wenn es sich dabei um PCs handelt. Dort übernimmt das Betriebssystem Elementare Aufgaben zum starten und beenden, Speicherplazreservierung etc. von Programmen, weshalb du z.B. eine Windows Exe kaum auf einem MAC oder einer Linux Kiste zum laufen bringen wirst.
Was brainfuck mit Assembler mit CPU Befehlen zu tun hat erschließt sich mir noch weniger. Brainfuck ist weder Maschinenah, noch sonst irgendwie nützlich. Es ist eine Esoterische Sprache, die außer dem Spaß keine Relevanz besitzt. Wenn du dich selber nie mit der Thematik auseinandergestzt hast, warum gibst du hier dann irgendwelche halbgaren Dinge von dir?!