Toetsdatum: Dinsdag 01-04-2007



Dovnload 19.06 Kb.
Datum20.08.2016
Grootte19.06 Kb.

TCET-D3ECPT2-04 - tentamen

Blz van




Blok 3 studiejaar 2007-2008

Toetsdatum: Dinsdag 01-04-2007



Afdeling

Institute for Information & Communication Technology

Cursuscode

TCET-D3ECPT2-04

Omschrijving: Computertechniek 2




Rekenmachine

Nee

Tabellen

Nee

Boek

Nee

Anders

Bij het tentamen wordt een samenvatting van de ARM instructieset verstrekt (oranje papier, 1 vel). Dit vel hoeft niet weer ingeleverd te worden.

Uitwerkpapier

Gebruik deze bladen, voeg eventueel uitwerkpapier toe

Tentamen na afname innemen door de surveillant

Ja

Studentnummer

………………..

Studentnaam

…………………………………….

Cijfer







[10] U krijgt 10 punten voor uw aanwezigheid, bij iedere vraag is aangegeven hoeveel punten u met die vraag kunt behalen. Uw cijfer is het totaal aantal punten gedeeld door 10.
Bij vragen waar ja/nee, een getal, of iets dergelijks als antwoord wordt gevraagd is het aan te bevelen ook aan te geven hoe u aan dit antwoord bent gekomen.
Laat u niet intimideren door de omvang van de antwoordvakken. Gebruik indien nodig een extra anwoordvel. Mogelijk zijn delen van de opgave vet gedrukt. Het is aan te raden daar extra op te letten.




  1. [10] De meeste processoren worden geproduceerd door het bedrijft dat ze ook ontwerpt. Hoe zit dit bij de ARM?









  1. [15] Het basisformaat van de ARM assembler instructies is AAABBC, bv “addgts”. Leg uit wat het BB deel betekent en wat het C deel betekent.









  1. [15] (twee deelvragen!) De bedoeling van onderstaand code fragment is om de 64-bit waarden in R0/R1 (hoogstwaardige deel in R0, laagstwaardige deel in R1) en R2/R3 op te tellen en in R4/R5 te plaatsen. Wat gaat hier allemaal fout en hoe zou u dit verbeteren?

ADD R4, R0, R2

ADD R5, R1, R3







  1. [10] Alarm! Een manager heeft een ARM vak gevolg en opgevangen dat veel ARM assembler fouten ontstaan doordat in subroutines klad registers worden gebruikt die niet op de stack bewaard en weer hersteld worden. Hij besluit dit rigoreus aan te pakken en stelt een beleidsvoornemen op dat voortaan op straffe van ontslag alle routines verplicht moeten beginnen met

stmfd sp!, { r0-r15, lr }


en eindigen met
ldmfd sp!, { r0-r15, pc }
Stel een kort memo op om deze ramp te voorkomen. Geef daarin (ten minste) drie redenen waarom dit geen goed idee is. Denk aan stackpointer, uitvoer parameters, performance.







  1. [20] Schrijf een nette subroutine die telt (en als returnwaarde teruggeeft) hoe vaak het character in R1 voorkomt in de string waar R0 naar wijst. Met andere woorden: vertaal onderstaande C functie naar ARM assembler.


int Tel_Char( char *s, char c ){

count n = 0;

while( *s != 0 ){

if( *s == c ){ count++; }

s++;

}

return count;

}







  1. [20] Beschrijf wat de functie is van onderstaande subroutine. Dus zoiets als 'Berekent het kwardraat van R0 en stopt dat in R1' of 'Print alle hoofdletters uit'. Het is dus niet voldoende (maar wel beter dan niets) om in detail uit te leggen wat alle statements in de functie doen. De functie is bedoeld om aangeroepen te worden met in R0 en R1 de (begin) adressen van twee stuken geheugen.

stmfd sp!, { r1-r4, lr }

ldr r4, =-1

loop:


ldrb r2, [ r0 ], #1

ldrb r3, [ r1 ], #1

cmp r2, r3

addz r4, r4, #1

cmp r2, #0

bne loop


done:

mov r0, r4



ldmfd sp!, { r1-r4, pc }



De database wordt beschermd door het auteursrecht ©opleid.info 2017
stuur bericht

    Hoofdpagina