Por padrão o NASM joga todo o conteúdo do arquivo fonte na seção .text e por isso nós não a definimos na nossa PoC. Mas poderÃamos reescrever nossa PoC desta vez especificando a seção:
Como já vimos na nossa PoC os sÃmbolos internos podem ser exportados para serem acessados a partir de outros arquivos objetos usando a diretiva global. Podemos exportar mais de um sÃmbolo de uma vez separando cada nome de rótulo por vÃrgula, exemplo:
Dessa forma um endereço especificado por um rótulo no nosso código fonte em Assembly pode ser acessado por código fonte compilado em outro arquivo objeto, tudo graças ao linker.
Já vimos que no arquivo objeto main.o havia na symbol table a declaração do uso do sÃmbolo assembly que estava em um arquivo externo. A diretiva extern serve para inserir essa informação na tabela de sÃmbolos do arquivo objeto de saÃda. A diretiva extern segue a mesma sintaxe de global:
Veja um exemplo de uso com nossa PoC:
Declaramos na linha 11 do arquivo main.c a função number e no arquivo assembly.asm usamos a diretiva extern na linha 2 para declarar o acesso ao sÃmbolo number, que chamamos na linha 8.
Isso irá facilitar a leitura do seu código já que ao ver o rótulo imediatamente se sabe que ele foi exportado e ao abrir o arquivo fonte, imediatamente nas primeiras linhas, já se sabe quais sÃmbolos externos estão sendo acessados.
Repare que em C usamos a keywordextern para especificar que a variável global myVar estaria em outro arquivo objeto, comportamento muito parecido com a diretiva extern do NASM.
Onde como operando ela recebe o número de dados que serão alocados, onde o tamanho de cada dado depende de qual variante da instrução foi utilizada. Por exemplo: