Oversættelse af symbolsk maskinsprog. Sammenkædning og indlæsning af maskinsprog



Similar documents
VHDL programmering H2

Chapter 4 Lecture 5 The Microarchitecture Level Integer JAVA Virtual Machine

Join af tabeller med SAS skal det være hurtigt?

Business development. Linnea Jacobsen. 1. semester 2014

OIO Dekstop applikation

Opdatering af metadata via SAS -programmer

Questionnaire #1: The Patient (Spørgeskema, må gerne besvares på dansk)

Management. Support HR

SRX. SRX Firewalls. Rasmus Elmholt V1.0

CAMP LOGOS administrated by Boligselskabet Sct. Jørgen (housing agency)

How To Boot A Cisco Ip Phone From A Cnet Vlan To A Vlan On A Cpower Box On A Ip Phone On A Network With A Network Vlan (Cisco) On A Powerline (Ip Phone) On An

IT-sikkerhedssystem. Rockwool International. DAu Konference: Industriel IT sikkerhed

Koblingen mellem forskere og virksomheder: hvorfor, hvordan? Morten Ølgaard Jensen, ph.d. September 2011

SPDE. Lagring af større datamængder. make connections share ideas be inspired. Henrik Dorf Chefkonsulent SAS Institute A/S

Hot & New in Symantec Management and Windows Protection

SharePoint Brugergruppe møde 15. august 2014

National strategi for Datamanagement Input fra Bevaring, Formidling og Genbrug. Birte Christensen-Dalsgaard Det Kongelige Bibliotek

SAP Best Practices. Færdigpakket branchespecifik og brancheovergribende knowhow. Tilgængelighed for SAP-kunder og SAP-partnere

Chapter 7D The Java Virtual Machine

Indenfor projektledelse

Why Do People Pay the Way They Do: The Case of Cards, Cash, and Internet Banking in the Context

Skab værdi med Business Intelligence

Evaluation and Assessment of Key Competences in Denmark

Student evaluation form

Etablering af krav (kap 10)

GUIDE to completion of the Excel spreadsheet

2 halvleg. 1 halvleg. Opvarmning. 2 halvleg. 3 halvleg. Advanced & Powerful. Basic PC-based Automation. Diagnose. Online Tools & Add-on s

SAS og Excel. Kender du fem forskellige måder at overføre data mellem SAS og Excel? Gert Nissen, seniorkonsulent

COACH BOT Modular e-course with virtual coach tool support

Habanero Extreme Scale Software Research Project

* --- Alle labels kan nu bestemmes i PROC PRINT ;

Hvis personallisten ikke er ført slik reglene sier, kan Skatteetaten ilegge overtredelsesgebyr.

How To Write An Marketing

Oracle Application Express

Interpreters and virtual machines. Interpreters. Interpreters. Why interpreters? Tree-based interpreters. Text-based interpreters

DEFINITE AND INDEFINITE FORM

Baggrunds information om Alusta

ÆSTETISK INTERAKTION 6 MIE NØRGAARD, SAINT 2012

Ny postlov i Norge New postal regulations in Norway. Frode Wold, Norway Post Nordic Address Forum, Iceland 5-6. may 2015

Nordic Built Active Roofs and Facades ELLEBO RENOVATION

Nordic Master in Didactics of Mathematics

Targeterbare mutationer / biomarkører Status og udfordringer for patologien

PRESSEKIT INTERNATIONALE STUDERENDE

SAS programmer til Proc Means indlæg af Per Andersen / Capgemini Danmark A/S

Wake-Up Meeting hos PeopleNet 5. september 2013

GB INTRODUCTION manual:

IZ15-IZ16. Montagevejledning Installation manual 11/2011

Building Stronger Universities in Developing Countries. First Phase, August 2011 July 2013

CSC 8505 Handout : JVM & Jasmin

Too Much. Workmate. A. Listen to Adrian talking about obesity. 1 Who is he especially worried about?

Subordinate clause and main clause (ledsætning og helsætning) main clause subordinate clause main clause

Innovation Days Industrial Communication

public void setusername(string username) { this.username = username; } public void setname(string name) { this.name = name; }

Skolestart. Solveig Gaarsmand Skole og Samfund Good ID 2007

Kvalifisering av ny teknologi

Agil Business Process Management - i Finans

MTIC kursus. International markedsføring & salg i medico-branchen III

Agenda - Remote Access i Rockwool

Sponsors ansvar ved outsourcing af en klinisk afprøvning. Dansk Selskab for GCP. Medlemsmøde 23 November 2010

The Java Virtual Machine (JVM) Pat Morin COMP 3002

Parc del Segre Barcelona

Guide til udfyldelse af Learning Agreement Guide to Learning Agreement

language 1 (source) compiler language 2 (target) Figure 1: Compiling a program

AN EXAMPLE OF SELF REGULATION

SPECIFIKATIONER KEYBOARD LYDPROCESSOR. 88 tangenter (PHA-4 Concert Keyboard: med Escapement og Ebony/Ivory Feel) Klaviatur

Menneskedreven innovation

PROFESSIONAL BACHELOR IN

Steno Diabetes Center

SATELLITTKOMMUNIKASJON I NORDOMRÅDENE

Taarup El- og hydraulikstyring

Features & Fordele river kan udskiftes LED bord kan udskiftes

Presentation of Semco Maritime

Lær at spille din kort rigtigt, og få erhvervserfaring gennem AIESEC. Hvad er AIESEC? Vil du vide mere? Hvilke erfaringer kan du opnå i AIESEC?

Energinet.dk project no Wave Star A/S Park Allé 350E 2605 Brøndby. Aalborg Universitet Dansk Energi Danfoss

Linux kernen. Version , arch. DIKU Intel, SMP. . NEL, Kernel,

CRES - a Scientific Platform for Sharing Climate Change Related Knowledge in Denmark

Kryptologi Opgave 5. Indledning. Øvelse 6.1. Øvelse Litteratur. Rune Højsgaard

02 B The Java Virtual Machine

Professional Diploma In Digital Marketing

Ways for you. to help your child with. homework!

Industriel påføring af maling ved pensel, sprøjtepåføring eller dypning

IP Telefoni. DHCP Options VLANs

Innovation hvordan holder Radiometer den i live? , Tommy Bysted, Radiometer Medical ApS

Transcription:

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''......