Kann eine CPU direkt Assembler Code ausführen

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


Unkreatiiiev  21.05.2015, 12:53

Assembly wird nicht kompiliert. Es wird vom Assembler "assembled".

0
Frischmilch  21.05.2015, 13:39

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?!

3
newb33  27.05.2015, 14:00
@Frischmilch

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.

0
Frischmilch  30.07.2015, 13:51
@newb33

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.

1

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.

Woher ich das weiß:Berufserfahrung – Software-Entwickler

RedDevil1982  19.03.2023, 22:15

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?

0