Ist es theoretisch möglich jedes Programm in Assembler zu schreiben?
-
Also was denkt ihr?
Was heißt hier denken? Die Antwort ist ein klares technisches Ja und keine Meinungsumfrage.
Was ich aber denke ist, dass du ganz dringend lernen solltest, wie ein Computer funktioniert.
-
Wie sollte es denn nicht gehen.
Edit:
Too late..
-
Du kannst genausogut fragen ob es theoretisch möglich ist jeden beliebigen materiellen Gegenstand aus einzelnen Atomen zusammenzusetzen. Die Antwort lautet in beiden Fällen natürlich: Ja.
-
dot schrieb:
Du kannst genausogut fragen ob es theoretisch möglich ist jeden beliebigen materiellen Gegenstand aus einzelnen Atomen zusammenzusetzen. Die Antwort lautet in beiden Fällen natürlich: Ja.
Den Vergleich macht dir die Physik kaputt :p , da, anders als bei Computerprogrammen, das Verhältnis von Materie und Atomen nicht das gleiche ist wie zwischen Computerprogramm und Maschinenbefehlen. Aber das wird offtopic.[/klugscheiß]
Ein passender Vergleich wäre Eiweiße und Aminosäuren, aber das ist für die meisten Leute nicht anschaulich.
-
Es ist nicht möglich, ein Assemblerprogramm zu schreiben, dass für jedes beliebige Programm berechnet, ob es nicht hält.
-
anfängeraufgabe schrieb:
Es ist nicht möglich, ein Assemblerprogramm zu schreiben, dass für jedes beliebige Programm berechnet, ob es nicht hält.
Das war nicht die Frage.
-
Das war doch gar nicht die Frage. Für das Halteproblem existiert kein Programm, das stimmt. Das impliziert, dass das Programm also nicht existiert. Es ging aber laut Eingangspost nur um die Frage, ob existierende Programme sich in Assembler schreiben lassen.
-
@Assemblernoob: schau dir mal an, wie ein Compiler/Linker funktioniert. Aus einer Datei xyz.c wird z.B. object-code xyz.o. In den GNU Binutils findet man objdump, dass dir den Assemblercode da drinnen zeigt. Der Compiler übersetzt eine Hochsprache in Assemblercode. Das kannst Du hier nachlesen: http://www.henkessoft.de/C/C-Programming Under The Hood.htm
-
Schön schön, aber wo kommt denn der Assembler-Code her? Hat da nicht mal jemand in der Steinzeit das C++ - Assembler - Wörterbuch geschrieben? Außerdem wird doch das C-Programm direkt in Maschinensprache umgewandelt und nicht erst in lesbares Assembler. Wo ist den der für Menschen lesbare Assembler-Code? Gibts ne Library?
-
Maschinensprache ist das, was dein Computer wirklich versteht. Assembler ist nur eine Hilfskonstruktion, die zwar recht nahe an Maschinensprache dran ist, aber für Menschen besser gelesen werden kann.
(und es gibt Hilfsprogramme, die bei Bedarf den Maschinencode in Assembler übersetzen können)
-
Maschinencode lässt sich (nahezu?) 1:1 in Assembler übersetzen. Das heißt, dass du von jeder beliebigen Sprache über Maschinencode zu Assembler kommen kannst.
-
Das war nicht ganz die Antwort auf meine Frage. Ich kenne den Unterschied zwischen Maschinencode und Assembler, ich meinte eigentlich ob es Libraries in Assembler gibt und man z.B. int main(){return 0;} in Assembler umschreiben kann, so dass der Compiler sofort meine Änderungen compiled?
-
ps und wo sind diese Libraries?
-
sj schrieb:
Das war nicht ganz die Antwort auf meine Frage. Ich kenne den Unterschied zwischen Maschinencode und Assembler, ich meinte eigentlich ob es Libraries in Assembler gibt und man z.B. int main(){return 0;} in Assembler umschreiben kann, so dass der Compiler sofort meine Änderungen compiled?
Ich verstehe die Frage nicht. Dein Compiler kann C++-Code in Maschinencode oder auch direkt in Assembler übersetzen.
-
Ich meine hat nicht irgendwer die ganzen Befehle die es in C++ oder Pascal oder sonst was, irgendwann einmal in Assembler geschrieben?
-
sj schrieb:
Ich meine hat nicht irgendwer die ganzen Befehle die es in C++ oder Pascal oder sonst was, irgendwann einmal in Assembler geschrieben?
Was denkst du was ein Compiler macht?
1. Annahme: Bytecode = Assembler.
2. Annahme: Compiler bauen Bytecode.Was gibt es daran nicht zu verstehen?
Edit:
Oder noch allgemeiner:1. Bytecode = Assembler.
2. Prozessoren verstehen nur Bytecode.
3. Programme laufen über Prozessoren!
-
Der wandelt z.B. int main(){return 0;} in
00000000 <_main>:
0: 55 push ebp
1: 89 e5 mov ebp,esp
3: 83 e4 f0 and esp,0xfffffff0
6: e8 00 00 00 00 call b <_main+0xb>
b: b8 00 00 00 00 mov eax,0x0
10: c9 leave
11: c3 ret
12: 90 nop
13: 90 nop
um. Aber wer hat dem das denn beigebracht? Kann der Compiler zaubern? Und wo sind die Libs dafür? In welchen Dateien steht der original Assemblercode? Den will ich haben. Kann doch nicht so schwer zu verstehen sein.
-
sj schrieb:
Kann der Compiler zaubern?
Um die Frage ein für allemal zu klären: Ja.
Was dachtest du sonst, wie der allererste Computer programmiert wurde?
-
sj schrieb:
Aber wer hat dem das denn beigebracht? Kann der Compiler zaubern? Und wo sind die Libs dafür? In welchen Dateien steht der original Assemblercode? Den will ich haben. Kann doch nicht so schwer zu verstehen sein.
Der Compiler ist in der Lage, C++ Code zu verstehen - und im Compiler ist auch hinterlegt, was er aus den C++ Anweisungen machen soll. Sowas kann man nicht zwischen Tür und Angel erklären, dafür empfehle ich mal ein Buch zum Thema Compilerbau.
(oder du schaust dir den Compiler auch mal in Assember an :D)
-
SeppJ schrieb:
Ja.
@TE
Der erste Assembler (Compiler für Assembler) wurde in Bytecode geschrieben. Der erste Compiler einer Sprache entweder in Assembler oder in einer Sprache, für die bereits ein Compiler existierte. So baut man von unten nach oben Funktionalität aus. Verstanden?