Assembly & Embedded Systems

Vergelijkbare documenten
Linux Assembly Uitwerkingen van de vragen en opdrachten

Assembly en Assemblers. Processoren 5 januari 2015

Hoofdstuk 7. Computerarchitectuur

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

Samenvatting Computer Architectuur

De CPU in detail Hoe worden instruc4es uitgevoerd? Processoren 28 februari 2012

Module 4 Hoofdstuk 1. Programmeertalen

Inhoud vandaag. Interrupts. Algemeen ARM7 AIC

Computerarchitectuur en netwerken. Memory management Assembler programmering

Hoe werkt een computer precies?

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

De Arduino-microcontroller in de motorvoertuigentechniek (2)

2 Algemene opbouw van een computersysteem

De AT90CAN microprocessor van ATMEL in de motorvoertuigentechniek (2)

Antwoorden zijn afgedrukt!!!!!!!

scc = b) CD AB

Getalformaten, timers en tellers

Digitale technieken Microprocessoren

Software Reverse Engineering. Jacco Krijnen

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

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

Studentnummer:... Opleiding:...

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

Hoe werkt een rekenmachine?

Antwoorden vragen en opgaven Basismodule

von-neumann-architectuur Opbouw van een CPU Processoren 1 december 2014

Een.NET-besturingssysteemtoolkit. Discovering Cosmos. Sijmen J. Mulder

Microcontrollers Week 2 Opbouw ATmega32 controller, instructies Jesse op den Brouw INLMIC/

assembleertaal F. Vonk versie

FAT32 disk structuur 2007 stam.blogs.com

Oefeningen Interpretatie I Reeks 6 : Registermachines

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

Computerarchitectuur en netwerken. Memory management Assembler programmering

Bijlage D. Binair rekenen

Geheugenbeheer. ICT Infrastructuren 2 december 2013

ES1 Project 1: Microcontrollers

2 Elementaire bewerkingen

Computerarchitectuur en netwerken Toets 1 4 okt

scc =!F3.!F2 b) CD AB

Vakgroep CW KAHO Sint-Lieven

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)

Inleiding microcontrollers. Week 2 Introductie microcontroller Jesse op den Brouw (met dank aan Ben Kuiper) INLMIC/

Talstelsels, getalnotaties en Ascii code

Rekenen met computergetallen

Examen computerarchitectuur

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

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

Jörg R. Hörandel Afdeling Sterrenkunde

slides12.pdf December 14,

De Arduino-microcontroller in de motorvoertuigentechniek (8)

Talstelsels en getalnotaties (oplmodel)

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

slides2.pdf April 12,

Wat is Arduino? Arduino = microprocessor (Atmel)

Digitale technieken Deeltoets II

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

Computertechniek vorige examens

Programmeren: Visual Basic

Inleiding Digitale Techniek

IN1805 I Operating System Concepten

Les A-03 Binaire en hexadecimale getallen

17 Operaties op bits Bitoperatoren en bitexpressies

Deel 1: Arduino kennismaking. Wat is een microcontroller, structuur van een programma, syntax,

Microcontrollers Week 1 Introductie microcontroller Jesse op den Brouw INLMIC/

COMPUTERVAARDIGHEDEN EN PROGRAMMEREN

Tentamen 17 augustus 2000 Opgaven Computerarchitectuur

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.

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

11011 Processor MMI Intro. Binaire representatie. Computer: Logische opbouw (Von Neumann) 3-input 1-hot detector.

Stapelgeheugen. Processoren 6 maart 2012

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

Processoren. Marc Seutter & David N. Jansen 10 November 2014

Hoofdstuk 6: Digitale signalen

De computer als processor

De Arduino-microcontroller in de motorvoertuigentechniek (6)

Project Digitale Systemen

Tentamen Computersystemen

Bij dit hoofdstukken horen geen opgaven.

Sequentiële Logica. Processoren 24 november 2014

Inleiding Digitale Techniek

Labo digitale technieken

De Arduino-microcontroller in de motorvoertuigentechniek (4)

Debugging in embedded en native systemen met GDB

ES1 Project 1: Microcontrollers

Handleiding ISaGRAF. Wil men het programma bewaren, dan is het verstandig een back-up te maken: C9 Back-up / Restore

Tentamen Computersystemen

Les B-03 Technologie: de werking van de processor

2 Elementaire bewerkingen

Digitale en analoge technieken

VAN HET PROGRAMMEREN. Inleiding. Het spiraalmodel. De programmeertaal. vervolgens de berekening van het totale bedrag, incl. BTW:

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

Computerarchitectuur. H&P Appendix A: Instruction Set Principles

Informatica 2. Met uitwerkingen n.a.v. document van Elvire Theelen in Luc bijgewerkt door Peter van Diepen

EE1410: Digitale Systemen BSc. EE, 1e jaar, , 10e hoorcollege

Examen computerarchitectuur

Zelftest Inleiding Programmeren

Hoofdstuk 3: Processen: Beschrijving en Besturing. Wat is een proces? Waarom processen? Wat moet het OS ervoor doen? Is het OS zelf een proces?

Computerarchitectuur. H&P Appendix A: Instruction Set Principles

Logische Schakelingen

Transcriptie:

Assembly & Embedded Systems Hoofdstuk 1 Digitale Techniek Analoog Zonder tussenstappen, continu Digitaal Met tussenstappen, in discrete stappen opgedeeld, niet-continu Binair Een digitaal signaal met slechts twee toestanden, aan/uit Bit Element dat slechts twee toestanden kent, afk. Binary Digit Boolean Kleinste eenheid van gegevens (ofwel een bit) Nibble Groep van 4 bits, 2^4 = 16 toestanden mogelijk Byte Word Groep van 8 bits, 2^8 = 265 toestanden mogelijk SI-prefix Een omschrijving van een eenheid die de veelvoud ervan weergeeft (k, M, G, T), veelvoud van 1000 Binary-prefix 2^10 = 1024 -> k (ipv 1000) Logische poort AND, OR, XOR, NOT Waarheidstabel Tabel die op basis van de input(s) van een logische poort de output weergeeft Booleaanse algebra Vereenvoudigen van logische schakelingen (zie boek) Wetten van De Morgan Zie boek Combinatorische logica Logische functie waarbij dezelfde combinatie van ingangssignalen altijd hetzelfde uitgangssignaal tot gevolg heef (geen geheugen) Sequentiële logica Logische schakelingen met een geheugen-functie (flip-flop) (zie boek)

Transistor Elektronische schakelaar (sinds 1947) begin van IC (Integrated Circuit) tijdperk Microprocessor MPU is in staat om een instructie uit te voeren en bestaat uit signaallijnen die alleen uitgang (adreslijnen) kunnen zijn en signaallijnen die zowel ingang als uitgang (datalijnen) kunnen zijn. Een processor bestaat uit een aantal logische blokken waarbij de verbinding (bedrading) wordt bepaald door de instructie van dat moment. De databus is de enige interface. De functionaliteit is beperkt tot het uitvoeren van instructies en het gebruiken van de databus. Voor alle andere functionaliteit zijn andere IC s aanwezig. Een microprocessor benadert een IC dmv de databus. Het IC heeft een bepaald adresgebied waar de registers van het IC beschikbaar zijn. De microprocessor leest, schrijft van/naar locaties in dit gebied om met het IC te communiceren. Elk IC heeft een ander adresgebied (memorymap, zie HS4). De microprocessor beheert de adreslijnen (busmaster, zie HS4) Central Processing Unit CPU verwerkt opdrachten, is het hart van elk computersysteem en voert programma s uit. Microcontroller MCU is een microprocessor uitgebreid met andere functies (intern geheugen, timers, I/O poorten). De databus is hierbij intern aanwezig en soms ook naar buiten uitgevoerd zodat extra chips op de databus aangesloten kunnen worden. Vaak is er ook RAM/ROM geintegreerd. Arithmethic Logic Unit / Uitvoeringseenheid ALU voert logische en rekenkundige bewerkingen uit en is het belangrijkste onderdeel van een CPU Accumulator (Register AX) Het resultaat van een logische/rekenkundige bewerking wordt vaan in het Universeel (accumulator) register (geheugenelement) weggeschreven. Vlagregister Gegevens over het resultaat van een bewerking worden in het vlagregister gezet (resultaat nul of negatief) Instructiewijzer Na uitvoeren van een instructie wordt de inhoud van het instructiewijzerregister gewijzigd zodat een nieuwe instructie kan worden uitgevoerd (instruction pointer, program counter) Instruction code De bitpatronen die een instructie voorstellen opgebouwd uit de operation code (opcode) en eventueel een parameter Machinetaal = instruction code Instruction set Verzameling instructies die kan verschillen per processorfamily Mnemonic Een korte beschrijving van een instructiecode zodat deze begrijpelijk wordt (ezelsbruggetje)

Assembler Vertaalt mnemonics naar instructiecode. Naast bitpatronen kunnen ook getallen gebruikt worden. Geheugenlocaties kunnen aangegeven worden met een naam ipv een nummer Assembleertaal Groep regels met als doel (mbv mnemonics) de instructies van een machine vast te leggen

Hoofdstuk 2 Talstelsels Cijfer Teken, bijvoorbeeld 5 Getal Geeft een waarde weer Grondtal (radix) Geeft de hoeveelheid cijfers weer die in een talstelsel zijn gedefinieerd (bijv. 10, 8, 2) Hexadecimaal 16 als grondtal. 0 t/m 9 en A tm F. Een 0x voor het getal of een h achter het getal geeft aan dat het een HEX getal betreft Carry-bit Hoogste (niet passende) bit wordt doorgeefbit genoemd. Is die bit 1 dan heeft er een overflow plaatsgevonden Unsigned overflow Het resultaat is positief en het carry bit valt buiten het register. Wordt aangegeven dmv carry-bit in vlagregister Unsigned underflow Het resultaat is negatief en er is geen borrow-bit beschikbaar. Wordt aangegeven dmv carry-bit in vlagregister Tekengroottenotatie (sign-magnitude) Hierbij geeft het meest linker bit (tekenbit / signbit) het teken aan (positief of negatief) 1,0. Hierbij bestaat een positieve 0 en een negatieve 0 (eencomplementsnotatie) Tweecomplementsnotatie Inverteer de binaire waarde en tel daar 1 bij op. (1x 0) Zie Vossebeld Eencomplementsnotatie Inverteer de binaire waarde (2x 0) Zie Vossebeld MSB Most Significant bit. (bij 0x3A8134E0 is het MSB 0x3A) LSB Least Significant bit (bij 0x3A8134E0 is het MSB 0xE0)

Big Endian De MSB wordt naar de eerste geheugenlocatie geschreven en alle volgende bytes worden op eenvolgende geheugenlocaties geplaatst 0x12345678 MSB: 0x12 0x00FF 0x0100 0x0101 0x0102 0x0103 0x0104 (Geheugenlocatie) 0x?? 0x12 0x34 0x56 0x78 0x?? (Data) Little Endian De bytes worden in omgekeerde volgorde in het geheugen geplaatst 0x12345678 MSB: 0x12 0x00FF 0x0100 0x0101 0x0102 0x0103 0x0104 (Geheugenlocatie) 0x?? 0x78 0x56 0x34 0x12 0x?? (Data) Integer Gehele getallen. Er is geen komma aanwezig Fixed Point-notatie Komma staat op een vaste plaats. Bij bewerkingen op heel grote of kleine getallen schieten integers en de fixedpointnotatie tekort. De getalbreedte is te klein. Floating point Wetenschappelijke notatie met het grondtal 2. Bij berekeningen wordt afgerond Binary Code Decimal Bij een BCD wordt een decimaal getal in 4 bits voorgesteld waarbij de combinaties lopen van 0000b tot en met 1001b. Alle hogere combinaties zijn ongeldig. Er is geen tekenbit aanwezig ASCII Tekenset waarin tekens aan een getal verbonden worden bijv. 97 = a en 98 = b Gray-Code Binaire notatie waarbij bij twee opeenvolgende getallen slechts een bit verandert. (zie boek p2.12)

Hoofdstuk 3 Assemblers en compilers Computerprogramma (uitvoerbaar bestand / executable) Een programma beschijft in welke volgorde instructies uitgevoerd moeten worden Programmeertaal Gedefinieerde manier om computers opdrachten te geven Vocabulair Voorgedefinieerde woorden of symbolen Semantiek De betekenis van woorden en symbolen Syntaxis De regels voor structuur (zinsbouw) Low-Level programmeertaal Talen die dicht bij de hardware staan Assembleertaal High-Level programmeertaal Een abstractielaag schermt de eigenschappen van de microprocessor af Vb. C, C#, Java, VB en C++ Entry Point Beginpunt geeft aan waar de functionaliteit begint (afhankelijk van de context) Adres meestal 0x0 Interpreter Een computerprogramme die een regel van een High-Level-programma leest, vertaalt (interpret) en uitvoert (CMD voor DOS en BASH voor Linux) Compiler Vertaalt een high-level programma naar machinetaal en bewaart het resultaat Cross-Compiler Het platform van het te compileren programma heeft een ander doelplatform (processorfamilie) JIT-Compilers Just In Time, Java,.NET, Perl, De broncode wordt vlak voor de uitvoer gecompileerd. Niet regel voor regel (zoals een interpreter) maar in grote blokken. Deze blokken kunnen op schijf bewaard worden en later hergebruikt. Een JIT heeft de flexibiliteit van een interpreter als de snelheid van een compiler Assembler (Assembly Compiler) De vertaler van een assembleertaalprogramma naar machinecode (MASM, NASM, TASM) Disassembler Machinecode wordt omgezet naar een assembleertaalprogramma

Compile Time Beslissingen die genomen worden gedurende het compileren. Deze beslissingen zijn terug te vinden in de executable Run Time Als een beslissing tijdens het lopen (runnen) wordt genoemd First Generation programmeertalen Machinecode (enen en nullen) Second Generation (2GL) programmeertalen Mnemonics (bij assembleertaal neemt de assembler de vertaling voor zijn rekening) Third Generation (3GL) programmeertalen Structured Language programmeertalen.blokken met statements (IF, THEN...) BASIC, C, C++, C#, Java, Javascript, Perl 4GL / 5GL De processor wordt niet meer verteld hoe een programma uitgevoerd moet worden maar wat het eindresultaat moet zijn. De compiler vertaalt deze randvoorwaarden naar een set van algoritmen voor de microprocessor. De bouwstenen waarmee geprogrammeerd wordt zijn algoritmen. Vb. SQL en Visual Basic

Overzicht algemene instructieset MOV Move, instructie verplaatst gegevens tussen registers en geheugenadressen Om een waarde van een adres in het geheugen naar een ander adres in het geheugen te verplaatsen zijn twee MOV-instructies nodig, van het adres in het geheugen naar het register en van het register naar het adres in het geheugen ADD, SUB, INC, DEC, DIV, MUL (rekenkundige instructies) Add, subtract, increment, decrement, divide, multiply AND, OR, XOR, NOT (Logische instructies) (tweecomplementnegatie-instructie NEG) Standaard logische operatoren JZ, JC (Programmacontrole-instructies) De JZ en JC instructies gebruiken de zero- en carry-flag uit het vlagregister. JAE (Jump Above or Equal) gebruikt de groottenotatie JGE (Jump Greater or Equal) gebruikt de tweecomplementnotatie JMP (Jump) Maakt een onvoorwaardelijke sprong CALL (Call) Maakt een sprong om elders door te gaan het het uitvoeren van instructies Preprocessor en Directives Macro Een programma kan bestaan uit veel instructies. Vaak vervullen een paar instructies een functie die vaak gebruikt wordt. Dit groepje instructies kan in een macro worden opgenomen. Preprocessor Het computerprogramma dat alle macro s verwerkt en het tijdelijke bestand maakt. De meeste assemblers hebben een preprocessor Conditioneel assembleren Een veel toegepaste mogelijkheid van de preprocessor. Als een conditie waar is worden de instructies na de conditie in het tijdelijke bestand geplaatst en door de assembler vertaald. Als de conditie niet waar is worden de instructies vaak als commentaar in het tijdelijke bestand geplaatst. Directives Aanwijzingen die het gedrag van de assembler beinvloeden. Bepalend voor de manier waarop een assembleerprogramma vertaald wordt. Label Symbolische naam dat wijst naar een geheugenadres. Worden gebruikt bij programma-controle instructies Pseudo-instructies Deze instructies hebben hetzelfde formaat als echte instructies. Ze komen niet overeen met een machine-instructie. Er wordt hiervoor dan ook geen code gegenereerd. In plaats van code-generatie reserveert de pseudoinstructie geheugen voor toekenning van gegevens. In een programma kan een label vervolgens naar het betreffende geheugenadres

Syntaxis (#2) Een programma bestaat uit regels. Een regel bevat een instructie, een pseudo-instructie, een macro of een directive. Een regel bestaat uit drie elementen: Label: instructie ;commentaar Elk van deze elementen mag weggelaten worden. Het belangrijkste deel is de instructie met de operanden Twee veelgebruikte syntaxissen: Intel-syntax De eerste parameter is het doel en de tweede parameter de bron. De getalbreedte wordt door parameters aangegeven Add eax, 4 Mov al, byte ptr foo AT&T-syntax De eerste parameter is de bron en de tweede parameter het doel. De getalbreedte wordt in de instructie-mnemonic vermeld Addl Movb $4, %eax foo, %al Backus-Naur Form notatie (BNF) De BNF-notatie gebruikt substitutieregels, producties om een taal vast te leggen. Een productie geeft aan waarmee een symbool vervangen mag worden. (boek 3.13) Source file Bronbestand (bij assemblers vaak met extensie.asm). Bevat regels met instructies, pseudoinstructies, directives en macro s Header file Dit bestand definieert de interface en wordt in de kop van een source-file door de preprocessor ingelezen (bestandsextensie.inc / include). Hierin worden veel macro s gedefinieerd. Ook wordt dmv directives aangegeven dat bepaalde functionaliteit extern beschikbaar is Object file De meeste assemblers produceren deze niet uitvoerbare bestanden (machinecode). (coff en elf). De output kan met een HEX editor bekeken worden Linker Een computerprogramma dat ervoor zorgt dat een of enkele objectbestanden samen tot een uitvoerbaar bestand omgevormd worden (.lnk) De programmeur maakt dit bestand aan. Koppelbestand Tool Chain Een verwerkingsproces, keten, om een uitvoerbaar bestand te maken (GCC, IAR, Hi-tech)

.lst Lijstbestand waar zowel de programmacode als de hexadecimale weergave van de machinecode te zien is. Linkerkolom machinecode en tweede kolom de instructie. Hulpzaam bij het begrijpen van de werking van de assembler.bin Het eindresultaat is een uitvoerbaar bestand (meestal binair) (Dos/Windows EXE/COM, Unix geen extensie).map Kaartbestand geeft informatie (entry-point, gebruikte objecten) over het uitvoerbaar bestand.

Hoofdstuk 4 Architectuur van de 8086-processor Datasheet Document waarin de functionaliteit van de processor beschreven wordt Application Note Document waarin de toepassing van de processor beschreven wordt Errata-sheet Gemaakte fouten worden hierin gecorrigeerd Memory-Map Geeft een overzicht van alle adresgebieden en de functie/chip die bij de adresgebieden in een systeem horen Von-Neumann (geheugenarchitectuur) Instructie- en gegevensgebieden volgen elkaar op. Programma en gegevens kunnen gezamelijk in een geheugengebied voorkomen. De 8086-microprocessor heeft een Von-Neumanngeheugenarchitectuur Harvard (geheugenarchitectuur) Programma en gegevens hebben een gescheiden geheugengebied Busmaster Busmaster (microprocessor) heeft controle over de gegevensbus. Andere chips zijn slaves en gehoorzamen Blokschema CPU Architectuur Het ontwerp of de opbouw van de microprocessor (programmeurmodel) Aansluitschema Een beschrijving van de aansluitingen van een microprocessor Reset-pin (initialiseren) Een speciale pin om het uitvoeren van instructies stop te zetten. Het uitvoeren van instructies start, vanaf het entry-point, als de reset-pin laag is. Gegevensbus / Databus (Zie microprocessor HS1). De 8086-microprocessor beschikt over 20 adreslijnen. De eerste 16 adreslijnen hebben een eigen pin. 2^20 = 1Mbyte Clock De kloksnelheid (wisselend digitaal signaal) bepaald hoe snel de processor taken uitvoert Interrupt Als het signaal op de interrupt-pin verandert wordt het normale programma onderbroken. De microprocessor zal tijdelijk instructies uit een ander programma uitvoeren. Als dit is afgerond wordt de verwerking van het normale programma weer voortgezet

Registers Geheugenplaatsen binnen de processor die een bepaalde functie vervullen. De instructies die de microprocessor uitvoert hebben vaak registers als argument Vlagregister Dit register is opgedeeld in bits die elk een functie hebben. De meeste vlaggen geven het resultaat van een instructie weer (statusvlag) Statusvlaggen CF Carry flag (unsigned operatie groter of lager dan nul) PF Parity flag (resultaat heeft een even aantal bits gezet) AF Adjust flag (Carry/borrow in het nibble) ZF Zero flag (resultaat is nul) SF Sign flag (teken van het resultaat) TF Trap flag (uitvoeren van 1 instructie is mogelijk) IF Interrupt flag (interrupts mogelijk) DF Direction flag (string richting) OF Overflow flag (signed operatie te groot of te klein) Segmentregisters Om de beperking van het instructieregister (2^16=64kb, 16-bits breed) op te heffen worden twee registers gebruikt om een adres aan te wijzen. Een register als startpunt en het tweede register als afstand vanaf het startpunt. Hierdoor kan het gehele geheugenbereik van de 8086 2^20 (1Mb) aangesproken worden Segment Het adresgebied dat met een vast startpunt en een variabele afstand benaderd kan worden Segment: offset EA = Segment register * 16 + Offset register is de formule die wordt gebruikt voor het berekenen van het effectieve adres (EA) Platte geheugenmodel De segmentregisters hebben allemaal dezelfde waarde waardoor het programma inclusief gegevens maximaal 64kB groot is. Segment geheugenmodel De segmentregisters hebben niet dezelfde waarde. Bestaat uit vier segmentregisters CS-register: Code Segment (werkt samen met het instructiewijzerregister) De microprocessor leest instructies van het adres CS:IP (Instruction Pointer) SS-register: Stack-Segment (werkt samen met de Stack Pointer en de Base Pointer) DS-register: Data-Segment (wordt gebruikt voor gegevens) ES-register: Extra-Segment (wordt gebruikt voor gegevens) Pointer- en indexregisters SI-register: Source-Index (geeft een element in een rij aan, gegevens worden uit deze rij gelezen) DI-register:Destination-Index (geeft een element in een rij aan, gegevens worden naar deze rij geschreven)

Stackpointer Wordt gebruikt om tijdelijk gegevens op te slaan. De gegevens worden hierbij gestapeld op basis van LIFO (Last In First Out) push/pop. Er kunnen dus geen elementen omgewisseld worden Reset-vector Geeft een adres aan waar de microprocessor na reset naartoe springt om te beginnen met het uitvoeren van instructies. De microprocessor voert een sprong uit met de reset-vector als parameter naar een reset-bootstrap. De 8086 beschikt niet over een reset-vector! Reset-bootstrap De groep instructies die uitgevoerd worden na reset (en in het algemeen voor de eerste sprong) Gewoonlijk wordt met de eerste instructies de stack opgezet. Gegevens krijgen een vooraf vastgestelde waarde. Eventuele I/O poorten worden ingesteld. BIOS Basic Input Output System Embedded software Ingesloten in een apparaat en niet zomaar te veranderen. Kan normaliter alle functionaliteit van de microprocessor benaderen. GUI Graphical User Interface CLI Command Line Interface

Hoofdstuk 5 Assembler voor de 8086-processor NASM Netwide Assembler. Assembler voor de 8086 microprocessor Assembler Directives NASM heeft twee soorten assembler directives (nodig om de assembler meer informatie te verschaffen, zoals het entrypoint) - Gebruikers directives, macro s die NASM omzet naar primitieve directives - Primitieve directives Voorbeelden gebruikers directives - BITS (16 of 32), geeft aan voor welke processormode NASM-codes moet genereren (bijv. Protected mode, virtual 8086 mode) - ORG, alleen van toepassing als NASM pure machinetaal moet genereren (MSDOS.com bestand) Het entry-point van een.com bestand ligt op 0x0100. Met de ORG-directive kan dit entrypoint opgegeven worden..start: Dit is een label en geen directive. OMF-linkers (Microsoft OMF Object file) gebruiken dit label om verschillende objectbestanden tot een uitvoerbaar bestand te genereren. Per uitvoerbaar bestand is 1..start: label toegestaan. SECTION (SEGMENT) De geheugengebieden die door de linker gereserveerd worden t.b.v. de verzamelde machineinstructies uit alle objectbestanden, de gegevens die bij het opstarten een startwaarde moeten krijgen en gegevens die niet geïnitialiseerd hoeven worden. SECTION.code Text/code, data, bss en stack. Sectienamen met een speciale betekenis. Een segment van het type text bevat binaire code. SECTION directive Verandert de sectie waarin de volgende instructies worden geplaatst.de eerste parameter geeft de sectienaam aan, de tweede parameter evt de sectietypenaam EXTERN directive Geeft aan dat een label in een andere module gedefinieerd is en dat het label in het huidige.asm bestand gebruikt mag worden GLOBAL directive (globale variabele) Geeft aan dat een label door een andere module gebruikt mag worden EXTERN_teller GLOBAL_teller De _ geeft aan dat het label ook buiten het.asm bestand bekend is Operand (parameter) Bestaat uit een register, constante of een locatie in het geheugen.

Effectief geheugenadres (offset) Een geheugenadres bestaat uit een segment waarde en een offset waarde. Deze offset wordt het effectief geheugenadres genoemd. Dit geheugenadres bevat niet de inhoud van dit adres! Gegevens tussen twee effectieve geheugenadressen kunnen niet direct verplaatst worden. Het effectief geheugenadres kan een expressie bevatten mov al, [teller +1]. De assembler rekent het effectieve geheugenadres compile-time uit! Indien in de expressie bepaalde registernamen voorkomen (baseregisters, indexregisters) rekent de assembler het effectieve geheugenadres run-time uit! [en] De inhoud van een effectief geheugenadres wordt weergegeven met behulp van blokhaakjes. Als de blokhaakjes ontbreken wordt het geheugenadres zelf aangeduid en niet de inhoud van het geheugenadres Instructievoorbeelden: De instructie mov ax, foo kopieert de inhoud van foo naar ax. Foo is hierbij een constante De instructie mov ax, *foo+ kopieert de inhoud van het geheugenadres dat aangegeven wordt door foo naar ax De instructie inc [teller] is geen geldige NASM instructie. De getalbreedte is onbekend De instructie inc word [teller] is wel een geldige NASM instructie. De getalbreedte is bekend MOV Move, verplaatsen. Na het uitvoeren van de MOV-instructie zijn bron en doel gelijk (copy) De instructie mov ds, cs is ongeldig (segmentregisters kunnen niet direct gekopieerd worden) en moet vervangen worden door mov ax, cs en mov ds, ax Immediate Heeft betrekking op de manier waarop de microprocessor de operand leest. De constante is onderdeel van de machinecode en is in het codesegment opgeslagen. Bij het lezen van de machinecode leest de microprocessor direct de constante Displacement Verplaatsing, meestal een label, kan ook een getal zijn (positief, nu of negatief). Wordt door de assembler uitgerekend BP-register en BX-register Deze base-registers kunnen in de berekening van het effectieve geheugenadres opgenomen worden. Kunnen niet gelijktijdig gebruikt worden. De microprocessor telt de inhoud van het register op bij de displacement en leest/schrijft de inhoud van het effectief geheugenadres mov, ax, [bp + datablok] SI-register en DI-register Deze index-registers worden veel gebruikt om door lijsten heen te lopen en daar bewerkingen op uit te voeren. Kunnen niet gelijktijdig gebruikt worden Segment override prefix (segment overschrijving voorvoegsel) De code waarbij het standaardsegment per instructie verandert door voor de machinecode een speciale machinecode te plaatsen

Gegevensverplaatsingsinstructies PUSH, POP: Push en pop stack, manipuleert de stack (PUSH ax of POP ax) XCHG: Exchange data, verwisselt twee operands (XCHG al, ah) IN en OUT: Input en output data, leest/schrijft gegevens, via de gegevensbus van/naar peripheral ic (IN al, 0x10) XLAT: Translate data, leest een waarde in een array (XLAT) LEA: Load effective address, berekent de offset (LEA ax, [klaar + SI]) LDS en LES: Load DS of ES, leest een pointer (LDS ax, [cs:tabel]) LODSx, STOSx en MOVSx: Load, store en move string, manipuleert strings (LODSB). Deze instructies worden vaak samen met REP (repeat) gebruikt Rekenkundige bewerkingen ADD (Addition), Optellen, de eerste en tweede operand worden bijelkaar opgeteld. Het resultaat bevindt zich in de eerste operand ADC (Add with carry), De functie is doel = doel + bron + carry. Deze functie wordt gebruikt om grotere getallen bij elkaar op te tellen. Als het resultaat niet in een 16-bits register past wordt de overflow meegenomen naar de ADC CMP, gelijk aan SUB-instructie echter wordt bij de CMP-instructie de eerste operand (doel) gewijzigd. INC en DEC: Increment, Decrement SUB en SBB: Subtract MUL en DIV: Multiply en Divide AAA, DAA, AAS, DAS, AAM en AAD: Adjust, conversie van BCD naar Hex en vv Getalbreedte Voor het optellen of aftrekken moeten de getalbreedtes van de registers gelijk zijn. add [label], De instructie ADD [label], 0x01 is geen geldige NASM instructie. De getalbreedte is onbekend

Hoofdstuk 6 Simulatie van de 8086-processor Simulator Instructies worden door de simulator geïnterpreteerd en het resultaat wordt ook door de simulator berekend. De gesimuleerde processor hoeft niet fysiek aanwezig te zijn. SimpSim Simple Simulator, Eenvoudige machinetaalsimulator. Bevat een editor, assembler en een simulator SimpSim Mnemonics Komt grotendeels overeen met de NASM De STORE instructie wijkt af. Hier is de tweede operand het doel en de eerste operand de bron NASM gebruikt voor alle verplaatsingen de MOV-mnemonic. Simpsim heeft hiervoor de LOAD, MOVE en STORE mnemonics. Simpsim kent geen PUSH en POP instructies Brookshear-microprocessor Fictieve processor die door SimpSim gebruikt wordt. Bevat 16 algemene registers. Bevat geen vlagregister Bevat twee systeemregisters: PC-register, programcounter, geeft het adres van de volgende instructie aan IR-register, instructieregister, geeft de machinecode van de laatst uitgevoerde instructie aan Instructieset bestaat uit 16 instructies: 6 instructies voor gegevensverplaatsing 6 instructies voor rekenkundige bewerkingen 4 instructies om de programmacontrole te beïnvloeden Geen instructies voor stack-manipulatie en call-instructies aanwezig Machinecode bestaat uit 2 bytes, 4 nibbles. Het eerste nibble geeft de opcode aan. De andere nibbles zijn operands Step De step-knop voert een regel instructie uit Run De run-knop voert alle instructies achter elkaar uit MS DOS Debug 8086-microprocessor debugger met een CLI (Command Line Interface) Onvoorwaardelijke JUMP-instructie (Branch-instructie) JMP, voert een onvoorwaardelijke sprong uit. Een parameter geeft het doel aan

Voorwaardelijke JUMP-instructie(Branch-instructie) JmpEQ, Jump Equal, Vergelijkt twee aangegeven registers en springt naar het label als de inhoud van deze twee registers aan elkaar gelijk zijn JmpLE, Jump Less Equal, springt als de eerste operand kleiner of gelijk is aan de tweede operand JZ, Jump Zero, springt als de zero-vlag gezet is JB, groottenotatie, unsigned JL, tweecomplementnotatie, signed Signed Signed jump-instructies gebruiken tweecomplementnotatie Unsigned Unsigned jmp-instructies gebruiken groottenotatie SAL-instructie Shift Arimethic Left, schuif rekenkundig links, binaire schuifoperatie (delen) Wordt gebruikt ipv SHLinstructie waarbij tekenbit niet behouden wordt. Een SAL-instructie heeft wel hetzelfde resultaat als een SHL-instructie Een SAR-instructie heeft niet hetzelfde resultaat als een SHR-instructie, de functies verschillen

Hoofdstuk 7 Functies PUSH-instructie Plaatst een element op de stack POP-instructie (PULL) Haalt een element van de stack De instructieset is uitgebreid met PUSHF en POPF voor statusvlaggen Stack-overflow Bij teveel PUSH-instructies kan de stack pointer buiten de stack gaan wijzen, er ontstaat een stackoverflow Simpsim (Push Pop alternatief) Simpsim kent geen PUSH en POP instructies. De STORE en ADDI instructie vormen samen de PUSH instructie. Omdat de stack pointer naar de eerste vrije plaats wijst, kan de STORE instructie de gegevens direct op de stack plaatsen. Voor een POP instructie moet eerst de ADDI instructie uitgevoerd worden. De stack wijst immers naar een vrije plaats. Het eerste geldige gegeven bevindt zich een element terug. De LOAD instructie kopieert het element van de stack naar een register. De stack zelf kan mbv de directive ORG en de pseudo-instructie DB worden gedefinieerd Variabele Een gegevensopslagplaats, vaak met een symbolische naam, waar gegevens van gelezen en naar geschreven kunnen worden (geheugenadres, element op de stack of een register) Constante In deze context een variabele die alleen leesbaar is Twee belangrijke eigenschappen van een variabele: levensduur en bereikbaarheid Levensduur De levensduur van variabelen verschilt. Een teller voor een lus is alleen tijdens het uitvoeren van die lus belangrijk, terwijl computerprogramma-argumenten meestal gedurende het hele programma belangrijk zijn. Bereikbaarheid De GLOBAL-directive stelt een variabele beschikbaar voor andere modules, terwijl andere variabelen alleen binnen een module beschikbaar zijn (LOCAL) Functie (subprogramma, subroutine, procedure) Een groep instructies die samen een subprogramma vormen.vaak voert een functie 1 bepaalde taak uit. Een functie kan meermalen aangeroepen worden. Met functies wordt voorkomen dat grote groepen instructies dubbel in een programma aanwezig zijn. De naam van een functie, mits juist gekozen, is voldoende om het doel van de functie te begrijpen

CALL-instructie Verandert de programmacontrole en is te vergelijken met de JMP-instructie. De CALL-instructie voert een extra taak uit. Voor de wijziging van het instructiewijzer-register wordt het intructiewijzerregister op de stack gezet RET-instructie Verandert de programmacontrole. Het instructiewijzer-register wordt gewijzigd. De nieuwe waarde van het instructiewijzer-register is niet als parameter bij de instructie aanwezig. De nieuwe waarde is aanwezig op de stack. De RET-instructie haalt een waarde van de stack en kopieert deze waarde in het instructiewijzer-register: POP. De volgende instructie die de microprocessor uitvoert bevindt zich op dat geheugenadres Calling Convention Specificeert de methode waarop gegevens uitgewisseld worden tussen hoofdprogramma en subprogramma Stack Frame Groep van elementen die ten behoeve van een functie op de stack staan Prologue functie Groep instructies aan het begin van een functie die de stack en registers gereed maken voor gebruik in de functie Epilogue functie Groep instructies aan het einde van een functie die registers en de stack weer herstellen Re-Entrant functie Een functie die correct blijft werken als de functie wordt aangeroepen terwijl de functie al actief is Recursief functie Een functie die zichzelf, evt via een andere functie, aanroept. Moet daarom re-entrant zijn Side-Effect functie De functie geeft naast de return-functie ook nog op een andere manier een resultaat terug. Een nadeel is dat een programma lastiger te begrijpen is

Hoofdstuk 8 Interrupts Poll-Interface methode De microprocessor kan de gegevens uit het dataregister continu lezen. De microprocessor neemt het initiatief om een leesactie uit te voeren en om een nieuwe waarde te vragen. Er zit altijd enige tijd tussen twee leesacties. Hierdoor bestaat de kans dat de microprocessor een gegeven mist. Dit is een nadeel. Een voordeel is dat het relatief eenvoudig te implementeren is Interrupt-Interface methode De controller kan met een delta-pulsgenerator uitgebreid worden. Er wordt een pulssignaal op een output-pin gegenereert als het dataregister verandert. De microprocessor bezit een pin waar dit signaal op aangesloten wordt, de interrupt pin. Het signaal op deze pin verandert het programmaverloop (event-driven) Interrupt-Service Routine (ISR) De functie die bij een interrupt aangeroepen wordt. Deze routine voert de nodige instructies uit en geeft de controle terug aan het hoofdprogramma. Een ISR wordt door een IRET-instructie (Interrupt Return) afgesloten. Een ISR wisselt informatie uit met het hoofdprogramma dmv globale data, bijvoorbeel variabelen of geheugen in controllers Interrupt Request (IRQ) Het verzoek tot het uitvoeren van een interrupt functie. Hardware Interrupt is asynchroon, een software interrupt is synchroon Asynchroon signaal Een signaal dat op elk moment van status kan veranderen en geen relatie heeft met een referentiesignaal (meestal een klokpuls) Vectortabel Een lijst met adressen van functie entry points. Een adres van een entry-point wordt een vector genoemd want het wijst naar de afhandelingsroutine INT-instructie Voor het uitvoeren van de INT-instructie bewaart de microprocessor de status van het hoofdprogramma (program counter en het vlagregister). Deze worden op de stack opgeslagen IRET-instructie De functie van een IRET-instructie is gelijk aan die van een RET-instructie. De uitvoering is uitgebreider. De IRET-instructie haalt het vlagregister van de stack Concurrent Taken die gelijktijdig actief zijn (multitasking) Atomaire actie Een actie is atomair als de actie niet gesplitst of onderbroken kan worden. Een rad-modify-writeinstructie modificeert een gegeven atomair (AND-status, masker, INC-teller) Mutex Als het hoofdprogramma gegevens benadert mag een andere taak de gegevens niet benaderen en andersom. Dit heet mutual exclusion, mutex

Kritische sectie Een deel van een programma, een groep instructies, die niet onderbroken kan worden door een bepaalde andere taak. De interrupts worden tijdelijk gemaskeerd Interrupt latency De tijd tussen het genereren van de interrupt door een controller en het uitvoeren van de taak die bij de interrupt hoort Second Level De bijbehorende taak in het hoofdprogramma heet de second level interrupt handlers, tweede niveau Toepassing Interrupts Communicatiepoorten (USB, Ethernet), opslagmediums (Harddisks). Ook timer-, teller- en spanningsverliesindicatie-ics hebben vaak een interrupt lijn. In Windows zijn interrupts voor de gebruiker afgeschermd

Hoofdstuk 9 Libraries Library Een verzameling van meestal gerelateerde subprogramma s die hergebruikt kunnen worden. De libraries helpen de programmeur om eenvoudig een betrouwbaar programma te schijven. Het aanroepen van bestaande subprogramma s is eenvoudiger dan het implementeren van nieuwe subprogramma s Include-bestand De interface van de library. Beschrijft welke functionaliteit (wat) de bibliotheek beschikbaar stelt Object-bestand In het objectbestand van een library is bepaald hoe de functionaliteit door de library wordt uitgevoerd. De interface schermt deze informatie af voor de gebruiker Een linker verzamelt alle objectfiles en voegt deze samen toe een uitvoerbaar bestand. Een blibiotheek maakt twee bestanden beschikbaar: de objectcode en de include file. De objectcode ontstaat door het assembleren van een programma. Een extra map (LIB) verzamelt objectcodein een bestand waarin de subprogramma s terug te vinden zijn. Bibliotheken zijn vaak grote bestanden met een andere bestandsextensie dan.obj. Deze extensie is afhankelijk van de fabrikant van de linker. Bibliotheken (libraries) worden ingedeeld aan de hand van het moment van linken met het programma: compile-time en run-time Static-Link-Library Gedurende compile-time voegt de linker het programma en de library samen tot een uitvoerbaar bestand. Elk uitvoerbaar bestand dat subprogramma s van de library gebruikt bezit een kopie van de library. Een linker linked alleen de subprogramma s die door het programma gebruikt worden. Het programma en de library zijn statisch met elkaar verbonden. De extensie is vaak.lib, library, of.a, archive. Microcontrollers in embedded systems gebruiken meestal static-link libraries Dynamic-Link-Library Het OS maakt alleen voor de actieve taken een kopie van de variabelen in de library. De code wordt voor alle actieve taken in 1 keer in het geheugen geladen en gemeenschappelijk door de taken gebruikt. Het programma en de bibliotheek zijn dynamisch met elkaar verbonden. De extensie is vaak.dll, dynamic-link library, of.so shared object Standaardbibliotheken zijn niet zonder meer uitwisselbaar De Interface van een library is strikt en mag niet veranderen Calling Conventions Beschrijft hoe een functie argumenten wegschrijft op een geheugenlocatie (bijv. In stack of in register,afhankelijk van de betreffende conventie) en welke waarden daarbij ontvangen worden. Een assembly programmeur kan gebruik maken van niet-assembly-bibliotheken als de header file en calling convention van de gewenste library bekend zijn

C-Standard Calling Convention Cdecl Calling Convention de argumenten van een functie worden door het hoofdprogramma op de stack gezet in volgorde van rechts naar links. De return-waarde staat in het EAX-register Function Prolog De actie binnen een functie waarbij de inhoud van de registers (ESI, EDI, EBX, en EBP) op de stack wordt opgeslagen. (gegenereerd door compiler) De progloog maakt EBP klaar voor gebruik als basis-pointer binnen de stack waar de functieargumenten en lokale variabelen staan (stack frame) en maakt plaats voor lokale variabelen door de stack pointer voldoende op te schuiven Function Epilog De actie binnen een functie waarbij de inhoud van de registers (ESI, EDI, EBX, en EBP) van de stack weer wordt teruggeplaatst naar de betreffende registers. (gegenereerd door compiler) Stack Cleanup (Balanceren) Argumenten die het hoofdprogramma voor de functieaanroep op de stack zet, haalt het hoofdprogramma er na functieaanroep ook weer af. Het aantal parameters/argumenten van een functie kan variëren doordat de aanroeper de stack balanceert en doordat het meest linkse argument als laatste argument op de stack wordt gezet en dus het dichtst bij de EBP staat Stdcall Calling Convention De conventie stdcall wordt gebruikt door MS Windows WIN32 API en wordt ook wel WINAPI genoemd De stdcall en cdecl conventies zijn aan elkaar gelijk met één uitzondering: bij de stdcall ruimt de functie de parameters op en bij cdecl het hoofdprogramma (caller) Pascal Calling Convention Argumenten worden van links naar rechts op de stack gezet. De functie maakt de stack schoon Register of Fastcall Calling Convention Hier worden de eerste 2 of 3 functieargumenten in registers bewaard (bijv. ECX en EDX). Eventuele volgende argumenten worden van rechts naar links op de stack gezet. De return waarde staat weer in het EAX-register. Deze methode kan per fabrikant verschillen