La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

G. Frosini Programmi di sviluppo Slide 1 PROGRAMMI DI SVILUPPO.

Presentazioni simili


Presentazione sul tema: "G. Frosini Programmi di sviluppo Slide 1 PROGRAMMI DI SVILUPPO."— Transcript della presentazione:

1 G. Frosini Programmi di sviluppo Slide 1 PROGRAMMI DI SVILUPPO

2 G. Frosini Programmi di sviluppo Slide 2 Traduzione Programma Assemblatore: –trattazione non strettamente vincolata ad una specifica implementazione –assimilabile, per molti aspetti, con quanto avviene nell’Assembler GCC (GAS). Ipotesi semplificative: –variabili (e le costanti) fanno parte della sezione dati; –le istruzioni di salto prevedono indirizzamento relativo. Processo di traduzione di un file: –due passate; –utilizzo di una variabile interna di conteggio, detta Contatore di Locazioni CL (o Location Counter LC); Variabile CL: –azzerata quando viene incontrata una delle direttive.DATA o.TEXT; –incrementata man mano che vengono esaminati i vari comandi; –ogni incremento è pari al numero di byte richiesti per la traduzione del comando in esame. Valore di CL: –rappresenta l'indirizzo (numerico) di un comando, riferito all'inizio della sezione in cui il comando compare. File da tradurre: –file originario, nel quale vengono preliminarmente inclusi i file che compaiono in una direttiva #include.

3 G. Frosini Programmi di sviluppo Slide 3 Prima passata (1) Analisi sequenziale del file da tradurre: –avanzamento di CL; –costruzione della tabella delle sezioni e della tabella dei simboli. Tabella delle sezioni: Nome_file-SezioneLunghezza …... –lunghezza di una sezione: allineata a multipli di 16; –pari al valore di CL che si ha dopo l’allineamento. Tabella dei simboli: Ind. simbolicoSezioneInd numerico relativo (CL) ……… –associa ad ogni nome (indirizzo simbolico) definito nel file un indirizzo numerico relativo all’inizio della sezione in cui compare (valore di CL in corrispondenza del comando che ha quel nome)). Tabella delle sezioni: passata al Collegatore. Tabella dei simboli: utilizzata dall'Assemblatore nella seconda passata.

4 G. Frosini Programmi di sviluppo Slide 4 File codifica1a.s - Prima passata (1) # PROGRAMMA codifica1 # File principale codifica1a.s.GLOBAL_start.EXTERNalfa, beta, esamina.DATA 0000buf.BYTE0# file incluso ser.s, sezione.DATA 0001kappa:.FILL8, 1 0009# 7 byte di alliuneamento 0010.TEXT 0000 tastiera: PUSHL %EBX# file incluso ser.s, sezione.TEXT …... 0021 RET 0022 video:PUSHL %EAX …... 0045RET 0046uscita:MOVL $0, %EBX 004B MOVL $1, %EAX 0050 INT $0X80

5 G. Frosini Programmi di sviluppo Slide 5 File codifica1a.s - Prima passata (2) 0052 _start: 0052 ancora:CALLtastiera 0057 CMPB$'\n', %AL 0059 JEfine 005B CALLvideo 0060MOVB%AL, %BL 0062MOVB$' ', %AL 0064CALLvideo 0069 MOVB%BL, alfa 006F MOVL$kappa, beta 0079 CALLesamina 007E MOVL$0, %ESI 0083 ripeti:MOVBkappa(%ESI), %AL 0089 CALLvideo 008E INCL%ESI 008F CMPL$8, %ESI 0092 JBripeti 0094 MOVB$'\n', %AL 0096 CALLvideo 009B JMPancora 009D fine:JMPuscita 009F# 1 byte di allineamento 00A0

6 G. Frosini Programmi di sviluppo Slide 6 File codifica1a.s - Tabelle prima passata Tabella delle sezioni: Nome_file-SezioneLunghezza codifica1a.o-DATA10 codifica1a.o-TEXTA0 Tabella dei simboli: Indirizzo. simbolico Sezione Indirizzo numerico relativo (CL) bufDATA0000 kappaDATA0001 tastieraTEXT0000 videoTEXT 0022 uscitaTEXT 0046 _startTEXT 0052 ancoraTEXT 0052 ripetiTEXT 0083 fineTEXT 009D

7 G. Frosini Programmi di sviluppo Slide 7 File codifica1b.s - Prima passata # PROGRAMMA codifica1 # File secondario codifica1b.s.GLOBALalfa, beta, esamina.DATA 0000alfa:.BYTE 0 0001beta:.LONG 0 0005# 11 byte di allin. 0010.TEXT 0000 esamina:PUSHL%EAX 0001 PUSHL%EBX 0002 PUSHL%ESI 0003 MOVBalfa, %AL # I dato 0008 MOVLbeta, %EBX # II dato 000E MOVL$0, %ESI 0013 ciclo:TESTB$0x80, %AL 0015 JZzero 0017 MOVB$'1', (%EBX, %ESI) 001B JMPavanti 001D zero:MOVB $'0', (%EBX, %ESI) 0021 avanti:SHLB $1, %AL 0023 INCL %ESI 0024 CMPL $8, %ESI 0027 JB ciclo 0029 POPL %ESI 002A POPL %EBX 002B POPL %EAX 002C RET 002D# 3 byte di allin. 0030

8 G. Frosini Programmi di sviluppo Slide 8 File codifica1b.s - Tabelle prima passata Tabella delle sezioni: Nome_file-SezioneLunghezza codifica1b.o-DATA10 codifica1b.o-TEXT30 Tabella dei simboli: Indirizzo simbolicoSezioneIndirizzo numerico relativo (CL) alfaDATA0000 betaDATA 0001 esaminaTEXT0000 cicloTEXT 0013 zeroTEXT 001D avantiTEXT 0021

9 G. Frosini Programmi di sviluppo Slide 9 Seconda passata (1) Traduzione del file in modo sequenziale: –il file tradotto è costituito da due sezioni, ciascuna sezione costituita da byte aventi ciascuno un proprio indice. –nel file tradotto, le entità di una parola o di una parola lunga iniziano col byte meno significativo. Predisposizione di ulteriori tabelle per il Collegatore. Processo di traduzione: –calcolo delle espressioni-indirizzo che compaiono nei campi operandi; –ad ogni nome definito nel file si associa l'indirizzo numerico relativo prelevato dalla tabella dei simboli; –ad ogni nome esterno si associa l'indirizzo 0. Traduzione dei comandi: –l’Assemblatore utilizza regole che dipendono dalla natura di ogni comando. Istruzioni operative in cui compare una espressione-indirizzo: –indirizzamento diretto (o modificato): l'espressione-indirizzo viene calcolata, e il valore così ottenuto viene posto nel campo DISP dell'istruzione macchina (parola lunga); –indirizzamento immediato: l'espressione-indirizzo viene calcolata, e il valore così ottenuto viene posto nel campo IMM dell'istruzione macchina (parola lunga).

10 G. Frosini Programmi di sviluppo Slide 10 Seconda passata (2) Istruzioni di controllo (JMP, Jcond o CALL) con indirizzamento relativo rispetto a EIP, in cui compare una espressione-indirizzo: –l'espressione indirizzo viene calcolata; –il valore E così ottenuto determina il valore del campo DISP dell'istruzione macchina, secondo la regola: DISP = E - IND* –la quantità IND* è l'indirizzo corrispondente al comando Assembler successivo alla istruzione di controllo considerata; rappresenta (al momento) il valore di EIP quando l’istruzione verrà eseguita. Campo DISP: –può essere lungo un byte (se il suo valore è compreso tra -128 e + 127) oppure una parola lunga.

11 G. Frosini Programmi di sviluppo Slide 11 Seconda passata (3) Tabelle predisposte in seconda passata: –tabella dei nomi globali; –tabella dei nomi esterni; –tabella di collegamento. Tabella dei nomi globali: –sottoinsieme dalla tabella dei simboli; –contiene i nomi dichiarati globali in quel file. Nome_file-SezioneNome globale Indirizzo numerico relativo (CL) …...... Tabella dei nomi esterni: –nomi dichiarati esterni in quel file. Nome fileNome esterno …...

12 G. Frosini Programmi di sviluppo Slide 12 Seconda passata (4) Tabella di collegamento: –specifica la Sezione e l’indirizzo numerico relativo delle parole lunghe (che coinvolgono espressioni-indirizzo) sulle quali vanno effettuate delle modifiche in fase di collegamento; –contiene l'indicazione delle modifiche da effettuare (una stessa parola lunga può richiedere più modifiche). Necessità delle modifiche: –l'Assemblatore calcola provvisoriamente le espressioni-indirizzo: per i nomi definiti nel file, presupponendo che le sezioni.TEXT e.DATA inizino da 0; per i nomi esterni, presupponendo che abbiano indirizzo 0. Indirizzo numerico di un nome definito nel file: –somma di un addendo pari all’indirizzo effettivo della sezione in cui risulta definito (brevemente,  _TEXT o a I_DATA). Indirizzo numerico di un nome esterno: –somma di un addendo pari all’indirizzo numerico effettivo di quel nome (brevemente, I_NOME).

13 G. Frosini Programmi di sviluppo Slide 13 Seconda passata (5) Istruzioni di controllo con indirizzamento relativo: –la quantità IND*, dovendo corrispondere al valore di EIP quando l'istruzione verrà eseguita, deve essere modificata per somma, con un addendo pari a  _TEXT; –supponiamo che l'espressione-indirizzo E sia costituita da un singolo nome simbolico: –se il nome è definito nel file, il campo DISP effettivo (NU_DISP) sarà dato da: NU_DISP = (E +  _TEXT) - (IND* +  _TEXT) = DISP non è richiesta alcuna modifica; –se il nome è esterno (I_NOME è il suo indirizzo numerico), il campo DISP effettivo è dato da: NU_DISP = (0 + I_NOME) - (IND* +  _TEXT) = DISP + I_NOME -  _TEXT è richiesta una prima modifica per somma, con il valore di I_NOME, e una seconda modifica per differenza, con il valore di  _TEXT.

14 G. Frosini Programmi di sviluppo Slide 14 Seconda passata (6) Parole lunghe da modificare: –vengono individuate dall’indice del byte meno significativo (quello iniziale). Tabella di collegamento: Nome_file-SezioneIndiceOperando simbolico Operazione ……… …

15 G. Frosini Programmi di sviluppo Slide 15 File codifica1a.o - Seconda passata (1) # File principale codifica1a.o.DATA 000000 buf:.BYTE 0 0001 00 00 00 00 kappa:.FILL 8, 1 00 00 000900 00 00 00 00 00 00 0010.TEXT 000053tastiera:… … 000DB9 00000000MOVL$buf, %ECX … 0019A0 00000000MOVBbuf, %AL … 002250video: … … 0026A2 00000000MOVB%AL, buf … 0035B9 00000000MOVL$buf, %ECX … 0046… uscita: … …

16 G. Frosini Programmi di sviluppo Slide 16 File codifica1a.o - Seconda passata (2) 0052_start: 0052E8 A9FFFFFFancora:CALLtastiera 00573C 0ACMPB$'\n', %AL 005974 42JEfine 005BE8 CEFFFFFFCALLvideo … 0069881D 00000000MOVB%BL, alfa 006FC705 00000000 01000000 MOVL$kappa, beta 0079E8 82FFFFFFCALLesamina 007EBE 00000000MOVL$0, %ESI 00838A86 01000000 ripeti: MOVB kappa (%ESI), %AL 0089E8 94FFFFFFCALLvideo 008E46INCL%ESI 008F83FE 08CMPL$8, %ESI 009272 EFJBripeti 0094B0 0AMOVB $'\n', %AL 0096E8 87FFFFFFCALLvideo 009BEB B5JMPancora 009DEB A7fine:JMPuscita 009F00 00A0

17 G. Frosini Programmi di sviluppo Slide 17 File codifica1a.o - Seconda passata (3) Istruzione: MOVL $buf, %ECX (CL: 000D) –nome buff: indirizzo 00000000 (tabella dei simboli). Istruzione: Call tastiera (CL: 0052) –IND* = 0057; –nome tastiera: indirizzo 00000000 (tabella dei simboli). –campo DISP = tastiera – IND* = 00000000 – 00000057 = FFFFFFA9 Istruzione: CALL video (CL = 005B) –IND* = 0060; –nome video = indirizzo 00000022 (nella tabella dei simboli). –campo DISP = video - IND* = 00000022 - 00000060 = FFFFFFC2 Istruzione: MOVL $kappa, beta –CL = 006F; –nome kappa: indirizzo 00000001 (tabella dei simboli), da porre nel campo IMM; –nome beta: indirizzo 00000000 (nome esterno), da porre nel campo DISP; –notare che nella istruzione macchina, il campo DISP precede il campo IMM. Istruzione: CALL esamina (CL = 0079) –IND* = 007E; –nome esamina: indirizzo 00000000 (nome esterno): –campo DISP = 00000000 - IND* = 00000000 – 0000007E = FFFFFF82

18 G. Frosini Programmi di sviluppo Slide 18 File codifica1a.o - Tabelle seconda passata Tabella dei nomi globali: Nome_file-SezioneNome globaleInd. numerico codifica1a.o-TEXT_start00000052 Tabella dei nomi esterni: Nome fileNome esterno codifica1a.oalfa codifica1a.obeta codifica1a.oesamina Tabella di collegamento: Nome_file-SezioneIndiceOp. simbolicoOperazione codifica1a.o-TEXT000Ecodifica1a.o–DATA+ codifica1a.o-TEXT001Acodifica1a.o–DATA+ codifica1a.o-TEXT0027codifica1a.o–DATA+ codifica1a.o-TEXT0036codifica1a.o–DATA+ codifica1a.o-TEXT006Balfa + codifica1a.o-TEXT0071beta + codifica1a.o-TEXT0075codifica1a.o-DATA+ codifica1a.o-TEXT007Aesamina+ codifica1a.o-TEXT007Acodifica1a.o-TEXT- codifica1a.o-TEXT0085codifica1a.o-DATA+

19 G. Frosini Programmi di sviluppo Slide 19 File codifica1b.o - Seconda passata (1) # File secondario cdifica1b.o.DATA 000000 alfa:.BYTE 0 000100000000 beta:.LONG 0 001000 00 00 00 00 00 00 00 00 00 00.TEXT 000050 esamina: PUSHL %EAX 000153 PUSHL %EBX 000256 PUSHL %ESI 0003A0 30000000 MOVB alfa, %AL 00088B1D 01000000 MOVL beta, %EBX 000EBE 00000000 MOVL $0, %ESI 0013A8 80 ciclo: TESTB $0x80, %AL 001574 06 JE zero 0017C60433 31 MOVB $'1', (%EBX, %ESI) 001BEB 04 JMP avanti 001DC60433 30 zero: MOVB $'0', (%EBX, %ESI) 0021D0E0 avanti: SHLB $1, %AL 002346INCL %ESI 002483FE 08CMPL $8, %ESI 002772 EAJB ciclo 00295EPOPL %ESI 002A5BPOPL %EBX 002B58POPL %EAX 002CC3RET 002D00 00 00 0030

20 G. Frosini Programmi di sviluppo Slide 20 File codifica1b.s - Tabelle seconda passata Tabella dei nomi globali: Nome_file-SezioneNome globaleInd. numerico relativo codifica1b.o-DATAalfa0000 codifica1b.o-DATA beta0001 codifica1b.o-TEXT esamina0000 Tabella dei nomi esterni: vuota Tabella di collegamento: Nome_file-SezioneIndiceOp. simbolico Operazione codifica1b.o-TEXT0004 codifica1b.o-DATA + codifica1b.o-TEXT000A codifica1b.o-DATA +

21 G. Frosini Programmi di sviluppo Slide 21 Collegatore (1) Compone un programma eseguibile (core image), costituito da due sezioni: –una sezione c_TEXT, formata dalle sezioni TEXT dei vari file, poste una di seguito all'altra a partire da un primo indirizzo iniziale predeterminato; –una sezione c_DATA, formata dalle sezioni DATA dei vari file, poste una di seguito all'altra, in genere a partire dalla fine della sezione testo. Programma eseguibile consiste in: –una tabella di caricamento, contenente gli indirizzi e la lunghezza di c_TEXT, c_DATA e l’indirizzo del simbolo _start; –due sezioni c_TEXT e c_DATA, ognuna delle quali è costituita da una sequenza di byte, dove ciascun byte è identificato da un proprio numero d'ordine, a partire da 0 (indice).

22 G. Frosini Programmi di sviluppo Slide 22 Collegatore (2) Prende in esame le tabelle delle sezioni dei vari file: –in base alla lunghezza delle varie sezioni, associa alle due sezioni di ogni file il loro indirizzo finale, ottenendo la tabella numerica delle sezioni. Tabella numerica delle sezioni: Nome file–SezioneLunghezzaInd. numerico Finale.........

23 G. Frosini Programmi di sviluppo Slide 23 Collegatore (3) Prende in esame le tabelle dei nomi globali e le tabelle dei nomi esterni dei vari file: –verifica che il simbolo _start e ciascun nome esterno compaia in una qualche tabella dei nomi globali (in caso contrario viene segnalato errore di collegamento); –costruisce la tabella numerica dei nomi globali. Tabella numerica dei nomi globali: –associa al simbolo _start e ad ogni nome dichiarato esterno in un qualche file il valore numerico dell'indirizzo ad esso corrispondente; –a tal fine ricerca l'indirizzo relativo di quel nome in una delle tabelle dei nomi globali, e vi somma l’indirizzo della sezioine. Nome globaleNome_file-Sezione Ind. relativo Ind. num. finale......... …

24 G. Frosini Programmi di sviluppo Slide 24 Collegatore (4) Trasforma le tabelle di collegamento (prodotte dall'Assemblatore nella traduzione dei vari file) in un'unica tabella numerica di collegamento. Tabella numerica di collegamento: –associa agli operandi simbolici che compaiono nelle varie Tabelle di Collegamento i corrispondenti valori numerici, prelevati o dalla tabella complessiva delle sezioni o dalla tabella dei nomi globali. Nome_file-Sezione Indice Op. simb. Op. num. Operazione............ … Collega i vari file effettuando le operazioni specificate nella Tabella numerica di collegamento

25 G. Frosini Programmi di sviluppo Slide 25 Collegatore (5) Tabella di caricamento: –contiene gli indirizzi finali e le lunghezze delle sezioni c_TEXT e c_DATA, e l’indirizzo finale del nome _start: c_TEXTind. finaleLunghezza c_DATAind. finaleLunghezza _startind. finale

26 G. Frosini Programmi di sviluppo Slide 26 Esempio di collegamento (1) Riferiamoci ai due file codifica1a.o e codifica1b.o: –supponiamo che il programma venga collegato a partire dagli indirizzi 000018B0 per la sezione c_TEXT e 00001A10 per la sezione c_DATA. Tabella numerica delle Sezioni. Nome_file-Sezione Lung. Ind. num. fin. codifica1a.o_TEXT 00A0 000018B0 codifica1b.o_TEXT 0030 00001950 codifica1a.o_DATA 0010 00001A10 codifica1b.o_DATA 0010 00001A20 Tabella numerica dei nomi globali Nome globale Nome_file-Sezione Ind. relativoInd. num.finale alfa codifica1b.o-DATA 0000 00001A20 beta codifica1b.o-DATA 0001 00001A21 esamina codifica1b.o-TEXT 0000 00001950 _start codifica1a.o-TEXT 0052 00001902

27 G. Frosini Programmi di sviluppo Slide 27 Esempio di collegamento (2) Tabella numerica di collegamento: Nome_file-Sezione IndiceOp simbolico Op. num Oper. codifica1a.o-TEXT000Ecodifica1a.o-DATA 00001A10 + codifica1a.o-TEXT001Acodifica1a.o-DATA 00001A10 + codifica1a.o-TEXT0027codifica1a.o-DATA 00001A10 + codifica1a.o-TEXT0036codifica1a.o-DATA 00001A10 + codifica1a.o-TEXT006Balfa 00001A20 + codifica1a.o-TEXT0071beta 00001A21 + codifica1a.o-TEXT0075codifica1a.o-DATA 00001A10 + codifica1a.o-TEXT007Aesamina 00001950 + codifica1a.o-TEXT007Acodifica1a.o-TEXT 000018B0 - codifica1a.o-TEXT0085codifica1a.o-DATA 00001A10 + codifica1b.o-TEXT0004codifica1b.o-DATA 00001A20 + codifica1b.o-TEXT000Acodifica1b.o-DATA 00001A20 + Tabella di caricamento: c_TEXT000018B000D0 c_DATA00001A100020 _start 00001902

28 G. Frosini Programmi di sviluppo Slide 28 Esempio di collegamento (3) # Sezione c_TEXT (indirizzo: 18B0) 0000…tastiera: … 000DB9 101A0000MOVL$buf, %ECX … 0022…video:… … 0046…uscita:…

29 G. Frosini Programmi di sviluppo Slide 29 Esempio di collegamento (4) 0052_start: 0052 E8 A9FFFFFFancora:CALL tastiera 00573C 0ACMPB$'\n', %AL 005974 42JEfine 005BE8 C2FFFFFFCALLlvideo 0060 88C3MOVB%AL, %BL 0062B8 20MOVB$' ', %AL 0064E8 B9FFFFFFCALLvideo 0069 881D 201A0000 MOVB%BL, alfa 006FC705 211A0000MOVL$kappa, beta 111A0000 0079E8 22000000CALLesamina 007EBE 00000000MOVL$0, %ESI 0083 8A86 111A0000ripeti:MOVBkappa(%ESI), %AL 0089E8 94FFFFFF CALLvideo 008E46INCL%ESI 008F83FE 08CMPL$8, %ESI 0092 72 EFJBripeti 0094 B0 0AMOVB$'\n', %AL 0096E8 87FFFFFFCALLvideo 009B EB B5JMPancora 009D EB A7fine:JMPuscita 009F00

30 G. Frosini Programmi di sviluppo Slide 30 Esempio di collegamento (5) 00A050esamina:PUSHL%EAX 00A153PUSHL%EBX 00A256PUSHL%ESI 00A3A0 201A0000MOVBalfa, %AL 00A88B1D 211A0000MOVLbeta, %EBX 00AEBE 00000000MOVL$0, %ESI 00B3A8 80ciclo:TESTB$0x80, %AL 00B574 06JZzero 00B7C60433 31MOVB$'1', (%EBX, %ESI) 00BBEB 04JMPavanti 00BDC60433 30zero:MOVB$'0', (%EBX, %ESI) 00C1D0E0avanti:SHLB$1, %AL 00C346INCL%ESI 00C483FE 08CMPL$8, %ESI 00C772 EAJBciclo 00C95EPOPL%ESI 00CA5BPOPL%EBX 00CB58POPL%EAX 00CCC3RET 00CD00 00 00 00D0

31 G. Frosini Programmi di sviluppo Slide 31 Esempio di collegamento (6) # Sezione c_DATA (indirizzo 1A10) 000000buf.BYTE0 000100000000kappa:.FILL8, 1 00000000 000900 00 00 00 00 00 00 001000alpha:.BYTE0 001100000000beta:.LONG0 001500 00 00 00 00 00 00 00 00 00 00 0020

32 G. Frosini Programmi di sviluppo Slide 32 Caricatore (1) Provvede a compiere 3 azioni: –trasferire il programma eseguibile in memoria, a partire dagli indirizzi contenuti nella tabella di caricamento; –inizializzare il puntatore di pila ESP con un valore standard; –inizializzare il contatore di programma EIP, tipicamente ponendo in pila il valore corrispondente al nome _start ed eseguendo un’istruzione RET. Questo tipo di Caricatore va sotto il nome di Caricatore assoluto.

33 G. Frosini Programmi di sviluppo Slide 33 Caricatore (2) A volte, gli indirizzi delle sezioni testo e dati non sono utilizzabili, perché quella zona di memoria è già occupata da altri programmi; –il Caricatore deve quindi trasferire il programma in una zona diversa da quella per cui era stato composto; –il Caricatore deve compiere delle operazioni di rilocazione, modificando alcune parole lunghe corrispondenti a espressioni indirizzo. E’ necessario un Caricatore rilocante. Parole lunghe da modificare: –vengono individuate dal Collegatore, che predispone per il Caricatore una tabella di rilocazione.

34 G. Frosini Programmi di sviluppo Slide 34 Grado di rilocazione Indirizzo: –ha grado di rilocazione 1; –subisce una modifica per somma, con un addendo dato dalla differenza tra l'indirizzo di caricamento prefissato e l'indirizzo di caricamento effettivo. Espressione con soli operatori additivi + e - (come le espressioni- indirizzo): –ha un grado di rilocazione risultante dato dalla somma algebrica dei gradi di rilocazione dei singoli addendi.

35 G. Frosini Programmi di sviluppo Slide 35 Parole lunghe da rilocare Sezione c_TEXT (composta da istruzioni operative e da istruzioni di salto). Istruzioni operative: –può essere specificato un indirizzo di variabile (sezione c_DATA); –in questo caso vi sarà una corrispondente parola lunga dell'istruzione da rilocare sommandovi  _c_DATA; Istruzioni di salto con indirizzamento relativo: –l'espressione che dà luogo al valore del campo DISP è in ogni caso la seguente: DISP = ind_salto - ind_istr_successiva e pertanto ha grado di rilocazione 0. Sezione c_DATA: –le parole lunghe che contengono indirizzi definiti nella sezione c_DATA o c_TEXT vanno rilocate sommandoci, rispettivamente,  _c_DATA o  _c_TEXT; Osservazione: –le quantità  _c_TEXT e  _c_DATA spesso coincidono, e in questo caso il loro valore può essere indicato con  _c.

36 G. Frosini Programmi di sviluppo Slide 36 Costruzione della Tabella di rilocazione Tabella di Rilocazione: Nome_file-Sezione Lung. Indice Sezione-finale Indice-finale Op. simb. sezioni. prec originario … … … … … … Viene costruita a partire dalla Tabella numerica delle sezioni e dalla Tabella numerica di collegamento: –nella tabella numerica di collegamento, vengono considerate solo le righe relative a istruzioni operative (escludendo le istruzioni di salto/chiamata a simboli esterni) ; –per ogni riga (che si riferisce ad un file originario e ad una sezione di quel file): il campo Indice finale è dato dalla somma fra Lunghezza sezioni precedenti (Tabella numerica delle sezioni) e Indice (Tabella numerica di collegamento); –la colonna Operando simbolico si ricava a partire dalla stessa colonna (operando simbolico) della tabella numerica di collegamento: a un nome di variabile corrisponde la quantità ∆_c_DATA, alla quantità nomefile.o-DATA la quantità ∆_c_DATA, e alla quantità nomefile.o-TEXT la quantità ∆_c_TEXT. Osservazione: –in presenza di memoria virtuale, l'operazione di rilocazione non è necessaria; –infatti, la memoria virtuale può risultare libera a partire da un determinato indirizzo virtuale (le tabelle di corrispondenza devono essere predisposte opportunamente).

37 G. Frosini Programmi di sviluppo Slide 37 Esempio di rilocazione Tabella di rilocazione relativa all’esempio precedente: Nome_file-Sezione Lung. indice Sezione-finale Indice-finale Oper. sim. sezioni. prec. codifica1a.o-TEXT 0000 000E c_TEXT 000E ∆_c_DATA codifica1a.o-TEXT 0000 001A c_TEXT 001A ∆_c_DATA codifica1a.o-TEXT 0000 0027 c_TEXT 0027 ∆_c_DATA codifica1a.o-TEXT 0000 0036 c_TEXT 0036 ∆_c_DATA codifica1a.o-TEXT 0000 006B c_TEXT 006B ∆_c_DATA codifica1a.o-TEXT 0000 0071 c_TEXT 0071 ∆_c_DATA codifica1a.o-TEXT 0000 0075 c_TEXT 0075 ∆_c_DATA codifica1a.o-TEXT 0000 0085 c_TEXT 0085 ∆_c_DATA codifica1b.o-TEXT 00A0 0004 c_TEXT 00A4 ∆_c_DATA codifica1b.o-TEXT 00A0 000A c_TEXT 00AA ∆_c_DATA


Scaricare ppt "G. Frosini Programmi di sviluppo Slide 1 PROGRAMMI DI SVILUPPO."

Presentazioni simili


Annunci Google