Symbolsk maskinsprog.

Slides:



Advertisements
Lignende præsentationer
HUNDE SPEED km h 34,4 HUNDE SPEED km h 34,1 HUNDE SPEED km h 32,8 HUNDE SPEED km h 31,9 HUNDE SPEED km h 31,8 HUNDE SPEED km h 30,9.
Advertisements

Den danske befolknings syn på handicappedes rettigheder
Atomer Et programmeret forløb. En måde at lære på.
NemID og Fællesskema 2014 v/Signe Hansen Blegmand
Funktioner Grundbegreber.
Hjemmesidekonstruktion Tjekspørgsmål 1.Hvad er et markup-sprog – hvad bruges det til? 2.Hvad er forskellen mellem et markup-sprog og et scriptsprog? 3.Hvad.
Torbenfeldvej Vallensbæk strand Tlf.: – – dagligt brug af vores hjemmeside •AGEN LYS har en stor og omfattende.
Niveauer af abstrakte maskiner
Overskrift her Navn på oplægsholder Navn på KU- enhed For at ændre ”Enhedens navn” og ”Sted og dato”: Klik i menulinjen, vælg ”Indsæt” > ”Sidehoved / Sidefod”.
v/ Professor Lars Ehlers, Aalborg Universitet
1 DSB og Bibliotekerne Personlige interview foretaget 20. til 25. januar respondenter Holdning til evt. ny portal.
Bolig selskabernes Landsforening– Almene lejeboliger - Maj/Juni Almene lejeboliger - Danmarkspanelet - Maj/Juni 2010.
Communication & Design ODEUM e-Plan Landinspektør Martin Høgh Urban Planning and Transport.
av Lajla Ellingsen og Mari By Rise Adresseavisen
ISA-niveauet (1) Machine Language: You try to shoot yourself in the foot only to discover you must first reinvent the gun, gunpowder, the bullet, and your.
1 Pentium IA-32 Maskinarkitekturen. 2 Historie (1) Starter i 1970 med udviklingen af Intel 4004:
1 Pentium IA-32 Maskinarkitekturen Kort resume – uge 5.
Energieffektivisering i byggeriet”. Program Introduktion til Energieffektivisering af byggeriet Delprojekt_01Systematisk energieffektivisering af tekniske.
Fremtidens ledelse af en kulturvirksomhed
SEO PÅ AU.
1 Effektiv forrentning Kjeld Tyllesen PEØ, CBS Erhvervsøkonomi / Managerial Economics Kjeld Tyllesen, PEØ, CBS.
Statistik.
”Energi” - Geografi © Flemming Sigh, 2007.

Representations for Path Finding in Planar Environments.
Grundlæggende regnskabsforståelse
Kursus om borger.dk og brugen af digital signatur
1 Pentium IA-32 Maskinarkitekturen. 2 Historie (1) Starter i 1970 med udviklingen af Intel 4004:
HUSKESPIL – den lille tabel
Østjysk rapport om udligning og tilskud Seminar om udligning den 26. April 2010 Job og Økonomidirektør Asbjørn Friis Jensen, Favrskov.
Titel: Arial, fed, skriftstr. 20, mørkegrå. Tekst: Arial, normal, fed eller kursiv, skriftstr. 10, 12 og 14 til print – 16 og 18 til projektor – mørkegrå.
 2 3  3 =  83  43  53  63  73  93  10 4.
Pleje og Sundhed Gennemførte719 Inviterede895 Svarprocent80% FREDERICIA KOMMUNE MTU og Psykisk APV 2012 Rapportspecifikationer.
1 Powerpointserie om In-line færdiggørelse ved Heatsettrykning Avisrotation Magasindybtryk Den Grafiske Højskole.
FEN IntroJava AAU1 Java grundelementer Variable og datatyper Sætninger og udtryk Metoder.
Trivselsundersøgelse og ledelsesevaluering Anæstesiologisk Afdeling Flere ledere
MATLAB Programmering Anders P. Ravn Institut for Datalogi Aalborg Universitet Forår 2005 d = size(s); for k = 1:d(1), for n = 1:d(2), if (s(k,n) < 0) r(k,n)
ETU 2008 | Elevtilfredshedsundersøgelse Erhvervsskolen Nordsjælland HTX (Teknisk Gymnasium) - Hillerød Baseret på 313 besvarelser.
DComNet1 Computere og Netværk (dComNet) Jens Kargaard Madsen Jens Bennedsen
Globaliseringsredegørelsen 24.mar. 14 Figurer fra Danmark tiltrækker for få udenlandske investeringer i Sådan ligger landet
1 Sortering I elementære metoder. 2 Plan Terminologi Elementære metoder til sortering -sortering ved udvælgelse -sortering ved indsættelse -Shellsort.
Compiler/fortolker struktur Mellem- kode Mellemk.- optimering Kode- generering Kode- optimering Lexikalsk- analyse Syntax- analyse Semantik- analyse -
Matematik B 1.
Claus Brabrand, ITU, Denmark Mar 10, 2009EFFECTIVE JAVA Effective Java Presentation Workshop Claus Brabrand [ ] ( “FÅP”: First-year Project.
1 Tråde 2 Plan Trådbegrebet Synkronisering Koordinering Eksempel: et flertrådet spil.
1 Bilag 1 Busafgange mellem Silkeborg by og andre byer i kommunen D. 2. oktober 2008.
Grunde til at jeg elsker dig
Januar 2009 MandagTirsdagOnsdagTorsdagFredagLørdagSøndag Uge 2. Anette Ø. Kl Tina H. Lone M. 6 Kl Britt H. 7 Kl Vinnie G. Gerda.
Fundamentale datastrukturer
Compiler/fortolker struktur Mellem- kode Mellemk.- optimering Kode- generering Kode- optimering Lexikalsk- analyse Syntax- analyse Semantik- analyse -
DComNet1 Computere og Netværk (dComNet) Jens Kargaard Madsen Jens Bennedsen
10.mar. 15 Udvikling i løn, priser og konkurrenceevne Dansk Industri.
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper : arrays, stakke, køer,
Procestræ under afvikling af cp init login shell cp cp src dest.
DComNet1 ISA-niveauet (1) Machine Language: You try to shoot yourself in the foot only to discover you must first reinvent the gun, gunpowder, the bullet,
1 Kap. 4, Jordens Tyngdefelt = Torge, 2001, Kap. 3. Tyngdekraftens retning og størrelse g (m/s 2 ) Acceleration Tyngdepotentialet (W): evene til at udføre.
Scanning af cervix uteri U-kursus i føtal medicin 2005.
C#: Udtryk og metoder Kilde: Joe Hummel. 2 Nordjyllands Erhvervakademi – 2008 Indhold “With regards to programming statements and methods, C# offers what.
03 – Udtryk og metoder. 2 NOEA2009Java-kursus – Udtryk og metoder Udtryk i Java Java har standard udtrykene… Værditildeling Subrutiner og funktionskald.
Globaliseringsredegørelse 21.mar. 11 Globaliseringsredegørelsen 2011 Grafer fra temakapitlet Eksporten som drivkraft for vækst og velstand.
VTU 2008 | Virksomhedstilfredshedsundersøgelse Aalborg Tekniske Skole Svarprocent: 27% (414 besvarelser ud af mulige)
DComNet1 ISA-niveauet (2). dComNet2 Niveauer af virtuelle maskiner ISA niveauet / maskinkodeniveauet / maskinniveau.
Begreber og Redskaber 4. Plan for idag Om metoder, parametre, returværdier Et par ord om objekt-orientering Håndkøring af programmer.
I o p o DAIMI, AU, November 1999Programkonstruktion I9E.1 Konstruktion og brug af klasser – en stak og en HP-regnemaskine push pop.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6A.1 Programmering med interfaces – en stak og en HP-regnemaskine push pop.
DMasArk1 Pentium IA-32 Maskinarkitekturen. dMasArk2 Historie (1).. starter i 1970 med udviklingen af Intel 4004:
Programmering med interfaces Separering af specifikation, anvendelse og implementation.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Multiple processer på web-site Web- server filer Kunde 1 Kunde 2 Kunde p1p2p internet.
Præsentationens transcript:

Symbolsk maskinsprog

Niveauer af abstrakte maskiner Spørgsmål ... Hvordan bruges asm-niveauet? metode til programmering (i dag) Hvordan stilles asm-niveauet tilrådighed? oversættelse af symbolsk maskinsprog til absolut maskinsprog (næste gang)

Symbolsk maskinsprog Maskinsprog main index: 0 method area: 40 bytes .method main // int main .args 3 // ( int a, int b ) .define a = 1 .define b = 2 // { bipush 88 // Push object reference. iload a iload b invokevirtual min ireturn // return min ( a, b ); // } .method min // int min .args 3 // ( int a, int b ){ .locals 1 // int r; .define r = 3 iload a // if ( a >= b ) isub // stack = a - b, ... ; a - b < 0 => a < b iflt else iload b // r = b; istore r goto end_if else: // else iload a // r = a; end_if: iload r // return r; ireturn Maskinsprog main index: 0 method area: 40 bytes 00 03 00 00 10 58 15 01 15 02 b6 00 01 ac 00 03 00 01 15 01 15 02 64 9b 00 0a 15 02 36 03 a7 00 07 15 01 36 03 15 03 ac constant pool: 2 words 00000000 0000000e

Symbolsk maskinsprog Symbolske ordrer .method main // int main .args 3 // ( int a, int b ) .define a = 1 .define b = 2 // { bipush 88 // Push object reference. iload a iload b invokevirtual min ireturn // return min ( a, b ); // } .method min // int min .args 3 // ( int a, int b ){ .locals 1 // int r; .define r = 3 iload a // if ( a >= b ) isub // stack = a - b, ... ; a - b < 0 => a < b iflt else iload b // r = b; istore r goto end_if else: // else iload a // r = a; end_if: iload r // return r; ireturn Symbolske ordrer 1-1 afbildning mellem maskinordre og symbolsk maskinordre

? Hvor finder du bipush 88 ? Maskinsprog main index: 0 .method main // int main .args 3 // ( int a, int b ) .define a = 1 .define b = 2 // { bipush 88 // Push object reference. iload a iload b invokevirtual min ireturn // return min ( a, b ); // } .method min // int min .args 3 // ( int a, int b ){ .locals 1 // int r; .define r = 3 iload a // if ( a >= b ) isub // stack = a - b, ... ; a - b < 0 => a < b iflt else iload b // r = b; istore r goto end_if else: // else iload a // r = a; end_if: iload r // return r; ireturn Maskinsprog ? main index: 0 method area: 40 bytes 00 03 00 00 10 58 15 01 15 02 b6 00 01 ac 00 03 00 01 15 01 15 02 64 9b 00 0a 15 02 36 03 a7 00 07 15 01 36 03 15 03 ac constant pool: 2 words 00000000 0000000e

Symbolsk maskinsprog bipush, iload 1-1 afbildning Symbolske ordrer .method main // int main .args 3 // ( int a, int b ) .define a = 1 .define b = 2 // { bipush 88 // Push object reference. iload a iload b invokevirtual min ireturn // return min ( a, b ); // } .method min // int min .args 3 // ( int a, int b ){ .locals 1 // int r; .define r = 3 iload a // if ( a >= b ) isub // stack = a - b, ... ; a - b < 0 => a < b iflt else iload b // r = b; istore r goto end_if else: // else iload a // r = a; end_if: iload r // return r; ireturn Symbolske ordrer bipush, iload 1-1 afbildning Direktiver/pseudoinstruktioner .define a=1 symbolsk konstant .method min metode start .args 3 antal argumenter .locals 1 antal lokale variable

Symbolsk maskinsprog bipush, iload 1-1 afbildning Symbolske ordrer .method main // int main .args 3 // ( int a, int b ) .define a = 1 .define b = 2 // { bipush 88 // Push object reference. iload a iload b invokevirtual min ireturn // return min ( a, b ); // } .method min // int min .args 3 // ( int a, int b ){ .locals 1 // int r; .define r = 3 iload a // if ( a >= b ) isub // stack = a - b, ... ; a - b < 0 => a < b iflt else iload b // r = b; istore r goto end_if else: // else iload a // r = a; end_if: iload r // return r; ireturn Symbolske ordrer bipush, iload 1-1 afbildning Direktiver/pseudoinstruktioner .define a=1 symbolsk konstant .method min metode start .args 3 antal argumenter .locals 1 antal lokale variable Labels else: end_if:

Symbolsk maskinsprog bipush, iload 1-1 afbildning Symbolske ordrer .method main // int main .args 3 // ( int a, int b ) .define a = 1 .define b = 2 // { bipush 88 // Push object reference. iload a iload b invokevirtual min ireturn // return min ( a, b ); // } .method min // int min .args 3 // ( int a, int b ){ .locals 1 // int r; .define r = 3 iload a // if ( a >= b ) isub // stack = a - b, ... ; a - b < 0 => a < b iflt else iload b // r = b; istore r goto end_if else: // else iload a // r = a; end_if: iload r // return r; ireturn Symbolske ordrer bipush, iload 1-1 afbildning Direktiver/pseudoinstruktioner .define a=1 symbolsk konstant .method min metode start .args 3 antal argumenter .locals 1 antal lokale variable Labels else: end_if: Symbolske operander a, b, r symbolske konstant min metodenavn else, end_if label

Pentium symbolsk maskinsprog .section .data # start of data section a: .long 42 # variable a b: .long 53 # variable b m: .long 0 # variable m .section .text # start of text section .globl _start # _start is a global symbol # specifying program start _start: # int main (void) movl a, %eax # movl b, %ebx # cpml %eax, %ebx # compute b-a <= 0 and # set eflags jle if # if (a >= b) jmp else if: movl %eax, m # m = a jmp endif # else else: movl %ebx, m # m = b endif: movl m, %ebx movl $1, %eax int $0x80 # return m

Pentium symbolsk maskinsprog .section .data # start of data section a: .long 42 # variable a b: .long 53 # variable b m: .long 0 # variable m .section .text # start of text section .globl _start # _start is a global symbol # specifying program start _start: # int main (void) movl a, %eax # movl b, %ebx # cpml %eax, %ebx # compute b-a <= 0 and # set eflags jle if # if (a >= b) jmp else if: movl %eax, m # m = a jmp endif # else else: movl %ebx, m # m = b endif: movl m, %ebx movl $1, %eax int $0x80 # return m Symbolske ordrer movl, cpml, jle, ... Direktiver .section .globl Labels _start: if: Symbolske operander a, b, m %eax, %ebx Samme struktur som program i IJVM symbolsk maskinsprog

Forskellige assembleres realisering af N = I + J Pentium Motorola 680x0 SPARC SCO figur 7.2

Symbolske maskinsprog Asm-niveauet realiseres af assembleren. Der kan sagtens være flere realiseringen ovenpå samme ISA-niveau ... .method min // int min .args 3 // ( int a, int b ){ .define a = 1 .define b = 2 .locals 1 // int r; .define r = 3 iload a // if ( a >= b ) iload b isub iflt else iload b // r = b; istore r goto end_if else: // else iload a // r = a; end_if: iload r // return r; ireturn // } .def min[3,1] # int min .eq a = 1 .eq b = 2 .eq r = 3 ld a # if ( a >= b ) ld b sub ld b # r = b; sto r jmp end_if else: # else ld a # r = a; ld r # return r; ret # } Forskellige direktiver, symbolsk ordrenavne, ...

.method main // int main .args 3 // ( int a, int b ) .define a = 1 .define b = 2 // { bipush 88 iload a iload b invokevirtual min ireturn // return min ( a, b ); // } .method min // int min .args 3 // ( int a, int b ){ .locals 1 // int r; .define r = 3 iload a // if ( a >= b ) isub iflt else iload b // r = b; istore r goto end_if else: // else iload a // r = a; end_if: iload r // return r; ireturn // }

_main index_ 0 _method area_ 00 03 00 00 bipush 88 iload 1 iload 2 invokevirtual 1 ireturn 00 01 isub iflt 10 istore 3 goto 7 iload 3 _constant pool_ 00000000 0000000e .method main // int main .args 3 // ( int a, int b ) .define a = 1 .define b = 2 // { bipush 88 iload a iload b invokevirtual min ireturn // return min ( a, b ); // } .method min // int min .args 3 // ( int a, int b ){ .locals 1 // int r; .define r = 3 iload a // if ( a >= b ) iflt else iload b // r = b; istore r goto end_if else: // else iload a // r = a; end_if: iload r // return r; ireturn // }

_main index_ 0 _method area_ 00 03 00 00 bipush 88 iload 1 iload 2 invokevirtual 1 ireturn 00 01 isub iflt 10 istore 3 goto 7 iload 3 _constant pool_ 00000000 0000000e .method main // int main .args 3 // ( int a, int b ) .define a = 1 .define b = 2 // { bipush 88 iload a iload b invokevirtual min ireturn // return min ( a, b ); // } .method min // int min .args 3 // ( int a, int b ){ .locals 1 // int r; .define r = 3 iload a // if ( a >= b ) iflt else iload b // r = b; istore r goto end_if else: // else iload a // r = a; end_if: iload r // return r; ireturn // } “Abstraktionsniveauet” i det symbolske maskin- sprog bestemmes af assembleren ...

Et symbolsk maskinsprog til IJVM (dComNet-nr.2)

IJVM simulatoren ordresæt Tilsvarende figur 4-11 i SCO, men med en mere detaljet beskrivelse af operander...

Programmering i symbolsk maskinsprog ... Effektive og maskinnære programmer, men besværligt ... ... skal bruges med omtanke ... ... programmering af ydre enheder, oversættere ...

Programmering i symbolsk maskinsprog int main() { return gcd(2,3); } int gcd(int x, int y) while ( x != y ){ if ( x < y ) y = y - x; else x = x - y; return x; ... systematisk oversættelse af højniveau-konstruktioner ... metoder med parameteroverførelse variabel erklæringer med simple typer kontrol strukturer; if-then-else, while beregning af betingelser og udtryk

dComNet-nr.1

Hvad gør dette

Målgruppen er MENNESKER

Eksempel int main() { return gcd(2,3); } int gcd(int x, int y) while ( x != y ){ if ( x < y ) y = y - x; else x = x - y; return x;

Metode int gcd(int x, int y) { while ( x != y ){ if ( x < y ) y = y - x; else x = x - y; } return x; .method gcd // int gcd .args 3 // ( int x, int y) .locals 0 .define x = 1 .define y = 2 // { ... // }

Metode – Ordning af parametre .method gcd // int gcd .args 3 // ( int x, int y) .locals 0 .define x = 1 .define y = 2 // { ... // } Caller's LV Caller's PC x y Link prt SP LV +2 +1 Gennemgå invokevirtual 1 på tavle, få det til at passe med lagerindholdet jvf. tegning på anden tavle. Vigtigt at have en konvention for rækkefølgen!!

Metode – Ordning af parametre .method gcd // int gcd .args 3 // ( int x, int y) .locals 0 .define x = 1 .define y = 2 // { ... // } Caller's LV Caller's PC x y Link prt SP LV +2 +1 Gennemgå invokevirtual 1 på tavle, få det til at passe med lagerindholdet jvf. tegning på anden tavle. IJVM konvention

Metode Caller's LV Caller's PC y x Link prt SP +2 +1 LV int gcd(int x, int y) { while ( x != y ){ if ( x < y ) y = y - x; else x = x - y; } return x; Caller's LV Caller's PC y x Link prt SP LV +2 +1 .method gcd // int gcd .args 3 // ( int x, int y) .locals 0 .define x = 1 .define y = 2 // { ... // }

Sidemandsopgave Over sæt Caller's LV Caller's PC y x Link prt SP +2 +1 int imul(int a, int b) { int p; p = 0; while ( a < 0 ){ a = a - 1; p = p + b; } return p; Caller's LV Caller's PC y x Link prt SP LV +2 +1 Over sæt ??? // { ... // }

Kontrolstruktur / while-løkke int gcd(int x, int y) { while ( x != y ){ if ( x < y ) y = y - x; else x = x - y; } return x; while: // while iload x iload y if_icmpeq end_while // ( x != y ) // { ... goto while // } end_while:

Sidemandsopgave Over sæt int imul(int a, int b) { int p; p = 0; while ( a < 0 ){ a = a - 1; p = p + b; } return p; Over sæt ??? // { ... // }

Kontrolstruktur / if-then-else int gcd(int x, int y) { while ( x != y ){ if ( x < y ) y = y - x; else x = x - y; } return x; iload x // if iload y isub // stack = x-y, x-y < 0 => ( x < y ) iflt then goto else then: // { ... goto end_if // } else: // else ... // { // } end_if:

Beregning af udtryk, variabletildeling og returnværdi int gcd(int x, int y) { while ( x != y ){ if ( x < y ) y = y - x; else x = x - y; } return x; iload y iload x isub istore y // y = y - x; istore x // x = x - y; iload x ireturn // return x;

Sidemandsopgave Over sæt int imul(int a, int b) { int p; p = 0; while ( a < 0 ){ a = a - 1; p = p + b; } return p; Over sæt ??? // { ... // }

Metode og metodekald Caller's LV Caller's PC y x Link prt SP +2 +1 LV int main() { return gcd(2,3); } Caller's LV Caller's PC y x Link prt SP LV +2 +1 .method main // int main() .args 1 .locals 0 //{ // push object reference bipush 88 // push arguments bipush 2 bipush 3 invokevirtual gcd ireturn // return gcd(2,3) // }

Sidemandsopgave Over sæt Caller's LV Caller's PC b a Link prt SP +2 +1 int main() { return imul(2,3); } Caller's LV Caller's PC b a Link prt SP LV +2 +1 Over sæt ???

// Greatest common divisor. .method gcd // int gcd .args 3 // ( int x. int y) .define x = 1 .define y = 2 // { while: // while iload x iload y if_icmpeq end_while // ( x != y ) iload x // if iload y isub // stack = x-y, x-y < 0 => ( x < y ) iflt then goto else then: // { iload x isub istore y // y = y - x; goto end_if // } else: // else iload x // { istore x // x = x - y; // } end_if: goto while // } end_while: ireturn // return x; // } .method main bipush 88 bipush 2 bipush 3 invokevirtual gcd ireturn // return gcd(2,3)

gcd.j oversættes til ijvm-asm gcd.j gcd.bc fortolkes af ijvm gcd.bc main index: 1 method area: 59 bytes 00 03 00 00 15 01 15 02 9f 00 22 15 01 15 02 64 9b 00 06 a7 00 0d 15 02 15 01 64 36 02 a7 00 0a 15 01 15 02 64 36 01 a7 ff dd 15 01 ac 00 01 00 00 10 58 10 02 10 03 b6 00 00 ac constant pool: 2 words 00000000 0000002d fortolkes af ijvm gcd.bc IJVM maskine

ijvm gcd.bc IJVM Trace of gcd.bc stack = 0, 1, 18 1:bipush 88 [10 58] stack = 88, 0, 1, 18 2:bipush 2 [10 02] stack = 2, 88, 0, 1, 18 3:bipush 3 [10 03] stack = 3, 2, 88, 0, 1, 18 4:invokevirtual 0 [b6 00 00] stack = 17, 58, 3, 2, 23, 0, 1, 18 5:iload 1 [15 01] stack = 2, 17, 58, 3, 2, 23, 0, 1 6:iload 2 [15 02] stack = 2, 2, 17, 58, 3, 2, 23, 0 7:if_icmpeq 34 [9f 00 22] stack = 17, 58, 3, 2, 23, 0, 1, 18 8:iload 1 [15 01] stack = 2, 17, 58, 3, 2, 23, 0, 1 9:iload 2 [15 02] stack = 3, 2, 17, 58, 3, 2, 23, 0 10:isub [64] stack = -1, 17, 58, 3, 2, 23, 0, 1 11:iflt 6 [9b 00 06] stack = 17, 58, 3, 2, 23, 0, 1, 18 12:iload 2 [15 02] stack = 3, 17, 58, 3, 2, 23, 0, 1 13:iload 1 [15 01] stack = 2, 3, 17, 58, 3, 2, 23, 0 14:isub [64] stack = 1, 17, 58, 3, 2, 23, 0, 1 15:istore 2 [36 02] stack = 1, 17, 58, 1, 2, 23, 0, 1, 18 16:goto 10 [a7 00 0a] stack = 17, 58, 1, 2, 23, 0, 1, 18 17:goto -35 [a7 ff dd] stack = 17, 58, 1, 2, 23, 0, 1, 18 18:iload 1 [15 01] stack = 2, 17, 58, 1, 2, 23, 0, 1 19:iload 2 [15 02] stack = 1, 2, 17, 58, 1, 2, 23, 0 20:if_icmpeq 34 [9f 00 22] stack = 17, 58, 1, 2, 23, 0, 1, 18 21:iload 1 [15 01] stack = 2, 17, 58, 1, 2, 23, 0, 1 22:iload 2 [15 02] stack = 1, 2, 17, 58, 1, 2, 23, 0 23:isub [64] stack = -1, 17, 58, 1, 2, 23, 0, 1 24:iflt 6 [9b 00 06] stack = 17, 58, 1, 2, 23, 0, 1, 18 25:goto 13 [a7 00 0d] stack = 17, 58, 1, 2, 23, 0, 1, 18 26:iload 1 [15 01] stack = 2, 17, 58, 1, 2, 23, 0, 1 27:iload 2 [15 02] stack = 1, 2, 17, 58, 1, 2, 23, 0 28:isub [64] stack = 1, 17, 58, 1, 2, 23, 0, 1 29:istore 1 [36 01] stack = 17, 58, 1, 1, 23, 0, 1, 18 30:goto -35 [a7 ff dd] stack = 17, 58, 1, 1, 23, 0, 1, 18 31:iload 1 [15 01] stack = 1, 17, 58, 1, 1, 23, 0, 1 32:iload 2 [15 02] stack = 786, 1, 17, 58, 1, 1, 23, 0 33:if_icmpeq 34 [9f 00 22] stack = 17, 58, 1, 1, 23, 0, 1, 18 34:iload 1 [15 01] stack = 1, 17, 58, 1, 1, 23, 0, 1 35:ireturn [ac] stack = 1, 0, 1, 18 36:ireturn [ac] stack = 1 Diskutér med din sidemandd: Der er fire fejl på stakken – hvilke og hvad er det rigtige? 9: her skal loades tre I stedet for to (anden parameter fra bunden) 15: Her fjernes øverste argument ikke 23: sub trækker fra omvendt (skal være 1) 32: her loades forkert (skal være 1)

Afprøvning af programmer Ekstern afprøvning Sammenlign et af programmet beregnet resultat med kendt og korrekt resultat ... Intern afprøvning Alle dele af programmet skal være gennemløbet og alle betingede hop skal være afviklet med betingelsen opfyldt og ikke opfyldt ...

ijvm gcd.bc IJVM Trace of gcd.bc stack = 0, 1, 18 bipush 88 [10 58] stack = 88, 0, 1, 18 bipush 2 [10 02] stack = 2, 88, 0, 1, 18 bipush 3 [10 03] stack = 3, 2, 88, 0, 1, 18 invokevirtual 0 [b6 00 00] stack = 17, 58, 3, 2, 23, 0, 1, 18 iload 1 [15 01] stack = 2, 17, 58, 3, 2, 23, 0, 1 iload 2 [15 02] stack = 3, 2, 17, 58, 3, 2, 23, 0 if_icmpeq 34 [9f 00 22] stack = 17, 58, 3, 2, 23, 0, 1, 18 isub [64] stack = -1, 17, 58, 3, 2, 23, 0, 1 iflt 6 [9b 00 06] stack = 17, 58, 3, 2, 23, 0, 1, 18 iload 2 [15 02] stack = 3, 17, 58, 3, 2, 23, 0, 1 iload 1 [15 01] stack = 2, 3, 17, 58, 3, 2, 23, 0 isub [64] stack = 1, 17, 58, 3, 2, 23, 0, 1 istore 2 [36 02] stack = 17, 58, 1, 2, 23, 0, 1, 18 goto 10 [a7 00 0a] stack = 17, 58, 1, 2, 23, 0, 1, 18 goto -35 [a7 ff dd] stack = 17, 58, 1, 2, 23, 0, 1, 18 iload 1 [15 01] stack = 2, 17, 58, 1, 2, 23, 0, 1 iload 2 [15 02] stack = 1, 2, 17, 58, 1, 2, 23, 0 if_icmpeq 34 [9f 00 22] stack = 17, 58, 1, 2, 23, 0, 1, 18 isub [64] stack = 1, 17, 58, 1, 2, 23, 0, 1 iflt 6 [9b 00 06] stack = 17, 58, 1, 2, 23, 0, 1, 18 goto 13 [a7 00 0d] stack = 17, 58, 1, 2, 23, 0, 1, 18 istore 1 [36 01] stack = 17, 58, 1, 1, 23, 0, 1, 18 goto -35 [a7 ff dd] stack = 17, 58, 1, 1, 23, 0, 1, 18 iload 1 [15 01] stack = 1, 17, 58, 1, 1, 23, 0, 1 iload 2 [15 02] stack = 1, 1, 17, 58, 1, 1, 23, 0 if_icmpeq 34 [9f 00 22] stack = 17, 58, 1, 1, 23, 0, 1, 18 ireturn [ac] stack = 1, 0, 1, 18 ireturn [ac] stack = 1 ijvm gcd.bc

Evt. optimeringer foretages altid på et korrekt program ... Arbejdsgang ... Tag udgangspunkt i et C/java program Oversæt systematisk til symbolsk maskinsprog Kommenter med C/java programmet Afprøv programmet eksternt og internt Evt. optimeringer foretages altid på et korrekt program ...