Tcet-vpemsy1/D3ecpt2 voorbeeld tentamen



Dovnload 25.72 Kb.
Datum20.08.2016
Grootte25.72 Kb.

TCET-VPEMSY1/D3ECPT2 – voorbeeld tentamen

Blz van




Blok 3 studiejaar 2008-2009

Toetsdatum: ...



Afdeling

EMS

Cursuscode

...

...




Rekenmachine

Nee

Tabellen

Nee

Boek

Nee

Anders

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

Uitwerkpapier

Gebruik deze bladen, voeg eventueel uitwerkpapier toe. Lever kladpapier niet in, al het ingeleverde wordt meegenomen in de beoordeling.

Tentamen na afname innemen door de surveillant

Ja

Het is toegestaan kladpapier te gebruiken. Dit wordt na afloop niet ingenomen.

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.






ACPS = ARM Procedure Call Standard
R0 – R3 : function arguments

R0 (evt. R1, R2, R3) : function result

R4 - R8 : local scratch

R9 : afblijven

R10-11 : local scratch

R13 : SP


R14 : LR

R15 : PC
R0 – R3 are *not* preserved

R4-R8, R10-R11 *are* preserved




Op een echt tentamen zijn de andwoordvakken natuurlijk groter.







  1. [10] De ARM wordt wel een register-register architectuur genoemd. Leg uit wat dit in de praktijk betekent.









  1. [15] (twee deelvragen) Hoe vaak zal de lus van het onderstaande code fragment worden uitgevoerd, en wat is het adres van het eerste byte dat door deze lus op nul wordt gezet?

LDR R0, =0

LDR R1, =100

lus:


STR R0, [ R1, #4 ] !

CMP R1, #200

BNE lus






  1. [10] De bedoeling van onderstaand code fragment is om het ASCII teken in R0, indien dit een kleine letter is, om te zetten naar een hoofdletter. Het is een code fragment, geen complete subroutine, dus u hoeft u geen zorgen te maken over het bewaren/herstellen van registers. Er zitten echter denkfout(en) in (en dezelfde fout kan meerdere keren voorkomen). Geef aan wat de fout/fouten zijn en corrigeer deze.

SUB R0, R0, #’a’ @ kleiner dat ’a’?

BLT afblijven

SUB R0, R0, #’z’ @ groter dan ’z’?

BGT afblijven

ADD R0, R0, #(’A’ – ’a’)

afblijven:







  1. [10] In het code fragment van de vorige vraag kan 1 instructie bespaard worden door gebruik te maken van conditionele instructie(s). Geef aan hoe.









  1. [10] Schrijf een stukje ARM assembler code (het hoeft dus geen nette subroutine te zijn) dat het product van R1 en R2 berekent en dit in R3 stopt, dus: R3 = R1 * R2. Het resultaat is dus 32 bits, overflow mag u negeren. R1 en R2 mogen gewijzigd worden. U mag geen gebruik maken van een vermenigvuldig instructie.










  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'. De functie is bedoeld om aangeroepen te worden met in R0 het (begin) adres van een array van 10 woorden (een woord is 32 bits).

stmfd sp!, { lr }

mov r1, r0

ldr r0, =0

ldr r2, =10

loop:


ldr r3, [ r1 ], #4

add r0, r0, r3

add r2, r2, #-1

cmp r2, #0

bne loop

ldmfd sp!, { pc }










  1. [20] Schrijf een ARM assembler subroutine (natuurlijk volgens de ARM procedure calling convention) die de volgende (onzinnige) C functie implementeert:


int f( char *a, int b ){
if( *a == b ){

return 19;

}
return b + 9;
}








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

    Hoofdpagina