Dictaat Computerorganisatie in 1005

Maat: px
Weergave met pagina beginnen:

Download "Dictaat Computerorganisatie in 1005"

Transcriptie

1 Dictaat Computerorganisatie in 1005 zesde editie Technische Universiteit Delft Faculteit Informatietechnologie en Systemen januari 2000

2 i Ten Geleide Het vak Computerorganisatie (vakcode in1005) heeft tot doel het verschaffen van kennis en begrip van de architectuur en organisatie van computersystemen, zowel wat betreft de apparatuur als de programmatuur. Het wordt gedoceerd aan de hand het voorliggende collegedictaat en het boek [H] V.C. Hamacher, Z.G. Vranesic, en S.G. Zaky, Computer Organization, vierde editie, 1996, McGraw-Hill. De tekst van dit dictaat is grotendeels gebaseerd op eerdere edities van het dictaat van het vak Computerstructuren 1, waaraan W.G. van den Berg, W.F. Bronsvoort, D.H.J. Epema, A.A.C.M. Kalker, R.B. Koolhaas, F.L. Muller, P.R. van Nieuwenhuizen, en F. Ververs hebben bijgedragen. Het uitgangspunt bij het college is het boek [H]. Het collegedictaat bevat alleen aanvullend materiaal, verduidelijkingen, en commentaar op het boek. In dit collegedictaat is de hoofdstukindeling van [H] met de nodige vrijheid gebruikt, hetgeen het wat vreemde gevolg heeft dat het overigens Nederlandstalige dictaat Engelse titels voor hoofdstukken en paragrafen bevat. Ook binnen de hoofdstukken is de sectie-indeling van het boek gebruikt. In sommige gevallen bevatten de hoofdstukken in het dictaat paragrafen die geen analogon hebben in het boek; in dat geval zijn ze gewoon doorgenummerd na het laatste paragraafnummer van het boek. Evenzo zijn de laatste twee hoofdstukken in het dictaat doorgenummerd na het laatste hoofdstuk in het boek. Bij bestudering van het vak wordt aangeraden altijd eerst het boek te lezen en daarna de betreffende hoofdstukken en paragrafen van het collegedictaat. Bij dit vak behoort een practicum assemblerprogrammering in de assemblertaal van de PowerPC, die als voorbeeld dient bij dit college. Ihor Kuz, Delft, januari 2000.

3 ii

4 Contents 1 Basic Structure of Computer Hardware and Software Functional Units Addressing Methods and Machine Program Sequencing Instructions and Instruction Sequencing Assembly Language Assembler Commands Assembly and Execution of Programs Stacks and Queues Subroutines Voorbeelden van Programma s voor de PowerPC More on Subroutines Voorbeelden van Programma s voor de PowerPC met Subroutines Expanding Opcodes Linking and Loading Compile, Load and Go De Absolute Loader De Relocating Loader Linken, Libraries en de Linking Loader De Linkage Editor Overlays Relocatie via Virtuele Adressering Het Tijdstip van Binding De Dynamische Linker Macro s Macro-definitie, -Aanroep en -Expansie Macro s met Parameters Conditionele Macro-expansie Geneste Macro-aanroepen De Implementatie van een Macro-faciliteit Arithmetic (and Data Representation) Number Representations De Binaire Representatie De -Tallige Representatie iii

5 iv CONTENTS Conversies De Sign Magnitude Representatie De Two s-complement Representatie De One s-complement Representatie De Excess- Representatie Teken-extensie en -reductie Binary Coded Decimal Beslisvariabelen Karakters Pointers Arrays Records Gelinkte Lijsten Large Computer Systems Interconnection Networks Multistage Networks Hypercube Networks Mesh Networks Ring Networks Vectorcomputers en Dataflow Vectorcomputers Dataflow Dataflow-grafen Executie Implementatie Taalniveaus Programmatransformaties Soorten Vertalers Soorten Interpretatoren Vergelijking van Interpreteren en Compileren Simuleren en Emuleren Compatibiliteit Taalniveaus De Structuur van Compilers Lexicografische Analyse Syntactische Analyse Tussencode-generatie Code-optimalisatie Code-generatie Het Beheer van Tabellen en Foutafhandeling E Programmastructuurdiagrammen 115

6 CONTENTS v F Overzicht Tentamenstof 119

7 vi CONTENTS

8 Chapter 1 Basic Structure of Computer Hardware and Software In [H] wordt onder computer-architectuur en computer-organisatie min of meer hetzelfde verstaan. Wij zullen wel een onderscheid maken, aan de hand van de volgende omschrijvingen: Onder computer-architectuur wordt verstaan de verzameling van faciliteiten die aan de programmeur op het niveau van de machine-taal (of op het niveau van de assemblertaal, wat in wezen hetzelfde is) ter beschikking staan. De machine-taal van een computer is de primitieve, in nullen en enen genoteerde taal die direct door de computer begrepen wordt. De assemblertaal is een symbolische notatie voor de machine-taal. Deze twee talen komen in Hoofdstuk 2 aan de orde. Computer-architectuur valt uiteen in twee belangrijke onderdelen: Gegevens-representatie, d.w.z. de typen van gegevens die gebruikt kunnen worden, en de manier waarop die in een computer worden opgeslagen. Gegevensrepresentatie is het onderwerp van Hoofdstuk 6. De operaties die op de gegevens kunnen worden uitgevoerd en de wijze waarin de volgorde van die operaties beïnvloed kan worden. Operaties worden behandeld in Hoofdstuk 2. Onder computer-organisatie verstaan we de structuur en de wijze van koppeling van de componenten van een computer. Op dit moment zullen deze begrippen bepaald nog niet volledig duidelijk zijn. Op diverse plaatsen in dit dictaat zullen we op deze begrippen terugkomen, en van allerlei concepten vermelden tot welk van deze twee categorieën ze behoren. 1.1 Functional Units Bits De elementaire, minimale hoeveelheid informatie is een twee-keuze, opgeslagen in een variabele met twee mogelijke waarden. Twee belangrijke interpretaties van zo n variabele zijn: 1

9 2 CHAPTER 1. BASIC STRUCTURE OF COMPUTER HARDWARE AND SOFTWARE decimaal binair decimaal binair Table 1.1: Het binaire talstelsel. 1. Als een cijfer in het tweetallige of binaire stelsel, oftewel als bit (binary digit, d.w.z. tweetallig cijfer). Het grondtal van het binaire stelsel is 2, en de twee mogelijkheden voor een tweetallig cijfer zijn uiteraard 0 en 1; 2. Als een waarheidswaarde, waarbij de mogelijke waarden true en false zijn, vaak ook weergegeven met 0 resp. 1. Hoewel het woord bit letterlijk in feite alleen de tweetallige interpretatie toestaat, wordt i.h.a. de minimale eenheid van informatie in een computer een bit genoemd, wat ook de interpretatie is. Door een groep bits te zamen te beschouwen heeft men uiteraard de mogelijkheid om een groter aantal waarden te onderscheiden. Een groep van vier bits b.v., die ieder twee waarden kunnen aannemen, kan als geheel beschouwd in toestanden verkeren. In Tabel 1.1 wordt dit geïllustreerd. De achtereenvolgende combinaties van bitwaarden die corresponderen met de decimale aanduidingen 0 tot en met 15 zijn niet willekeurig gekozen: de bit-groepen zijn neergeschreven in oplopende volgorde als getallen in het tweetallige of binaire talstelsel. In de digitale elektronische schakelingen waaruit computers zijn opgebouwd, wordt gewerkt met slechts twee onderscheidbare waarden van de signalen, bijvoorbeeld 0 Volt en 5 Volt, waarvan de één een bit met waarde 0 en de ander een bit met waarde 1 vertegenwoordigt. Het Stored-Program Concept Als voorlopers van hedendaagse computers bestonden er digitale schakelingen waarvan de besturing vastlag (d.w.z. onwijzigbaar, in de hardware), en waarbij alleen de toegevoerde gegevens iedere keer verschillend konden zijn. Het was een grote stap voorwaarts toen ook de besturing van zulke schakelingen wijzigbaar werd uitgevoerd, d.w.z. toen in het (hoofd-) geheugen (Engels: (main) memory) niet alleen gegevens konden worden geplaatst, maar ook het programma dat door de hardware kon worden uitgevoerd. Dit concept, het opslaan van een programma in een geheugen te zamen met de data, wordt het stored-program concept genoemd. Zo n programma is een lijst van binaire getallen die ieder voor zich een bepaalde door de CPU uit te voeren bewerking specificeren. Het programma (de lijst van in het geheugen opgeslagen CPU-instructies) bepaalt het totale verloop van het proces. De grote kracht van dit stored-program concept is, dat de besturing oftewel

10 1.1. FUNCTIONAL UNITS 3 het programma eenvoudig gewijzigd of aangepast kan worden, zonder de hardware-structuur van het systeem aan te tasten. Vragen 1. Wat zijn de drie belangrijkste onderdelen van een conventionele CPU, en wat is hun functie? 2. Hoe communiceert een CPU met het hoofdgeheugen? 3. Wat zijn registers en waarvoor dienen zij? Noem een tweetal speciale registers. Wat is hun functie? 4. Wat wordt verstaan onder het stored-program concept? Zie ook de vragen bij Hoofdstuk 1 in [H].

11 4 CHAPTER 1. BASIC STRUCTURE OF COMPUTER HARDWARE AND SOFTWARE

12 Chapter 2 Addressing Methods and Machine Program Sequencing Part I BASIC CONCEPTS 2.3 Instructions and Instruction Sequencing Onder de architectuur van een computer verstaat men het (zich op een bepaald niveau van abstractie manifesterende) stelsel van voorzieningen en eigenschappen, dat de gebruiker kan benutten bij het formuleren van zijn programma. Op het niveau van machinecode hebben we te maken met De registers van de CPU; De woorden in het geheugen; De instructies waarmee we specificeren welke bewerkingen de CPU op bepaalde data moet uitvoeren. Zoals al in Hoofdstuk 1 opgemerkt moet computer-architectuur zoals hierboven omschreven onderscheiden worden van computer-organisatie. Onder het laatste wordt verstaan de structuur van de componenten en de wijze waarop deze gekoppeld zijn en onderling samenwerken. Dit is veelal maar niet altijd onzichtbaar voor de programmeur. In Hoofdstuk 1 hebben we ook al vermeld dat computerarchitectuur uiteenvalt in twee delen: de representatie van gegevens en de operaties op gegevens. In dit hoofdstuk behandelen we het tweede deel: de soorten operaties die op de data kunnen worden uitgevoerd, de wijze van specificatie van de operanden van de operaties, en de wijze van specificatie van de volgorde van de operaties. Er zijn verscheidene manieren om architecturen onder te verdelen. Eén manier is aan de hand van de wijze van specificatie van de operanden, met name het aantal dat expliciet in instructies moet worden gespecificeerd, dan wel het aantal dat impliciet is. In de hieronder genoemde twee typen architecturen worden één resp. twee of meer operanden expliciet in de instructies gespecificeerd. In 2.7 zullen we een type computerarchitectuur zien waarin nul operanden expliciet worden gespecificeerd, en dus alle operanden impliciet zijn (stack-architecturen). 5

13 6 CHAPTER 2. ADDRESSING METHODS AND MACHINE PROGRAM SEQUENCING Enkelvoudige-register Architectuur In een enkelvoudige-register architectuur bevat de CPU één enkel register voor databewerkingen, dat vaak de accumulator (of kortweg de accu) wordt genoemd. Om deze reden wordt dit soort architectuur ook wel accumulator-architectuur genoemd. We behandelen dit soort architectuur aan de hand van een voorbeeld dat erg dicht ligt bij de oorspronkelijk door J. von Neumann (aan wie het stored-program concept, vermoedelijk abusievelijk, wordt toegeschreven) in 1945 voorgestelde architectuur. In Figuur 2.1 wordt de structuur van de instructies en van de accu gegeven. De accu heeft een tekenbit om het teken van het getal dat hij bevat weer te geven. Een instructie bevat een 4-bits operatie-code (opcode) die de bewerking specificeert, en het 12-bits hoofdgeheugenadres van het geheugenwoord dat bij de bewerking betrokken is (de operand). Gezien de adresseringscapaciteit van 12 bits is het hoofdgeheugen beperkt tot 4096 woorden. In Tabel 2.1 staat de instructie set. Hierin wordt met mem[m] de inhoud aangegeven van de geheugenlocatie met adres m. Merk op dat aldoor de accu één der operanden is. Omdat hij niet in de instructies gespecificeerd is, wordt hij een impliciete operand genoemd. De aangegeven instructies zijn van het soort dat bewerkingen op data uitvoert, plus het soort dat de afwikkeling van het programma beïnvloedt, mede op grond van de resultaten van uitgevoerde bewerkingen. instructie: accu: 4 bits opcode 15 0 tekenbit 12 bits m operand Figure 2.1: Format van de instructies en de accu bij de accumulator-architectuur. Meervoudige-Register Architectuur Een iets gecompliceerdere architectuur, waarin de programmeur een aantal registers ter beschikking staat, is de meervoudige-register architectuur. De PowerPC architectuur en de meeste hedendaagse computers behoren tot dit type. Het aantal registers ligt meestal tussen de acht en 32. Instructies moeten nu ook de te gebruiken registers aanduiden. Bij bepaalde computers zijn al deze registers qua eigenschappen (b.v. aantal bits) en gebruiksmogelijkheden identiek, terwijl bij andere de functies van de registers onderling verschillend zijn. 2.5 Assembly Language Assembler Commands Een assemblerprogramma bestaat uit een rij assembler-statements. Een assembler-statement is een instructie of een pseudo-instructie (ook wel directief, of, in [H], assembler command genoemd). Een pseudo-instructie is een aanwijzing voor de vertaling van het programma naar machinecode, en

14 2.5. ASSEMBLY LANGUAGE 7 numerieke symbolische betekenis opcode opcode 0100 LOAD accu mem[m] 0101 STORE mem[m] accu 0110 ADD accu accu mem[m] 0111 SUB accu accu mem[m] 1000 MUL accu accu mem[m] 1001 DIV accu accu mem[m] 1010 AND accu accu & mem[m] 1001 OR accu accu or mem[m] 0000 JUMP goto m 0001 JSR CALL SUBROUTINE at m 0010 RTS RETURN FROM SUBROUTINE 1100 JZ goto m if accu JNZ goto m if accu JP goto m if accu JN goto m if accu 0 Table 2.1: Operaties van een computer met een enkelvoudige-register of accumulator-architectuur (alle operaties behalve RTS hebben één operand). wordt dus niet uitgevoerd tijdens de executie van het programma. Een voorbeeld is een aanwijzing om voor een bepaalde variabele één of meer geheugenlocaties te reserveren. Instructies en pseudoinstructies bestaan uit de volgende vier delen: 1. Het labeldeel, dat een label bevat of leeg is; indien het een label bevat, dan wordt dat label geassocieerd met de geheugenlocatie van datgene wat erachter staat (een instructie of een variabele). Een label wordt voor een instructie gezet om er naar toe te kunnen springen vanuit andere instructies. Voor pseudo-instructies wordt een label gezet om gereserveerde variabelen met een symbolische naam (het label) te kunnen adresseren. 2. Het operatiedeel van een instructie bevat een symbolische operatiecode, b.v. ADD. Bij een pseudo-instructie staat er een code voor de aanwijzing. 3. Het operanden-deel van een instructie bevat nul, één, of meer aanduidingen voor de operanden van de instructie. Het aantal operanden wordt bepaald door de structuur (Engels: format) van de betreffende instructie. Een, twee of drie operanden zijn gebruikelijk. Bij een pseudoinstructie hangt de inhoud van dit deel van het type pseudo-instructie af. 4. Commentaar wordt opgenomen om een toelichting op de instructie, de pseudo-instructie of het programma in het algemeen te geven. Hoewel assemblerprogramma s veel duidelijker zijn dan machinecodeprogramma s, zijn ze in vergelijking met programma s geschreven in hogere programmeertalen nog steeds moeilijk te begrijpen, doordat assembler-instructies veel meer aansluiten bij de machine dan bij de op te lossen problemen. Vandaar dat het

15 8 CHAPTER 2. ADDRESSING METHODS AND MACHINE PROGRAM SEQUENCING verstandig is zinvol commentaar bij programma s op te nemen, om op die manier de leesbaarheid te vergroten en het aanbrengen van veranderingen te vergemakkelijken Assembly and Execution of Programs Aangezien een computer machine-instructies en geen assembler-instructies uitvoert, zal er, wanneer we in assemblercode programmeren, een omzetting van assemblercode naar machinecode plaats moeten vinden. Deze omzetting kan in principe door de programmeur zelf gedaan worden, maar is ook automatisch te doen, d.w.z. met een programma. Een assembler is een programma dat programma s geschreven in assemblercode omzet in programma s in machinecode. Aangezien elke assembler-instructie overeenkomt met een machine-instructie, is deze omzetting niet ingewikkeld, hoewel er wel verbanden bestaan tussen de instructies onderling, zoals in het geval van een sprong naar een andere instructie. Omzetting van programma s geschreven in een hogere programmeertaal naar programma s in machinecode, wat gedaan wordt door programma s die men compilers noemt, is een veel ingewikkelder proces, doordat hogere programmeertalen onafhankelijk van specifieke machinetypen gedefinieerd zijn, terwijl assemblertalen juist aansluiten bij een bepaald machinetype. Zowel bij assemblers als bij compilers wordt het programma dat omgezet wordt het bronprogramma (Engels: source program) en het resultaat van de omzetting het objectprogramma (Engels: object program) genoemd. Ook wordt wel gesproken over brontaal (Engels: source language) en doeltaal (Engels: target language) voor de respectievelijke talen waarin de programma s zijn en worden uitgedrukt. Het uitvoeren van een programma geschreven in assemblercode of een hogere programmeertaal geschiedt in twee stappen: 1. Het omzetten van het bronprogramma m.b.v. een assembler of vertaler in machinecode; 2. Het uitvoeren van het aldus gecreëerde objectprogramma. Een assembler zet een programma geschreven in assemblertaal om in machinecode. De beschrijving van de assemblertaal ligt vast in het z.g. assembler reference manual. Hierin staat, in tegenstelling tot het definiërend rapport van een hogere programmeertaal, meestal geen duidelijke syntax-beschrijving in BNF-notatie. Syntax en semantiek worden in het reference manual meestal in natuurlijke taal beschreven. De voornaamste taken van een assembler zijn het controleren of er een correct assemblerprogramma wordt aangeboden en het genereren van de bijbehorende machinecode. Daarnaast kunnen allerlei faciliteiten in de assemblertaal zijn opgenomen die het de assemblerprogrammeur gemakkelijker maken, zoals mogelijkheden voor het gebruik van literals, van macro s, etc. De verwerking van deze faciliteiten behoort ook tot de taken van een assembler. Ook kunnen d.m.v. pseudo-instructies aanwijzingen worden gegeven over de plaats van en de soort van te genereren machinecode, over de layout van de listing, en ook over het feit onder welke omstandigheden delen van een assemblerprogramma moeten worden vertaald, de z.g. conditional assembly. Alvorens nader in te gaan op de structuur van assemblers, zullen we eerst nog een paar begrippen die hiervoor genoemd zijn nader beschrijven.

16 2.5. ASSEMBLY LANGUAGE 9 Literals Literals zijn constanten waarvoor de assembler automatisch geheugenruimte reserveert in het geval de computer op het conventionele-machine niveau niet over de mogelijkheid van onmiddelijke adressering beschikt terwijl dat op het assemblerniveau wel door de programmeur kan worden gespecificeerd. De programmeur behoeft deze naam niet te declareren. Tegenwoordig wordt aanbevolen om elke constante expliciet een duidelijke naam te geven. Dit maakt het programma beter leesbaar en beter onderhoudbaar. Voorbeeld ADDI R3,0,1 is gelijk aan (d.w.z. er wordt dezelfde machinecode gegenereerd als voor): EEN:.equ 1. ADDI R3,0,EEN Conditional Assembly Door middel van parameters is het mogelijk om te genereren machine-code aan te passen aan verschillende situaties. Zo kan men b.v. een algemeen programma voor verschillende typen CPUs geschreven hebben met speciale delen code die alleen voor een bepaald type nodig of geschikt is. Een andere situatie waarin dit handig is, is wanneer delen van het assemblerprogramma in bepaalde situaties niet nodig zijn. In het te assembleren programma moeten dan pseudo-instructies worden opgenomen die aangeven wanneer een deel van de code wel/niet geassembleerd moet worden. Afhankelijk van de (b.v. op de commando-regel) meegegeven parameterwaarde vindt al dan niet assembly plaats. De pseudo-instructies kunnen er uit zien als: en Voorbeeld.IFDEF a.ifnotdef a.ifpos a.ifneg a.ifzer a.endif #assembleren als a gedefinieerd is #assembleren als a niet gedefinieerd is #assembleren als a positief is #assembleren als a negatief is #assembleren als a nul is #einde van de conditionele code.ifdef a... #te assembleren als a gedefinieerd is.endif....ifzer a... #te assembleren als a gelijk aan 0 is.endif

17 10 CHAPTER 2. ADDRESSING METHODS AND MACHINE PROGRAM SEQUENCING Functies van Assemblers Een te assembleren programma-module bevat drie soorten grootheden, te weten 1. Absolute, zoals operatiecodes, numerieke en stringconstanten, vaste adressen. De waarden van deze grootheden zijn onafhankelijk van de geheugenlocaties waar het programma uiteindelijk terecht zal komen. 2. Relatieve, zoals adressen van instructies en adressen van data die relatief zijn ten opzichte van het begin van een module. 3. Extern gedefinieerde, d.w.z. grootheden die in een module wel gebruikt maar niet gedefinieerd worden (zie 2.29). De functies van een assembler zijn: 1. Lexicografische en syntactische analyse (altijd). Onder lexicografische analyse wordt verstaan het karakter voor karakter inlezen van een programma en het groeperen van bij elkaar horende karakters (zoals de karakters van een label, een opcode); labels, symbolische adressen, operatiecodes, en constanten moeten worden herkend. Daarna moet de syntax van een assemblerinstructie worden gecontroleerd. 2. Vervangen van symbolische namen en operatiecodes (altijd). Met behulp van de aanwezige operatiecode-tabel en de reeds opgebouwde naamlijst (zie hieronder) worden symbolische namen en operatiecodes omgezet in numerieke codes. 3. Vertalen van constanten naar machine-representatie (altijd). De assemblerprogrammeur kan numerieke constanten meestal op een aantal manieren weergeven: decimaal, oktaal, hexadecimaal, floating point, fixed point. Deze representaties moeten worden geconverteerd naar de machine-representatie. Ook stringconstanten moeten worden omgezet in een machinerepresentatie. 4. Verwerken van literals (alleen nodig bij sommige doelmachines). Er wordt een lijst van literals bijgehouden (de literal pool), eventueel zodanig dat elke literal slechts eenmaal voorkomt. Deze literal pool wordt aan het einde van het programma toegevoegd. 5. Foutencontrole en -afhandeling (altijd). Een assembler moet in een enkele vertaalslag zoveel mogelijk fouten detecteren en afhandelen. Een assembler die reeds na de eerste fout stopt is ontoelaatbaar. Als een fout wordt gevonden, moet deze geregistreerd worden, zodat in de (eventuele) listing kan worden aangegeven waar de fout optrad en welke fout het was. Veel gemaakte fouten zijn: ongedefinieerde namen, dubbel gedefinieerde namen, niet-bestaande operatiecodes, onjuist aantal operanden. 6. Verzorgen van een listing (naar wens van de gebruiker). De programmeur moet, indien hij dit wenst, een afdruk van zijn programma met daarnaast de code die gegenereerd is kunnen krijgen. Tevens zal vaak een cross-reference table, d.w.z. een tabel met voor iedere door de programmeur geïntroduceerde naam een lijst met de locaties waar die naam is gebruikt, gewenst zijn om het debuggen te vereenvoudigen.

18 2.5. ASSEMBLY LANGUAGE Verwerken van pseudo-instructies (altijd). Behalve instructies die omgezet moeten worden in code, bevat een programma meestal ook pseudo-instructies die verwerkt moeten worden. Voorbeelden hiervan zijn: conditionele assembleer-aanwijzingen, aanwijzingen voor het reserveren van geheugen, einde-programma aanwijzing, etc. Datastructuren in Assemblers In een assembler worden de volgende drie datastructuren gebruikt: 1. De naamlijst (Engels: symbol table); 2. De opcode-tabel; 3. De Instruction Location Counter (ILC). We zullen deze datastructuren bespreken aan de hand van het volgende stukje PowerPC assemblerprogramma: label opcode operanden lengte instructie ILC (in bytes) (oktaal) ADDI R4,0, ADDI R3,0, L1: ADDI R4,R4, ADDI R4,R4,A ADDIC. R3,R3, BNE L LHZ R6,2(R4) De assembler bouwt gedurende het doorlezen van een programma een naamlijst op met voor iedere door de programmeur gebruikte naam (in het voorbeeld A en L1) een entry, die tenminste die naam en de waarde bevat. Voor een variabele (zoals A) is dat het adres van de variabele, voor een label (zoals L1) het adres van de instructie waar het label voor staat. Om een assembler-instructie te kunnen vertalen in de bijbehorende machine-instructie heeft de assembler de z.g. opcode-tabel nodig. Die bevat van iedere assembler-mnemonic (minstens) één entry met informatie over de bijbehorende machine-instructie, zoals de (binaire) opcode, het aantal en de typen van de operanden, en de lengte. In het geval die zaken niet alleen van de mnemonic afhangen maar b.v. ook van de typen operanden kunnen er meerdere entries per mnemonic zijn. Als een assembler-programma wordt vertaald, wordt veelal verondersteld dat het resulterende machine-programma voor executie op een vast adres, b.v. 100 (oktaal) zal worden geladen. Na het analyseren van de eerste instructie weet de assembler dan op welke plaats de tweede instructie zal komen. Zo verder gaande weet de assembler voor het analyseren van iedere instructie op welke plaats die komt te staan. Deze waarde wordt de Instruction Location Counter genoemd. Bij het analyseren van de instructie ADDI R4,R4,1 vindt de assembler als waarde van L1 154, hetgeen in de symbol table wordt ingevuld.

19 12 CHAPTER 2. ADDRESSING METHODS AND MACHINE PROGRAM SEQUENCING Two-pass Assemblers Om symbolische namen zoals labels door hun waarde te vervangen moet een assembler die waarde wel weten. Indien een assembler een assemblerprogramma sequentieel doorleest, zal, als hij een instructie tegenkomt waarin een label gebruikt wordt (b.v. in een spronginstructie) dat pas later in het programma voorkomt, niet bekend zijn welke waarde moet worden gebruikt. Dit wordt het forward referencing problem genoemd. De meest voor de hand liggende oplossing, die in veel assemblers is gekozen, is om een assemblerprogramma twee keer door te lezen. Zo n assembler bestaat dan uit twee doorgangen (Engels: passes), en wordt een two-pass assembler genoemd. In pass 1 van een two-pass assembler worden in het algemeen uitgevoerd: 1. Scanning van de invoertekst, d.w.z. er vindt een lexicografische en syntactische analyse plaats; 2. Bepalen van instructielengte en -format; 3. Opbouwen van de naamlijst; 4. Vastleggen van fouten voor een eventuele listing; 5. Opbouwen van een literal pool, zodat dubbele literals geëlimineerd kunnen worden. In pass 2 worden uitgevoerd: 1. Het definitief invullen van de waarden van labels en de adressen van operanden en literals; 2. Het genereren van de objectcode; 3. Het verzorgen van een listing. De uitvoer van pass 2 bestaat uit de objectcode en de extra informatie die nodig is voor de linker en de loader om losse modulen aan elkaar te koppelen en het programma op een willekeurige plaats in het hoofdgeheugen te kunnen laden (relocatie tabel, externe-referentie tabel en entrypoint tabel, zie 2.29). Bij het assembleren spelen naast de al eerder genoemde datastructuren de files voor pass 1, pass 2, de brontekst, eventuele tussencode, de doeltekst, en de listing een rol. De grootste verschillen in organisatie van two-pass assemblers worden bepaald door de keuze van de datastructuren. One-pass Assemblers Het grote probleem dat bij assemblers met één pass moet worden opgelost, is het forward referencing problem. Door het opleggen van restricties, het gebruik van ingewikkeldere datastructuren in de assembler, en/of het overlaten van een deel van het werk aan loaders (zie 2.29), is het mogelijk verschillende typen one-pass assemblers te construeren, zoals de one-pass load-and-go assembler en de one-pass module assembler.

20 2.5. ASSEMBLY LANGUAGE 13 One-pass Load-and-go Assembler De eenvoudigste assembler is de load-and-go assembler. Deze produceert een machinecodeprogramma in het hoofdgeheugen, klaar om uitgevoerd te worden. Het uitvoeren geschiedt direct na het assembleren zonder tussenkomst van de gebruiker: de assembler springt naar het begin van het geassembleerde programma als ware het een subroutine. Het resulterende programma neemt geheugenlocaties in beslag waarvan de adressen vast liggen ten tijde van het assembleren en die later niet meer gewijzigd kunnen worden. Het geassembleerde programma kan bibliotheekroutines aanroepen, vooropgesteld dat deze routines andere locaties bezetten dan die welke door het programma in beslag worden genomen. Load-and-go-assemblers zijn niet geschikt voor modulaire programma-ontwikkeling, waarbij men in staat moet zijn parallel programmacomponenten te ontwerpen, te coderen en te testen. Bovendien moeten programma s die vaker gebruikt worden elke keer opnieuw worden geassembleerd. Bij deze wijze van assembleren gelden de volgende restricties: 1. Het programma draait in een vast gebied van het geheugen. 2. Het programma kan niet samengevoegd worden met andere, apart vertaalde modulen. 3. Er moet voldoende hoofdgeheugen zijn om zowel de assembler als de te genereren machinecode op te slaan. Load-and-go assemblers zijn bijzonder geschikt voor programma s die klein zijn en frequent gewijzigd worden. Het probleem van de voorwaartse referenties kan worden opgelost door in de objectcode per symbolische naam een keten van verwijzingen op te nemen naar de locaties waar de uiteindelijke waarde, zodra die bekend geworden is, moet worden ingevuld. In de naamlijst staan de naam en een pointer naar de plaats waar de laatst verwerkte instructie staat waarin die naam voorkwam. In de voorlopige vertaling van iedere instructie waarin de naam voorkomt staat het adres van de vorige (voorlopige) machine-instructie behorend bij een assembler-instructie waarin de naam ook voorkomt. In de eerste instructie waarin de naam voorkomt, staat een onmogelijk adres (b.v. 0000, als dat adres niet gebruikt wordt). Voorbeeld Hieronder staat een klein programma voor een eenvoudige machine. locatie assemblerinstructie geassembleerd programma opcode/adres 100 LDA END TST RES LDA END JNZ NFOUND LDA RES RES: NFOUND: END:..

21 14 CHAPTER 2. ADDRESSING METHODS AND MACHINE PROGRAM SEQUENCING Het adres in de eerste instructie waarin een naam voorkomt, is Dit is het geval in de instructies op locaties 100, 102, en 114. In iedere volgende instructie is het adres gelijk aan het adres van de voorgaande instructie waarin dezelfde naam voorkwam. Dit is het geval in de instructies op locaties 104 en 120. Voordat waarden van de labels bekend zijn bevat de naamlijst voor iedere naam het adres van de laatst gelezen instructie waar die naam is aangetroffen. In het voorbeeld ziet de naamlijst er op het moment dat de assembler de instructie op locatie 120 heeft verwerkt er dus uit als: RES 0120 NFOUND 0114 END 0104 Bij verwerking van de pseudo-instructie op locatie 200 wordt in de entry van RES in de naamlijst 200 als waarde opgenomen, nadat in de instructies op locaties 120 en 102 (in die volgorde) de juiste waarde (200) is ingevuld. One-pass Module Assembler Een one-pass module assembler produceert objectmodulen die nog gelinkt en geladen moeten worden. Er wordt vertrouwd op de pass die de loader nog moet maken, d.w.z. de loader voert min of meer de tweede pass van de assembler uit. De restrictie die wordt opgelegd is dat de voorwaartse referenties alleen mogen voorkomen in spronginstructies. Dus datagebieden moeten voorafgaan aan de instructies die naar deze gebieden verwijzen; ook mogen geen literals worden gebruikt. Elke ongedefinieerde naam in een spronginstructie komt in de z.g. branch-ahead table (BAT). Indien verscheidene spronginstructies naar dezelfde naam verwijzen, kan ofwel iedere keer een aparte entry gecreëerd worden die de naam en het adres van de instructie bevat, ofwel er kan voor iedere naam die in een voorwaartse referentie gebruikt wordt weer een soortgelijke keten opgebouwd worden als bij onbekende namen bij een one-pass load-and-go assembler. Zodra een labelnaam voorkomt, wordt de BAT langsgelopen, en voor elke keer dat de naam van het label voorkomt (of voor elk element in de bij de naam behorende keten), wordt een directief voor de loader gegenereerd om te zorgen dat het bijbehorende adresveld wordt aangepast als het programma wordt geladen. Vervolgens wordt het betreffende naam-adres paar uit de tabel (of het element uit de keten) verwijderd. Referenties naar de labelnaam die daarna nog volgen kunnen uiteraard direct vertaald worden in het juiste adres. Een andere mogelijkheid is dat er indirect wordt gesprongen via de branch-ahead table. Op de plaats van de voorwaartse referentie komt een indirecte sprong via een BAT-entryte staan. In de betreffende BAT-entrywordt het definitieve adres van het label gezet. De tabel moet dan wel met het programma worden meegeladen. Linkers en Laders Aan loaders, die in [H] hier behandeld worden, wordt in dit dictaat 2.29 gewijd. 2.7 Stacks and Queues In een computer met een registerloze architectuur heeft de CPU geen registers of accumulators. De instructies bevatten derhalve altijd een of meer geheugen-operanden. Alle bewerkingen op data

22 2.8. SUBROUTINES 15 spelen zich in het geheugen af. Een bijzondere vorm hiervan is de stack-architectuur, waarbij een speciaal register, de stack pointer (SP) of stapelwijzer steeds het adres bevat van de geheugenplaats waarop de uit te voeren operatie betrokken moet worden. Het bijzondere is dat de waarde van SP (=het aangewezen adres) mee verandert onder invloed van de operaties. Zo zal de operatie ADD (zonder expliciete operanden) de twee top-elementen van de stapel halen, de som ervan berekenen, en die som weer op de stapel plaatsen (die dan dus één element kleiner is geworden). SP heeft nu een geheel andere functie dan een gewoon register dat door de programmeur kan worden gebruikt, vandaar dat van een registerloze architectuur gesproken wordt. Stack machines kunnen geconstrueerd worden op zodanige wijze dat de werking bijzonder fraai aansluit bij de structuur van programma s in hogere programmeertalen. 2.8 Subroutines Bij het gebruik van een subroutine of procedure wordt een aantal instructies los van het hoofdprogramma, dat is het deel van het programma waarin executie begint en eindigt, bij elkaar gezet. Om deze instructies uit te voeren moet er vanuit het hoofdprogramma (of een andere subroutine) naar toe gesprongen worden met een subroutine-aanroep-instructie. De instructies van de subroutine worden vervolgens uitgevoerd en aan het eind van de subroutine moet een subroutineterugkeer-instructie staan om terug te keren naar de instructie na de aanroep-instructie. Er zijn drie belangrijke redenen om in programma s subroutines te gebruiken: 1. Een programma is eenvoudiger en beter te schrijven en te onderhouden als men het opsplitst in een aantal subroutines en men elke subroutine, die een duidelijk omschreven taak moet hebben, onafhankelijk schrijft en test. Op de plaats waar men de subroutine aanroept hoeft men alleen te weten wat de subroutine doet en kan men abstraheren van het hoe; 2. Als dezelfde reeks instructies op verschillende plaatsen in een programma uitgevoerd moet worden, is het werk- en geheugenruimte-besparend deze instructies in een subroutine op te nemen en op de plaatsen waar de instructies vereist zijn de subroutine aan te roepen; 3. Als een bepaalde soort bewerking van gegevens op verschillende plaatsen in het programma nodig is (ook al is de bewerking niet steeds volkomen identiek) dient het zowel de structuur als de efficiency wanneer gebruik wordt gemaakt van subroutines met parameters. De parameters bepalen dan de exacte werking, die van aanroep tot aanroep kan worden bepaald. Het tweede en derde punt werden al in de begindagen van het assemblerprogrammeren erkend en waren de reden voor het invoeren van de subroutine-aanroep- en de subroutine- terugkeerinstructie. Het eerste punt krijgt de laatste jaren steeds meer aandacht en hangt samen met methoden om beter te kunnen programmeren, zoals gestructureerd programmeren. Alle drie de punten zijn overigens ook bij het programmeren in hogere programmeertalen aanleiding tot het gebruik van subroutines (procedures).

23 16 CHAPTER 2. ADDRESSING METHODS AND MACHINE PROGRAM SEQUENCING Part III The PowerPC Example In de behandeling van de assemblercode van de PowerPC wordt slechts een deel van de mogelijkheden gegeven. Kennis van het resterende deel is niet nodig voor het begrijpen van de voorbeelden en het maken van de opgaven van het practicum. Volledige beschrijving van alle mogelijkheden zou leiden tot een grote hoeveelheid in eerste instantie onoverzichtelijke gegevens. The PowerPC Assembly Language Zie [H], Hoofdstuk 2, Deel III en Appendix B Het is goed om te bedenken dat terwijl de machine-instructies van een bepaalde computer precies vast liggen, de assemblertaal een aantal keuzen inhoudt. De mnemonics voor machine-instructies kunnen in principe vrij gekozen worden door de programmeur van een assembler, hoewel de fabrikant van een computer vaak een de-facto standaard zet met zijn mnemonics. Het is b.v. heel goed mogelijk om een Nederlandstalige assembler voor de PowerPC te bouwen. Die moet dan wel Nederlandse mnemonics zoals b.v. OPT voor optellen herkennen. De tot nu toe in de voorbeelden gebruikte notatie voor instructies en pseudo-instructies is die van de PowerPC assembler die bij het practicum gebruikt wordt. In de practicumhandleiding wordt preciezer ingegaan op de details van de assembler en de assembler taal die worden gebruikt Voorbeelden van Programma s voor de PowerPC We behandelen nu een aantal voorbeelden van (delen van) assemblerprogramma s voor de PowerPC. Hieruit wordt duidelijk hoe men de behandelde instructies en pseudo-instructies kan gebruiken bij het oplossen van bepaalde problemen. Sommige van de hierbij gebruikte technieken zijn min of meer standaard en komen dan ook terug in veel programma s. Van de programma s worden hier z.g. Programma Structuur Diagrammen (PSDs; zie Appendix E) gegeven en de PowerPC assemblercode. Bij het maken van een programma moet men niet meteen met het schrijven van assembler-statements beginnen, maar eerst het op te lossen probleem goed analyseren en PSDs maken. Deze PSDs moeten zodanige statements bevatten, dat zij behalve als uitgangspunt voor het schrijven van een assemblerprogramma ook als uitgangspunt kunnen dienen voor een programma in een willekeurige (imperatieve) hogere programmeertaal. Ook bij het maken van de opgaven van het practicum moeten voorafgaand aan het schrijven van een assemblerprogramma PSDs gemaakt worden. In dit hoofdstuk gaat het echter vooral om de techniek van het assemblerprogrammeren. In de voorbeelden worden geen gegevens in- of uitgevoerd. Dergelijke programma s zijn in de praktijk zinloos, omdat de gebruiker geen enkel effect ziet van het programma, en testen van het programma is ook niet redelijk doenlijk. Instructies voor het in- en uitvoeren van gegevens worden in de practicumhandleideing behandeld.

24 2.25. VOORBEELDEN VAN PROGRAMMA S VOOR DE POWERPC 17 Voorbeeld 1: Copiëren van en naar Geheugen In dit voorbeeld worden twee stukjes programma gegeven, een voor het copiëren van de inhoud van een register naar een geheugen plaats, en een voor het copiëren van de inhoud van een geheugen plaats naar een register. Aangezien de PowerPC een Load/Store architectuur heeft werken de meeste PowerPC instructies alleen op registers en worden deze technieken vaak toegepast om de inhoud van geheugen te bewerken. In het eerst stukje code wordt de inhoud van de variabele A naar register R4 gecopieerd. Hiervoor wordt een load instructie gebruikt. De PowerPC kent geen load instructies met onmiddelijk adressering, dus moet eerst het adres van A in een register geplaatst worden. Er wordt een ADDI instructie hiervoor gebruikt. Let op dat de instructie lengte in de PowerPC altijd 32 bits is. Het is dus niet mogelijk om een 32 bits getal als operand voor een instructie te gebruiken. Dit wordt opgelost door het adres in twee stappen in de register te plaatsen; eerst de onderste twee bytes, en daarna de bovenste twee bytes. Dit resulteert in de volgende code: ADDI R3,0,A@l # copieer onderste twee bytes van adre # A naar R3 ADDIS R3,R3,A@h # copieer bovenste twee bytes van adre # A naar bovenste helft van R3 Om de waarde van A vervolgens naar een register te copiëren wordt het LWZ instructie gebruikt: LWZ R4,0(R3) In het tweede stukje code wordt een waarde van register R4 naar variabele A gecopieerd. Hiervoor wordt een store instructie gebruikt. Even als de Load instructie, kent de store instructie ook geen onmiddelijk adressering, dus moeten dezelfde technieken worden toegepast. ADDI R3,0,A@l ADDIS R3,R3,A@h STW R4,0(R3) Voorbeeld 2: Een Berekening In dit voorbeeld wordt een programma gegeven voor de berekening van de uitdrukking (A+B-C+1)-(D+E) voor bepaalde waarden van A, B, C, D, en E. In het programma zijn A, C, en E variabelen met een beginwaarde en B en D constanten. Het resultaat wordt in de variabele RESULT gezet. Een eerste ontwerp in een PSD ziet er uit als: K1 := A+B-C+1 K2 := D+E RESULT := K1-K2

25 18 CHAPTER 2. ADDRESSING METHODS AND MACHINE PROGRAM SEQUENCING Rekening houdend met het feit dat in assemblertaal slechts één operatie tegelijk kan worden uitgevoerd zou dit PSD verder uitgewerkt kunnen worden tot: K0 := A K0 := K0+B K0 := K0-C K0 := K0+1 K1 := D K1 := K1+E RESULT := K0-K1 Een mogelijkheid voor de assemblercode voor de PowerPC die met dit PSD overeenkomt en registers R11 en R12 voor de variabelen K1 resp. K2 gebruikt, is: B:.equ 614 # declareer B D:.equ 122 # declareer D A:.long 20 # declareer A C:.long 512 # declareer C E:.long 314 # declareer E RESULT:.long 0 # declareer RESULT START: ADDI R3,0,A@l ADDIS R3,R3,A@h LWZ R11,0(R3) # R11:=A; R11 wordt gebruikt om # A+B-C+1 te berekenen ADDI R11,R11,B@l ADDIS R11,R11,B@h # R11:=A+B ADDI R3,0,C@l ADDIS R3,R3,C@h LWZ R4,0(R3) SUBF R11,R4,R11 ADDI R11,R11,1 # R11:=A+B-C+1 ADDI R12,0,D@l ADDIS R12,R12,D@h # R12:=D; R12 wordt gebruikt om # D+E te berekenen ADDI R3,0,E@l ADDIS R3,R3,E@h LWZ R4,0(R3) ADD R12,R12,R4 # R12:=D+E SUBF R11,R12,R11 # R11:=(A+B-C+1)-(D+E) ADDI R3,0,RESULT@l

26 2.25. VOORBEELDEN VAN PROGRAMMA S VOOR DE POWERPC 19 ADDIS R3,R3,RESULT@h STW R11,0(R3) # RESULT:=(A+B-C+1)-(D+E) In dit programma worden R11 en R12 gebruikt als hulpvariabelen. Hiervoor zouden ook geheugenlocaties kunnen worden gereserveerd, maar omdat registers sneller toegankelijk zijn wordt hieraan meestal de voorkeur gegeven. Voorbeeld 3: Spronginstructies Het is goed gebruik om in programma s in hoger-niveau programmeertalen zoals Modula-2 en C++ geen GOTO-statements op te nemen waarmee naar een willekeurig statement gesprongen kan worden, doch alleen de voorwaardelijke en alternatieve opdrachten (if... then... resp. if... then... else...), en de herhalingsopdrachten (while-, for-, en repeat untilloops) te gebruiken. Hieronder geven we van ieder van deze vijf typen statements in hoger-niveau programmeertalen aan hoe ze in assemblertaal geïmplementeerd kunnen worden. In alle gevallen moet van spronginstructies en soms van expliciete test-instructies gebruik gemaakt worden. Er zijn twee redenen waarom we dit doen. Ten eerste geven we ermee aan hoe ook in een assemblertaal gestructureerd geprogrammeerd kan worden (de PSDs dienen hier als basis). In de tweede plaats geeft het inzicht in de object-code die door een compiler gegenereerd kan worden. In de volgende voorbeelden worden de declaraties van de gebruikte variabelen weggelaten. Ook het expliciet laden van de waarden van de variabelen en weer opslaan naar en van de registers wordt weggelaten. Voorwaardelijke Opdracht T Met A in R4 en B in R5 levert dit: B := 1 A > 0 F IF: CMPWI CR0,R4,0 # als A > 0 BLE ENDIF ADDI R5,R5,1 # B := 1 ENDIF: Hier wordt de CMPWI-instructie gebruikt om te bepalen of A al dan niet groter dan nul is. Alternatieve Opdracht A <= B T F A := A-B B := B-A

27 20 CHAPTER 2. ADDRESSING METHODS AND MACHINE PROGRAM SEQUENCING Er van uitgaande dat Q in R4 zit en dat R in R5 hebben wij: IF: CMPW CR0,R5,R4 # als A <= B BGT ELSE SUBF R4,R5,R4 # A:=A-B B ENDIF ELSE: SUBF R5,R4,R5 # B:=B-A ENDIF: Hier wordt de CMPW-instructie gebruikt om R4 met R5 te vergelijken. Herhalingsopdracht: while-loop while R >= N Q := Q+1 R := R-N In dit programma fragment worden Q in R4 en R in R6 opgeslagen. WHILE: CMPWI CR0,R6,N # zolang R >= N BLT ENDWH ADDI R4,R4,1 # Q:=Q+1 ADDI R6,R6,-N # R:=R-N B WHILE ENDWH: Herhalingsopdracht: repeat-until loop A := A+B until A > 1000 Wij gaan hier vanuit dat A in R4 en B in R6 opgeslagen zijn. # herhaal REPEAT: ADD R4,R4,R6 # A:=A+B CMPWI CR0,R4,1000 # totdat A > 1000 BLE REPEAT

28 2.25. VOORBEELDEN VAN PROGRAMMA S VOOR DE POWERPC 21 Herhalingsopdracht: for-loop In het geval dat de begin- en eindwaarde van de lusvariabele constanten zijn ziet de opdracht er als volgt uit: for I:=1 (1) 100 S := S+I In dit programma fragment wordt R3 als lus teller gebruik, en R5 voor de inhoud van S. ADDI R3,0,1 # voor I:=1(1)100 doe FOR: ADD R5,R5,R3 # S:=S+I ADDI R3,R3,1 CMPWI CR0,R3,100 BLE FOR In het geval dat de begin- en/of de eindwaarde van de lusvariabele in een variabele staan moet de test aan het begin van de lus staan om te voorkomen dat deze een keer doorlopen wordt terwijl dit niet zou moeten (b.v. in for I:=1(1)J met J ) (met I in R3, S in R5 en J in R7): ADDI R3,0,1 FOR: CMPW CR0,R3,R7 # voor I:=1(1)J doe BGT ENDFOR ADD R5,R5,R3 # S:=S+I ADDI R3,R3,1 B FOR ENDFOR: In de gegeven voorbeelden wordt steeds een CMPW-instructie gebruikt om een vergelijking uit te voeren. Hierna komt dan een voorwaardelijke spronginstructie. In [H] is beschreven hoe dit mechanisme werkt: informatie over de eigenschappen van het resultaat van bepaalde instructies wordt opgeslagen in het conditie register (CR). Hiervan wordt gebruik gemaakt bij de voorwaardelijke sprongopdrachten. Vaak is het mogelijk zonder expliciete CMP-instructie te werken. Omdat informatie over het resultaat van veel instructies in het conditie register kan worden opgeslagen (b.v. van een ADD.- of SUBF.-instructie), kan een voorwaardelijke spronginstructie soms meteen gebruik maken van het resultaat van de/een voorafgaande instructie. Men moet er dan wel voor zorgen dat deze instructie als resultaat het te testen gegeven oplevert. Op deze manier kan een CMP-instructie worden uitgespaard, hetgeen een programma iets korter en efficiënter maakt. Voorbeelden. Beschouw het PSD

29 22 CHAPTER 2. ADDRESSING METHODS AND MACHINE PROGRAM SEQUENCING B := B-A B = 0 T B := 10 F De bijbehorende code met A in R4 en B in R6 ENDIF: heeft hetzelfde effect als ENDIF: Beschouw het PSD In (met I in R3 en K in R5) SUBF R6,R4,R6 # B:=B-A CMPWI CR0,R6,0 # test B BNE ENDIF # als B = 0 dan ADDI R6,R6,10 # B:=10 SUBF. R6,R4,R6 # B:=B-A BNE ENDIF # als B = 0 dan ADDI R6,R6,10 # B:=10 for I:=100 (-1) 1 K := K+I ADDI R3,0,100 # voor R3:=100(-1)1 doe FOR: ADD R5,R5,R3 # K:=K+R3 ADDI R3,R3,-1 CMPWI CR0,R3,0 BNE FOR kan de CMPWI-instructie eveneens weggelaten worden. Merk op dat de informatie over het resultaat van instructies in het conditie register blijft staan totdat een volgende operatie dit verandert. Sprongopdrachten hebben geen invloed op de inhoud van het conditie register. Hiervan wordt gebruik gemaakt in de volgende voorbeelden: T X < 0 F Y := -1 X = 0 T F Met X in R4 en Y in R6 levert dit: Y := 0 Y := 1

30 2.25. VOORBEELDEN VAN PROGRAMMA S VOOR DE POWERPC 23 CMPWI CR0,R4,0 # als X > 0 dan BLT NEGAT BEQ EQUAL ADDI R6,0,1 # Y:=1 B END # anders, als X=0, dan EQUAL: ADDI R6,0,0 # Y:=0 B END # anders NEGAT: ADDI R6,0,-1 # Y:=-1 END: T X = 2 F A:=A+C X > 2 T F Met X in R4, A in R6, B in R7, C in R8 en D in R9: A:=A+D A:=A+B CMPWI CR0,R4,2 # als X < 2 dan BEQ EQU BGT GRT ADD R6,R6,R7 # A:=A+B B END # anders, als X>2, dan GRT: ADD R6,R6,R9 # A:=A+D B END # anders EQU: ADD R6,R6,R8 # A:=A+C END: Voorbeeld 4: Indexering van Arrays We geven de rij ARRAY van 10 woorden de volgende beginwaarde: ARRAY[I]=I+1, 0<=I<=9. Hierbij wordt gebruik gemaakt van indexering. Een eerste analyse levert het volgende PSD: for I:=0 (1) 9 ARRAY[I]:=I+1

Dictaat Computersystemen in1705

Dictaat Computersystemen in1705 Dictaat Computersystemen in1705 Tiende editie Technische Universiteit Delft Faculteit EWI Afdeling Softwaretechnologie, Basiseenheid PDS Januari 2007 i Ten Geleide Het studieonderdeel Computersystemen

Nadere informatie

Proeftentamen in1211 Computersystemen I (NB de onderstreepte opgaven zijn geschikt voor de tussentoets)

Proeftentamen in1211 Computersystemen I (NB de onderstreepte opgaven zijn geschikt voor de tussentoets) TECHNISCHE UNIVERSITEIT DELFT Faculteit Informatietechnologie en Systemen Afdeling ISA Basiseenheid PGS Proeftentamen in1211 Computersystemen I (NB de onderstreepte opgaven zijn geschikt voor de tussentoets)

Nadere informatie

Proeftentamen in1211 Computersystemen I (Opm: de onderstreepte opgaven zijn geschikt voor de tussentoets)

Proeftentamen in1211 Computersystemen I (Opm: de onderstreepte opgaven zijn geschikt voor de tussentoets) TECHNISCHE UNIVERSITEIT DELFT Faculteit Informatietechnologie en Systemen Afdeling ISA Basiseenheid PGS Proeftentamen in1211 Computersystemen I (Opm: de onderstreepte opgaven zijn geschikt voor de tussentoets)

Nadere informatie

Assembly en Assemblers. Processoren 5 januari 2015

Assembly en Assemblers. Processoren 5 januari 2015 Assembly en Assemblers Processoren 5 januari 2015 Doel van vandaag Ik heb al losse eindjes over assembly verteld en een voorbeeldprogramma doorlopen. vandaag: algemeen + systematisch overzicht Programmeertalen

Nadere informatie

scc = b) CD AB

scc = b) CD AB Computerarchitectuur en -organisatie (213030) Dinsdag 21 januari 2040, 13.30 17.00 uur 7 bladzijden met 8 opgaven 4 bladzijden met documentatie Let op: Vul het tentamenbriefje volledig in (d.w.z. naam,

Nadere informatie

Tentamen Computerorganisatie 28 augustus 1998, uur. N.B.: Dit tentamen bestaat uit 30 opgaven Totaal aantal bladzijden: 11

Tentamen Computerorganisatie 28 augustus 1998, uur. N.B.: Dit tentamen bestaat uit 30 opgaven Totaal aantal bladzijden: 11 TECHNISCHE UNIVERSITEIT DELFT Faculteit Informatietechnologie en Systemen Subfaculteit Technische Wiskunde en Informatica Werkeenheid Technische Informatica Tentamen Computerorganisatie 28 augustus 1998,

Nadere informatie

Computerarchitectuur en netwerken. Memory management Assembler programmering

Computerarchitectuur en netwerken. Memory management Assembler programmering Computerarchitectuur en netwerken 2 Memory management Assembler programmering Lennart Herlaar 10 september 2018 Inhoud 1 Protectie: Hoe het O.S. programma s tegen elkaar kan beschermen modes memory management

Nadere informatie

Tentamen Computerorganisatie in aug. 1999, uur. N.B.: Dit tentamen bestaat uit 30 opgaven Totaal aantal bladzijden: 9

Tentamen Computerorganisatie in aug. 1999, uur. N.B.: Dit tentamen bestaat uit 30 opgaven Totaal aantal bladzijden: 9 TECHNISCHE UNIVERSITEIT DELFT Faculteit Informatietechnologie en Systemen Subfaculteit Technische Wiskunde en Informatica Werkeenheid Technische Informatica Tentamen Computerorganisatie in101 27 aug. 1999,

Nadere informatie

Bij dit hoofdstukken horen geen opgaven.

Bij dit hoofdstukken horen geen opgaven. 6. Programmeertalen Een computer begrijpt eigenlijk alleen maar binaire code (bestaande uit 1 en 0). Om hem/haar makkelijk opdrachten te geven zijn programmeertalen ontwikkeld. Deze moeten een goed gedefinieerde

Nadere informatie

Computertechniek vorige examens

Computertechniek vorige examens Computertechniek vorige examens Examen 2009 Groep 1 1. Geef de 2 manieren waarop de adressen van de I/O-module in de adresruimte geïntegreerd kunnen zijn. (memory-mapped en isolated dus) 2. Wat is post-indexering?

Nadere informatie

assembleertaal F. Vonk versie

assembleertaal F. Vonk versie 2017 assembleertaal F. Vonk versie 1 8-8-2017 inhoudsopgave 1. inleiding... - 3-2. Zeer Eenvoudige Processor v2 (ZEP2)... - 4-3. de code, simulator en geheugen... - 6-4. optellen... - 11-5. vermenigvuldigen...

Nadere informatie

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren HOOFDSTUK 3 3.1 Stapsgewijs programmeren De programmeertalen die tot nu toe genoemd zijn, zijn imperatieve of procedurele programmeertalen. is het stapsgewijs in code omschrijven wat een programma moet

Nadere informatie

17 Operaties op bits. 17.1 Bitoperatoren en bitexpressies

17 Operaties op bits. 17.1 Bitoperatoren en bitexpressies 17 Operaties op bits In hoofdstuk 1 is gezegd dat C oorspronkelijk bedoeld was als systeemprogrammeertaal om het besturingssysteem UNIX te implementeren. Bij dit soort toepassingen komt het voor dat afzonderlijke

Nadere informatie

Zelftest Programmeren in COBOL - deel I

Zelftest Programmeren in COBOL - deel I Zelftest Programmeren in CBL - deel I Document: n1290test.fm 05/01/2016 ABIS Training & Consulting P.. Box 220 B-3000 Leuven Belgium TRAINING & CNSULTING INLEIDING BIJ DE ZELFTEST PRGRAMMEREN IN CBL -

Nadere informatie

start -> id (k (f c s) (g s c)) -> k (f c s) (g s c) -> f c s -> s c

start -> id (k (f c s) (g s c)) -> k (f c s) (g s c) -> f c s -> s c Een Minimaal Formalisme om te Programmeren We hebben gezien dat Turing machines beschouwd kunnen worden als universele computers. D.w.z. dat iedere berekening met natuurlijke getallen die met een computer

Nadere informatie

Hoe werkt een rekenmachine?

Hoe werkt een rekenmachine? Hoe werkt een rekenmachine? Uit welke hardware-componenten bestaat een rekenmachine? Welke instructies kan de machine uitvoeren? Practicum met de rekenmachine I Constante getallen Instructies van het type

Nadere informatie

Programmeren A. Genetisch Programma voor het Partitie Probleem. begeleiding:

Programmeren A. Genetisch Programma voor het Partitie Probleem. begeleiding: Programmeren A Genetisch Programma voor het Partitie Probleem begeleiding: Inleiding Het Partitie Probleem luidt als volgt: Gegeven een verzameling van n positieve integers, vindt twee disjuncte deelverzamelingen

Nadere informatie

Van Poort tot Pipeline. Ben Bruidegom & Wouter Koolen-Wijkstra AMSTEL Instituut Universiteit van Amsterdam

Van Poort tot Pipeline. Ben Bruidegom & Wouter Koolen-Wijkstra AMSTEL Instituut Universiteit van Amsterdam Van Poort tot Pipeline Ben Bruidegom & Wouter Koolen-Wijkstra AMSTEL Instituut Universiteit van Amsterdam Van Poort tot Pipeline Pipeline processor One cycle machine Calculator File of registers Assembly

Nadere informatie

Samenvatting Computer Architectuur 2006-2007

Samenvatting Computer Architectuur 2006-2007 Controletransferinstructies = Instructies die verandering brengen in de zuiver sequentiële uitvoering van de instructies. Ze doen dit door de instructiewijzer een andere waarde te geven. Ze kunnen met

Nadere informatie

OPDRACHT Opdracht 2.1 Beschrijf in eigen woorden wat het bovenstaande PSD doet.

OPDRACHT Opdracht 2.1 Beschrijf in eigen woorden wat het bovenstaande PSD doet. Les C-02: Werken met Programma Structuur Diagrammen 2.0 Inleiding In deze lesbrief bekijken we een methode om een algoritme zodanig structuur te geven dat er gemakkelijk programmacode bij te schrijven

Nadere informatie

Small Basic Programmeren Text Console 2

Small Basic Programmeren Text Console 2 Oefening 1: Hoogste getal Je leest een reeks positieve gehele getallen in totdat je het getal 0 (nul) invoert. Daarna stopt de invoer en druk je een regel af met het hoogste getal uit de reeks. Voorbeeld:

Nadere informatie

Computerarchitectuur en netwerken. Memory management Assembler programmering

Computerarchitectuur en netwerken. Memory management Assembler programmering Computerarchitectuur en netwerken 2 Memory management Assembler programmering Lennart Herlaar 12 september 2016 Inhoud 1 Protectie: Hoe het O.S. programma s tegen elkaar kan beschermen modes memory management

Nadere informatie

4,7. Praktische-opdracht door een scholier 1959 woorden 1 juni keer beoordeeld

4,7. Praktische-opdracht door een scholier 1959 woorden 1 juni keer beoordeeld Praktische-opdracht door een scholier 1959 woorden 1 juni 2001 4,7 331 keer beoordeeld Vak Wiskunde Tientallig stelsel In een tientallig stelsel heb je de getallen 0 t/m 9 tot je beschikking. Zoals je

Nadere informatie

Interne voorstelling. types en conversies. Binaire en andere talstelsels. Voorstelling van gegevens: bits en bytes

Interne voorstelling. types en conversies. Binaire en andere talstelsels. Voorstelling van gegevens: bits en bytes Interne voorstelling types en conversies Het geheugen wordt ingedeeld in een aantal gebieden van gelijke grootte. Een gebied van 8 bits noemt men een byte (nible een groep van bits). Een (computer)woord

Nadere informatie

Een eenvoudig algoritme om permutaties te genereren

Een eenvoudig algoritme om permutaties te genereren Een eenvoudig algoritme om permutaties te genereren Daniel von Asmuth Inleiding Er zijn in de vakliteratuur verschillende manieren beschreven om alle permutaties van een verzameling te generen. De methoden

Nadere informatie

Variabelen en statements in ActionScript

Variabelen en statements in ActionScript Ontwikkelen van Apps voor ios en Android Variabelen en statements in ActionScript 6.1 Inleiding Als we het in de informatica over variabelen hebben, bedoelen we een stukje in het geheugen van de computer

Nadere informatie

1 Rekenen in eindige precisie

1 Rekenen in eindige precisie Rekenen in eindige precisie Een computer rekent per definitie met een eindige deelverzameling van getallen. In dit hoofdstuk bekijken we hoe dit binnen een computer is ingericht, en wat daarvan de gevolgen

Nadere informatie

Stacks and queues. Hoofdstuk 6

Stacks and queues. Hoofdstuk 6 Hoofdstuk 6 Stacks and queues I N T R O D U C T I E In dit hoofdstuk worden drie datastructuren stack, queue en deque behandeld. Om deze datastructuren te implementeren, worden onder andere arrays en linked

Nadere informatie

Algoritme noteren? Algoritmen voor de computer worden vastgelegd met behulp van een programmeertaal.

Algoritme noteren? Algoritmen voor de computer worden vastgelegd met behulp van een programmeertaal. Programmeertalen Algoritme noteren? Algoritmen voor de computer worden vastgelegd met behulp van een programmeertaal. Taal // machine De geschiedenis van de programmeertalen loopt parallel met de geschiedenis

Nadere informatie

3. Structuren in de taal

3. Structuren in de taal 3. Structuren in de taal In dit hoofdstuk behandelen we de belangrijkst econtrolestructuren die in de algoritmiek gebruikt worden. Dit zijn o.a. de opeenvolging, selectie en lussen (herhaling). Vóór we

Nadere informatie

Zelftest Programmeren in PL/I

Zelftest Programmeren in PL/I Zelftest Programmeren in PL/I Document: n0830test.fm 26/03/2012 ABIS Training & Consulting P.. Box 220 B-3000 Leuven Belgium TRAINING & CNSULTING INLEIDING BIJ DE ZELFTEST PRGRAMMEREN IN PL/I m de voorkennis

Nadere informatie

Getalformaten, timers en tellers

Getalformaten, timers en tellers Getalformaten, timers en tellers S_CU CU S PV R CV DEZ CV_BCD S_ODT S TV BI R BCD 1 pagina 1 Getalformaten (16 bits) PG CPU BCD W#16#296 Voorteken (+) 2 9 6 0 0 0 0 0 0 1 0 1 0 0 1 0 1 1 0 Positieve getallen

Nadere informatie

Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk.

Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk. HOOFDSTUK 3 3.1 Stapsgewijs programmeren In de vorige hoofdstukken zijn programmeertalen beschreven die imperatief zijn. is het stapsgewijs in code omschrijven wat een programma moet doen, net als een

Nadere informatie

Programmeermethoden. Recursie. week 11: november kosterswa/pm/

Programmeermethoden. Recursie. week 11: november kosterswa/pm/ Programmeermethoden Recursie week 11: 21 25 november 2016 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Pointers Derde programmeeropgave 1 Het spel Gomoku programmeren we als volgt: week 1: pointerpracticum,

Nadere informatie

Zelftest Inleiding Programmeren

Zelftest Inleiding Programmeren Zelftest Inleiding Programmeren Document: n0824test.fm 22/01/2013 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INLEIDING BIJ DE ZELFTEST INLEIDING PROGRAMMEREN Deze

Nadere informatie

Algoritme noteren? Algoritmen voor de computer worden vastgelegd met behulp van een programmeertaal.

Algoritme noteren? Algoritmen voor de computer worden vastgelegd met behulp van een programmeertaal. Programmeertalen Algoritme noteren? Algoritmen voor de computer worden vastgelegd met behulp van een programmeertaal. Taal // machine De geschiedenis van de programmeertalen loopt parallel met de geschiedenis

Nadere informatie

Antwoorden zijn afgedrukt!!!!!!!

Antwoorden zijn afgedrukt!!!!!!! Computerorganisatie INF/TEL (233) februari 2, 9. 2.3 uur 8 bladzijden met 9 opgaven 3 bladzijden met documentatie Let op: Vul het tentamenbriefje volledig in (d.w.z. naam, studentnummer, naam vak, vakcode,

Nadere informatie

Pascal uitgediept Data structuren

Pascal uitgediept Data structuren Pascal uitgediept Data structuren MSX Computer & Club Magazine nummer 68-juni/juli 1994 Herman Post Scanned, ocr ed and converted to PDF by HansO, 2001 In deze aflevering wordt bekeken hoe zelf een datastructuur

Nadere informatie

Recursion. Introductie 37. Leerkern 37. Terugkoppeling 40. Uitwerking van de opgaven 40

Recursion. Introductie 37. Leerkern 37. Terugkoppeling 40. Uitwerking van de opgaven 40 Recursion Introductie 37 Leerkern 37 5.1 Foundations of recursion 37 5.2 Recursive analysis 37 5.3 Applications of recursion 38 Terugkoppeling 40 Uitwerking van de opgaven 40 Hoofdstuk 5 Recursion I N

Nadere informatie

Module 4 Hoofdstuk 1. Programmeertalen

Module 4 Hoofdstuk 1. Programmeertalen Module 4 Hoofdstuk 1 Programmeertalen Programmeertalen Een programmeertaal is een taal waarin de opdrachten worden geschreven die een computer moet uitvoeren Reeksen van die opdrachten of instructies vormen

Nadere informatie

Hoe werkt een computer precies?

Hoe werkt een computer precies? Hoe werkt een computer precies? Met steun van stichting Edict Ben Bruidegom & Wouter Koolen-Wijkstra AMSTEL Instituut Universiteit van Amsterdam Overview Introductie SIM-PL Simulatietool voor werking computer

Nadere informatie

In Vlaanderen bestaat er nog geen leerlijn programmeren! Hierdoor baseren wij ons op de leerlijn die men in Nederland toepast voor basisscholen.

In Vlaanderen bestaat er nog geen leerlijn programmeren! Hierdoor baseren wij ons op de leerlijn die men in Nederland toepast voor basisscholen. Leerlijn programmeren In Vlaanderen bestaat er nog geen leerlijn programmeren! Hierdoor baseren wij ons op de leerlijn die men in Nederland toepast voor basisscholen. Deze leerlijn is opgebouwd aan de

Nadere informatie

Bouwstenen voor PSE. Datatypes en Datastructuren

Bouwstenen voor PSE. Datatypes en Datastructuren Bouwstenen voor PSE Datatypes en Datastructuren Definitie Datatype Klasse van dataobjecten tesamen met operaties om ze te construeren, te manipuleren en te verwijderen. Een datatype omvat een specificatie

Nadere informatie

TECHNISCHE UNIVERSITEIT EINDHOVEN ComputerSystemen Deeltentamen B (weken 6..9) vakcode 2M208 woensdag 19 Maart 2003, 9:00-10:30

TECHNISCHE UNIVERSITEIT EINDHOVEN ComputerSystemen Deeltentamen B (weken 6..9) vakcode 2M208 woensdag 19 Maart 2003, 9:00-10:30 TECHNISCHE UNIVERSITEIT EINDHOVEN ComputerSystemen Deeltentamen B (weken 6..9) vakcode 2M208 woensdag 19 Maart 2003, 9:00-10:30 Algemene opmerkingen (lees dit!): - Dit tentamen duurt ANDERHALF UUR! - Dit

Nadere informatie

Let op dat de scoping regels gerespecteerd blijven; het volgende voorbeeld mag geen fout melden.

Let op dat de scoping regels gerespecteerd blijven; het volgende voorbeeld mag geen fout melden. Vrije Universiteit Brussel Faculteit Wetenschappen Vakgroep Computerwetenschappen Academiejaar 2009 2010: tweede examenzittijd Interpretatie van Computerprogrammaʼs I schriftelijke test Voorafgaandelijk:

Nadere informatie

Het voert eenvoudige instructies uit die achter elkaar in het geheugen van de machine zijn opgeslagen.

Het voert eenvoudige instructies uit die achter elkaar in het geheugen van de machine zijn opgeslagen. Antwoorden door een scholier 1809 woorden 28 september 2006 3,6 14 keer beoordeeld Vak Informatica Samenvatting Informatica 6.1) Van kleine instructies naar grote processen Noem 2 termen voor het centrale

Nadere informatie

Talstelsels en getalnotaties (oplmodel)

Talstelsels en getalnotaties (oplmodel) Talstelsels en getalnotaties (oplmodel) herhalingsvragen 1. Waarom werken computers binair? Omdat binaire computers veel makkelijker te maken is. De kans op fouten is ook veel kleiner. het spanningsverschil

Nadere informatie

Geheugenbeheer. ICT Infrastructuren 2 december 2013

Geheugenbeheer. ICT Infrastructuren 2 december 2013 Geheugenbeheer ICT Infrastructuren 2 december 2013 Doelen van geheugenbeheer Reloca>e (flexibel gebruik van geheugen) Bescherming Gedeeld/gemeenschappelijk geheugen Logische indeling van procesonderdelen

Nadere informatie

Computerarchitectuur en netwerken Toets 1 4 okt

Computerarchitectuur en netwerken Toets 1 4 okt 11.00 13.00 De open vragen moet je beantwoorden op tentamenpapier. De multiple-choice antwoorden moet je op het vragenblad invullen in de rechtervakjes en dat blad inleveren. Schrijf je naam, studentnummer

Nadere informatie

Flex_Rooster WERKBOEK. INTRODUCTIE iseries. Dit werkboek is eigendom van ICS opleidingen en mag niet worden meegenomen.

Flex_Rooster WERKBOEK. INTRODUCTIE iseries. Dit werkboek is eigendom van ICS opleidingen en mag niet worden meegenomen. Flex_Rooster WERKBOEK INTRODUCTIE iseries Dit werkboek is eigendom van ICS opleidingen en mag niet worden meegenomen. ICS Opleidingen Niets uit deze uitgave mag worden verveelvoudigd en/of openbaar gemaakt

Nadere informatie

Studentnummer:... Opleiding:...

Studentnummer:... Opleiding:... Computerorganisatie INF/TEL (233) februari 2, 9. 2.3 uur 8 bladzijden met 9 opgaven 3 bladzijden met documentatie Let op: Vul het tentamenbriefje volledig in (d.w.z. naam, studentnummer, naam vak, vakcode,

Nadere informatie

scc =!F3.!F2 b) CD AB

scc =!F3.!F2 b) CD AB Computerarchitectuur en -organisatie (213030) Dinsdag 21 januari 2040, 13.30 17.00 uur 7 bladzijden met 8 opgaven 4 bladzijden met documentatie Let op: Vul het tentamenbriefje volledig in (d.w.z. naam,

Nadere informatie

BEGINNER JAVA Inhoudsopgave

BEGINNER JAVA Inhoudsopgave Inhoudsopgave 6 Configuratie Hallo wereld! Praten met de gebruiker Munt opgooien Voorwaarden Lussen......6 Configuratie Met deze Sushi kaarten ga je een simpel spel maken met één van de meest populaire

Nadere informatie

Binair Binair = tweewaardig Beperkt aantal mogelijke waarden (discreet aantal in amplitude) Wij zijn gewoon aan decimaal (tiendelig)

Binair Binair = tweewaardig Beperkt aantal mogelijke waarden (discreet aantal in amplitude) Wij zijn gewoon aan decimaal (tiendelig) Binair Binair = tweewaardig Beperkt aantal mogelijke waarden (discreet aantal in amplitude) Wij zijn gewoon aan decimaal (tiendelig) In elektronische realisatie zijn 10 verschillende toestanden moeilijk

Nadere informatie

UNIVERSITEIT ANTWERPEN FACULTEIT WETENSCHAPPEN DEPARTEMENT WISKUNDE-INFORMATICA OBERON CODE CONVENTIONS

UNIVERSITEIT ANTWERPEN FACULTEIT WETENSCHAPPEN DEPARTEMENT WISKUNDE-INFORMATICA OBERON CODE CONVENTIONS UNIVERSITEIT ANTWERPEN FACULTEIT WETENSCHAPPEN DEPARTEMENT WISKUNDE-INFORMATICA OBERON CODE CONVENTIONS Laatste aanpassing: 15 oktober 2003 Inhoudsopgave 1 Bestandsnamen 3 2 Organizatie Bestanden 3 3 Indentatie

Nadere informatie

De Arduino-microcontroller in de motorvoertuigentechniek (2)

De Arduino-microcontroller in de motorvoertuigentechniek (2) De Arduino-microcontroller in de motorvoertuigentechniek (2) E. Gernaat (ISBN 978-90-79302-11-6) 1 Procescomputer 1.1 Microprocessoren algemeen De informatie-verwerking zoals is behandeld, is vrijwel geheel

Nadere informatie

Rekenen aan wortels Werkblad =

Rekenen aan wortels Werkblad = Rekenen aan wortels Werkblad 546121 = Vooraf De vragen en opdrachten in dit werkblad die vooraf gegaan worden door, moeten schriftelijk worden beantwoord. Daarbij moet altijd duidelijk zijn hoe de antwoorden

Nadere informatie

II. ZELFGEDEFINIEERDE FUNCTIES

II. ZELFGEDEFINIEERDE FUNCTIES II. ZELFGEDEFINIEERDE FUNCTIES In Excel bestaat reeds een uitgebreide reeks van functies zoals SOM, GEMIDDELDE, AFRONDEN, NU enz. Het is de bedoeling om functies aan deze lijst toe te voegen door in Visual

Nadere informatie

recursie Hoofdstuk 5 Studeeraanwijzingen De studielast van deze leereenheid bedraagt circa 6 uur. Terminologie

recursie Hoofdstuk 5 Studeeraanwijzingen De studielast van deze leereenheid bedraagt circa 6 uur. Terminologie Hoofdstuk 5 Recursion I N T R O D U C T I E Veel methoden die we op een datastructuur aan kunnen roepen, zullen op een recursieve wijze geïmplementeerd worden. Recursie is een techniek waarbij een vraagstuk

Nadere informatie

Geheugen en Adressering. Binding. Binding (2) Logische en Fysieke adresruimten. relocatie register. Dynamic loading

Geheugen en Adressering. Binding. Binding (2) Logische en Fysieke adresruimten. relocatie register. Dynamic loading Geheugen en Adressering Binding Geheugen (main memory, primary storage) is noodzakelijk voor de uitvoering van programma's. te beschouwen als array van adresseerbare bytes (of woorden). verschillende processen

Nadere informatie

PSD. Reeksen van logische procedures om problemen op te lossen in een eindig aantal stappen.

PSD. Reeksen van logische procedures om problemen op te lossen in een eindig aantal stappen. Inleiding Computers en andere digitale apparatuur is tegenwoordig niet meer weg te denken in de huidige samenleving. Zonder programma s zijn deze apparaten echter niets waard. Het zijn de programma s die

Nadere informatie

THEORIE TALSTELSELS. 1 x 10 0 = 1 (een getal tot de macht 0 = 1) 8 x 10 1 = 80 2 x 10 2 = x 10 3 = Opgeteld: 9281d(ecimaal)

THEORIE TALSTELSELS. 1 x 10 0 = 1 (een getal tot de macht 0 = 1) 8 x 10 1 = 80 2 x 10 2 = x 10 3 = Opgeteld: 9281d(ecimaal) THEORIE TALSTELSELS De binaire code Het geheugenelement van de computer kan slechts twee verschillende waarden bevatten. De schakelingen uit de computer werken daarom met een tweetallig ofwel binair stelsel.

Nadere informatie

VRIJ TECHNISCH INSTITUUT Burg.Geyskensstraat 11 3580 BERINGEN. De PLC geïntegreerd in de PC. Vak: Toegepaste informatica Auteur: Ludwig Theunis

VRIJ TECHNISCH INSTITUUT Burg.Geyskensstraat 11 3580 BERINGEN. De PLC geïntegreerd in de PC. Vak: Toegepaste informatica Auteur: Ludwig Theunis Burg.Geyskensstraat 11 3580 BERINGEN De PLC geïntegreerd in de PC. Vak: Toegepaste informatica Auteur: Ludwig Theunis Versie: vrijdag 2 november 2007 2 Toegepaste informatica 1 De Microprocessor Zowel

Nadere informatie

Oefeningen Interpretatie I Reeks 6 : Registermachines

Oefeningen Interpretatie I Reeks 6 : Registermachines Oefeningen Interpretatie I Reeks 6 : Registermachines Deze oefeningenreeks behandelt het beschrijven van computationele processen aan de hand van registermachineprogrammaʼs. Registermachines manipuleren

Nadere informatie

Versieperikelen. Bijlage C

Versieperikelen. Bijlage C Bijlage C Versieperikelen In dit boek beschrijven we PL/SQL aan de hand van Oracle versie 11g. Alle eigenschappen die in dit boek behandeld worden, zijn in deze versie van Oracle (en in nog te verschijnen

Nadere informatie

Linux Assembly Uitwerkingen van de vragen en opdrachten

Linux Assembly Uitwerkingen van de vragen en opdrachten Linux Assembly Uitwerkingen van de vragen en opdrachten The choice of a GNU generation Hoofdstuk 3 1. (a) Een system call is een functie geleverd door de kernel (het operating system, een interface tussen

Nadere informatie

slides12.pdf December 14, 2001 1

slides12.pdf December 14, 2001 1 Onderwerpen Inleiding Algemeen 12 Getallen Getallen Representaties Rekenen Problemen Piet van Oostrum 12 dec 2001 INL/Alg-12 1 X INL/Alg-12 1 X Getallen Soorten getallen Wat is een getal? Experiment: met

Nadere informatie

Uitleg van de Hough transformatie

Uitleg van de Hough transformatie Uitleg van de Hough transformatie Maarten M. Fokkinga, Joeri van Ruth Database groep, Fac. EWI, Universiteit Twente Versie van 17 mei 2005, 10:59 De Hough transformatie is een wiskundige techniek om een

Nadere informatie

Onafhankelijke verzamelingen en Gewogen Oplossingen, door Donald E. Knuth, The Art of Computer Programming, Volume 4, Combinatorial Algorithms

Onafhankelijke verzamelingen en Gewogen Oplossingen, door Donald E. Knuth, The Art of Computer Programming, Volume 4, Combinatorial Algorithms Onafhankelijke verzamelingen en Gewogen Oplossingen, door Donald E. Knuth, The Art of Computer Programming, Volume 4, Combinatorial Algorithms Giso Dal (0752975) Pagina s 5 7 1 Deelverzameling Representatie

Nadere informatie

Programmeermethoden. Recursie. Walter Kosters. week 11: november kosterswa/pm/

Programmeermethoden. Recursie. Walter Kosters. week 11: november kosterswa/pm/ Programmeermethoden Recursie Walter Kosters week 11: 20 24 november 2017 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Vierde programmeeropgave 1 De Grote getallen programmeren we als volgt: week 1: pointerpracticum,

Nadere informatie

Module 3: Scratch programmeren: is het logisch of is het niet logisch?

Module 3: Scratch programmeren: is het logisch of is het niet logisch? Module 3: Scratch programmeren: is het logisch of is het niet logisch? Inhoudsopgave Module 3: Scratch programmeren: is het logisch of is het niet logisch?...1 Wat is een computerprogramma eigenlijk?...2

Nadere informatie

Tentamen Computersystemen

Tentamen Computersystemen Tentamen Computersystemen baicosy06 2e jaar bachelor AI, 2e semester 23 september 2013 13u-15u IWO 4.04A (blauw), Academisch Medisch Centrum, Meidreef 29, Amsterdam ZuidOost Het is niet toegestaan communicatieapparatuur

Nadere informatie

Afhankelijk van wanneer je het programma uitvoert, zie je een van de volgende resultaten:

Afhankelijk van wanneer je het programma uitvoert, zie je een van de volgende resultaten: Hoofdstuk 4 Voorwaarden en vertakkingen Laten we eens teruggaan naar ons eerste programma. Zou het niet leuk zijn als we in plaats van het algemene Hallo wereld, afhankelijk van de tijd van de dag, Goedemorgen

Nadere informatie

Digitale technieken Deeltoets II

Digitale technieken Deeltoets II Digitale technieken Deeltoets II André Deutz 11 januari, 2008 De opgaven kunnen uiteraard in een willekeurige volgorde gemaakt worden geef heel duidelijk aan op welke opgave een antwoord gegegeven wordt.

Nadere informatie

Hexadecimale en binaire getallen

Hexadecimale en binaire getallen Bijlage G Hexadecimale en binaire getallen Binaire en andere talstelsels De getallen waar wij gewoonlijk mee werken zijn genoteerd volgens het decimale stelsel. Het decimale stelsel is een zogenoemd positiestelsel.

Nadere informatie

Een korte samenvatting van enkele FORTRAN opdrachten

Een korte samenvatting van enkele FORTRAN opdrachten Een korte samenvatting van enkele FORTRAN opdrachten Inhoud 1 Introductie 3 2 De structuur van een FORTRAN programma 3 3 Datatypen, variabelen en declaraties 3 4 Expressies-volgorde van uitwerking 4 5

Nadere informatie

Vakgroep CW KAHO Sint-Lieven

Vakgroep CW KAHO Sint-Lieven Vakgroep CW KAHO Sint-Lieven Objecten Programmeren voor de Sport: Een inleiding tot JAVA objecten Wetenschapsweek 20 November 2012 Tony Wauters en Tim Vermeulen tony.wauters@kahosl.be en tim.vermeulen@kahosl.be

Nadere informatie

Computervaardigheden. Universiteit Antwerpen. Computervaardigheden en Programmatie. Grafieken en Rapporten 1. Inhoud. Wat is scripting?

Computervaardigheden. Universiteit Antwerpen. Computervaardigheden en Programmatie. Grafieken en Rapporten 1. Inhoud. Wat is scripting? Inhoud Computervaardigheden Hoofdstuk 4 Scripting (Let op: dit is enkel voor studenten Biologie.) Dit hoofdstuk bekijkt heel kort de basis van scripting. - Opstellen van functies. - Conditionele code.

Nadere informatie

Combinatorische Algoritmen: Binary Decision Diagrams, Deel III

Combinatorische Algoritmen: Binary Decision Diagrams, Deel III Combinatorische Algoritmen: Binary Decision Diagrams, Deel III Sjoerd van Egmond LIACS, Leiden University, The Netherlands svegmond@liacs.nl 2 juni 2010 Samenvatting Deze notitie beschrijft een nederlandse

Nadere informatie

VAN HET PROGRAMMEREN. Inleiding

VAN HET PROGRAMMEREN. Inleiding OVERZICHT VAN HET PROGRAMMEREN Inleiding Als je leert programmeren lijkt het nogal overweldigend om die eerste stappen te doorworstelen. Er zijn dan ook heel wat programmeertalen (Java, Ruby, Python, Perl,

Nadere informatie

van PSD naar JavaScript

van PSD naar JavaScript 2015 van PSD naar JavaScript F. Vonk versie 2 19-9-2015 inhoudsopgave 1. inleiding... - 2-2. ontwikkelomgeving... - 3-3. programmeerconcepten... - 4 - statement... - 4 - sequentie... - 4 - variabele en

Nadere informatie

Microcontrollers Week 4 Introductie microcontroller Jesse op den Brouw (met dank aan Ben Kuiper) INLMIC/

Microcontrollers Week 4 Introductie microcontroller Jesse op den Brouw (met dank aan Ben Kuiper) INLMIC/ Microcontrollers Week 4 Introductie microcontroller Jesse op den Brouw (met dank aan Ben Kuiper) INLMIC/2018-2019 Week 3 Lussen Ontdenderen Stack Parameteroverdracht 2 Wachtlussen In een programma willen

Nadere informatie

Java virtuele machine JVM

Java virtuele machine JVM Implementatie Java Java virtuele machine JVM Java programma vertaald naar byte code instructies Byte code instructies uitgevoerd door JVM JVM is processor architectuur kan in principe in hardware worden

Nadere informatie

Stacks and queues. Introductie 45. Leerkern 45. Terugkoppeling 49. Uitwerking van de opgaven 49

Stacks and queues. Introductie 45. Leerkern 45. Terugkoppeling 49. Uitwerking van de opgaven 49 Stacks and queues Introductie 45 Leerkern 45 6.1 Stacks 45 6.2 Queues 47 6.3 Double-ended queues 48 Terugkoppeling 49 Uitwerking van de opgaven 49 Bijlage: Diagrammen belangrijkste interfaces en klassen

Nadere informatie

Stapelgeheugen. Processoren 6 maart 2012

Stapelgeheugen. Processoren 6 maart 2012 Stapelgeheugen Processoren 6 maart 2012 Programma van komende week 7 maart 8.45: extra vragenuur over HADES 13 maart 8.45: hoorcollege vervalt, maar werkcolleges vinden plaats. Stapelgeheugen Tanenbaum

Nadere informatie

Indirecte adressering

Indirecte adressering Indirecte adressering 1 pagina 1 Absolute adressering - Directe adressering Operand Operand- Supplementaire Beschrijving adres toegangsbreedte (voorbeeld) I 37.4 byte, woord, Ingangen dubbelwoord Q 27.7

Nadere informatie

informatica. hardware. overzicht. moederbord CPU RAM GPU architectuur (vwo)

informatica. hardware. overzicht. moederbord CPU RAM GPU architectuur (vwo) informatica hardware overzicht moederbord CPU RAM GPU architectuur (vwo) 1 moederbord basis van de computer componenten & aansluitingen chipset Northbridge (snel) Southbridge ("traag") bussen FSB/HTB moederbord

Nadere informatie

Tentamen Computersystemen

Tentamen Computersystemen Tentamen Computersystemen baicosy6 2e jaar bachelor AI, 2e semester 21 oktober 213, 9u-11u OMHP D.9 vraag 1 Van een Single Cycle Harvard machine hebben de componenten de volgende propagation delay time:

Nadere informatie

Faculteit Elektrotechniek - Capaciteitsgroep ICS Tentamen Schakeltechniek. Vakcodes 5A010/5A050, 19 januari 2004, 9:00u-12:00u

Faculteit Elektrotechniek - Capaciteitsgroep ICS Tentamen Schakeltechniek. Vakcodes 5A010/5A050, 19 januari 2004, 9:00u-12:00u Faculteit Elektrotechniek - Capaciteitsgroep ICS Tentamen Schakeltechniek Vakcodes 5A010/5A050, 19 januari 2004, 9:00u-12:00u achternaam : voorletters : identiteitsnummer : opleiding : Tijdens dit tentamen

Nadere informatie

7 Omzetten van Recursieve naar Iteratieve Algoritmen

7 Omzetten van Recursieve naar Iteratieve Algoritmen 7 Omzetten van Recursieve naar Iteratieve Algoritmen Het lijkt mogelijk om elke oplossings-algoritme, die vaak in eerste instantie recursief geformuleerd werd, om te zetten in een iteratieve algoritme

Nadere informatie

Constanten. Variabelen. Expressies. Variabelen. Constanten. Voorbeeld : varid.py. een symbolische naam voor een object.

Constanten. Variabelen. Expressies. Variabelen. Constanten. Voorbeeld : varid.py. een symbolische naam voor een object. een symbolische naam voor een object. Variabelen Constanten Variabelen Expressies naam : geeft de plaats in het geheugen aan waarde : de inhoud van het object identifier : een rij van letters en/of cijfers

Nadere informatie

Software Reverse Engineering. Jacco Krijnen

Software Reverse Engineering. Jacco Krijnen Software Reverse Engineering Jacco Krijnen Opbouw Inleiding en definitie Techniek Assemblers/Disassemblers Compilers/Decompilers Toepassingen Security Overige Softwarebeveiliging Piracy Anti RE technieken

Nadere informatie

Opgaven Registers Concurrency, 29 nov 2018, Werkgroep.

Opgaven Registers Concurrency, 29 nov 2018, Werkgroep. Opgaven Registers Concurrency, 29 nov 2018, Werkgroep. Gebruik deze opgaven om de stof te oefenen op het werkcollege. Cijfer: Op een toets krijg je meestal zes tot acht opgaven. 1. Safe Integer: Van een

Nadere informatie

Lab Webdesign: Javascript 3 maart 2008

Lab Webdesign: Javascript 3 maart 2008 H5: OPERATORS In dit hoofdstuk zullen we het hebben over de operators (of ook wel: operatoren) in JavaScript waarmee allerlei rekenkundige en logische bewerkingen kunnen worden uitgevoerd. Daarbij zullen

Nadere informatie

Praktisch bestaan er enkele eenvoudige methoden om een decimaal getal om te zetten naar een binair getal. We bespreken hier de twee technieken.

Praktisch bestaan er enkele eenvoudige methoden om een decimaal getal om te zetten naar een binair getal. We bespreken hier de twee technieken. Talstelsels 1 Algemeenheden Digitale systemen werken met nullen en enen omdat dit elektronisch gemakkelijke te verwezenlijken is. De transistor kent enkel twee toestanden (geleiden of sperren) Hierdoor

Nadere informatie

Tentamen Programmeren in C (EE1400)

Tentamen Programmeren in C (EE1400) TU Delft Tentamen Programmeren in C (EE1400) 3 feb. 2012, 9.00 12.00 Faculteit EWI - Zet op elk antwoordblad je naam en studienummer. - Beantwoord alle vragen zo nauwkeurig mogelijk. - Wanneer C code gevraagd

Nadere informatie

+ = Talstelsels. Maar wat is dan: -

+ = Talstelsels. Maar wat is dan: - Talstelsels Wie leert rekenen doet dat in het begin vaak met z n vingers erbij: 1 + 4 = Elke vinger krijgt een naam : één, twee,.tien. Eigenlijk is er helemaal geen sprake van rekenen, maar van tellen:

Nadere informatie

Basiskennis lineaire algebra

Basiskennis lineaire algebra Basiskennis lineaire algebra Lineaire algebra is belangrijk als achtergrond voor lineaire programmering, omdat we het probleem kunnen tekenen in de n-dimensionale ruimte, waarbij n gelijk is aan het aantal

Nadere informatie

2 Elementaire bewerkingen

2 Elementaire bewerkingen Hoofdstuk 2 Elementaire bewerkingen 19 2 Elementaire bewerkingen 1 BINAIRE GETALLEN In het vorige hoofdstuk heb je gezien dat rijen bits worden gebruikt om lettertekens, getallen, kleuren, geluid en video

Nadere informatie

Les A-03 Binaire en hexadecimale getallen

Les A-03 Binaire en hexadecimale getallen Les A-03 Binaire en hexadecimale getallen In deze les wordt behandeld hoe getallen kunnen worden voorgesteld door informatie die bestaat uit reeksen 0-en en 1-en. We noemen deze informatie digitale informatie.

Nadere informatie