next_inactive up previous


7.1 Assembler niveau

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.

7.3 Assembleerproces

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:
  1. ongeordende lineaire lijst
  2. een gesorteerde lijst (sneller zoeken mogelijk)
  3. 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.

7.4 Linken en laden

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.

Over dit dokument ...

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



next_inactive up previous
Leo van Moergestel 2003-06-01