Hoe werkt een programmeertaal nou precies van software naar hardware?

Dan wil ik graag alle stappen weten. Hoe word bijvoorbeeld een stuk Java/C++ code omgezet naar "computertaal"? En hoe verwerkt een computer dat vervolgens in de hardware? Als ik bijvoorbeeld een simpel "hello world" programma maak, welke stappen neemt een computer dan?

Weet jij het antwoord?

/2500

Het beste antwoord

Wanneer je programmeert in een programmeertaal als C++, dan moet je die laten 'compilen' om hem uit te voeren. Zie bron 1. Dat betekent dat op het moment van compileren, de C++ code wordt opgezet naar machinetaal. Machinetaal wordt direct gelezen door de CPU van een computer. Zie bron 2. Een ander soort taal is een scripttaal zoals PHP of Python. Deze talen worden on the fly gecompileerd wanneer het moet worden uitgevoerd. Dit wordt gedaan door een runtime, en wat je schrijft is dan een script. De runtime van PHP bijvoorbeeld is geschreven in C, hetzelfde geldt voor Python. Toegevoegd na 4 minuten: Nog even wat meer over het compilatieproces: Het compileren bestaat vooral uit het interpreteren (lezen en begrijpen) van wat jij hebt geschreven. Dit wordt vervolgens vertaald naar een tussenresultaat wat van alle verschillende bestanden 1 maakt, en van je functies 1 geheel maakt. Dit is waarschijnlijk wat je je het meeste afvraagt, zie bron 3 voor dit gedeelte van het proces.

Bronnen:
http://nl.wikipedia.org/wiki/Compiler
http://nl.wikipedia.org/wiki/Compiler#Structuur
http://nl.wikipedia.org/wiki/Machinetaal

Een computer bestaat uiteraard uit verschillende onderdelen: de processor, het geheugen (RAM en ROM) en de randapparatuur. In de ROM (Bios) staan niet vluchtige programma's, nodig voor het opstarten van de computer. Vanuit de BIOS wordt eerst gekeken naar speciaal stukje op de harde schijf om verder te kunnen opstarten. Deze programma's en gegevens worden in het vluchtige geheugen (RAM) opgeslagen en verder uitgevoerd. Zolang de computer aangesloten is op het lichtnet blijven deze gegevens in RAM bestaan. De processor heeft verschillende aansluitingen, een serie pennen voor het doorgeven van de gegevens (data-bus) en een aantal pennen om aan te geven waar de gegevens gelezen of geschreven moeten worden (adres-bus). De ROM neemt een deel van de adresruimte in, maar ook de RAM en ook de randapparatuur. Soms wordt door de processor apart aangegeven of de gegevens voor ROM, RAM of randapparatuur zijn bedoeld. Stel dat op de randapparatuur een schakelaar is aangesloten dan kan op een speciaal daarvoor gekozen adres een bit aan of uit worden gezet; de schakelaar wordt gesloten of geopend. Je hoeft als programmeur vaak niet precies te weten welke adressen worden gebruikt. In de BIOS van een computer staan die gegevens en kunnen voor verschillende merken anders zijn. Wordt er (nieuwe) apparatuur op de computer aangesloten dan moet daar vaak ook speciale driver-software voor worden geladen. Echter voor de programmeur maakt dat niet uit. Die stuurt de randapparatuur via de BIOS of via die driver-software aan. Het maakt in feite niet uit in welke programmeertaal je deze randapparatuur aanstuurt. Alle programma's worden eerst, door de processor en vertaalbibliotheken, naar de juiste voor de processor begrijpelijke code vertaald en dan uitgevoerd. Ook de processor beschikt over een aantal geheugenplaatsen, zogenaamde registers, die voor verschillende doeleinden kunnen worden gebruikt. Op processorniveau zou als voorbeeld het volgende kunnen gebeuren als we de schakelaar aan willen zetten. In dit voorbeeld heeft de schakelaar adres 1000 0000 0000 0000. Om de schakelaar aan te zetten moet naar dit adres xxxx xxx1 worden gestuurd (x is 0 of 1, maakt niet uit, slecht het laatste bit is van belang) Programma: Laadt in adres-register1: 1000 0000 0000 0000 Laadt in data-register1: 0000 0001 Stuur data-register1 => adres-register1 Om de schakelaar weer uit te zetten: Laadt in adres-register1: 1000 0000 0000 0000 Laadt in data-register1: 0000 0000 enz.

Stel zelf een vraag

Ben je op zoek naar het antwoord die ene vraag die je misschien al tijden achtervolgt?

/100