Hoofdstuk 2: intsructions: language of the computer Flashcards

1
Q

Instruction set +

A

Woordenschat van de computer

- afhankelijk van computer
bv. RISC-V

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Doel van computertaal +

A
  • gemakkelijk voor bouwen van hardware en compilers

- maximale performantie en minimale kost

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

RISC-V

A

Een assembly language met 32 registers. Er wordt naar deze registers verwezen met hun nummers, van 0 to 31.

  • elke lijn kan maar 1 instructie bevatten
  • elke rekenkundige instructie heeft steeds exact 3 variabelen
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Stored-program concept

A

Het idee dat instructies en data in het geheugen als nummer kunnen opgeslagen worden en dus makkelijk zijn om te veranderen.

Een programma wordt dus elektronisch opgeslagen in binaire vorm in het geheugen, zodat de instructies kunnen aangepast/uitgevoerd worden door de computer.

Het laat dus bv. toe dat een computer dat financien beheert in een mum van tijd plots een computer wordt dat een auteur een boek helpt schrijven.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Design principle 1: simplicity favors regularity

A

Regelmaat maakt implementatie eenvoudiger, en eenvoud laat hogere performantie toe voor een lagere prijs.

Dit is van toepassing bij RISC-V waar elke rekenkundige instructie steeds exact 3 variabelen heeft. Dit maakt het eenvoudiger om hiervoor hardware te ontwikkelen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

global pointer

A

Het register dat gereserveerd is om naar het statische gedeelte te wijzen. (statisch = variabelen buiten procedures.)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

2-complement voorstelling

A

Dit is een manier om getallen voor te stellen in een computer. Het is een conventie om signed binaire nummers voor te stellen. De voorste bit is de sign bit, als deze nul is dan is het nummer positief, als deze 1 is dan is het nummer negatief. Hiermee kunnen getallen van -2^31 tot 2^31-1 voorgesteld worden. Getallen worden negatief gemaakt door alle bits te inverteren en er 1 bij op te tellen.

Heft voordeel van deze voorstelling is dat er maar 1 mogelijkheid is om nul voor te stellen, waar sign en magnitude en one’s complement elk zowel een positieve als negatieve 0 hebben. Ook moet er bij het optellen geen onderscheid gemaakt worden tussen positieve en negatieve getallen. Het nadeel is dat er in two’s complement 1 negatief nummer is dat geen positieve tegenhanger heeft.

Alternatieven zijn de one’s complement en de sign en magnitude.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Figure 2.13

A

De conventie voor het toewijzen van programma’s en data in het RISC-V geheugen. Vanonder is gereserveerd. Als 2de hebben we het tekst segment = het ‘thuis’ van de RISC-V machine code. Gevolgd door een plaats voor de constanten en statische variabelen. Als voorlaatste hebben we de heap, waarin de dynamische data structuren worden gestockeerd (bv. Linked list). Met tot slot de stack. Merk op dat de stack en de heap naar elkaar toe kunnen groeien, zodat er efficiënt gebruik kan gemaakt worden van het geheugen, aangezien de ene krimpt als de andere groeit.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Addressing modes

A

De verschillende manieren om te adresseren binnen een instructie om zo operanden te bepalen. De addressing modes voor RISC-V instructies zijn:

  • Immediate addressing, waar de operand een constante is binnen de instructie zelf
  • Register addressing, waar de operand een register is,
  • Base of displacement addressing, waar de operand gealloceerd is op een geheugenlocatie waarvan het adres de som is van een register en een constante in de instructie
  • PC-relative addressing, waar het branch adres de som is van de PC en een constante in de instructie
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Bit

A

binary digit. Dit is 1 van de 2 nummers in modulo 2, dus 0 of 1.

Instructies staan als een stel bits in het geheugen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Byte

A

unit of digital information that usually consists of 8 bits

Op de dag van vandaag adresseren alle architecturen individuele bytes.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

word

A

A natural unit of access in a computer, usually a group of 32 bits

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

doubleword

A

A natural unit of access in a computer usually a group of 64 bits, corresponds to the size of a register in the RISC-V architecture

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Data transfer instruction

A

Een instructie om data uit te wisselen tussen het register en het geheugen: stores en loads! Deze zijn nodig doordat data structuren (bv array) worden bijgehouden in het geheugen.
De data transfer instructie dat data van het geheugen naar een register kopieert wordt load genoemd.
Store kopieert data van een register naar het geheugen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Front end van een compiler

A

De functie van de front end van een compiler is het inlezen van een source programma, het checken van syntax en semantics, en het vertalen van het source programma naar een intermediare vorm dat de meeste taal-specifieke operaties van het programma interpreteert. Het is vaak opgedeeld in 4 verschillende functies:
- Scanning: leest alle individuele karakters en creëert een string van tokens
- Parsing: checkt of syntax tokens correct is (output = abstract syntax tree)
- Semantic analysis: checkt of AST semantisch correct is.
- Generatie van intermediaire voorstelling: neemt de symbool tabel en AST en genereert de intermediare representatie dat de output is van de front end.
(sort assembler maar bv met oneindig #registers) (bv. Java bytecode)

–> elke stap = taal onafhankelijk

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

DLL

A

= Dynamically Linked Library

Library routines die gelinkt zijn aan een programma tijdens de uitvoering. De library routines worden dus niet gelinkt en geladen totdat het programma uitgevoerd wordt. Het linken gebeurt bij de eerste keer dat het opgeroepen wordt. Het werkt de eerste keer met meerdere indirecties, daarna nog maar met 1 indirectie. De library wordt in memory geladen en tijdens de linking stage wordt enkel het adres van library functie toegevoegd aan de executable file.

Het nadeel is dat er extra ruimte nodig is, maar het voordeel is dat nu hele bibliotheken niet meer gekopieerd moeten worden. Dit was het geval voor de traditionele manier om programma’s te linken voordat het programma gerund wordt. In dit geval maakt namelijk de library routine deel van de exucutable code uit ( → indien nieuwe versie wordt oude nog gebruikt) en het laadt alle routines die voorkomen in de executable, zelfs als ze niet worden uitgevoerd.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Compiler

A

Een compiler transformeert de HLL naar assembly language, dit is een symbolische versie van wat de computer verstaat. Door in high- level language te kunnen schrijven is de productiveit van programmeurs veel hoger.

Eerst gaat het programma door een front end. Hierbij wordt bijvoorbeeld gekeken of de syntax correct is. (output = abstract syntax tree) en gebeurt hiermee een semantische analyse. Vervolgens wordt er een intermediaire voorstelling gegenereerd. Hierin wordt de code geoptimaliseerd (zowel lokaal als globaal). Uiteindelijk wordt dan de code gegenereerd. Dit is meestal een 1-op-1 mapping met de ISA.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Fields in an instruction of RISC-V

A

Instruction format bestaat uit een aantal velden. Een veld is een groepje bits en is een segment in de representatie van een instructie.

zie tussenhaakjes voor de soorten velden. (voor R: funct7, rs2, rs1, funct3, rd, opcode, voor I: immediate, rs1, funct3, rd, opcode en voor S: immediate, rs2, rs1, funct 3, immediate, opcode).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Frame pointer

A

Sommige compilers bevatten een frame pointer. Dit is de waarde die de locatie aanduidt van opgeslagen registers en lokale variabelen van een gegeven procedure. De frame pointer biedt een stabiel basisregister aan binnen een procedure voor lokale geheugen referenties (aangezien de stack pointer tijdens de executie volatiel kan zijn).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Heap

A

Datastructuur die dynamische data (bv. linked lists) bijhoudt in het RISC-V geheugen. Het geheugen vragen en vrijgeven op de heap gebeurt met behulp van expliciete functies.
malloc(size) vraagt geheugen op de heap en geeft een pointer terug.
mfree() geeft geheugen vrij op de plaats naar waar de pointer wijst.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Immediate operands

A

Door het gebruik van immediate operands (zoals bv. add immediate) worden de operaties veel sneller en verbruiken ze veel minder energie. Ze nemen namelijk constanten op in de rekenkundige instructie ipv het uit het eerst uit het geheugen te halen met load.

Dit is een voorbeeld van making the common case fast.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

Instruction format of RISC-V

A

Dit is de layout van de instructie dat bestaat uit velden van binaire getallen. Het heeft een vaste grootte, nl. 32 bits. Voor leesbaarheid wordt gebruik gemaakt van hexadecimale getallen.
3 soorten: R → arithmetic, I → immediates, → S voor stores (zie instruction field voor meer detail)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

Java Byte Code

A

Instructie set dat ontworpen is om Java programma’s te interpreteren. Deze instructie set is ontworpen zodat het zeer hard lijkt op de Java language en dus zodat de compiling stap eigenlijk triviaal is. Virtueel is er geen optimalisatie.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

Jump - and - link instruction

A

Een branch instruction dat zowel het adres van de volgende instructie opslaat, als naar het adres van een aftakking gaat: bv. Jal x1, ProcedureAddress (return address van procedureaddress zal x1 zijn). Deze instructie wordt enkel gebruikt voor procedures.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
Q

Just - In -Time compiler

A

Een compiler die vertaalt tijdens het uitvoeren.

Deze compiler wordt o.a. gebruikt in Java zodat draagbaarheid behouden wordt en execution snelheid verbetert. The gecompileerde porties worden opgeslagen voor elke volgende keer dat het programma gerund wordt zodat het elke keer sneller gerund kan worden.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
26
Q

Least significant bit

A

Het uiterst rechtse bit (we tellen van rechts naar links)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
27
Q

Loader

A

schrijft/leest de executable file in het geheugen en start het in 6 stappen:

  • Bepaalt groote van de tekst en data segmenten door de hoofding van de executable file te lezen
  • Maakt een adresruimte voor programma (vraag dit aan OS)
  • Kopieert instructies en data van de executable file naar adresruimte
  • Kopieert parameters op de stack
  • Initialiseert registers (o.a. stapelwijzer)
  • worgt dat een start-up routine gestart wordt: kopieert de parameters van stack naar registers, roept main op en bij return: roept system call exit op.
///////////
Een systeemprogramma dat het programma (executable) in main memory plaatst, zodat het klaar is om uitgevoerd te worden. Eerst wordt de hoofding van de executable gelezen voor de grootte van de code en data segmenten te bepalen. Vervolgens wordt aan de OS ruimte gebraagd. Nadien wordt de stack en heap gealloceerd en initialisatie van de registers en wordt main() opgeroepen.
28
Q

Design principle 2: smaller is faster

A

Dit is de reden waarom we het aantal registers op een computer limiteren tot 32. Teveel registers zou de clock cycle time vergroten doordat het langer duurt voor het elektrisch signaal, omdat het fysiek verder moet.

29
Q

Logical operations

A

Deze operaties vergemakkelijken het ‘packing en unpacking’ van bits in woorden. bv. shifts, and, or, not,…

Shifts verplaatsen alle bits in een doubleword naar links of rechts en vullen de leeggemaakte bits met nullen.

AND is een bit-by-bit operatie dat een 1 als resultaat geeft enkel en alleen als beide bits van de operanden een 1 zijn.

30
Q

Figure 2.10

A

De waarden van de stack pointer voor (a) , tijdens (b) en na (c) een procedure call. De stack pointer wijst altijd naar de ‘top’ van de stack, oftewel het laatste doubleword in de stack (hier register x20). Deze conventie verminderd het spillen van registers.

31
Q

Java Virtual Machine

A

Dit is een software dat in een host OS draait en java byte code uitvoert. Dit is de oplossing om draagbare code te hebben die toch de broncode beschermt. De Klassieke JVM wint aan snelheid over interpreterende talen omdat het geen plain text moet interpreteren. Het nadeel van de interpretatie is lagere performantie.

Het kan ook JIT compileren zodat de code bij meermaals gebruik al is omgezet naar machine code. Dit versnelt de code nog meer.

32
Q

Machine language

A

Binaire representatie gebruikt voor communicatie binnenin een computer systeem (de numerieke versie van instructies).

33
Q

MIPS instruction formats

A

Ook 32 bits, 4 soorten formaten, S type opgesplitst in 2: store en branch, enkel achterkant wordt vervangen. Zie fig 2.29

34
Q

Most significant bit

A

Uiterst linkse bit in een RISC-V doubleword

35
Q

Opcode

A

= basis informatie van instructie

Het instructieveld dat de operatie en formaat van een instructie weergeeft. Het bestaat uit 7 bits (meest rechtse veld).

36
Q

Procedure frame / activation record

A

Segment van een stack dat de opgeslagen registers en lokale variabelen van een procedure bevat.

37
Q

Figure 2.12

A

Stack allocation, voor (a), tijdens (b), en na (c) een procedure. Frame pointer wijst naar het eerste doubleword van de frame. De stack pointer wijst naar de bovenkant van de stack. De stack pointer wordt aangepast om ruimte te maken voor opgeslagen registers en locale variabelen. Omdat de stack pointer tijdens een procedure kan veranderen, zullen programmeurs de frame pointer gebruiken om variabelen te refereren. Als er geen locale variablen zijn op de de stack in de procedure, zal de compiler tijd besparen door het niet in te stellen en restoren van de frame pointer.

38
Q

Program counter (PC)

A

Het register dat het adres heeft van de instructie dat op dat moment wordt uitgevoerd.

39
Q

Design principle 3: good design demands good compromises

A

Conflict tussen het verlangen om instructies met dezelfde lengte te hebben en instructies met hetzelfde formaat.

Risc-V designers hebben ervoor gekozen om instructies van dezelfde lengte te hebben en dus hierdoor is het nodig om verschillende instructieformaten te hebben voor verschillende soorten instructies.

40
Q

compiler: abstract syntax tree

A

Dit wordt gecreëerd door de front end van de compiler.

Dit is een tree voorstelling van de abstracte synthetische structuur van de broncode geschreven in programmeertaal. Elke knoop van de boom verwijst naar een gebeurtenis in de source code. Het is abstract omdat het niet elk detail toont maar enkel diegene die gerelateerd zijn aan de structuur. Ze worden veelvuldig gebruikt in compilers om de structuur van de code aan te duiden.

41
Q

Return address

A

Het adres waarnaar teruggekeerd moet worden nadat een opgeroepen procedure klaar is.
In een jump - and - link instructie wordt een een link gevormd dat wijst naar de opgeroepen site om ervoor te zorgen dat de procedure terug kan gaan naar het gepaste adres. Deze ‘link’ wordt het return adres genoemd. In RISC - V wordt dit opgeslagen in register x1.

Dit is nodig omdat dezelfde procedure opgeroepen kan worden vanuit verschilende delen van het programma.

42
Q

Sign extension

A

Sign extension is een shortcut die ons vertelt hoe we makkelijk een binair getal dat voorgesteld wordt door n bits kunnen converteren naar een getal dat gerepresenteerd wordt door meer dan n bits als we bv. als load van een ‘kort’ getal in doubleword. Het neemt de meest significante bit van het kleinste getal - de sign bit - en repliceert het om de rest van het register in te vullen. The oude nonsign bits worden simpelweg gekopieerd in het rechtse deel van het nieuwe doubleword.

Het doubleword moet dus vooraan aangevuld worden met:

  • 0’en voor positieve getallen
  • 1’en voor negatieve getallen
43
Q

Linker

A

Programma dat onafhankelijke machine language programma’s combineert en alle niet gedefinieerde labels in een executable file zet.

Door gebruik te maken van een linker kunnen we elke procedure apart compileren en assembleren zodat als we een verandering aanbrengen aan 1 lijn, we enkel 1 procedure moeten compileren en assembleren in plaats van het hele programma. De reden dus waarom een linker handig is, is omdat het veel gemakkelijker is om code aan elkaar te plakken dan te recompileren en recompileren.

Er zijn 3 stappen voor de linker:

  1. plaats de code en data modules symbolisch in het geheugen
  2. bepaal de adressen van de data en instructie labels
  3. patch zowel de interne als externe referenties
44
Q

Source register

A

Duidt de plaats aan uit welke registers data moet gelezen worden (2 of 1, elks 5 bit).

///
Register dat gebruikt wordt voor de operanden
45
Q

Stack

A

Een data structuur voor het ‘spillen’ van registers = een lijst van de uit te voeren data met een last in first out queue. Dit wordt gebruikt als je meer dan 8 parameters hebt (registers kunnen slechts 8 argumenten hebben), het wordt dus gebruikt voor locale variabelen die niet in het register passen.

Het is dus een datastructuur dat toelaat om variabelen en return adressen op te slaan indien een andere procedure wordt opgeroepen die deze waarden zou kunnen aanpassen.

Push = element bij de stack doen,
pop = een element uit de stack verwijderen.
(register spilling = als er teveel variabelen zijn voor de registers, zorgt dit ervoor dat sommige variabelen in het geheugen gestoken moeten worden)

Een stack heeft een pointer nodig naar het meest recente toegewezen adres in de stack om te tonen waar de volgende procedure de registers die ‘gespilled’ moeten worden, moet plaatsen of waar de oude register waarden gevonden kunnen worden.

46
Q

Symbol table

A

Tabel dat gebruikt wordt door de assembler om de namen van labels te matchen aan de adressen van het geheugen words die de instructies gebruiken. De tabel bestaat dus uit paren van symbolen en adressen.

47
Q

Verschil tussen java byte code en RISC-V assembler

A
  • Java gebruikt een stack ipv. registers voor operanden (maakt compilatie eenvoudiger)
  • bytecodes kunnen van verschillende lenge zijn (tussen 1-5 bytes), bij RISC-V is dit fixed, 4 byte
  • veiligheidsaspecten (bv array data transfer: checkt dat 1ste operand een reference is)
  • voor garbage collection: moet weten wat adres is. Er zijn andere operaties voor adressen dan voor integers. Bij RISC-V zijn deze operaties hetzelfde.
  • Java heeft een aantal complexe operaties
48
Q

Compileren versus interpreteren

A

Compileren (= vertalen):

  • vertalen van programma in een hogere programmeertaal naar machine code met gepaste oproepen naar een besturingssysteem
  • resultaat heet object code
  • object code is niet draagbaar
  • object code wordt verdeeld, bron code is beschermd
  • programma is volledig vertaald voordat het uitgevoerd wordt
  • 1 maal vertalen, ontelbare keren uitvoeren

Interpreteren (=vertolken):
- een programma wordt tijdens de uitvoering regel per regel vertaalden uitgevoerd
- vertaling gebeurt bij elke uitvoering: vertraging
- bij een lus worden de instructies even vaak vertaald als er iteraties zijn: nog extra vertraging
- programma is draagbaar
- bron code wordt verdeeld (nadeel voor verkopers)
- tijdswinst bij ontwikkeling
Bij interpreteren wordt de code niet volledig vertaald naar broncode, maar uitgevoerd in zijn high-level vorm of vertaalt naar een tussenliggende vorm.

49
Q

label

A

Naam voor een plaats in het assembler programma. Het wordt voor de instructie geplaatst.

50
Q

basic block

A

Een sequentie van instructies zonder branches en zonder branch targets of branch labels.

Een van de eerste vroege fasen van compileren is het opdelen van het programma in basic blocks.

51
Q

arithmetic instructions

A

Instructies die deel uitmaken van een instructieset met als doel wiskundige berekeningen maken.
Add, substract, add immediate

52
Q

assembly language

A

Een symbolische taal dat vertaald kan worden in binaire machine taal.

53
Q

branches

A

laat toe om computer beslissingen te laten maken, gelijkt op de if statements in higher program languages.

54
Q

caller vs callee

A
Caller = het programma dat een procedure start en de nodige parameter waarden aanbied (de functie die de functie oproept)
Callee = een procedure die een reeks van gestockeerde instructies uitvoert gebaseerd op de parameters die aangeboden worden door de caller en dan de controle terug aan de caller geeft.  (de opgeroepen functie)

Dit principe van caller en callee wordt gebruikt in the jump-and-link instruction.

55
Q

fig 2.20

A

Deze figuur toont de translatiehierarchy voor C. Een HLL programma wordt eerst gecompileerd in een assembly language programma en wordt dan geassembleerd in een object module in machine language. The linker combineert meerdere modules met library routines om alle referenties op te lossen. The loader plaatst dan vervolgens de machine code in de geschikte geheugenlocaties voor executie door de processor.

56
Q

stack pointer

A

Een waarde die het meest recent toegewezen adres aangeeft in de stack en dat toont waar de registers ‘gespilled’ zouden moeten worden of waar oude registerwaarden gevonden kunnen worden. in RISC-V is dit het register sp of x2.

57
Q

conditional branch

A

Dit is een instructie die een waarde test en dat een transfer van controle naar een nieuw adres in het programma toelaat gebaseerd op het resultaat van de test.

58
Q

destination register

A

Destination register is 5 bits lang en komt voor bij R en I type instructies. Het bepaalt in welk register het resultaat van de ALU of uit het geheugen geschreven moet worden.

59
Q

evolution of Intel x86

A

The x86 is het product van verschillende onafhankelijke groepen die de architectuur over bijna 40 jaar hebben verbeterd door nieuwe features toe te voegen. Snelle stijging van het aantal registers in een processor en de grootte van een register zelf en snelle stijging van het aantal instructies. Om het bondig samen te vatten: x86 is een complexe en niet elegante taal (zeer veel instructies met variabele lengte etc.) die zo ontwikkeld is doordat intel haar market cap groot genoeg is om genoeg middelen in te zetten om deze complexiteit te overbruggen.

60
Q

executable file

A

De linker produceert een executable file dat gerund kan worden op een computer. Dit is een functioneel programma in hetzelfde formaat als een object file, maar dat geen ongedefinieerde referenties bevat. Het kan symbol table en debugging informatie bevatten.

61
Q

fig 2.17

A

Dit is een illustratie van de 4 RISC-V addressing modes. De operanden zijn ingekleurd. De operand van mode 3 is in het geheugen, voor mode 2 is dit een register, voor mode 1 is dit deel van de instructie zelf. Versies van load en store hebben toegang tot bytes, halfwords, words of doublewords. Mode 4 adresseert instructies in geheugen en voegt een lang adres toe aan de PC. Een enkele operatie kan meer dan 1 addressing mode gebruiken. Add, bv., gebruikt zowel immediate als register adressering.

62
Q

PC-relatief adressering

A

Een adresseringsregime waar het adres de som is van de program counter en een constante in de instructie.

Deze vorm van branch addressering wordt gebruikt voor zowel conditional branches als voor unconditional jumps omdat de destinatie van deze instructies waarschijnlijk dicht bij de branch liggen.

63
Q

compiler optimalistaties: globale optimalisaties

A

Globale optimalisatie is optimalisatie over de basisblokken heen.

  • Strength reduction: complexere operaties vervangen door eenvoudige
  • Constant propagation/constant folding: constanten in code vinden en verspreid ze
  • Copy propagation: verspreid waarden van eenvoudige copy → moet geen waarden meer reloaden
  • Dead store elimination: vind stores die niet meer gebruikt worden en verwijderd deze
  • Common subexpression elimination: linkt expressies naar voorgaande indien deze al is gebruikt.
  • Code motion: zoekt loop invariante code om uit de loop te plaatsen
  • Induction variable elimination: vervangt array indexeringen via pointers. (zie sectie 2.14 voor meer info)
64
Q

compiler optimalisaties: lokale optimalisaties

A

Optimalisaties binnen een basisblok waar dan geen sprong staat. Alle instructies worden in een basisblok uitgevoerd.

65
Q

Pseudoinstruction

A

De assembler kan ook veel voorkomende variaties van machine taal instructies behandelen alsof ze op zichzelf staande instructies zijn. De hardware hoeft deze instructies niet te implementeren, maar hun voorkomen in assembly taal vergemakkelijkt de translatie en programmering. Deze instructies worden pseudoinstructies genoemd.

Pseudoinstructies zorgen ervoor dat RISC-V een rijkere set aan assembly language instructies hebben dan deze die geïmplementeerd zijn door de hardware.

66
Q

Assembler

A

Bestaat uit 2 passen. 1ste pass: alle labels en adressen vinden in het programma en deze in een symbooltabel met paren steken. 2de pass: de eigenlijke vertaling naar machinetaal. De output van de assembler is een zogenaamde object file die onder andere de symbooltabel, de statische data en de machinecode bevat, maar ook bijvoorbeeld debugging informatie.