O carregador de ligação direta recebe como argumentos a lista de módulos a carregar, trabalhando usualmente em vários passos -- tipicamente dois.
O carregador apresentado aqui irá realizar três passos. No primeiro passo, ele deve alocar espaço contíguo de memória suficiente para os segmentos. Para saber quanto espaço é necessário, a informação sobre o comprimento de cada segmento -- presente em registros tipo ESD, com tipo de definição SD -- é obtida. O Algoritmo 4.5.1 apresenta um algoritmo para realizar esta etapa do primeiro passo.
Deve-se observar que, caso a restrição de que o espaço alocado aos módulos não precise ser contíguo, esse primeiro passo é dispensável.
Uma vez determinado qual o endereço inicial de carregamento (IPLA -- Initial Program Load Address), o carregador inicia a criação de uma Tabela de Símbolos Externos Globais (GEST). Para tanto, apenas a informação presente em registros do tipo ESD, com tipos de definição SD e LD, é utilizada. Este segundo passo é apresentado no Algoritmo 4.5.
Nestas apresentações simplificadas do algoritmo de carregamento, o tratamento de erros não é indicado. Na fase de definição da GEST, um possível erro que poderia ser detectado e indicado ao usuário é a duplicação na definição de símbolos na tabela, ou seja, um mesmo símbolo sendo redefinido em segmentos distintos.
No último passo sobre os arquivos de entrada, o carregador irá realizar a transferência do código de máquina para a memória e transferir o controle da execução do programa para o endereço inicial do programa recém-carregado. Este passo é apresentado no Algoritmo 4.6.
Neste passo, o carregador volta a tomar como endereço inicial de carregamento o valor ipla, lendo novamente cada módulo objeto na seqüência original. A variável execPoint irá registrar a posição de início de execução para o segmento que definir um registro do tipo END com argumento.
Quando o registro lido é do tipo ESD, o único processamento envolvido é obter o comprimento do segmento de forma a permitir a atualização correta da variável que indica a posição inicial de carga de cada segmento, segStart. Esta informação está contida no registro ESD cujo tipo de definição é SD (Segment Definition).
Os registros do tipo TXT têm seu conteúdo transferido para a memória principal. Cada campo do registro -- posição relativa ao início do segmento, tamanho e conteúdo -- é obtido, sendo que o endereço de destino é resolvido tomando por base o valor de segStart.
Ao final da transferência, as posições indicadas em registros do tipo RLD têm seu conteúdo ajustado a partir da informação registrada na GEST. Os registros do tipo RLD têm a indicação da posição relativa que deve ser corrigida, sendo que a posição de memória cujo conteúdo será alterado, position, é obtida a partir da combinação desta informação com o endereço de início do segmento, segStart. O valor pelo qual o conteúdo deverá ser alterado é especificado pelo campo de símbolo presente neste registro -- o símbolo é lido do registro e seu valor é obtido a partir de uma busca na GEST. Neste ponto, pode se detectar um erro caso algum símbolo tenha sido referenciado e não definido em nenhum módulo -- é onde se processará a informação para referências do tipo ER, não tratadas explicitamente pelo algoritmo.