.pl 72 .he LINK-18 .fo # .pn 3 C U P R I N S 1. Formatul comenzilor LINK-18 . . . . . . . . . . . . . 5 2. Controalele LINK-18 . . . . . . . . . . . . . . . . . 6 3. Formatul fisierelor obiect compatibile cu LINK-18 . . 8 4. Mesaje de eroare . . . . . . . . . . . . . . . . . . 10 .pa .pn 5 LINK-18 este un program de sistem, care realizeaza functiile de editor de legaturi, de alobare de adrese absolute modulelor de program realocabil, de incarcator al programelor legate, de sal vare a modulelor de program absolut in fisiere standard pe disc. LINK-18 este compatibil cu fisierele generate de compilato rul FORTRAN si COBOL precum si de asamblorul M18. 1. FORMATUL COMENZILOR LINK-18 Pentru a rula LINK-18 se introduce la consola comanda L18 urmata de caracterul "carriage return" . LINK-18 va afisa la consola caracterul * care arata ca programul LINK este gata sa primeasca comenzi. LINK-18 se poate incarca de pe orice unitate de disc dar este obligatoriu la legarea de module care provin dintr-o compi lare FORTRAN sau COBOL ca bibliotecile sistem FORLIB.REL si COBLIB.REL sa se gaseasca pe unitatea implicita. O comanda pentru LINK-18 consta dintr-un sir de nume de fisiere si controale separate prin virgule. Daca numele dispozitivului pentru un fisier de intrare este omis, se presupune a fi A:. Daca extensia unui fisier este omisa, extensia implicita este .REL. Dupa introducerea fiecarei linii, LINK-18 va incarca sau va cauta in fisierele specificate acele module care satisfac refe rintele externe. Dupa ce programul LINK a terminat acest proces, va lista la consola toti simbolii care mai ramin nedefiniti urmati de * si o adresa de memorie unde acesti simboli sint referiti pentru prima data in program. Exemplu: *MAIN DATA 0100 0200 SUBR1* (SUBR1 este nedefinita) DATA 0100 0300 *SUBR1 */G (inceput executie) De obicei, pentru a executa un program si subrutine FORTRAN sau COBOL, se introduce lista numelor de fisiere care contin programul sau subrutinele urmate de /G (lansare executie program). .cp 4 Inainte de a incepe executia programului, LINK-18 va cauta intotdeauna in fisierele biblioteca ale sistemului (FORLIB.REL sau COBLIB.REL) pentru a satisface referintele externe nerezol vate. Daca utilizatorul doreste mai intii sa satisfaca referintele externe in propriile lui biblioteci, atunci trebuie adaugat la sfirsitul listei cu nume de fisiere si o lista de nume fisiere de tip biblioteca utilizator care sint urmate de controlul /S. .pa 2. CONTROALELE LINK-18 Aceste controale, ce se introduc in sirul de comenzi LINK- 18, specifica diferite actiuni care vor afecta procesul de incar care. Fiecare control trebuie precedat de caracterul "/". R RESET. Pune programul incarcator LINK-18 in starea sa initiala. De obicei, se introduce /R atunci cind din greseala s-a incarcat un fisier eronat si se doreste reluarea procesului de legare. E sau Iesirea din LINK-18 si revenirea in sistemul de E:nume operare. Se va cauta in bibliotecile sistemului pentru a se satisface referintele externe nedefi nite. Forma E:nume este optionala (unde nume este un simbol global definit anterior intr-un modul le gat) si utilizeaza nume pentru adresa de start a programului. G sau Lanseaza executia unui program de indata ce linia G:nume de comanda curenta a fost interpretata. Se va cauta in bibliotecile sistemului pentru a se sa tisface referintele externe nedefinite, daca ele exista. Inainte de a lansa programul in executie LINK-18 mai listeaza : -adresa de inceput a programului -adresa primului octet disponibil dupa program -numarul de pagini al programului (pagini de 256 octeti) -mesajul "BEGIN EXECUTION" Forma optionala G:nume (unde nume este un simbol global definit anterior intr-un modul legat) uti lizeaza nume pentru adresa de inceput a programu lui. N Daca se specifica /N atunci programul absolut rezultat in urma legarii este salvat intr-un fisier pe disc, cind se introduce /G sau /E. P sau /P sau /D permit pozitionarea adresei de origine D pentru urmatorul program incarcat. /P si /D au efect numai cind sint intilnite si nu au nici un efect asupra programelor deja incar cate. Sintaxa lor este :  /P: sau /D: unde  este adresa originii curente, in baza curenta (baza implicita este 16). .cp 7 O /O Pozitioneaza baza curenta in octal iar /H in H hex. Daca nu se introduce /D, zonele de date sint incarcate imediat dupa zonele program pentru fie care modul. Daca se introduce /D toate zonele de date si COMMON sint incarcate incepind de la adresa de origine a segmentului de date iar programul este incarcat incepind de la adresa de origine a seg mentului de program. */P:200,FOO Data 200 300 */R */P:200 /D:400,FOO Data 400 480 Program 200 280 U Listeaza adresa de inceput si de sfirsit a progra mului si toate variabile nedefinite imediat ce linia de comanda a fost interpretata. Informatia despre program este afisata numai daca s-a introdus si /D. Altfel, programul este memorat in zona de date. M Listeaza adresa de inceput si de sfirsit a progra mului si a zonei de date precum si a tuturor variabilelor globale si a adreselor lor, a tuturor variabilelor globale nedefinite urmate de *. Informatia despre program este afisata numai daca a fost introdus si /D. Altfel, programul este memorat in zona de date. S Cauta, in fisierul al carui nume precede imediat /S in sirul de comanda, sa satisfaca orice varia bila globala nedefinita. Exemplu: */M Listeaza toate variabilele globale *PROGRAM,SUBR,LIB1/S Incarca PROGRA.REL si SUBR.REL si apoi cauta in fisierul LIB1.REL pen tru a satisface referintele care au ramas nesatisfacute */G Incepe executia programului principal .pa 3. FORMATUL FISIERELOR OBIECT COMPATIBILE CU LINK-18 Fisierele compatibile cu LINK-18 sint alcatuite dintr-un sir de biti. Cimpurile individuale din interiorul sirului de biti nu sint aliniate la nivel de octet. Utilizarea unui sir de biti pentru fisierele obiect realoca bile are avantajul ca pastreaza dimensiunea fisierelor obiect la minimum, micsorind si numarul de citiri/scrieri pe disc. Sint doua tipuri de entitati de baza : Absolute Realocabile Primul bit dintr-o entitate indica acest tip. Daca primul bit este '0' atunci urmatorii 8 biti (1 octet) sint incarcati ca un octet absolut. Daca primul bit este '1' atunci urmatorii doi biti sint utilizati sa indice unul din urmatoarele tipuri de entitati realocabile: 00 entitate LINK speciala 01 program relativ incarca urmatorii 16 biti dupa ce se aduna adresa de baza a segmentului de program 10 date relativ incarca urmatorii 16 biti dupa ce se aduna adresa de baza a segmentului de date 11 COMMON relativ incarca urmatorii 16 biti dupa ce se aduna adresa de baza a zonei COMMON Entitatile speciale constau dintr-un sir 100 urmat de : - un cimp de control de 4 biti - un cimp A optional compus dintr-un tip de adresa de 2 biti care este analog cimpu lui de doi biti de mai inainte (program relativ, date relativ, COMMON relativ), cu exceptia lui 00 care inseamna adresa absolu ta si 16 biti de adresa - un cimp B optional compus din 3 biti care codifica lungimea unui simbol si cite 8 biti pentru fiecare caracter al simbolului. Reprezentare generala : 100 xxxx yy bbbbbbbbbbbbbbbb zzz + caracterele nume simbol ------------------- ----------------------------- Cimpul A Cimpul B unde: xxxx biti de control yy biti tip de adresa bbbbbbbbbbbbbbbb biti de adresa zzz biti lungime simbol Urmatoarele entitati speciale au numai cimpul B : 0 Defineste simbol 1 Selecteaza bloc COMMON 2 Nume program 3 Cerere de cautare intr-o biblioteca 4 Rezervat Urmatoarele entitati speciale au atit cimpul A cit si cimpul B : 5 Defineste dimensiune COMMON 6 Lant de referinte externe (Cimpul A indica adresa de inceput a lantului iar cimpul B numele simbolului extern) 7 Defineste un punct de intrare (Cimpul A indica adresa punctului de intrare iar cimpul B indica numele punctului de intrare) 8 Rezervat Urmatoarele entitati speciale au numai cimpul A : 9 External + offset Valoarea offset (cimpul A) va fi adunata la urmatorii 2 octeti indicati de adresa curenta la incarcare 10 Defineste dimensiunea zonei de date 11 Pozitioneaza adresa curenta de incarcare la valoarea indicata in cimpul A 12 Lant de adrese Cimpul A indica adresa de inceput a lantului Se inlocuiesc toate intrarile din lant cu adresa curenta Ultima intrare in lant are un cimp de adresa zero 13 Defineste dimensiunea programului (Cimpul A defineste dimensiunea in octeti) 14 Inregistrare de END (Este singura inregistrare fortata la nivel de octet. Pentru END se produce o aliniere in sirul de biti) Urmatoarea entitate speciala nu are nici cimpul A nici cimpul B. 15 Inregistrare de sfirsit de fisier EOF .fo # 4. MESAJE DE EROARE ?No start Address S-a introdus /G dar nu a fost incarcat nici un program principal. ?Loading Error Ultimul fisier introdus nu a avut un format obiect propriu pentru LINK-18. ?Out of Memory Nu exista memorie suficienta pentru a incarca programul. Se impune segmentarea programului in module mai mici. ?Command Error Comanda LINK-18 nerecunoscuta. ? Not Found introdus in sirul de comanda, nu exista pe disc. %2nd COMMON Larger /xxxxxx/ Prima definitie a blocului COMMON /xxxxxx/ nu a fost definitia cea mai cuprinzatoare. Ordinea de incarcare trebuie schimbata sau se impune schimbarea dimensiunii zonei de COMMON. %Mult. Def. Global yyyyyy Simbolul yyyyyy s-a definit de mai multe ori in timpul procesului de incarcare.  |- -| |- -| %Overlaying |Program| Area |,Start = xxxx | |Data | |,Public = (xxxx) | |- -| |,External = (xxxx)| |- -| /D sau /P cauzeaza distrugerea zonelor deja incarcate.  |- -| ?Intersecting |Program| Area |Data | |- -| Programul si/sau zona de date se inter secteaza, si o adresa sau o intrare dintr-un lant de referinte externe se gaseste in aceasta intersectie. Valoa rea finala nu poate fi convertita la o valoare curenta atita timp cit se ga seste in zona in zona intersectiei. ?Start Symbol - - Undefined Dupa se s-a introdus /G sau /E se semnaleaza nedefinirea simbolului. .cp 10  |- -| Origin |Above | Loader Memory, Move Anyway (Y or N) ? |Below | |- -| Dupa ce s-a introdus /E sau /G o zona a programului se suprapune peste progra mul incarcator. Daca se introduce Y, LINK-18 va muta zona respectiva si va continua. Altfel programul LINK- 18 se termina. In ambele cazuri daca a fost introdus /N imaginea programului este salvata pe disc. ?Can't Save Object File A aparut o eroare de disc cind s-a salvat programul absolut. Este posibil ca sa mai existe un program utilizator cu acelasi nume. Nota LINK-18 memoreaza adresa primei zone de memorie libere intr- un simbol global denumit $MEMRY. Daca acest simbol a fost defi nit de un program incarcat $MEMRY, este pozitionat la sfirsitul zonei de date + 1. Daca s-a introdus /D si adresa de inceput a segmentului de date este mai mica decit zona programului, utilizatorul trebuie sa se asigure ca exista destul loc in memorie pentru ca programul sa nu se distruga. Aceasta este in mod particular adevarat pentru driver de disc pentru FORTRAN-18 care utilizeaza $MEMRY pentru a aloca zonele tampon si FCB-urile.