Oversættelse af symbolsk maskinsprog Sammenkædning og indlæsning af maskinsprog
Niveauer af abstrakte maskiner Spørgsmål... Hvordan bruges asm-niveauet? metode til programmering Hvordan stilles asm-niveauet tilrådighed? oversættelse af symbolsk maskinsprog til absolut maskinsprog
Programmering i symbolsk maskinsprog Tag udgangspunkt i et C program Oversæt systematisk til symbolsk maskinsprog Kommenter med C programmet Afprøv programmet eksternt og internt Evt. optimeringer foretages altid på et korrekt program...
Hvilke opgaver har assembleren for at producere absolut maskinkode? // if ( a >= b ) // r = b; // r = a; ireturn 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 0000000e
Oversættelse af symbolsk maskinsprog 1-1 afbildning mellem maskinordre og symbolsk maskinordre Oversættelse er vel ligetil? Hvad med symbolske konstanter, labels og direktiver?
// if ( a >= b ) // r = b; // r = a; ireturn Sekventiel oversættelse method area: 40 bytes 00 03 00 00 10 58 15 01 15 02 b6???? ac 00 03 00 01 15 01 15 02 64 9b???? 15 02 36 03 a7???? 15 01 36 03 15 03 ac constant pool: 2 words 0000000e
Two-pass assembler // if ( a >= b ) // r = b; // r = a; ireturn ijvm-asm test.j test.bc 1. gennemløb Opbyg symboltabel Sammenknytning af symbolske navne og værdier... 2. gennemløb oversættelse af program ordre for ordre... 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 0000000e
Hvad skal asm holde styr på? // if ( a >= b ) // r = b; istore main index: r 0 goto method end_if area: 40 bytes 00 03 00 00 10 58 // 15 else 01 15 02 b6 00 01 ac 00 03 iload 00 01 a 15 01 15 02 // 64 9b r 00 = a; 0a 15 02 36 03 a7 00 istore 07 15 r01 36 03 15 03 ac constant pool: 2 words iload r // return r; ireturn 0000000e Adressen på næste ledige byte i method area: Instruction Location Counter Adressen på næste ledige word i constant pool: Constant Location Counter Værdier knyttet til symboler, konstanter, metodenavne, labels: Symboltabel
1. gennemløb ILC: 0 CLC: 0 Symbol værdi type // if ( a >= b ) // r = b; // r = a; ireturn main index: method area: constant pool:
1. gennemløb ILC: 0 CLC: 1 Symbol værdi type main 0 metode // if ( a >= b ) // r = b; // r = a; ireturn method area: constant pool:
1. gennemløb ILC: 4 CLC: 1 Symbol værdi type main 0 metode // if ( a >= b ) // r = b; // r = a; ireturn method area: 00 03 00 00 constant pool:
1. gennemløb ILC: 4 CLC: 1 Symbol værdi type scope main 0 metode a 1 konstant main // if ( a >= b ) // r = b; // r = a; ireturn method area: 00 03 00 00 constant pool:
1. gennemløb ILC: 4 CLC: 1 Symbol værdi type scope main 0 metode a 1 konstant main b 2 konstant main // if ( a >= b ) // r = b; // r = a; ireturn method area: 00 03 00 00 constant pool:
1. gennemløb ILC: 6 CLC: 1 Symbol værdi type scope main 0 metode a 1 konstant main b 2 konstant main // if ( a >= b ) // r = b; // r = a; ireturn method area: 00 03 00 00 10 58 constant pool:
1. gennemløb ILC: 8 CLC: 1 Symbol værdi type scope main 0 metode a 1 konstant main b 2 konstant main // if ( a >= b ) // r = b; // r = a; ireturn method area: 00 03 00 00 10 58 15 01 constant pool:
1. gennemløb ILC: 10 CLC: 1 Symbol værdi type scope main 0 metode a 1 konstant main b 2 konstant main // if ( a >= b ) // r = b; // r = a; ireturn method area: 00 03 00 00 10 58 15 01 15 02 constant pool:
1. gennemløb ILC: 13 CLC: 1 // if ( a >= b ) // r = b; // r = a; ireturn Symbol værdi type scope main 0 metode a 1 konstant main b 2 konstant main Forward reference (min er ikke i symboltabellen) method area: 00 03 00 00 10 58 15 01 15 02 b6???? constant pool:
1. gennemløb ILC: 14 CLC: 1 Symbol værdi type scope main 0 metode a 1 konstant main b 2 konstant main // if ( a >= b ) // r = b; // r = a; ireturn method area: 00 03 00 00 10 58 15 01 15 02 b6???? ac constant pool:
1. gennemløb ILC: 14 CLC: 2 Symbol værdi type scope main 0 metode a 1 konstant main b 2 konstant main min 1 metode // if ( a >= b ) // r = b; // r = a; ireturn method area: 00 03 00 00 10 58 15 01 15 02 b6???? ac constant pool: 0000000e
1. gennemløb ILC: 18 CLC: 2 Symbol værdi type scope main 0 metode a 1 konstant main b 2 konstant main min 1 metode a 1 konstant min b 2 konstant min r 3 konstant min // if ( a >= b ) // r = b; // r = a; ireturn method area: 00 03 00 00 10 58 15 01 15 02 b6???? ac 00 03 00 01 constant pool: 0000000e
1. gennemløb ILC: 20 CLC: 2 Symbol værdi type scope main 0 metode a 1 konstant main b 2 konstant main min 1 metode a 1 konstant min b 2 konstant min r 3 konstant min // if ( a >= b ) // r = b; // r = a; ireturn method area: 00 03 00 00 10 58 15 01 15 02 b6???? ac 00 03 00 01 15 01 constant pool: 0000000e
1. gennemløb ILC: 22 CLC: 2 Symbol værdi type scope main 0 metode a 1 konstant main b 2 konstant main min 1 metode a 1 konstant min b 2 konstant min r 3 konstant min // if ( a >= b ) // r = b; // r = a; ireturn method area: 00 03 00 00 10 58 15 01 15 02 b6???? ac 00 03 00 01 15 01 15 02 constant pool: 0000000e
1. gennemløb ILC: 23 CLC: 2 Symbol værdi type scope main 0 metode a 1 konstant main b 2 konstant main min 1 metode a 1 konstant min b 2 konstant min r 3 konstant min // if ( a >= b ) // r = b; // r = a; ireturn method area: 00 03 00 00 10 58 15 01 15 02 b6???? ac 00 03 00 01 15 01 15 02 64 constant pool: 0000000e
1. gennemløb ILC: 26 CLC: 2 // if ( a >= b ) // r = b; // r = a; ireturn Symbol værdi type scope main 0 metode a 1 konstant main b 2 konstant main min 1 metode a 1 konstant min b 2 konstant min r 3 konstant min Forward reference (else er ikke defineret) method area: 00 03 00 00 10 58 15 02 15 02 b6???? ac 00 03 00 01 15 01 15 02 64 9b???? constant pool: 0000000e
1. gennemløb ILC: 28 CLC: 2 Symbol værdi type scope main 0 metode a 1 konstant main b 2 konstant main min 1 metode a 1 konstant min b 2 konstant min r 3 konstant min // if ( a >= b ) // r = b; // r = a; ireturn method area: 00 03 00 00 10 58 15 01 15 02 b6???? ac 00 03 00 01 15 01 15 02 64 9b???? 15 02 constant pool: 0000000e
1. gennemløb ILC: 30 CLC: 2 Symbol værdi type scope main 0 metode a 1 konstant main b 2 konstant main min 1 metode a 1 konstant min b 2 konstant min r 3 konstant min // if ( a >= b ) // r = b; // r = a; ireturn method area: 00 03 00 00 10 58 15 01 15 02 b6???? ac 00 03 00 01 15 01 15 02 64 9b???? 15 02 36 03 constant pool: 0000000e
1. gennemløb ILC: 33 CLC: 2 Symbol værdi type scope main 0 metode a 1 konstant main b 2 konstant main min 1 metode a 1 konstant min b 2 konstant min r 3 konstant min // if ( a >= b ) // r = b; // r = a; ireturn Forward reference method area: 00 03 00 00 10 58 15 01 15 02 b6???? ac 00 03 00 01 15 01 15 02 64 9b???? 15 02 36 03 a7???? constant pool: 0000000e
1. gennemløb ILC: 33 CLC: 2 // if ( a >= b ) // r = b; // r = a; ireturn Symbol værdi type scope main 0 metode a 1 konstant main b 2 konstant main min 1 metode a 1 konstant min b 2 konstant min r 3 konstant min else 33 label min method area: 00 03 00 00 10 58 15 01 15 02 b6???? ac 00 03 00 01 15 01 15 02 64 9b???? 15 02 36 03 a7???? constant pool: 0000000e
1. gennemløb ILC: 35 CLC: 2 // if ( a >= b ) // r = b; // r = a; ireturn Symbol værdi type scope main 0 metode a 1 konstant main b 2 konstant main min 1 metode a 1 konstant min b 2 konstant min r 3 konstant min else 33 label min method area: 00 03 00 00 10 58 15 01 15 02 b6???? ac 00 03 00 01 15 01 15 02 64 9b???? 15 02 36 03 a7???? 15 01 constant pool: 0000000e
1. gennemløb ILC: 37 CLC: 2 // if ( a >= b ) // r = b; // r = a; ireturn Symbol værdi type scope main 0 metode a 1 konstant main b 2 konstant main min 1 metode a 1 konstant min b 2 konstant min r 3 konstant min else 33 label min method area: 00 03 00 00 10 58 15 01 15 02 b6???? ac 00 03 00 01 15 01 15 02 64 9b???? 15 02 36 03 a7???? 15 01 36 03 constant pool: 0000000e
1. gennemløb ILC: 37 CLC: 2 // if ( a >= b ) // r = b; // r = a; ireturn Symbol værdi type scope main 0 metode a 1 konstant main b 2 konstant main min 1 metode a 1 konstant min b 2 konstant min r 3 konstant min else 33 label min end_if 37 label min method area: 00 03 00 00 10 58 15 01 15 02 b6???? ac 00 03 00 01 15 01 15 02 64 9b???? 15 02 36 03 a7???? 15 01 36 03 constant pool: 0000000e
1. gennemløb ILC: 39 CLC: 2 // if ( a >= b ) // r = b; // r = a; ireturn Symbol værdi type scope main 0 metode a 1 konstant main b 2 konstant main min 1 metode a 1 konstant min b 2 konstant min r 3 konstant min else 33 label min end_if 37 label min method area: 00 03 00 00 10 58 15 01 15 02 b6???? ac 00 03 00 01 15 01 15 02 64 9b???? 15 02 36 03 a7???? 15 01 36 03 15 03 constant pool: 0000000e
1. gennemløb ILC: 40 CLC: 2 // if ( a >= b ) // r = b; // r = a; ireturn Symbol værdi type scope main 0 metode a 1 konstant main b 2 konstant main min 1 metode a 1 konstant min b 2 konstant min r 3 konstant min else 33 label min end_if 37 label min method area: 00 03 00 00 10 58 15 01 15 02 b6???? ac 00 03 00 01 15 01 15 02 64 9b???? 15 02 36 03 a7???? 15 01 36 03 15 03 ac constant pool: 0000000e
1. gennemløb ILC: 40 CLC: 2 // if ( a >= b ) // r = b; // r = a; ireturn Symbol værdi type scope main 0 metode a 1 konstant main b 2 konstant main min 1 metode a 1 konstant min b 2 konstant min r 3 konstant min else 33 label min end_if 37 label min method area: 40 bytes 00 03 00 00 10 58 15 01 15 02 b6???? ac 00 03 00 01 15 01 15 02 64 9b???? 15 02 36 03 a7???? 15 01 36 03 15 03 ac constant pool: 2 words 0000000e
2. gennemløb // if ( a >= b ) // r = b; // r = a; ireturn Symbol værdi type scope main 0 metode a 1 konstant main b 2 konstant main min 1 metode Udfyld huller vha. symboltabel a 1 konstant min b 2 konstant min r 3 konstant min else 33 label min end_if 37 label min method area: 40 bytes 00 03 00 00 10 58 15 01 15 02 b6???? ac 00 03 00 01 15 01 15 02 64 9b???? 15 02 36 03 a7???? 15 01 36 03 15 03 ac constant pool: 2 words 0000000e
2. gennemløb ILC: 13 CLC: 1 // if ( a >= b ) // r = b; // r = a; ireturn Symbol værdi type scope main 0 metode a 1 konstant main b 2 konstant main min 1 metode a 1 konstant min b 2 konstant min r 3 konstant min else 33 label min end_if 37 label min 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???? 15 02 36 03 a7???? 15 01 36 03 15 03 ac constant pool: 2 words 0000000e
2. gennemløb ILC: 26 CLC: 2 // if ( a >= b ) // r = b; // r = a; ireturn Symbol værdi type scope main 0 metode a 1 konstant main b 2 konstant main min 1 metode a 1 konstant min b 2 konstant min r 3 konstant min else 33 label min end_if 37 label min Relativt hop: 33-23 = 10 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???? 15 01 36 03 15 03 ac constant pool: 2 words 0000000e 23
2. gennemløb ILC: 33 CLC: 2 // if ( a >= b ) // r = b; // r = a; ireturn Symbol værdi type scope main 0 metode a 1 konstant main b 2 konstant main min 1 metode a 1 konstant min b 2 konstant min r 3 konstant min else 33 label min end_if 37 label min Relativt hop: 37-30 = 7 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 0000000e 30
Two-pass assembler // if ( a >= b ) // r = b; // r = a; ireturn ijvm-asm test.j test.bc 1. gennemløb Opbyg symboltabel Sammenknytning af symbolske navne og værdier... 2. gennemløb oversættelse af program ordre for ordre... 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 0000000e
Indlæsning af IJVM program Maskinsprog / binært program 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 0000000e Simpelt indlæseprogram 1.Indlæs binært program i lager (method area og constant pool) startende fra adresse 0 2.Initialiser kontrolregistre PC, CPP, LV og SP 3.Start afvikling; invokevirtual ''main index'' 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47... 64 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 00 00 00 00 00 00 00 0e PC = 0 CPP = 10 LV = 12 SP = 16
ijvm test.bc 42 87 IJVM Trace of test.bc stack = 0, 1, 87, 42, 15 [10 58] stack = 88, 0, 1, 87, 42, 15 iload 1 [15 01] stack = 42, 88, 0, 1, 87, 42, 15 iload 2 [15 02] stack = 87, 42, 88, 0, 1, 87, 42, 15 invokevirtual 1 [b6 00 01] stack = 12, 13, 0, 87, 42, 21, 0, 1 iload 1 [15 01] stack = 42, 12, 13, 0, 87, 42, 21, 0 iload 2 [15 02] stack = 87, 42, 12, 13, 0, 87, 42, 21 [64] stack = -45, 12, 13, 0, 87, 42, 21, 0 iflt 10 [9b 00 0a] stack = 12, 13, 0, 87, 42, 21, 0, 1 iload 1 [15 01] stack = 42, 12, 13, 0, 87, 42, 21, 0 istore 3 [36 03] stack = 12, 13, 42, 87, 42, 21, 0, 1 iload 3 [15 03] stack = 42, 12, 13, 42, 87, 42, 21, 0 ireturn [ac] stack = 42, 0, 1, 87, 42, 15 ireturn [ac] stack = 42 return value: 42 15 12 Hvordan ser indholdet af lageret ud ved programstart? Caller's LV: 0 Caller's PC: 1 b: 87 a: 42 Link prt: 15 SP +2 +1 LV
// Integer multiplication.... Store programmer Man vil gerne anvende ''biblioteksmetoder''.method imul.args 3 // ( int x, int y ).define x = 1.define y = 2.locals 1 // int p;.define p = 3 ldc_w 0 istore p // p = 0; while: // while iload x ifeq end_while // ( x > 0 ) iload x bipush 1 istore x // x = x - 1; iload p iload y iadd istore p // p = p + y; goto while end_while: iload p ireturn // return p; // My multiplication program.args 3.method calc.args 3 invokevirtual calc ireturn invokevirtual imul ldc_w 42 iadd ireturn // return a*b+42
// Integer multiplication.method imul.args 3 // ( int x, int y ).define x = 1.define y = 2.locals 1 // int p;.define p = 3 ldc_w 0 istore p // p = 0;...... // My multiplication program.args 3 Mulig løsning Sammenkæd den oversattte invokevirtual calc ireturn kode, maskinkoden, inden indlæsning....method calc.args 3 invokevirtual imul ldc_w 42 iadd ireturn // return a*b+42 Mulig løsning Lav et samlet program i symbolsk maskinsprog, der kan oversættes... main index: 1 method area: 66 bytes 00 03 00 01 13 00 00 36 03 15 01 99 00 14 15 01 10 01 64 36 01 15 03 15 02 60 36 03 a7 ff ed 15 03 ac 00 03 00 00 10 58 15 01 15 02 b6 00 02 ac 00 03 00 00 10 58 15 01 15 02 b6 00 00 13 00 03 60 ac constant pool: 4 words 00000022 00000030 0000002a Problemer Kræver adgang til kildeteksten for de anvendte biblioteksmetoder... Biblioteksmetoder skal oversættes hver gang der rettes i egen kode...
Sammenkædning Sammenkæd den oversatte kode, maskinkoden, inden indlæsning... method area: 32 bytes 00 03 00 00 10 58 15 01 15 02 b6 00 01 ac 00 03 00 00 10 58 15 01 15 02 b6???? 13 00 02 60 ac constant pool: 3 words 0000000e 0000002a main index:?? method area: 34 bytes 00 03 00 01 13 00 00 36 03 15 01 99 00 14 15 01 10 01 64 36 01 15 03 15 02 60 36 03 a7 ff ed 15 03 ac constant pool: 1 words Mangler ''imul'' Har ingen mainmetode
Sammenkædning Sammenkæd den oversatte kode, maskinkoden, inden indlæsning... method area: 32 bytes 00 03 00 00 10 58 15 01 15 02 b6 00 01 ac 00 03 00 00 10 58 15 01 15 02 b6???? 13 00 02 60 ac constant pool: 3 words 0000000e 0000002a Mangler ''imul'' main index:?? method area: 34 bytes 00 03 00 01 13 00 00 36 03 15 01 99 00 14 15 01 10 01 64 36 01 15 03 15 02 60 36 03 a7 ff ed 15 03 ac constant pool: 1 words Har ingen main-metode calc index: 1 method area: 32 bytes 00 03 00 00 10 58 15 01 15 02 b6 00 01 ac 00 03 00 00 10 58 15 01 15 02 b6???? 13 00 02 60 ac constant pool: 3 words [] 0000000e [.method calc] 0000002a [ldc_w constant] external symbols:.method imul [ 24: invokevirtual imul ] main.obj imul index: 1 method area: 34 bytes 00 03 00 01 13 00 00 36 03 15 01 99 00 14 15 01 10 01 64 36 01 15 03 15 02 60 36 03 a7 ff ed 15 03 ac constant pool: 1 words [ldc_w constant] [.method imul] imul.obj
Sammenkædning calc index: 1 main.o bj method area: 32 bytes 00 03 00 00 10 58 15 01 15 02 b6 00 01 ac 00 03 00 00 10 58 15 01 15 02 b6???? 13 00 02 60 ac constant pool: 3 words [] 0000000e [.method calc] 0000002a [ldc_w constant] external symbols:.method imul [ 24: invokevirtual imul ] imul.o bj imul index: 1 method area: 34 bytes 00 03 00 01 13 00 00 36 03 15 01 99 00 14 15 01 10 01 64 36 01 15 03 15 02 60 36 03 a7 ff ed 15 03 ac constant pool: 1 words [ldc_w constant] [.method imul] Linker main index: 1 method area: 66 bytes 00 03 00 01 13 00 00 36 03 15 01 99 00 14 15 01 10 01 64 36 01 15 03 15 02 60 36 03 a7 ff ed 15 03 ac 00 03 00 00 10 58 15 01 15 02 b6 00 02 ac 00 03 00 00 10 58 15 01 15 02 b6 00 00 13 00 03 60 ac constant pool: 4 words 00000022 00000030 0000002a all.bc
Sammenkædning calc index: 1 main.o bj method area: 32 bytes 00 03 00 00 10 58 15 01 15 02 b6 00 01 ac 00 03 00 00 10 58 15 01 15 02 b6???? 13 00 02 60 ac constant pool: 3 words [] 0000000e [.method calc] 0000002a [ldc_w constant] external symbols:.method imul [ 24: invokevirtual imul ] imul.o bj imul index: 1 method area: 34 bytes 00 03 00 01 13 00 00 36 03 15 01 99 00 14 15 01 10 01 64 36 01 15 03 15 02 60 36 03 a7 ff ed 15 03 ac constant pool: 1 words [ldc_w constant] [.method imul] Linker main index: 1 method area: 66 bytes 00 03 00 01 13 00 00 36 03 15 01 99 00 14 15 01 10 01 64 36 01 15 03 15 02 60 36 03 a7 ff ed 15 03 ac 00 03 00 00 10 58 15 01 15 02 b6 00 02 ac 00 03 00 00 10 58 15 01 15 02 b6 00 00 13 00 03 60 ac constant pool: 4 words 00000022 00000030 0000002a all.b c
Sammenkædning calc index: 1 main.o bj method area: 32 bytes 00 03 00 00 10 58 15 01 15 02 b6 00 01 ac 00 03 00 00 10 58 15 01 15 02 b6???? 13 00 02 60 ac constant pool: 3 words [] 0000000e [.method calc] 0000002a [ldc_w constant] external symbols:.method imul [ 24: invokevirtual imul ] imul.o bj imul index: 1 method area: 34 bytes 00 03 00 01 13 00 00 36 03 15 01 99 00 14 15 01 10 01 64 36 01 15 03 15 02 60 36 03 a7 ff ed 15 03 ac constant pool: 1 words [ldc_w constant] [.method imul] Linker main index: 1 method area: 66 bytes 00 03 00 01 13 00 00 36 03 15 01 99 00 14 15 01 10 01 64 36 01 15 03 15 02 60 36 03 a7 ff ed 15 03 ac 00 03 00 00 10 58 15 01 15 02 b6 00 02 ac 00 03 00 00 10 58 15 01 15 02 b6 00 00 13 00 03 60 ac constant pool: 4 words Hvordan? 00000022 00000030 0000002a all.b c
Generelt eksempel Fire objekt-moduler skal sammenkædes Hver oversat under antagelse af indlæsning fra adresse 0...
Reallokeringsproblem Absolutte referencer til lageradresse skal justeres jvf. indlæsningsadresser... Eksterne referencer Skal sættes jvf. indlæsnings-adresser...
IJVM eksempel calc index: 1 method area: 32 bytes 00 03 00 00 10 58 15 01 15 02 b6 00 01 ac 00 03 00 00 10 58 15 01 15 02 b6???? 13 00 02 60 ac constant pool: 3 words [] 0000000e [.method calc] 0000002a [ldc_w constant] external symbols:.method imul [ 24: invokevirtual imul ] imul index: 1 method area: 34 bytes 00 03 00 01 13 00 00 36 03 15 01 99 00 14 15 01 10 01 64 36 01 15 03 15 02 60 36 03 a7 ff ed 15 03 ac constant pool: 1 words [ldc_w constant] [.method imul] Linker main index: 1 method area: 66 bytes 00 03 00 01 13 00 00 36 03 15 01 99 00 14 15 01 10 01 64 36 01 15 03 15 02 60 36 03 a7 ff ed 15 03 ac 00 03 00 00 10 58 15 01 15 02 b6 00 02 ac 00 03 00 00 10 58 15 01 15 02 b6 00 00 13 00 03 60 ac constant pool: 4 words 00000022 00000030 0000002a all.bc
IJVM eksempel calc index: 1 method area: 32 bytes 00 03 00 00 10 58 15 01 15 02 b6 00 01 ac 00 03 00 00 10 58 15 01 15 02 b6???? 13 00 02 60 ac constant pool: 3 words [] 0000000e [.method calc] 0000002a [ldc_w constant] external symbols:.method imul [ 24: invokevirtual imul ] imul index: 1 method area: 34 bytes 00 03 00 01 13 00 00 36 03 15 01 99 00 14 15 01 10 01 64 36 01 15 03 15 02 60 36 03 a7 ff ed 15 03 ac constant pool: 1 words [ldc_w constant] [.method imul] Eksterne referencer sættes jvf. placering i fælles ''method area'' og ''constant Linkerpool''... main index: 1 method area: 66 bytes 00 03 00 01 13 00 00 36 03 15 01 99 00 14 15 01 10 01 64 36 01 15 03 15 02 60 36 03 a7 ff ed 15 03 ac 00 03 00 00 10 58 15 01 15 02 b6 00 02 ac 00 03 00 00 10 58 15 01 15 02 b6 00 00 13 00 03 60 ac constant pool: 4 words 00000022 00000030 0000002a all.bc
IJVM eksempel calc index: 1 method area: 32 bytes 00 03 00 00 10 58 15 01 15 02 b6 00 01 ac 00 03 00 00 10 58 15 01 15 02 b6???? 13 00 02 60 ac constant pool: 3 words [] 0000000e [.method calc] 0000002a [ldc_w constant] external symbols:.method imul [ 24: invokevirtual imul ] imul index: 1 method area: 34 bytes 00 03 00 01 13 00 00 36 03 15 01 99 00 14 15 01 10 01 64 36 01 15 03 15 02 60 36 03 a7 ff ed 15 03 ac constant pool: 1 words [ldc_w constant] [.method imul] Startadresser for metoder i eget ''method area'' skal justeres i fælles ''constant Linker pool'' jvf. placering i fælles ''method area''... main index: 1 method area: 66 bytes 00 03 00 01 13 00 00 36 03 15 01 99 00 14 15 01 10 01 64 36 01 15 03 15 02 60 36 03 a7 ff ed 15 03 ac 00 03 00 00 10 58 15 01 15 02 b6 00 02 ac 00 03 00 00 10 58 15 01 15 02 b6 00 00 13 00 03 60 ac constant pool: 4 words 00000022 00000030 0000002a all.bc
IJVM eksempel calc index: 1 method area: 32 bytes 00 03 00 00 10 58 15 01 15 02 b6 00 01 ac 00 03 00 00 10 58 15 01 15 02 b6???? 13 00 02 60 ac constant pool: 3 words [] 0000000e [.method calc] 0000002a [ldc_w constant] external symbols:.method imul [ 24: invokevirtual imul ] imul index: 1 method area: 34 bytes 00 03 00 01 13 00 00 36 03 15 01 99 00 14 15 01 10 01 64 36 01 15 03 15 02 60 36 03 a7 ff ed 15 03 ac constant pool: 1 words [ldc_w constant] [.method imul] Startadresser for metoder i eget ''method area'' skal justeres i fælles ''constant Linker pool'' jvf. placering i fælles ''method area''... adresse 34 main index: 1 method area: 66 bytes 00 03 00 01 13 00 00 36 03 15 01 99 00 14 15 01 10 01 64 36 01 15 03 15 02 60 36 03 a7 ff ed 15 03 ac 00 03 00 00 10 58 15 01 15 02 b6 00 02 ac 00 03 00 00 10 58 15 01 15 02 b6 00 00 13 00 03 60 ac constant pool: 4 words 00000022 00000030 0000002a all.bc
IJVM eksempel calc index: 1 method area: 32 bytes 00 03 00 00 10 58 15 01 15 02 b6 00 01 ac 00 03 00 00 10 58 15 01 15 02 b6???? 13 00 02 60 ac constant pool: 3 words [] 0000000e [.method calc] 0000002a [ldc_w constant] external symbols:.method imul [ 24: invokevirtual imul ] imul index: 1 method area: 34 bytes 00 03 00 01 13 00 00 36 03 15 01 99 00 14 15 01 10 01 64 36 01 15 03 15 02 60 36 03 a7 ff ed 15 03 ac constant pool: 1 words [ldc_w constant] [.method imul] Referencer til egen ''constant pool'' (via invokevirtual eller ldc_w) skal justeres jvf. Linker placering i fælles ''constant pool''... main index: 1 method area: 66 bytes 00 03 00 01 13 00 00 36 03 15 01 99 00 14 15 01 10 01 64 36 01 15 03 15 02 60 36 03 a7 ff ed 15 03 ac 00 03 00 00 10 58 15 01 15 02 b6 00 02 ac 00 03 00 00 10 58 15 01 15 02 b6 00 00 13 00 03 60 ac constant pool: 4 words 00000022 00000030 0000002a all.bc
IJVM eksempel calc index: 1 method area: 32 bytes 00 03 00 00 10 58 15 01 15 02 b6 00 01 ac 00 03 00 00 10 58 15 01 15 02 b6???? 13 00 02 60 ac constant pool: 3 words [] 0000000e [.method calc] 0000002a [ldc_w constant] external symbols:.method imul [ 24: invokevirtual imul ] imul index: 1 method area: 34 bytes 00 03 00 01 13 00 00 36 03 15 01 99 00 14 15 01 10 01 64 36 01 15 03 15 02 60 36 03 a7 ff ed 15 03 ac constant pool: 1 words [ldc_w constant] [.method imul] Referencer til egen ''constant pool'' (via invokevirtual eller ldc_w) Linker skal justeres jvf. placering i fælles ''constant pool''... adresse 1 main index: 1 method area: 66 bytes 00 03 00 01 13 00 00 36 03 15 01 99 00 14 15 01 10 01 64 36 01 15 03 15 02 60 36 03 a7 ff ed 15 03 ac 00 03 00 00 10 58 15 01 15 02 b6 00 02 ac 00 03 00 00 10 58 15 01 15 02 b6 00 00 13 00 03 60 ac constant pool: 4 words 00000022 00000030 0000002a all.bc
calc index: 1 method area: 32 bytes 00 03 00 00 10 58 15 01 15 02 b6 00 01 ac 00 03 00 00 10 58 15 01 15 02 b6???? 13 00 02 60 ac constant pool: 3 words [] 0000000e [.method calc] 0000002a [ldc_w constant] external symbols:.method imul [ 24: invokevirtual imul ] relocation dictionary: [10: invokevirtual] [27: ldc_w] IJVM eksempel Referencer til egen ''constant pool'' (via invokevirtual eller ldc_w) Linker skal justeres jvf. placering i fælles ''constant pool''... adresse 1 main index: 1 method area: 66 bytes 00 03 00 01 13 00 00 36 03 15 01 99 00 14 15 01 10 01 64 36 01 15 03 15 02 60 36 03 a7 ff ed 15 03 ac 00 03 00 00 10 58 15 01 15 02 b6 00 02 ac 00 03 00 00 10 58 15 01 15 02 b6 00 00 13 00 03 60 ac constant pool: 4 words 00000022 00000030 0000002a imul index: 1 method area: 34 bytes 00 03 00 01 13 00 00 36 03 15 01 99 00 14 15 01 10 01 64 36 01 15 03 15 02 60 36 03 a7 ff ed 15 03 ac constant pool: 1 words [ldc_w constant] [.method imul] all.bc
Opsummering calc index: 1 method area: 32 bytes 00 03 00 00 10 58 15 01 15 02 b6 00 01 ac 00 03 00 00 10 58 15 01 15 02 b6???? 13 00 02 60 ac constant pool: 3 words [] 0000000e [.method calc] 0000002a [ldc_w constant] external symbols:.method imul [ 24: invokevirtual imul ] relocation dictionary: [10: invokevirtual] [27: ldc_w]
Opsummering calc index: 1 method area: 32 bytes 00 03 00 00 10 58 15 01 15 02 b6 00 01 ac 00 03 00 00 10 58 15 01 15 02 b6???? 13 00 02 60 ac constant pool: 3 words [] 0000000e [.method calc] 0000002a [ldc_w constant] external symbols:.method imul [ 24: invokevirtual imul ] relocation dictionary: [10: invokevirtual] [27: ldc_w]
Opsummering Egentlig en diskussion af bindingstidspunkt, dvs. hvornår bindes referencer til lageret til fysiske adresse... ijvm-asm eksempel Når programmet skrives Når programmet oversættes Når programmet sammenkædes Når programmet indlæses... et samspil med operativ-systemets ''memory manager''......