Wie funktionieren Computer? Literatur?

Status
Für weitere Antworten geschlossen.
Tigerass 2.0 schrieb:
Um zu verstehen, wie C++ funktioniert, musst du erstmal C verstehen.

Schmarn. Um C++ zu verstehen, mußt du C++ verstehen. Gute C-Kenntnisse sind beim Lernen von C++ sicherlich nicht schädlich, aber notwendig sind sie nicht.
 
Die theoretischen Grundlagen wirst du in den Büchern über Rechnerarchitektur finden.

Praktisch kannst du dir mal Assembler anschauen (Maschinencode brauchst nicht lesen können).
Vielleicht auch mal den Blick weg von x86 und andere Prozessoren/Architekturen ansehen, z.B. 8 Bit CPUs a 6502, Z80 oder 16/32 wie MC68000, ARM7, MIPSR3000 etc.

Da kannst du auch schön mit Emulatoren deine Programme Testen, z.B. mal was auf dem NES, GB, GBA, MS, C64, Amiga etc. programmieren. Dafür gibt’s sehr viele Tutorials und Software im Internet zu finden.

Wenn du dann noch tiefer willst, solltest du dich mit Digitaltechnik befassen. Hier kannst du zum rumprobieren eine FPGA-Board kaufen (davor aber auch ein z.B. ein VHDL Buch lesen und verstehen). Dann kannst du z.B. einen externen DRAM ansteuern oder einen VGA-Kontroller schreiben,….

Ich will aber noch anmerken, dass schon "angewandte" Assemblerprogrammierung nichts für Leute ist die nach dem ersten Fehler aufgeben oder gleich einen Thread in einen Forum aufmachen, da brauchst du schon einen gewissen Willen und Eigeninitiative und natürlich Interesse an der Sache.
 
Tigerass 2.0 schrieb:
Sorry, hast recht. Mit void kännte es Probleme geben. Geändert ;)

Code:
typedef enum { sorceror, rogue, warrior } class;

int main(void) {
    class *new = malloc(23 * sizeof(class));
    printf("Ich kannte mal en Typen, der dacht er wär ein Tiger, doch er war in Wirklichkeit nur ein geistiger Tiefflieger.\n");
    return sizeof('a');
}
 
Wie Computer funktionieren?
Mit 0 und 1. Ansonsten mit Transistoren.
ASM != Maschinecode aber sehr Hardwarenah von daher kannst du es mal mit µControllern probieren ;)

@asdf
Er meinte wohl die Syntax die sich ähnelt.
 
Phneom schrieb:
Er meinte wohl die Syntax die sich ähnelt.
Nein, er bemerkte wohl, dass er gröbsten Bullshite laberte, als er sagte, jedes C-Programm würde auch von einem C++-Compiler gefressen werden, woraufhin er diese Eselei heimlich wegeditierte. Zugeben, sich vertan zu haben und dabei etwas gelernt zu haben ist ja auch doof, wenn man einfach so tun kann, als wäre es nie passiert.
 
Tigerass 2.0 schrieb:
C++ ist die Erweiterung von C.
Allerding sollte man, wenn man C beherrscht, verstehen können, wie der Compiler z.B. C++ Klassen interpretiert. Also kann ich dir leider nicht recht geben, dass es zwei verschiedene Sprachen sind. Im Prinzip beruht C++ immer noch auf C.

Und um zu verstehen wie ein PC funktioniert (also zusammenspiel hard und Software), wird kein C++ benötigt.

Und was soll das mit Maschinencode? Wenn du willst, hindert dich nichts daran, mit nem Hexeditor zu Programmieren. Man kann durchaus sagen, dass ASM Compiler 1:1 den Code in Maschienensprache umwandeln. Auserdem tut es null zur sache, da ASM glatt an die Digitaltechnik anknüpft. Bestes Beispiel sind die leichten INC/DEC/ADD/SUB/SHR/SHL/XOR/etc. befehle.

C++ ist eine eigene Sprache und keine Erweiterung von C!
Man kann zwar wohl C Libs meist ohne größere Probleme nutzen, aber das macht es nicht zu einer Erweiterung von C.
Die Aussage ist falsch und bleibt falsch. Bjarne Stroustrupsagte selber mal das es eigentlich ein Fehler war sie C++ zu nennen, eben wegen Leute die ständig diese Aussage tätigen.
 
Auch das Verwenden von C-Bibliotheken mit C++-Programmen ist nicht völlig trivial. Und selbst das Verwenden von C++-Bibliotheken mit C++-Programmen nicht. :E
 
Also dass C++ und C große Gemeinsamkeiten besitzen lässt sich ja kaum beschreiben. Dass C nicht komplett in C++ enthalten ist sollte eigentlich auch klar sein. Was aber viel wichtiger ist ist die Frage, ob man vorher C lernen sollte und da gibt es (von meiner Seite) ein klares Nein!

Wenn man C++ lernen will sollte man C++ lernen und vielleicht hinterher etwas C dazulernen, weil man es an manchen Ecken und Enden vielleicht doch noch benötigt (C-Bibs). Aber ein sauberer C++-Stil sieht einfach nicht mehr nach C aus und deshalb kann es sein, dass man sich schlechte Angewohnheiten aneignet, wenn man sich erst auf C versteift.

Und dass Assembler keine Abstraktion ist wurde ja auch geklärt.


Das mit den 0en und 1en ist aber schon wieder Unfug. Die spielen im Computer eigentlich eine ziemlich untergeordnete Rolle. Im Stromkreis gibt es so etwas wie 0 und 1 nicht wirklich und im Digitalnetz verschwinden die auch direkt auf Hardwareebene direkt wieder. Selbst Transistoren sind mehr für das akademische Interesse als für die reale Anwendung, denn im Grunde sind sie nur dazu da logische Gatter und andere grundlegende Bauteile zusammenzubauen.
Für den Anwender die erste nutzbare Schicht sind dann schon kleine Rechenwerke, wie ein Addierer, der sich auch schon direkt mit einem ASM-Befehl nutzen lässt. Das was hier dazwischen passiert ist ja eigentlich das Interessante und dann sind wir schon wieder bei der Rechnerarchitektur gelandet. Also wo kommen hier 0en und 1en ins Spiel?

Selbst dem Argument, dass ein Bit die kleinste adressierbare Einheit darstelle, kann ich so nicht ganz zustimmen, da die kleinsten Speichereinheiten 1Byte betragen. Also mit 0en und 1en ist da nicht viel.
 
daemon777 spricht die Wahrheit.

Mir kam der Gedanke, dass das Wissen, wie ein Computer funktioniert, vielleicht gar nicht darüber vermittelt werden sollte, wie er technisch in Form von Prozessor und wasdaallesdranhängt umgesetzt ist, sondern eher damit, was es denn ist, was ein Computer eigentlich tut und was ihn fundamental von einem Taschenrechner unterscheidet, außer seiner Leistung. Meine alte Leier davon, die Werkzeuge nicht mit der eigentlichen Arbeit zu verwechseln.

Das Paper On Computable Numbers ist da das erste, was mir einfiel, aber da steht jemand, der naiv fragt, wie ein Computer funktioniert wohl wie ein Ochs vor dem Berg. Link trotzdem der Vollständigkeit halber einfach mal hier. Vielleicht ist diese Richtung trotzdem zielführender für ein Verständnis und jemand hat einen verständlichen Artikel dazu. Unter Umständen wirft mein Gehirn dazu später auch noch etwas aus. Im Moment leider aber noch nicht.
 
asdfman schrieb:
Mir kam der Gedanke, dass das Wissen, wie ein Computer funktioniert, vielleicht gar nicht darüber vermittelt werden sollte, wie er technisch in Form von Prozessor und wasdaallesdranhängt umgesetzt ist, sondern eher damit, was es denn ist, was ein Computer eigentlich tut und was ihn fundamental von einem Taschenrechner unterscheidet, außer seiner Leistung.

Das trifft der Wikipedia Artikel recht einfach:
„Ein Computer oder Rechner ist ein Gerät, das mittels programmierbarer Rechenvorschriften Daten verarbeitet.“

Turing beschreibt die theoretische Grundlage. Vielleicht sollte man hier auch Hardwarearchitekturen (siehe Von-Neumann) erwähnen, wo man wieder (bei Digitalcomputern) in die Digitaltechnik kommt, …

Ich glaub der Threadersteller sollte sich einfach ein Buch kaufen in dem Rechnerarchitektur behandelt wird. ;)
 
Der TE liest mit und möchte jetzt fragen, welches Buch mir denn empfohlen wird. Bzw. womit man selber auch mal in Berührung gekommen ist.
 
asdfman schrieb:
Tigerass 2.0 schrieb:
C++ ist die Erweiterung von C, jedes C-Programm wird auch von einem C++ Compiler gefressen.
Nein.
Ich geb Dir vollkommen recht, dass diese Aussage aus mangelhaftem Fachwissen entstanden ist, völlig falsch ist sie jedoch erstaunlicherweise nicht.

C++ wurde im Standard ISO/IEC 14882:1998 tatsächlich als
general purpose programming language based on the C programming language as described in
ISO/IEC 9899:1990
spezifiziert.

Heutzutage (C++0x, C++14) gilt das aber selbstverständlich nicht mehr.
 
Guck doch einfach, was für Bücher Andrew S. Tanenbaum so geschrieben hat. Der Mann schreibt ziemlich verständlich, ist nicht grundlos quasi Standardliteratur.
 
Ein gutes Buch wenn man auch mehr zur Hardware wissen möchte ist "Computerarchitektur" von Andrew S. Tanenbaum. Was Betriebssysteme angeht eben das von Daaron schon erwehnte "Moderne Betriebssysteme".
 
Womit fängt man am besten an? Ich besorg mir jetzt einfach "Computerarchitektur. Strukturen - Konzepte - Grundlagen". Gibt's sonst noch was zu dem Buch zu sagen, oder kann man das gut durchlesen? Gibt ja keine Übungen o. Ä. drinne, oder?
 
Das Buch gut zu lesen. Manche Sachen wird man aber auch erst richtig verstehen wenn man schon ein wenig wissen im Bereich Elektrotechnik oder Softwareentwicklung hat. Man lernt also erst nach und nah die Zusammenhänge zu verstehen. Gleiches gilt eben auch für Moderne Betriebssysteme.
 
Ich habe gehört (Amazon Kundenrezensionen lol), das Buch sei nicht sehr gut übersetzt. (Außerdem konnte ich es nicht auf deutsch als Pdf "finden ^.^) Ist die Sprache denn schwierig, wenn ich es mir auf englisch durchlese? Oder ist das im machbaren Rahmen?
 
Ich hab es nur auf deutsch deswegen kann ich dazu nichts sagen.
 
Frag dich einfach: Wie gut ist dein Englisch? Beherrschst du technisches Englisch? Bist du lernfähig? Lehrmittel sind natürlich nicht in so einer einfachen Sprache gehalten wie n Hollywood-Blockbuster....
 
Oder du hörst einfach entsprechende Vorlesungen an der nächstbesten Uni (oder besorgst dir Aufzeichnungen, die es auch überall gibt).
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben