PROGRAMMI DI SVILUPPO G Frosini Programmi di sviluppo

  • Slides: 37
Download presentation
PROGRAMMI DI SVILUPPO G. Frosini Programmi di sviluppo Slide 1

PROGRAMMI DI SVILUPPO G. Frosini Programmi di sviluppo Slide 1

Traduzione • Programma Assemblatore: – – • Ipotesi semplificative: – – • azzerata quando

Traduzione • Programma Assemblatore: – – • Ipotesi semplificative: – – • azzerata quando viene incontrata una delle direttive. DATA o. TEXT; incrementata 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: – • due passate; utilizzo di una variabile interna di conteggio, detta Contatore di Locazioni CL (o Location Counter LC); Variabile CL: – – – • variabili (e le costanti) fanno parte della sezione dati; le istruzioni di salto prevedono indirizzamento relativo. Processo di traduzione di un file: – – • trattazione non strettamente vincolata ad una specifica implementazione assimilabile, per molti aspetti, con quanto avviene nell’Assembler GCC (GAS). 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. G. Frosini Programmi di sviluppo Slide 2

Prima passata (1) • Analisi sequenziale del file da tradurre: – avanzamento di CL;

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-Sezione Lunghezza …. . . – lunghezza di una sezione: allineata a multipli di 16; – pari al valore di CL che si ha dopo l’allineamento. • Tabella dei simboli: Ind. simbolico Sezione Ind 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. G. Frosini Programmi di sviluppo Slide 3

File codifica 1 a. s - Prima passata (1) # PROGRAMMA codifica 1 #

File codifica 1 a. s - Prima passata (1) # PROGRAMMA codifica 1 # File principale codifica 1 a. s. GLOBAL _start. EXTERN alfa, beta, esamina. DATA 0000 0001 0009 0010. TEXT 0000 … 0021 0022 … 0045 0046 004 B 0050 buf kappa: . BYTE. FILL 0 8, 1 # file incluso ser. s, sezione. DATA # 7 byte di alliuneamento tastiera: video: uscita: MOVL INT PUSHL. . . RET MOVL $1, %EAX $0 X 80 %EBX # file incluso ser. s, sezione. TEXT %EAX $0, %EBX G. Frosini Programmi di sviluppo Slide 4

File codifica 1 a. s - Prima passata (2) 0052 0057 0059 005 B

File codifica 1 a. s - Prima passata (2) 0052 0057 0059 005 B 0060 0062 0064 0069 006 F 0079 007 E 0083 0089 008 E 008 F 0092 0094 0096 009 B 009 D 009 F 00 A 0 _start: ancora: ripeti: fine: CALL CMPB JE CALL MOVB MOVL CALL MOVB CALL INCL CMPL JB MOVB CALL JMP tastiera $'n', %AL fine video %AL, %BL $' ', %AL video %BL, alfa $kappa, beta esamina $0, %ESI kappa(%ESI), %AL video %ESI $8, %ESI ripeti $'n', %AL video ancora uscita # 1 byte di allineamento G. Frosini Programmi di sviluppo Slide 5

File codifica 1 a. s - Tabelle prima passata • Tabella delle sezioni: Nome_file-Sezione

File codifica 1 a. s - Tabelle prima passata • Tabella delle sezioni: Nome_file-Sezione Lunghezza codifica 1 a. o-DATA codifica 1 a. o-TEXT 10 A 0 • Tabella dei simboli: Indirizzo. simbolico Sezione Indirizzo numerico relativo (CL) buf kappa tastiera video uscita _start ancora ripeti fine 0000 0001 0000 0022 0046 0052 0083 009 D DATA TEXT TEXT G. Frosini Programmi di sviluppo Slide 6

File codifica 1 b. s - Prima passata # PROGRAMMA codifica 1 # File

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

File codifica 1 b. s - Tabelle prima passata • Tabella delle sezioni: Nome_file-Sezione

File codifica 1 b. s - Tabelle prima passata • Tabella delle sezioni: Nome_file-Sezione Lunghezza codifica 1 b. o-DATA codifica 1 b. o-TEXT 10 30 • Tabella dei simboli: Indirizzo simbolico Sezione Indirizzo numerico relativo (CL) alfa beta esamina ciclo zero avanti DATA TEXT 0000 0001 0000 0013 001 D 0021 G. Frosini Programmi di sviluppo Slide 8

Seconda passata (1) • Traduzione del file in modo sequenziale: – il file tradotto

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). G. Frosini Programmi di sviluppo Slide 9

Seconda passata (2) • Istruzioni di controllo (JMP, Jcond o CALL) con indirizzamento relativo

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. G. Frosini Programmi di sviluppo Slide 10

Seconda passata (3) • Tabelle predisposte in seconda passata: – tabella dei nomi globali;

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-Sezione … • Nome globale. . . Indirizzo numerico relativo (CL). . . Tabella dei nomi esterni: – nomi dichiarati esterni in quel file. Nome file … Nome esterno. . . G. Frosini Programmi di sviluppo Slide 11

Seconda passata (4) • Tabella di collegamento: – specifica la Sezione e l’indirizzo numerico

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, I_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). G. Frosini Programmi di sviluppo Slide 12

Seconda passata (5) • Istruzioni di controllo con indirizzamento relativo: – la quantità IND*,

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 I_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 + I_TEXT) - (IND* + I_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* + I_TEXT) = DISP + I_NOME - I_TEXT • è richiesta una prima modifica per somma, con il valore di I_NOME, e una seconda modifica per differenza, con il valore di I_TEXT. G. Frosini Programmi di sviluppo Slide 13

Seconda passata (6) • Parole lunghe da modificare: – vengono individuate dall’indice del byte

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

File codifica 1 a. o - Seconda passata (1) # File principale codifica 1

File codifica 1 a. o - Seconda passata (1) # File principale codifica 1 a. o. DATA 0000 0001 0009 0010. TEXT 0000 … 000 D … 0019 … 0022 … 0026 … 0035 … 0046 … 00 00 00 00 buf: kappa: . BYTE 0. FILL 8, 1 53 tastiera: … B 9 0000 MOVL $buf, %ECX A 0 0000 MOVB buf, %AL 50 video: … A 2 0000 MOVB %AL, buf B 9 0000 MOVL $buf, %ECX … uscita: … G. Frosini Programmi di sviluppo Slide 15

File codifica 1 a. o - Seconda passata (2) 0052 0057 0059 005 B

File codifica 1 a. o - Seconda passata (2) 0052 0057 0059 005 B … 0069 006 F 0079 007 E 0083 0089 008 E 008 F 0092 0094 0096 009 B 009 D 009 F 00 A 0 E 8 A 9 FFFFFF 3 C 0 A 74 42 E 8 CEFFFFFF 881 D 0000 C 705 0000 01000000 E 8 82 FFFFFF BE 0000 8 A 86 01000000 E 8 94 FFFFFF 46 83 FE 08 72 EF B 0 0 A E 8 87 FFFFFF EB B 5 EB A 7 00 _start: ancora: ripeti: fine: CALL CMPB JE CALL tastiera $'n', %AL fine video MOVB MOVL CALL MOVB CALL INCL CMPL JB MOVB CALL JMP %BL, alfa $kappa, beta esamina $0, %ESI kappa (%ESI), %AL video %ESI $8, %ESI ripeti $'n', %AL video ancora uscita G. Frosini Programmi di sviluppo Slide 16

File codifica 1 a. o - Seconda passata (3) • Istruzione: MOVL $buf, %ECX

File codifica 1 a. o - Seconda passata (3) • Istruzione: MOVL $buf, %ECX (CL: 000 D) – nome buff: indirizzo 0000 (tabella dei simboli). • Istruzione: Call tastiera (CL: 0052) – IND* = 0057; – nome tastiera: indirizzo 0000 (tabella dei simboli). – campo DISP = tastiera – IND* = 0000 – 00000057 = FFFFFFA 9 • Istruzione: CALL video (CL = 005 B) – IND* = 0060; – nome video = indirizzo 00000022 (nella tabella dei simboli). – campo DISP = video - IND* = 00000022 - 00000060 = FFFFFFC 2 • Istruzione: MOVL $kappa, beta – – • CL = 006 F; nome kappa: indirizzo 00000001 (tabella dei simboli), da porre nel campo IMM; nome beta: indirizzo 0000 (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* = 007 E; – nome esamina: indirizzo 0000 (nome esterno): – campo DISP = 0000 - IND* = 0000 – 0000007 E = FFFFFF 82 G. Frosini Programmi di sviluppo Slide 17

File codifica 1 a. o - Tabelle seconda passata • Tabella dei nomi globali:

File codifica 1 a. o - Tabelle seconda passata • Tabella dei nomi globali: • Tabella dei nomi esterni: • Tabella di collegamento: Nome_file-Sezione codifica 1 a. o-TEXT Nome file codifica 1 a. o Nome_file-Sezione codifica 1 a. o-TEXT codifica 1 a. o-TEXT Nome globale _start Ind. numerico 00000052 Nome esterno alfa beta esamina Indice 000 E 001 A 0027 0036 006 B 0071 0075 007 A 0085 Op. simbolico codifica 1 a. o–DATA alfa beta codifica 1 a. o-DATA esamina codifica 1 a. o-TEXT codifica 1 a. o-DATA Operazione + + + + + G. Frosini Programmi di sviluppo Slide 18

File codifica 1 b. o - Seconda passata (1) # File secondario cdifica 1

File codifica 1 b. o - Seconda passata (1) # File secondario cdifica 1 b. o. DATA 0000 0001 0010 00 alfa: . BYTE 0000 beta: . LONG 00 00 00 . TEXT 0000 0001 0002 0003 0008 000 E 0013 0015 0017 001 B 001 D 0021 50 53 56 A 0 30000000 8 B 1 D 01000000 BE 0000 A 8 80 74 06 C 60433 31 EB 04 C 60433 30 D 0 E 0 esamina: PUSHL MOVB MOVL ciclo: TESTB JE MOVB JMP zero: MOVB avanti: SHLB 0023 46 0024 83 FE 08 0027 72 EA 0 0029 5 E 0 002 A 5 B 002 B 58 002 C C 3 002 D 00 00 00 %EAX 0030 %EBX %ESI alfa, %AL beta, %EBX $0, %ESI $0 x 80, %AL zero $'1', (%EBX, %ESI) avanti $'0', (%EBX, %ESI) $1, %AL INCL CMPL JB POPL RET %ESI $8, %ESI ciclo %ESI %EBX %EAX G. Frosini Programmi di sviluppo Slide 19

File codifica 1 b. s - Tabelle seconda passata • Tabella dei nomi globali:

File codifica 1 b. s - Tabelle seconda passata • Tabella dei nomi globali: Nome_file-Sezione codifica 1 b. o-DATA codifica 1 b. o-TEXT Nome globale alfa beta esamina • Tabella dei nomi esterni: vuota • Tabella di collegamento: Nome_file-Sezione codifica 1 b. o-TEXT Indice 0004 000 A Ind. numerico relativo 0000 0001 0000 Op. simbolico codifica 1 b. o-DATA Operazione + + G. Frosini Programmi di sviluppo Slide 20

Collegatore (1) • Compone un programma eseguibile (core image), costituito da due sezioni: –

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). G. Frosini Programmi di sviluppo Slide 21

Collegatore (2) • Prende in esame le tabelle delle sezioni dei vari file: –

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–Sezione. . . Lunghezza. . . Ind. numerico Finale. . . G. Frosini Programmi di sviluppo Slide 22

Collegatore (3) • Prende in esame le tabelle dei nomi globali e le tabelle

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 globale. . . Nome_file-Sezione. . . Ind. relativo. . . Ind. num. finale … G. Frosini Programmi di sviluppo Slide 23

Collegatore (4) • Trasforma le tabelle di collegamento (prodotte dall'Assemblatore nella traduzione dei vari

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 G. Frosini Programmi di sviluppo Slide 24

Collegatore (5) • Tabella di caricamento: – contiene gli indirizzi finali e le lunghezze

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_TEXT c_DATA _start ind. finale Lunghezza G. Frosini Programmi di sviluppo Slide 25

Esempio di collegamento (1) • Riferiamoci ai due file codifica 1 a. o e

Esempio di collegamento (1) • Riferiamoci ai due file codifica 1 a. o e codifica 1 b. o: – supponiamo che il programma venga collegato a partire dagli indirizzi 000018 B 0 per la sezione c_TEXT e 00001 A 10 per la sezione c_DATA. • Tabella numerica delle Sezioni. Nome_file-Sezione Lung. Ind. num. fin. codifica 1 a. o_TEXT codifica 1 b. o_TEXT codifica 1 a. o_DATA codifica 1 b. o_DATA 00 A 0 0030 0010 000018 B 0 00001950 00001 A 10 00001 A 20 • Tabella numerica dei nomi globali Nome globale Nome_file-Sezione Ind. relativo Ind. num. finale alfa beta esamina _start codifica 1 b. o-DATA codifica 1 b. o-TEXT codifica 1 a. o-TEXT 0000 0001 0000 0052 00001 A 20 00001 A 21 00001950 00001902 G. Frosini Programmi di sviluppo Slide 26

Esempio di collegamento (2) • Tabella numerica di collegamento: Nome_file-Sezione codifica 1 a. o-TEXT

Esempio di collegamento (2) • Tabella numerica di collegamento: Nome_file-Sezione codifica 1 a. o-TEXT codifica 1 a. o-TEXT codifica 1 b. o-TEXT • Indice 000 E 001 A 0027 0036 006 B 0071 0075 007 A 0085 0004 000 A Op simbolico codifica 1 a. o-DATA alfa beta codifica 1 a. o-DATA esamina codifica 1 a. o-TEXT codifica 1 a. o-DATA codifica 1 b. o-DATA Op. num 00001 A 10 00001 A 20 00001 A 21 00001 A 10 00001950 000018 B 0 00001 A 10 00001 A 20 Oper. + + + Tabella di caricamento: c_TEXT c_DATA _start 000018 B 0 00001 A 10 00001902 00 D 0 0020 G. Frosini Programmi di sviluppo Slide 27

Esempio di collegamento (3) # Sezione c_TEXT (indirizzo: 18 B 0) 0000 … 000

Esempio di collegamento (3) # Sezione c_TEXT (indirizzo: 18 B 0) 0000 … 000 D … 0022 … 0046 … tastiera: B 9 101 A 0000 MOVL … video: … … uscita: … $buf, %ECX G. Frosini Programmi di sviluppo Slide 28

Esempio di collegamento (4) 0052 0057 0059 005 B 0060 0062 0064 0069 006

Esempio di collegamento (4) 0052 0057 0059 005 B 0060 0062 0064 0069 006 F 0079 007 E 0083 0089 008 E 008 F 0092 0094 0096 009 B 009 D 009 F E 8 A 9 FFFFFF 3 C 0 A 74 42 E 8 C 2 FFFFFF 88 C 3 B 8 20 E 8 B 9 FFFFFF 881 D 201 A 0000 C 705 211 A 0000 111 A 0000 E 8 22000000 BE 0000 8 A 86 111 A 0000 E 8 94 FFFFFF 46 83 FE 08 72 EF B 0 0 A E 8 87 FFFFFF EB B 5 EB A 7 00 _start: ancora: ripeti: fine: CALL CMPB JE CALLl MOVB CALL MOVB MOVL tastiera $'n', %AL fine video %AL, %BL $' ', %AL video %BL, alfa $kappa, beta CALL MOVB CALL INCL CMPL JB MOVB CALL JMP esamina $0, %ESI kappa(%ESI), %AL video %ESI $8, %ESI ripeti $'n', %AL video ancora uscita G. Frosini Programmi di sviluppo Slide 29

Esempio di collegamento (5) 00 A 0 00 A 1 00 A 2 00

Esempio di collegamento (5) 00 A 0 00 A 1 00 A 2 00 A 3 00 A 8 00 AE 00 B 3 00 B 5 00 B 7 00 BB 00 BD 00 C 1 00 C 3 00 C 4 00 C 7 00 C 9 00 CA 00 CB 00 CC 00 CD 00 D 0 50 53 56 A 0 201 A 0000 8 B 1 D 211 A 0000 BE 0000 A 8 80 74 06 C 60433 31 EB 04 C 60433 30 D 0 E 0 46 83 FE 08 72 EA 5 E 5 B 58 C 3 00 00 00 esamina: ciclo: zero: avanti: PUSHL MOVB MOVL TESTB JZ MOVB JMP MOVB SHLB INCL CMPL JB POPL RET %EAX %EBX %ESI alfa, %AL beta, %EBX $0, %ESI $0 x 80, %AL zero $'1', (%EBX, %ESI) avanti $'0', (%EBX, %ESI) $1, %AL %ESI $8, %ESI ciclo %ESI %EBX %EAX G. Frosini Programmi di sviluppo Slide 30

Esempio di collegamento (6) # Sezione c_DATA (indirizzo 1 A 10) 0000 00 buf

Esempio di collegamento (6) # Sezione c_DATA (indirizzo 1 A 10) 0000 00 buf 0001 0000 kappa: 0000 0009 00 0010 00 alpha: 0011 0000 beta: 0015 00 00 0020 . BYTE. FILL 0 8, 1 . BYTE. LONG 0 0 G. Frosini Programmi di sviluppo Slide 31

Caricatore (1) • Provvede a compiere 3 azioni: – trasferire il programma eseguibile in

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. G. Frosini Programmi di sviluppo Slide 32

Caricatore (2) • A volte, gli indirizzi delle sezioni testo e dati non sono

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. G. Frosini Programmi di sviluppo Slide 33

Grado di rilocazione • Indirizzo: – ha grado di rilocazione 1; – subisce una

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 espressioniindirizzo): – ha un grado di rilocazione risultante dato dalla somma algebrica dei gradi di rilocazione dei singoli addendi. G. Frosini Programmi di sviluppo Slide 34

Parole lunghe da rilocare • • Sezione c_TEXT (composta da istruzioni operative e da

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 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. G. Frosini Programmi di sviluppo Slide 35

Costruzione della Tabella di rilocazione • Tabella di Rilocazione: Nome_file-Sezione Lung. sezioni. prec …

Costruzione della Tabella di rilocazione • Tabella di Rilocazione: Nome_file-Sezione Lung. sezioni. prec … … • Indice Sezione-finale Indice-finale originario … … … Op. simb. … 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). G. Frosini Programmi di sviluppo Slide 36

Esempio di rilocazione • Tabella di rilocazione relativa all’esempio precedente: Nome_file-Sezione Lung. indice Sezione-finale

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