Machinecode en assembly
Van machinecode naar assembly
Een instructie bestaat uit een rij bits en een programma uit een zeer groot aantal opeenvolgende instructies. Voor een computer is het geen probleem om met eindeloze rijen bits te werken, maar voor een programmeur is het echt monnikenwerk en daarmee is de kans op fouten bijzonder groot. Programmeren wordt een stuk eenvoudiger als een instructie met letters en cijfers kan worden weergegeven in een assembleertaal (assembly). In machinecode wordt elke instructie of waarde-eenheid in (bijvoorbeeld) 8 bits weergegeven: 01101101 00001001 00000011 00000100. Deze machinecode, weergegeven als een 32 bits-instructie kan in assembleertaal worden genoteerd als: ADD R9,R3,R4 (tel de inhoud van registers 3 en 4 bij elkaar op en zet het resultaat in register 9).
Om de notatie in assembleertaal te vertalen naar machinecode zodat die als rijen bits kan worden verwerkt, is een assembler nodig. Dat programma moet handmatig in machinecode (bits) worden geschreven en daarna kunnen alle andere programma’s in assembleertaal of hogere programmeertaal worden geschreven. Een assembleertaal is processorafhankelijk en werkt alleen op het type processor waarvoor deze taal geschreven is.
Assembly en hogere programmeertalen
Tegenwoordig worden de meeste programma’s ontwikkeld in hogere programmeertalen. Het voordeel daarvan is dat het programmeren eenvoudiger is en er minder kans is op fouten. Kijk maar eens naar het volgende programma. Deze spronginstructie:
LOAD R0, 1234 LOOP: ADD R0, R0, #1 CMP R0, #12 JNG LOOP
wordt in een hogere programmeertaal, zoals Java:
do { getal++; } while (getal <= 12) ;
Naast deze voordelen is een hogere programmeertaal bovendien processoronafhankelijk. Een programma dat in Java geschreven is, kan in principe voor elke machine gebruikt worden.
Assembly
Wat betekenen nou deze instructies?
LOAD R0,1234 <- Laad het (binaire) getal op adres 1234 (in het RAM) in in register R0
ADD R0, R0,#1 <- Tel het getal 1 op bij het getal in het register R0, antwoord in R0
CMP R0,#12 <- Vergelijk de inhoud van register R0 met het getal 12
JNG LOOP <- Jump Not Greater, als de inhoud van R0 niet groter is dan 12, spring dan naar het label LOOP
Interpreter en Compiler
Voor alle combinaties van processor en programmeertaal is een tolk (interpreter) of vertaler (compiler) nodig. Een interpreter zet de gebruikte programmeertaal direct om in instructies voor de CPU. Een programmeur die gebruik maakt van een compiler, schrijft een programma met behulp van een editor eerst in een programmeertaal zoals Pascal, C of C++. Daarna wordt het bronbestand door de compiler gecontroleerd en verwerkt tot machinecode. Bij het uitvoeren van het programma worden de instructies in machinecode door de CPU in de juiste volgorde verwerkt.
De compiler of interpreter is in principe het enige programma dat (deels) in een assembleertaal moet worden geschreven.
Last updated
Was this helpful?