Download de presentatie
De presentatie wordt gedownload. Even geduld aub
GepubliceerdPatricia Vedder Laatst gewijzigd meer dan 10 jaar geleden
1
1/1/ / faculty of Computer Science eindhoven university of technology 5JJ20:Computerarchitectuur 2M200:Inleiding Computersystemen Sessie 7(2): Vertalen van hogere talen
2
1/1/ / faculty of Computer Science eindhoven university of technology Hogere talen op de processor Interpreter: Simuleert een machine die het gegeven programma direct uitvoert. –Programma loopt direct; maar loopt traag. –Oudere Basic versies (niet VBasic), Scripttalen Compiler: Vertaalt gegeven programma naar de taal van de machine die het moet uitvoeren. –Programma moet eerst vertaald worden; maar loopt sneller. –C/C++, Pascal, VBASIC, Fortran/Cobol
3
1/1/ / faculty of Computer Science eindhoven university of technology *.javajavac*.class java Hardware ASM504*.asm *.hex Compiler Interpreter
4
1/1/ / faculty of Computer Science eindhoven university of technology Vertalen van hogere talen: Eerst programma nodig dat tekst leest en structuur ervan reconstrueert (Parser) Vertaling door op een systematische manier programma-constructies te vertalen en te combineren –Student-compiler: snel, maar niet zo heel efficiënte code –Professionele compiler: langzaam, maar betere code Meestal eerst student-compiler; later prof. compiler
5
1/1/ / faculty of Computer Science eindhoven university of technology Vertaling eenvoudige programma’s: x:=e if g then S1 else S2 ‘bereken e’ (zeg in A) MOV @x,A else00x: verder00x: ‘bereken g’ (zeg in C) JNC else00x ‘vertaling S1’ AJMP verder00x ‘vertaling S2’
6
1/1/ / faculty of Computer Science eindhoven university of technology Vertaling eenvoudige programma’s: while00x: ‘bereken g’ (zeg in C) JNC exit00x ‘vertaling S’ AJMP while00x exit00x: while g do S S1;S2 ‘vertaling S1’ ‘vertaling S2’
7
1/1/ / faculty of Computer Science eindhoven university of technology Berekenen van expressies: Modulaire opzet: –Voor elke operator één subroutine. –Alle subroutines dezelfde invoer-uitvoer locaties (API) In verband met recursie alles op een stack (de rekenstapel; meestal niet de call-stack)
8
1/1/ / faculty of Computer Science eindhoven university of technology Uitrekenen van expressie e: Als e=c (constante)Zet c op rekenstapel Als e=x (variabele)Kopier x naar rekenstapel Als e=f(e 1,…,e n )‘Bereken e 1 ’ … ‘Bereken e n ’ Call f NB: Schrijf +(e 1,e 2 ) i.p.v. e 1 +e 2 etc.
9
1/1/ / faculty of Computer Science eindhoven university of technology PUSH math,7 math,7 ‘bereken ² (3) ’ ‘bereken x’ CALL minus CALL plus ‘bereken 7’ ‘bereken -( ² (3),x) ’ CALL plus PUSH math,7 ‘bereken 3 ’ CALL sqr MOV A,@x CALL minus CALL plus PUSH math,A PUSH math,7 PUSH math,3 CALL sqr MOV A,@x CALL minus CALL plus PUSH math,A (stel x=3) Voorbeeld: 7+(3²-x) Dus +(7,-( ² (3),x)) PUSH math,7 CALL sqr 7 3737 9797 9797 397397 6767 13 PUSH math,3 MOV A,@x PUSH math,A CALL minus CALL plus
10
1/1/ / faculty of Computer Science eindhoven university of technology Torens van Hanoi:
11
1/1/ / faculty of Computer Science eindhoven university of technology Recursieve procedures: Voor het aanroepen: argumenten op stack Tijdens het aanroepen: return adres op stack Na het aanroepen: locale variabelen op stack (vaak ook nog een Frame-Pointer, FP)
12
1/1/ / faculty of Computer Science eindhoven university of technology procedure towers(n,i,j:integer); var k:integer; begin if (n=1) writeln(‘from ‘,i,’ to ’,j) else begin k:=6-i-j; towers(n-1,i,k); towers(1,i,j); towers(n-1,k,j) end end Procedure voor Torens van Hanoi
13
1/1/ / faculty of Computer Science eindhoven university of technology n=3n=3 i=1i=1 j=3j=3 ReturnReturn Old FPOld FP k=2k=2 De stack tijdens recursie (Hanoi) 1000 n=2n=2 i=1i=1 j=2j=2 ReturnReturn FP=1000FP=1000 k=3k=3 1024 address FP n=1n=1 i=1i=1 j=2j=2 ReturnReturn FP=1024FP=1024 k 1048 n=1n=1 i=1i=1 j=3j=3 ReturnReturn FP=1024FP=1024 k
14
1/1/ / faculty of Computer Science eindhoven university of technology Optimaliseringen: Geavanceerder: Constante expressies geheel van te voren berekenen. Eenvoudige aritmetiek rechtstreeks vertalen. Registers gebruiken bij eenvoudige (deel)berekeningen. Niet gebruikte berekeningen niet uitvoeren. x:=c x:=x+1 MOV @x,c INC @x
Verwante presentaties
© 2024 SlidePlayer.nl Inc.
All rights reserved.