Vraag 1 (4 punten) Gegeven het getal -132



Vergelijkbare documenten
Examen computerarchitectuur

Examen computerarchitectuur

Examen computerarchitectuur

Examen computerarchitectuur

Examen computerarchitectuur

Tentamen Computersystemen

Samenvatting Computer Architectuur

Optimalisatie technieken

Tentamen Computersystemen

Bachelor Kunstmatige Intelligentie

Examen Geavanceerde Computerarchitectuur

Stapelgeheugen. Processoren 6 maart 2012

Linux Assembly Uitwerkingen van de vragen en opdrachten

Computertechniek vorige examens

Tentamen Computersystemen

Antwoorden zijn afgedrukt!!!!!!!

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

Examen Geavanceerde Computerarchitectuur

Studentnummer:... Opleiding:... a) Met welke term wordt het interface tussen software en hardware van een processor aangeduid?

Proeftentamen Digitale technieken

Faculteit Elektrotechniek - Leerstoel ES Tentamen Schakeltechniek. Vakcode 5A050, 19 januari 2005, 14:00u-17:00u

Wouter Geraedts Processen & Processoren

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

Faculteit Elektrotechniek - Leerstoel ES Tentamen Schakeltechniek. Vakcode 5A050, 19 januari 2005, 14:00u-17:00u

Beter, Sneller, Mooier. Processoren 12 januari 2015

Een typisch programma in C en C++ bestaat uit een aantal onderdelen:

scc =!F3.!F2 b) CD AB

Antwoorden vragen en opgaven Basismodule

Groepen, ringen en velden

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

17 Operaties op bits Bitoperatoren en bitexpressies

Jörg R. Hörandel Afdeling Sterrenkunde

Machine-Level Programming III: Procedures

Aritmetische instructies

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

Studentnummer:... Opleiding:...

int main() { int m; m = power(2,3) /* berekent 2^3 en geeft de resultaat naar m terug */ }

Tentamen Programmeren in C (EE1400)

Examen besturingssystemen

scc = b) CD AB

Een eenvoudig algoritme om permutaties te genereren

Deeltoets Digitale technieken

Instructies en blokken

slides12.pdf December 14,

Rekenen met cijfers en letters

Jörg R. Hörandel Afdeling Sterrenkunde.

Zelftest TSO/E REXX. Document: n0167test.fm 25/01/2017. ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium

De key is een datastructuur van 31 bytes die er als volgt uitziet:

Hoofdstuk 7. Computerarchitectuur

Computerarchitectuur en netwerken. Memory management Assembler programmering

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

continue in een for, while of do lus herhaalt de lus vroegtijdig. De volgende herhaling wordt onmiddellijk begonnen.

EE1400: Programmeren in C BSc. EE, 1e jaar, , 3e college

Registers & Adressering. F. Rubben, ing

Uitwerkingen Rekenen met cijfers en letters

Faculteit Elektrotechniek - Capaciteitsgroep ICS Tentamen Schakeltechniek. Vakcodes 5A010/5A050, 26 november 2003, 14:00u-17:00u

Online c++ leren programmeren:

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

Examen besturingssystemen

Module 4 Hoofdstuk 1. Programmeertalen

COMP 4580 Computer Security

Deel 1: schriftelijk deel

Tentamen Programmeren in C (EE1400)

Examen besturingssystemen

Geannoteerde uitwerking tentamen Processoren 30 Januari 2015

Talstelsels, getalnotaties en Ascii code

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

Java virtuele machine JVM

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

Software Security III

Praktische Toets Computerarchitectuur

Zelftest Programmeren in PL/I

Oefententamen 2. Tijd: 2 uur. Maximaal aantal punten: 30. Naam: Studentnummer:

Talstelsels en getalnotaties (oplmodel)

Faculteit Elektrotechniek - Leerstoel ES Tentamen Schakeltechniek. Vakcode 5A050, 17 november 2004, 9:00u-12:00u

Assembly en Assemblers. Processoren 5 januari 2015

Uitwerking oefententamen Computerarchitectuur December 2016

Computerarchitectuur en netwerken. Memory management Assembler programmering

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

b) Geef het schema van een minimale realisatie met uitsluitend NANDs en inverters voor uitgang D.

computerarchitectuur antwoorden

7 Omzetten van Recursieve naar Iteratieve Algoritmen

VOORBLAD SCHRIFTELIJKE TOETSEN

assembleertaal F. Vonk versie

Jörg R. Hörandel Afdeling Sterrenkunde

Lab Webdesign: Javascript 3 maart 2008

4EE11 Project Programmeren voor W. College 2, , Blok D Tom Verhoeff, Software Engineering & Technology, TU/e

Wouter Geraedts Processen & Processoren

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

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

Computerarchitectuur en netwerken Toets 1 4 okt

Examen besturingssystemen

Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni, 2010

PROS1E1 Gestructureerd programmeren in C Dd/Kf/Bd

In de 4som-puzzel kun je de gegeven sommen variëren. Nog zo eentje.

Toets Digitale Systemen 01/06/2006, uur

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

Code Optimization II September 26, 2007

Datastructuren: stapels, rijen en binaire bomen

VAN HET PROGRAMMEREN. Inleiding

Transcriptie:

Vraag 1 (4 punten) Gegeven het getal -132 Wat is de voorstelling van dit getal 1. in teken/grootte (16 bit) 2. in 2 s complementvoorstelling (16 bit) 3. als 2 s complementvoorstelling (8 bit) a. saturerend b. modulo 8 bit Antwoord (alle antwoorden in hexadecimaal) 1 2 3a 3b

Vraag 2 (4 punten) Gegeven het getal 251 Hoe kan je dit getal voortellen als 1. Binair getal (16 bits) 2. 2 s complement getal (16 bits) 3. packed BCD-getal 4. floating point getal (1 5 10), vergelijkbaar met ANSI/IEEE 754 Antwoord (in hexadecimale notatie aub) 1 2 3 4

Vraag 3 (4 punten) Gegeven het bitpatroon 11011010 Wat is de waarde als 1. binair getal 2. 2 s complementgetal 3. verschoven getal (bias = 40) 4. vlottende-kommagetal (1 2 3), vergelijkbaar met het IEEE formaat. Antwoord 1 2 3 4

Vraag 4 (4 punten) Bereken het resultaat en de toestandsbits voor de volgende twee 8-bit optellingen: Opgave 10001100 + 11101011 10000000 + 10000000 Resultaat C-vlag S-vlag O-vlag

Vraag 5 (4 punten) A Gegeven de volgende combinatorische schakeling B D Stel de waarheidstabel van deze schakeling op (2 punten) C Schrijf deze functie als een som van producten (mintermen) (1 punt) D = Vereenvoudig deze uitdrukking zo ver mogelijk (minimalisatie) (1 punt) D =

Vraag 6 (4 punten) Beschouw het volgende programma: #include <stdio.h> int g; int faculteit(int n) { if (n<2) return 1; else return n*faculteit(n-1); } int main() { g = faculteit(3); return 0; } :0040125C 55 push ebp :0040125D 89E5 mov ebp,esp :0040125F 57 push edi :00401260 8B7D08 mov edi,[ebp+08] :00401263 83FF02 cmp edi,2 :00401266 7D05 jnl 0040126D :00401268 31C0 xor eax,eax :0040126A 40 inc eax :0040126B EB10 jmp 0040127D :0040126D 89F8 mov eax,edi :0040126F 48 dec eax :00401270 50 push eax :00401271 E8E6FFFFFF call 0040125C :00401276 59 pop ecx :00401277 57 push edi :00401278 97 xchg edi,eax :00401279 0FAFC7 imul edi :0040127C 5F pop edi :0040127D 5F pop edi :0040127E 5D pop ebp :0040127F C3 ret :00401280 6A03 push 3 :00401282 E8D5FFFFFF call 0040125C :00401287 59 pop ecx :00401288 A304204000 mov [00402004],eax :0040128D 31C0 xor eax,eax :0040128F C3 ret

Vragen: 1. Op welk adres bevindt zich de veranderlijke g? (1 punt) 2. Hoeveel instructies worden er door dit programma uitgevoerd? (1 punt) 3. Teken de stapel op het ogenblik dat de instructie op adres 0040126A net achter de rug is (leg uit wat de verschillende cellen precies betekenen) (2 punten).

Vraag 7 (4 punten) Gegeven het volgende stukje escape-code. ADDI R0, 0x0000, R1 BRZ R0, doel_1 BRZ R0, doel_2 BRZ R0, doel_3 ADDI R0, 0x0005, R1 ADDI R0, 0x0004, R1 doel_3 doel_2 doel_1 HALT ADDI R0, 0x0003, R1 HALT ADDI R0, 0x0002, R1 HALT ADDI R0, 0x0001, R1 HALT De uitvoering van het programma begint bovenaan het codefragment. De instructie BRZ R0, doel_x is een onvoorwaardelijke sprong naar doel_x (maar wel met 2 delay slots). De instructie addi R0,n,R1 schrijft de constante n in het register R1. Teken het pijplijnactiviteitendiagramma voor de uitvoering van dit stukje programma: Tijd Fetch Decode Execute Mem Write back 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Wat zal de uiteindelijke waarde van R1 zijn?

Vraag 4 (4 punten) Gegeven het volgende stukje escape-code. 0000: 44020004 ADDI R0, 0x0004, R2 0004: 4401000C ADDI R0, 0x000C, R1 0008: 0C230000 loop1 LDW R3, 0x0000(R1) 000C: 1C611800 ADD R3, R1, R3 0010: 24431800 MUL R2, R3, R3 0014: 18230040 STW R3, 0x0040(R1) 0018: 20220800 SUB R1, R2, R1 001C: 0C230000 LDW R3, 0x0000(R1) 0020: 18230040 STW R3, 0x0040(R1) 0024: 20220800 SUB R1, R2, R1 0028: 7C01FFDC BRGE R1, loop1 002C: 00000000 NOP 0030: 00000000 NOP 1. Ga uit van de situatie waarbij er geen forwarding is, het aantal cycli voor een geheugenoperatie 1 is, en er geen delay slots zijn. Schrijf voor elke instructie (net voor het verticale lijntje) hoeveel cycli ze vertraagd zal worden door het niet gebruiken van forwarding (u hoeft geen rekening te houden met het herbetreden van de lus). Indien de instructie niet vertraagd wordt, hoeft U geen 0 te schrijven. De aantallen die U schrijft corresponderen met het aantal NOP-instructies die U vóór de instructie zou moeten plaatsen om een blokkering te vermijden (2 punten). 2. Indien forwarding wel aan staat, en indien er 2 delay slots zouden zijn, op welke manier zou U het programma transformeren om er gebruik van te maken. U mag bijkomende registers aanwenden indien U dit nodig acht. Schrijf de code hieronder neer (2 punten).

Vraag 8 (4 punten) Gegeven het volgende stuk assemblercode. vijfvoud: cmp eax,0 jg positief xor eax, eax ret positief: mov ebx, 5 imul ebx ret programma: mov eax, 6 call vijfvoud mov g, eax Stel dat de Pentium 1 delayslot zou toelaten. Op welke manier zou dit stukje programma kunnen versneld worden door optimaal gebruik te maken van de delayslots?

Vraag 9 (4 punten) Gegeven een datacache van 4 lijnen van 8 bytes lang. Een programma genereert een lijst van leesopdrachten van 1 byte op de volgende (decimale) adressen (kolom Adres). Vul in de kolom Blok het bloknummer van het adres is (0,1,2,3,...). Vul voor Lijn de identificatie van de lijn is (b.v. a,b,c,d) Vul in de kolommen Inhoud de inhoud van de cache in (uitgedrukt in bloknummers) vlak na de cachetoegang (bij associativiteit steeds LRU als vervangingsstrategie gebruiken) Vul in de kolommen H/M in of het over een hit of een miss gaat. Vul in de kolom set de identificatie van de gebruikte set in (b.v. A of B) Opdrachten Direct mapped cache Volledig associatief 2-Wegs set associatief Adres Blok Lijn Inhoud H/M Inhoud H/M Set Inhoud H/M - - - - - - - - - - - - - 16 8 12 24 20 40 11 12 48 51 10 16 Wat zijn de hit-rates van de drie verschillende caches?

Vraag 10 (4 punten) Beschouw het volgende Pascal-programma program examen; type arraytype = array[1..10] of integer; var a: arraytype; i, g: integer; function som(a: arraytype): integer; var s, i: integer; begin s := 0; for i := 1 to 10 do s := s + a[i]; som := s; end; begin for i := 1 to 10 do a[i] := i; g := som(a) end. Verbeter de vier fouten in de bijhorende assembercode: :00403874 56 push esi :00403875 57 push edi :00403876 83C4D8 add esp,ffffffd0 :00403879 8BF0 mov esi,eax :0040387B 8D3C24 lea edi,[esp] :0040387E B90A000000 mov ecx,0000000a :00403883 F3A5 rep movsd :00403885 33C9 xor ecx,ecx :00403887 BA0D000000 mov edx,0000000a :0040388C 8BC4 mov eax,esp :0040388E 0308 add ecx,[eax] :00403890 83C004 add eax,00000008 :00403893 4A dec edx :00403894 75F8 jne bca.14 (0040388E) :00403896 8BC1 mov eax,ecx :00403898 83C428 add esp,00000028 :0040389B 5F pop edi :0040389C 5E pop esi :00403900 BA01000000 mov edx,00000001 :00403905 B8D0544000 mov eax,004054d0 :0040390A 8910 mov [eax],edx :0040390C 42 inc edx :0040390D 83C004 add eax,00000004 :00403910 83FA0B cmp edx,0000000b :00403913 75F5 jne bca.20 (0040390A) :00403915 B8D0544000 mov eax,00405fff :0040391A E855FFFFFF call bca.som (00403874) :0040391F 8BD0 mov edx,eax

Vraag 11 (4 punten) Gegeven een computersysteem met een onderbrekingssysteem met prioriteiten. Dit wil zeggen dat indien er een onderbreking met hogere prioriteit is, deze als eerste uitgevoerd wordt, en eventuele onderbrekingen van lagere prioriteit zal onderbreken. Gegeven de volgende onderbrekingen: onderbreking aankomst verwerkingsduur 5 2 4 3 4 3 7 5 5 De prioriteiten zijn als volgt: 3 > 5 > 7 Gesteld dat het hoofdprogramma begint te lopen op tijdstip 0. Teken het activiteitendiagramma voor de verschillende stukjes programma. main 5 3 7

Vraag 12 (4 punten) Gegeven het volgende recursieve C-programmaatje #include <stdio.h> long fact(long n) { if (n>0) return n*fact(n-1); else return 1; } main() { long g = fact(3); } Compilatie op de alpha-architectuur (gcc O4 S) geeft het volgende resultaat: $fact: $L3: $L9: main: lda $30,-16($30) stq $26,0($30) stq $9,8($30) mov $16,$9 bgt $9,$L3 lda $0,1 br $31,$L9 subq $9,1,$16 bsr $26,$fact mulq $9,$0,$0 ldq $26,0($30) ldq $9,8($30) lda $30,16($30) ret $31,($26),1 lda $30,-16($30) stq $26,0($30) lda $16,2 bsr $26,$fact mulq $0,3,$17 Uitleg: lda : load effective address stq: store quadword niet-conditionele controletransfers: tweede argument=bestemming, eerste argument=terugkeeradres. $30 = stapelwijzer

Teken de stapel voor dit programma op het ogenblik dat de LDA $0,1 instructies uitgevoerd wordt. Welke optimalisatie valt U er op? Had men deze optimalisatie nog verder kunnen doortrekken? Hoe zou het programma er dan uiteindelijk hebben kunnen uitzien (1 punt)

Vraag 13 (4 punten) Beschouw het volgende pascal-programma: program examen; var g: integer; function hack(n: integer): integer; var a: array[1..1] of integer; i: integer; begin if n > 0 then begin i := 2; a[i] := a[i] - 5; hack := n-1 end else hack := n end; begin g := hack(1) end. Met de bijhorende assembercode: :0040387451 push ecx :00403875 85C0 test eax,eax :00403877 7E0B jle examen.18 (00403884) :00403879 BA02000000 mov edx,00000002 :0040387E 836C94FC05 sub dword ptr [esp+4*edx-04],05 :00403883 48 dec eax :00403884 5A pop edx :00403885 C3 ret :004038E9 B802000000 mov eax,00000001 :004038EE E881FFFFFF call examen.hack :004038F3 8BD8 mov ebx,eax Beschrijf de uitvoering van dit programma als een trace (lijst van uitgevoerde instructies) Aantal instructies

Vraag 14 (4 punten) Beschouw het volgende C-programma int ggd(int a, int b) { if (a==0) return b; else if (a>b) return ggd(a % b, b); else return ggd(b % a, a); } int main() { ggd(45,60); } Verbeter de vier fouten in de bijhorende assembercode: :0040125C 55 push ebp :0040125D 89E5 mov esp,ebp :0040125F 56 push esi :00401260 57 push edi :00401261 8B7508 mov esi,[ebp+08] :00401264 09F6 or esi,esi :00401266 7505 jne 0040126D :00401268 8B450C mov eax,[ebp+0c] :0040126B EB2B jmp 00401299 :0040126D 3B750C cmp esi,[ebp+0c] :00401270 7E16 jle 00401288 :00401272 8B7D0C mov edi,[ebp+0c] :00401275 57 push edi :00401276 89F0 mov eax,esi :00401278 89F9 mov ecx,edi :0040127A 99 cdq :0040127B F7F9 idiv ecx :0040127D 52 push eax :0040127E E8D9FFFFFF call 0040125C :00401283 83C408 add esp,8 :00401286 EB10 jmp 00401298 :00401288 56 push esi :00401289 8B450C mov eax,[ebp+0c] :0040128C 99 cdq :0040128D F7FE idiv esi :0040128F 52 push edx :00401290 E8C7FFFFFF call 0040125C :00401295 83C408 add esp,8 :00401298 5F pop edi :00401299 5E pop esi :0040129A 5D pop ebp :0040129B C3 ret :0040129C 6A3C push 3C :0040129E 6A2D push 2D :004012A0 E8B7FFFFFF call 0040125C :004012A5 83C408 add esp,4

Vraag 15 (4 punten) Gegeven het volgende C-programma: #include <stdio.h> float g; float gemiddelde(float a, float b) { return (a+b)/2.0; } int main() { g = gemiddelde(1.3,1.7); return 0; } :00401279 55 push ebp :0040127A 89E5 mov ebp,esp :0040127C 51 push ecx :0040127D D9053C404000 fld dword ptr[0040403c] :00401283 83EC04 sub esp,4 :00401286 D91C24 fstp dword ptr[esp] :00401289 D90538404000 fld dword ptr[00404038] :0040128F 83EC04 sub esp,4 :00401292 D91C24 fstp dword ptr[esp] :00401295 E8C2FFFFFF call 0040125C :0040129A 83C408 add esp,8 :0040129D D91D04204000 fstp dword ptr[00402004] :004012A3 C9 leave :004012A4 C3 ret :0040125C 55 push ebp :0040125D 89E5 mov ebp,esp :0040125F D9450C fld dword ptr[ebp+0c] :00401262 D84508 fadd dword ptr[ebp+08] :00401265 DC3548404000 fdiv dword ptr[00404048] :0040126B 5D pop ebp :0040126C C3 ret 1. op welke manier worden de argumenten a en b aan de functie gemiddelde doorgegeven? 2. op welke manier wordt het resultaat van de functie gemiddelde geretourneerd? 3. op welke manier wordt de constante 2.0 in het programma opgenomen? 4. wat is de grootte (in bytes) van de vlottende-kommagetallen die hier gebruikt worden?

Vraag 16 (4 punten) Gegeven een harddisk met een effectieve bandbreedte van 33 MB/s. De communicatie met de harddisk gebeurt in blokken van 4 kib. Per bloktransfer dient er een onderbrekingsroutine opgeroepen te worden die 25 µs duurt. Vraag 1: welk percentage van de tijd zal de processor gemiddeld bezig zijn met het afhandelen van de bloktransfers indien de maximale bandbreedte gehaald wordt? Vraag 2: hoelang zal een taak die in normale omstandigheden 60 ms duurt nu duren? Vraag 3: Indien deze taak niet langer dan 70 ms mag duren, tot welke waarde moet de maximale bandbreedte dan beperkt worden?

Vraag 17 (4 punten) Beschouw het volgende C-programma: #include <stdio.h> #include <string.h> int paswoord_ok() { char *secret="wachtwoord"; char s[10]; } printf("geef wachtwoord: "); gets(s); return!strcmp(s,secret); int main() { return paswoord_ok(); } Met de bijhorende assembercode: :0040125C 55 push ebp :0040125D 89E5 mov ebp,esp :0040125F 83EC10 sub esp,10 (hexadecimaal!) :00401262 53 push ebx :00401263 57 push edi :00401264 8D3D4E404000 lea edi,[0040404e] :0040126A 897DFC mov [ebp-04],edi :0040126D 683C404000 push 0040403C :00401272 E891000000 call printf :00401277 83C404 add esp, 4 :0040127A 8D7DF2 lea edi,[ebp-0e] :0040127D 57 push edi :0040127E E86D000000 call gets :00401283 83C404 add esp, 4 :00401286 FF75FC push dword ptr [ebp-04] :00401289 8D7DF2 lea edi,[ebp-0e] :0040128C 57 push edi :0040128D E89A000000 call strcmp :00401295 89C7 mov edi,eax :00401297 83FF00 cmp edi,0 :0040129A 7507 jne 004012A3 :0040129C BB01000000 mov ebx,1 :004012A1 EB05 jmp 004012A8 :004012A3 BB00000000 mov ebx,0 :004012A8 89D8 mov eax,ebx :004012AA 5F pop edi :004012AB 5B pop ebx :004012AC C9 leave :004012AD C3 ret :004012AE 57 push edi :004012AF E8A8FFFFFF call 0040125C :004012B4 83C404 add esp,4 :004012B7 C3 ret

Opgave 1. Teken de stapel op het ogenblik dat de instructie 00401295 uitvoert. Ter informatie: de functie strcmp respecteert alle oproepconventies die in de rest van dit programma gebruikt worden (2pt) 2. Welke inputstring zou U moeten ingeven om ervoor te zorgen dat strcmp tweemaal dezelfde string vergelijkt en als gevolg hiervan steeds hetzelfde antwoord teruggeeft (2pt). De stackframepointer (ebp) tijdens de uitvoering van de functie paswoord_ok is: 0012FF50.