Dictaat Computerorganisatie in 1005
|
|
- Simona Greta van der Berg
- 6 jaren geleden
- Aantal bezoeken:
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 Tiende editie Technische Universiteit Delft Faculteit EWI Afdeling Softwaretechnologie, Basiseenheid PDS Januari 2007 i Ten Geleide Het studieonderdeel Computersystemen
Nadere informatieProeftentamen 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 informatieProeftentamen 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 informatieAssembly 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 informatiescc = 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 informatieTentamen 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 informatieComputerarchitectuur 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 informatieTentamen 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 informatieBij 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 informatieComputertechniek 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 informatieassembleertaal 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 informatieHOOFDSTUK 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 informatie17 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 informatieZelftest 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 informatiestart -> 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 informatieHoe 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 informatieProgrammeren 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 informatieVan 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 informatieSamenvatting 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 informatieOPDRACHT 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 informatieSmall 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 informatieComputerarchitectuur 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 informatie4,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 informatieInterne 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 informatieEen 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 informatieVariabelen 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 informatie1 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 informatieStacks 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 informatieAlgoritme 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 informatie3. 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 informatieZelftest 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 informatieGetalformaten, 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 informatieAls 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 informatieProgrammeermethoden. 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 informatieZelftest 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 informatieAlgoritme 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 informatieAntwoorden 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 informatiePascal 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 informatieRecursion. 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 informatieModule 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 informatieHoe 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 informatieIn 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 informatieBouwstenen 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 informatieTECHNISCHE 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 informatieLet 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 informatieHet 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 informatieTalstelsels 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 informatieGeheugenbeheer. 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 informatieComputerarchitectuur 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 informatieFlex_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 informatieStudentnummer:... 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 informatiescc =!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 informatieBEGINNER 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 informatieBinair 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 informatieUNIVERSITEIT 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 informatieDe 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 informatieRekenen 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 informatieII. 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 informatierecursie 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 informatieGeheugen 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 informatiePSD. 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 informatieTHEORIE 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 informatieVRIJ 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 informatieOefeningen 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 informatieVersieperikelen. 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 informatieLinux 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 informatieslides12.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 informatieUitleg 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 informatieOnafhankelijke 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 informatieProgrammeermethoden. 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 informatieModule 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 informatieTentamen 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 informatieAfhankelijk 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 informatieDigitale 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 informatieHexadecimale 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 informatieEen 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 informatieVakgroep 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 informatieComputervaardigheden. 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 informatieCombinatorische 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 informatieVAN 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 informatievan 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 informatieMicrocontrollers 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 informatieJava 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 informatieStacks 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 informatieStapelgeheugen. 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 informatieIndirecte 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 informatieinformatica. 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 informatieTentamen 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 informatieFaculteit 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 informatie7 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 informatieConstanten. 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 informatieSoftware 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 informatieOpgaven 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 informatieLab 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 informatiePraktisch 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 informatieTentamen 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 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 informatieBasiskennis 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 informatie2 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 informatieLes 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