180 17. Narzędzia programowania
Linker wykonuje następujące operacje:
•łączy wielu modułów w jeden moduł,
•łączy relokowalne segmenty o tej samej nazwie w jeden segment,
•optymalizuje obszary pamięci przydzielane dla poszczególnych segmentów,
•łączy wywołania podprogramów zaznaczone jako EXTRN w jednym module z podprogramami o tej samej nazwie oznaczonymi jako PUBLIC w innym module,
•ustala adresy absolutne dla segmentów relokowalnych,
•tworzy zbiór wyjściowy zawierający cały program,
•tworzy zbiór zawierający informacje o procedurach wykonanych przez linker oraz zawierający tablicę użytych symboli i nazw związanych z poleceniami PUBLIC i EXTRN,
•wykrywa błędy występujące w trakcie łączenia programów.
Zbiorv wejściowe są przetwarzane przez linker w kolejności podanej w linii wywołującej linker. Jeżeli są dołączane zbiory biblioteczne, to będą z nich wybrane tylko moduły, których nazwy związane z poleceniem PUBLIC będą odpowiadały nazwom związanym z poleceniem EXTRN zbiorów wejściowych.
Wywołanie linkera odbywa się przez podanie jego nazwy, listy nazw wraz z rozszerzeniami zbiorów wejściowych w kolejności w jakiej mają być łączone poszczególne moduły, opcjonalnie nazwy zbioru wyjściowego oraz opcjonalnie listy komend sterujących pracą linkera:
L51 list_zb_wej [TO zb_wvj] [komendy]
Przy dużej liczbie zbiorów wejściowych linia wywołania linkera może przekroczyć 128 znaków dopuszczalnych dla poleceń DOS-a. Należy ją w takim przypadku podzielić stawiając w miejscu podziału znak & i naciskając klawisz ENTER. Linker wyświetli w nowej linii znak >> od którego można wprowadzać dalszy ciąg linii wywołania. Znak & może być umieszczony tylko pomiędzy komendami lub parametrami, natomiast nie może być wstawiony w środku komendy lub parametru. Przy długiej linii wywołania linkera wygodniej jest użyć zbiór j sterującego pracą linkera. Wywołanie linkera w tym przypadku jest następujące:
L51 @nazwa_zb
gdzie: nazwazb jest nazwą zbioru sterującego.
Lista zbiorów wejściowych zawiera nazwy zbiorów, wraz z rozszerzeniami (.obj lub .lib), zawierające moduły, które mają być łączone przez linker oraz nazwy modułów, podane w nawiasach, które znajdują się w zbiorze bibliotecznym. Jeżeli ze zbiorów bibliotecznych są wybierane elementy programów wskazywane przez polecenia PUBLIC i EXTRN, to nazwy modułów są pomijane. Poszczególne elementy listy są oddzielone przecinkiem. Sposób podawania listy zbiorów wejściowych ilustrują poniższe przykłady:
L51 TEST.OBJ, A_C.OBJ, MAT. LIB
W powyższym przykładzie będą łączone moduły zawarte w zbiorach TEST.OBJ i A_C.OBJ oraz elementy ze zbioru bibliotecznego MAT.LIB wybrane poleceniem EXTRN, których nazwy odpowiadają nazwom powiązanym z poleceniem PUBLIC. W wywołaniu
L51 A_C.OBJ, I_O.I.IB (LCD, KLAW)
zostaną połączone moduły ze zbioru A C.OBJ i moduły LCD i KLAW ze zbioru bibliotecznego I_O.LIB.
W obu powyższych przykładach nazwa zbioru wyjściowego będzie nazwą pierwszego zbioru wejściowego bez rozszerzenia. Jeżeli nazwa zbioru wyjściowego ma być zmieniona to należy to zadeklarować w linii wywołania linkera w sposób następujący:
L51 AC.OBJ, I O.LIB (LCD, KLAW) TO STER.ABS
Zbiór wyjściowy będzie miał nazwę STER z rozszerzeniem ABS.
Oprócz zbioru wyjściowego zawierającego program, linker generuje zbiór z rozszerzeniem .m51, w którym jest podany sposób wywołania linkera, nazwy łączonych modułów oraz nazwy, typy i rozmieszczenie segmentów. Zbiór wyjściowy z linkera może być testowany i sprawdzany narzędziami DSCOPE51.
Jeżeli zbiór z programem ma być zapisany w standardzie INTEL-HEX, to należy użyć konwertera OH51 wywołując go wraz ze zbiorem otrzymanym po Iinkerze. Wynikiem przetwarzania będzie zbiór z nazwą zbioru wejściowego z rozszerzeniem .hex.