Op assemblerniveau wordt in tegenstelling tot lagere niveaus niet
geïnterpreteerd maar vertaald.
Bij vertalen onderscheiden we de brontaal en de doeltaal.
Het vertalen gebeurt door een vertaler (compiler).
Bij vertalen onderscheiden we de brontaal en de doeltaal.
Het vertalen gebeurt door een vertaler (compiler). Bij assembleertaal
staat elke statement voor een enkele instructie.
Assemblere kan gebruikt worden om de snelheid of voor volledige toegang tot de machine (bijvoorbeeld I/O-space, CPU-registers etc).
Nadeel is de lastige onderhoudbaarheid en de CPU afhankelijkheid van
assembleertaal.
Een statement in assembler is een leesbare vorm van een machineinstructie.
Daarbij is het gebruik van labels mogelijk evenals commentaar ter toelichting.
Daarnaast kennen veel assemblers een verzameling pseudoinstructies die het assembleerproces
eenvoudiger een doorzichtiger maken. Bijvoorbeeld het toekennen van
waarden aan geheugenwoorden, aanduiden welk segment van toepassing is, macro's
etc.
Assemblers werken met twee passes. Hiermee bedoelen we dat de assembler
twee keer door de broncode heengaat alvorens de doelcode wordt aangemaakt.
De belangrijkste reden hiervoor is het gebruik van voorwaartse referenties
(sprongen naar labels die nog niet bekend zijn, omdat die verderop in
de assemblertekst staan).
Bij de eerste pass worden alle refenties en symbolische namen met de bijbehorende
waarde in een symbol table opgenomen.
Drie mogelijkheden voor symbol tables zijn:
- ongeordende lineaire lijst
- een gesorteerde lijst (sneller zoeken mogelijk)
- een lijst op basis van hashing (zeer snel zoeken mogelijk)
Als pass 1 erop zit kunnen we in pass 2 met behulp van de symbol table
de object code (machine code) genereren, alsmede een assembly listing.
De bij het assembleerproces of compileerproces geleverde machinecode
is meestal nog niet compleet om uitgevoerd te worden.
Twee zaken dienen nog te gebeuren. Natuurlijk moet de machinecode
in het geheugen geladen worden. Dit doet de loader. Vaak komt hierbij
het operating system met memory managementtechnieken te hulp.
Een tweede zaak die meestal daarvoor al geregeld moet worden is het combineren
van afzonderlijk
vertaalde modules tot een geheel. Grotere programma's worden vrijwel nooit als
een stuk geprogrammeerd, maar bestaan uit afzonderlijke stukken. Het proces
dat deze afzonderlijk vertaalde stukken tot een werkend geheel combineert, heet linken.
Denk aan beschikbare bibliotheek routines die de programmeur zonder meer
kan gebruiken of aan afzonderlijke modules waaruit een programma is opgebouwd.
In window terminologie moeten we object files (extensie .obj) linken tot
een executable (.exe).
Het linken kan als laatste proces van het compileren of assembleren worden gezien.
We bouwen dan een statisch gelinkte applicatie.
Ook is het mogelijk om dynamisch te linken. In dat geval wordt het
linken uitgesteld tot het moment van uitvoeren. Hier zijn dan weer
twee mogelijkheden. Linken tijdens het laden of linken op het moment dat
erom gevraagd wordt. Bekende termen is deze context zijn de DLL-files
(dynamic link libraries) van windows en shared libraries van Unix-achtigen.
De linker heeft informatie nodig die in de object modules zelf aanwezig is.
Zo zijn er refenties naar externe symbolen en zijn de interne symbolen
beschikbaar. Een bekende foutmelding is: unresolved references (met
daarachter de referenties die niet in andere obj-files teruggevonden zijn).
In dat geval gebruikt een module een verwijzing naar een intern of extern symbool
(functie, variabele) die door de linker niet gevonden is, zodat het adres van
dit gegeven niet ingevuld kan worden. In de praktijk is dit meestal het gevolg
van een tikfout.
Samenvatting COSY2
This document was generated using the
LaTeX2HTML translator Version 2002 (1.62)
Copyright © 1993, 1994, 1995, 1996,
Nikos Drakos,
Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999,
Ross Moore,
Mathematics Department, Macquarie University, Sydney.
The command line arguments were:
latex2html -split 2 tan7.tex
The translation was initiated by Leo van Moergestel on 2003-06-01
Leo van Moergestel
2003-06-01