Het is algemeen bekend dat code wordt geschreven door een ontwikkelaar en hoe mensen communiceren met computers. Heb je er echter ooit over nagedacht hoe software zoals code interageert met computerhardware zoals een CPU (Central Processing Unit)? Als het antwoord ja is, dan bent u hier aan het juiste adres.
Om te begrijpen hoe code op een computer wordt uitgevoerd, moet u begrijpen wat een computer drijft en hoe deze kan worden gemanipuleerd. Laten we het eerst hebben over de fundamentele ideeën van computerhardware voordat we verder gaan met de softwarekant.
Wat is binair?
Binair is een basis-2-getalsysteem dat processors en geheugen gebruiken om code uit te voeren. Binaire getallen kunnen alleen 1 of 0 zijn, vandaar de naam. Als je acht binaire getallen (00000000) groepeert, krijg je wat bekend staat als een byte, terwijl een enkel binair getal (0) een bit wordt genoemd.
Hoe een eenvoudige schakelaar binaire signalen produceert
Alles wat logisch is aan computergebruik met machines begint met de simpele schakelaar. Een eenvoudige schakelaar heeft twee geleiders en een verbindings- en ontkoppelingsmechanisme. Door beide geleiders aan te sluiten, kan er stroom vloeien, die een signaal naar het andere uiteinde van de geleider produceert. Aan de andere kant, als de geleiders zijn losgekoppeld, zal de stroom niet vloeien, wat betekent dat er geen signaal zal worden geproduceerd.
Omdat een schakelaar slechts één keer aan of uit kan staan, bieden ze het ideale mechanisme om de hoge en lage signalen te maken die worden gebruikt om blokgolfsignalen te produceren.
Wanneer u een schakelaar omhaalt, produceert deze een signaal of een bit aan gegevens. Een gewone foto genomen vanaf een smartphone zou ongeveer vijf megabyte aan gegevens bevatten, wat overeenkomt met 40.000.000 bits. Dat zou betekenen dat je de schakelaar tientallen miljoenen keren moet omdraaien om genoeg gegevens te produceren voor één foto die met je smartphone is gemaakt.
Met de mechanische beperkingen van een schakelaar hadden ingenieurs iets nodig dat geen bewegende delen had en hogere schakelsnelheden bood.
Transistors gebruikt als schakelaar
Dankzij de ontdekking van doping (het manipuleren van de elektrische geleidbaarheid van halfgeleiders zoals silicium), konden ingenieurs elektrisch gestuurde schakelaars maken die bekend staan als transistors. Deze nieuwe uitvinding maakte hogere verwerkingssnelheden mogelijk waarbij weinig spanning nodig was om te voeden, waardoor het uiteindelijk mogelijk werd om meer dan een miljard van deze transistors op één enkele moderne CPU te stapelen.
Wat is CPU-architectuur?
De transistors zijn vervolgens slim gerangschikt om logische poorten, half-optellers, optellers, flip-flops, multiplexers, registers en verschillende componenten te maken die de CPU functioneel maken. De manier waarop deze componenten zijn gestapeld, definieert wat bekend staat als een CPU-architectuur.
De CPU-architectuur bepaalt ook de ISA (Instruction Set Architecture) van een processor. Een ISA bevat een ingebouwde lijst met instructies die een CPU native kan uitvoeren. Deze instructies worden vervolgens achtereenvolgens door een programmeertaal gemengd om een zogenaamd programma te maken. Gewoonlijk zijn honderden instructies direct beschikbaar op een CPU, waaronder optellen, aftrekken, verplaatsen, opslaan en laden.
Hier is een voorbeeld van een instructieset:
Elke instructie in een instructieset heeft zijn eigen binaire adres dat een opcode wordt genoemd. De opcode zijn de eerste paar binaire bits die aangeven welke bewerking uit de instructieset moet worden gebruikt.
Na de opcode volgt de operand. De operand bevat waarden en adressen waar de opcode zal worden gebruikt.
Het diagram toont een 8-bits instructie. Als een CPU een 64-bits architectuur heeft, kunnen de instructies een instructiebreedte van maximaal 64 bits beslaan, waardoor het een meer capabele processor is.
Verwant: Hoe verschillen RISC- en CISC-CPU's?
de monteur
Nu u binaire signalen begrijpt, kunt u leren hoe uw computer dergelijke signalen interpreteert. Hoe machinecode moet worden geïnterpreteerd, hangt af van het type logica dat wordt gebruikt op een assembler (een programma op laag niveau dat wordt gebruikt om code te decoderen en samen te voegen tot het juiste binaire bestand).
Als onze assembler bijvoorbeeld de ASCII-standaard (American Standard Code for Information Interchange) gebruikt, onze assembler zou de gegeven machinecode nemen en deze op dezelfde manier interpreteren als van de ASCII in de tabel onderstaand.
00101001 | EEN | 00101111 | G | 00110101 | m | 00111011 | S | 01000001 | ja |
00101010 | B | 00110000 | H | 00110110 | N | 00111100 | t | 01000010 | Z |
00101011 | C | 00110001 | I | 00110111 | 0 | 00111101 | u | ||
00101100 | D | 00110010 | J | 00111000 | P | 00111110 | V | ||
00101101 | E | 00110011 | K | 00111001 | Q | 00111111 | W | ||
00101110 | F | 00110100 | L | 00111010 | R | 0100000 | x |
Omdat onze assembler ASCII (8-bits versie) gebruikt, worden elke acht binaire getallen in het binaire getal geïnterpreteerd als één teken. De assembler zou deze byte nemen en interpreteren volgens de gegeven normen. 01000001 01101001 01010100 zou bijvoorbeeld worden vertaald in het woord 'bit'.
Assemblertaal begrijpen
Assemblagetaal is een door mensen leesbare programmeertaal op laag niveau die de opcodes en operanden van een CPU-architectuur direct manipuleert.
Hier is een voorbeeld van een eenvoudige montagecode met behulp van de eerder getoonde instructieset:
1. LODA #5
2. LODB #7
3. TOEVOEGEN R3
4. STRE M12
Dit codeblok wordt in het RAM opgeslagen totdat de CPU elke regel code één voor één ophaalt.
De cyclus voor ophalen, decoderen en uitvoeren van CPU
De CPU voert code uit via een cyclus die bekend staat als Fetch, Decode en Execute. Deze reeks laat zien hoe een CPU elke regel code verwerkt.
Ophalen: De instructieteller in de CPU neemt één instructieregel uit het RAM om de CPU te laten weten welke instructie vervolgens moet worden uitgevoerd.
Decoderen: De Assembler zal het voor mensen leesbare codeblok decoderen en het samenstellen als correct geformatteerde binaire bestanden die de computer kan begrijpen.
1. 00010101
2. 00100111
3. 00110011
4. 01011100
uitvoeren: De CPU voert vervolgens de binaire bestanden uit door de instructies die door de opcode worden aangegeven, toe te passen op de opgegeven operanden.
De computer zal uitvoeren het als volgt:
- Laad het eerste register met 5
- Laad het tweede register met 7
- 5 + 7 = 12, sla 12 op in het derde register
- Sla de waarde van het derde register op in RAM-adres M12
De computer heeft met succes twee getallen bij elkaar opgeteld en de waarde opgeslagen op het opgegeven RAM-adres.
Geweldig! Nu weet je hoe een computer code uitvoert. Daar stopt het echter niet.
Verder gaan
Met de juiste hardware, een assembler en een assembleertaal, konden mensen code met redelijk gemak uitvoeren. Omdat zowel programma's als computerhardware echter nog complexer werden, moesten ingenieurs en programmeurs: bedenk een manier om programmeren minder vervelend te maken en compatibiliteit met verschillende soorten CPU's te garanderen architectuur. Dus de creatie van compilers en interpreters.
Wat is een compiler en een tolk?
De compiler en de interpreter zijn translationele programma's die de broncode gebruiken (programma's gemaakt van programmeertalen op hoog niveau) en vertaal ze naar assembler, die de assembler vervolgens zal decoderen naar binair.
Een tolk zal één regel code nemen en deze onmiddellijk uitvoeren. Dit wordt meestal gebruikt op terminals zoals de Linux Bash Shell-terminal en de Windows PowerShell-terminal. Ideaal voor het uitvoeren van eenvoudige eenmalige taken.
In tegenstelling, een compiler zal meerdere regels code nemen en deze compileren om een programma te maken. Voorbeelden van deze programma's zijn Microsoft Word, Photoshop, Google Chrome, Safari en Steam.
Met de creatie van compilers en interpreters werden programmeertalen op hoog niveau gecreëerd.
Programmeertalen op hoog niveau
Programmeertalen op hoog niveau zijn elke taal na assemblagecode. Sommige van deze talen die u misschien kent, zijn C, Python, Java en Swift. Deze programmeertalen maakten het programmeren voor mensen leesbaarder en eenvoudiger dan de assembleertaal.
Hier is een vergelijking naast elkaar om te illustreren hoe moeilijker het is om in assemblage te programmeren dan met een programmeertaal op hoog niveau zoals Python:
Beide codes zullen "Hello World" afdrukken.
Met deze programmeertalen kunnen ontwikkelaars games, websites, applicaties en stuurprogramma's programmeren met een redelijke hoeveelheid tijd.
Verwant: Python versus Java: de beste taal voor 2022
Computers kunnen allerlei soorten code uitvoeren
Een computer is een apparaat dat alleen binair kan lezen. Deze binaire bestanden worden geproduceerd door meer dan een miljard microscopisch kleine transistors die in een CPU zijn verpakt. Transistoropstelling dicteert de ISA (Instruction Set Architecture) van een CPU, die honderden instructies biedt die een CPU gemakkelijk kan uitvoeren zodra de opcode via code wordt aangeroepen. Ontwikkelaars mixen en matchen deze instructies opeenvolgend, waardoor een heel programma ontstaat, zoals game-engines, webbrowsers, applicaties en stuurprogramma's.
Een CPU voert code uit via een reeks die bekend staat als de cyclus voor ophalen, decoderen en uitvoeren. Zodra een stuk code in RAM is geladen, haalt de CPU de inhoud één voor één op, decodeert de inhoud in binair door de assembler en voert vervolgens de code uit.
Aangezien de assembler alleen code kan vertalen die expliciet voor de CPU-architectuur is gemaakt, kunnen compilers en tolken werden bovenop de assembler gebouwd (net als een adapter) om op verschillende soorten CPU's te werken architectuur. Een tolk neemt één commando en voert het onmiddellijk uit. Een compiler daarentegen zal al je commando's nemen en ze compileren tot een herbruikbaar programma.
Programmeertalen op hoog niveau, zoals Python, C en Java, zijn gemaakt om het programmeren gemakkelijker, sneller en gemakkelijker te maken. De grote meerderheid van programmeurs hoeft niet langer in assembler te coderen, omdat hun gebruiksvriendelijke programmeertalen op hoog niveau via een compiler naar de assemblage kunnen worden vertaald.
Hopelijk heb je nu een beter begrip van de basisprincipes van computers en hoe ze code uitvoeren.
Het is een simpele vraag, maar wel een waar iedereen wel eens over nadenkt: hoe werkt die computer voor je eigenlijk?
Lees volgende
- Technologie uitgelegd
- Programmeren
- Computerprocessor
- Verwerken
Jayric Maning wilde graag weten hoe dingen werkten en begon in zijn vroege tienerjaren te sleutelen aan allerlei elektronische en analoge apparaten. Hij begon forensische wetenschap aan de Universiteit van Baguio, waar hij kennismaakte met computerforensisch onderzoek en cyberbeveiliging. Hij doet momenteel veel zelfstudie en knutselt met tech om uit te zoeken hoe ze werken en hoe we ze kunnen gebruiken om het leven gemakkelijker (of in ieder geval cooler!) te maken.
Abonneer op onze nieuwsbrief
Word lid van onze nieuwsbrief voor technische tips, recensies, gratis e-boeken en exclusieve deals!
Klik hier om je te abonneren