Skip to main content

2015 januari examen

  • Geef de inhoud van EAX en EDX na een MOV-bevel, een ADD-bevel en een IMUL-bevel volledig, dus zowel in binair (als in hexadecimaal) als in decimaal.
    • Opgelet: EDX wordt na het IMUL-bevel opgevuld met nullen of enen, naargelang het teken van de inhoud van EAX: is de inhoud van EAX na de vermenigvuldiging negatief, dan is EDX voor de rest opgevuld met enen. Is het resultaat positief, dan zijn dit nullen.
  • Gegeven is een beschrijving van een SD-RAM en het hexadecimale adres van een byte. Geef DIMM-nummer, banknummer, rijnummer en kolomnummer van deze byte.
    • Zet hiervoor het hexadecimale adres om naar 32-bits binair adres. De eerste 2 bits vormen het DIMM-nummer, de volgende 3 bits het banknummer, de 14 bits daarna het rijnummer en de 10 daarop het kolomnummer. De laatste 3 bits vormen het bytenummer.
  • Een vraag over wachttijden en bloktransfer, waarbij CAS "3-2-1" gegeven is.
  • Een programmeeroefening in verband met rijen: geef één voor één een rij van 30 dubbelwoorden in en daarna een getal "n". Het n-de getal van de rij moet teruggegeven worden. Bijvoorbeeld bij groep = 1, 20, 300, 4000, 50000 en n = 4, moet als resultaat het vierde element van de rij, dus 4000, teruggegeven worden.
   %include "gt.asm"
   covar
   n:          resd 1
   uitvoer:    resd 1
   groep:      resd 30                      ; hier komen de 30 ingevoerde getallen
   een:        dd 1
   vier:       dd 4                         ; elk dubbelwoord is twee woorden, en dus 4 bytes, lang
   
   inleiding
               mov ecx, 30                  ; er worden 30 getallen opgevraagd en na elk getal wordt ECX met 1 verminderd
   
   lus:        inv [groep+ebx]              ; gebruik hier om het even welk register, maar zorg dat ja de waarde ervan niet overschrijft!
               add ebx, [vier]              ; tel telkens 4 bij ebx op, zodat het ingevoerde getal na de 4 bytes van het vorig ingevoerde getal komt te staan
               loop lus                     ; deze loop stopt wanneer ecx op 0 staat, in dit geval dus na 30 keer
   
               inv [n]             
               mov eax, [n]
               sub eax, [een]               ; trek 1 af van n, want n begint op 0 en niet op 1
               imul dword [vier]            ; want 1 getal is 4 bytes
               uit [groep+eax]   ; als n bijvoorbeeld 4 is, dan is groep+eax hier groep+12
  • Bereken het aantal MT/s bij een busbreedte van 32 bits en een debiet 66.7 MB/s.
  • Leg kort uit waarom het handig is wanneer een processor over een pijplijn beschikt.
  • Wat betekent 01020201 in het bevel "MOV EAX, 02010102"? Waarvan is dit afhankelijk?
  • Geef de waarde van ESP voor en na een aantal PUSH- en POP-bevelen.
    • Let hierbij op de lengte van het register of de waarde die/dat gePUSHt of gePOPt wordt.
  • Schrijf voor onderstaande records een uitvoerbestand in de vorm van "75% van onze klanten behoort tot onze doelgroep", waarbij de doelgroep bestaat uit vrouwen die geboren zijn na 1985.
    • Hou dus minstens 2 variabelen bij: het aantal vrouwen geboren na 1985, en het totaal aantal klanten. Het percentage klanten dat tot de doelgroep behoort is dan (vrouwen x 100) / totaal.
    • Om de jaartallen met 1985 te vergelijken, moet je ze eerst omzetten naar binair. Hiervoor kun je tekstbin gebruiken.
    • Om het percentage uit te schrijven, moet dit eerst omgezet worden naar de ASCII-voorstelling. De subroutine die je daarvoor nodig hebt, kun je best van buiten leren.
   Kolom 1 - naam          Kolom 25 - geslacht en geboortedatum         Kolom 50 - totale uitgaven in eurocent
   An                      V1986                                        5000
   Betty                   V1972                                        25000
   Catherine               V1994                                        1500
   Dave                    M1989                                        8000