A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Software Básico Silvio Fernandes 2009.1 Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula.

Apresentações semelhantes


Apresentação em tema: "Software Básico Silvio Fernandes 2009.1 Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula."— Transcrição da apresentação:

1 Software Básico Silvio Fernandes 2009.1 Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula 16: Macroprocessadores 1

2 Introdução Uma macroinstrução (ou macro) é uma forma de notação com a finalidade de simplificar o trabalho do programador A macro representa um grupo de instruções usadas com certa frequência, escrita na mesma linguagem de programação a que pertence O macroprocessador substitui cada macro pelo grupo de instruções correspondentes (expandir macros) 2

3 Introdução Na prática o macroprocessador se limita a substituir um grupo de caracteres ou outro Com raras exeções, o macroprocessador não analisa o texto das instruções O projeto de um macroprocessador não se relaciona diretamente com a estrutura do computador Há macroprocessadores de uso geral que não se prende a nenhuma linguagem 3

4 Definição e Expansão de Macros A fig. a seguir mostra um exemplo de programa com macroinstrução escrito para SIC/XE Este programa define e usa 2 macroinstruções, RDBUF e WRBUF As definições destas macros aparecem no programa-fonte após a instrução START 4

5 Definição e Expansão de Macros 5

6 6

7 Duas novas diretivas do assembler (MACRO e MEND) são usadas nas definições das macros MACRO identifica o início da definição de uma macro antecedida pelo nome da macro O símbolo RDBUF é o nome da macro, e o campo de operandos contém os parâmetros da macroinstrução (iniciados pelo caracter &) O nome e os parâmetros definem o padrão ou protótipo das macroinstruções 7

8 Definição e Expansão de Macros Em seguida aparecem as instruções que formam o corpo da definição da macro, as quais o macroprocessador gerará ao expandir a macro A diretiva MEND assinala o fim da definição da macro No programa principal a instrução da linha 190 é a ativação da macro que informa o nome da macro e os argumentos que serão utilizados na expansão 8

9 Definição e Expansão de Macros É importante observar que a ativação da macro é diferente de uma chamada de subrotina A fig. a seguir mostra a saída gerada por um macroprocessador usando como entrada o programa anterior 9

10 Definição e Expansão de Macros 10

11 Definição e Expansão de Macros 11

12 Definição e Expansão de Macros As definições das macros foram apagadas depois da expansão Cada instrução de ativação da macro foi expandida e transformada nas instruções que compõem o corpo da macro Os argumentos utilizados na ativação da macro substituíram os parâmetros do protótipo da macro As linhas 190a até 190l mostram a expansão completa da macro ativada na linha 190 12

13 Definição e Expansão de Macros Observe que as linhas de comentários dentro do corpo da macro foram eliminadas A própria instrução de ativação da macro foi transformada numa linha de comentário, como finalidade de documentar a codificação do programador As macros das linhas 210 e 220 foram expandidas da mesma forma Observe que em cada ativação de WRBUFF foi usado um argumento diferente, assim o resultado das expansões é diferente 13

14 Definição e Expansão de Macros Depois do processamento da macro, o arquivo expandido pode ser usado como entrada do assembler como se as instruções geradas pelas macros tivessem sido escritas diretamente pelo programador Observe que as macroinstruções foram escritas de modo que no corpo não contivesse nenhum label (JEQ *-3 ao invés de JEQ WLOOP e etc) Isso evita um erro, pois na expansão da macro WRBUFF haveria duplicidade na definição de label 14

15 Tabelas e Lógica do Macroprocessador É fácil projetar um macroprocessador de 2 passagens – 1ª: todas as definições de macro são processadas – 2ª: todas as macros são expandidas Entretanto, este macroprocessador não permitiria que o corpo de uma macroinstrução contivesse definições de outras macros 15

16 Tabelas e Lógica do Macroprocessador As definições de macros dentro de outras macros são úteis em determinadas circunstâncias 16

17 Tabelas e Lógica do Macroprocessador 17

18 Tabelas e Lógica do Macroprocessador O corpo da 1ª macro (MACROS) contém instruções que definem RDBUFF, WRBUFF e outras instruções para SIC O corpo da 2ª (MACROX) define as mesmas macros para SIC/XE Deste modo, o mesmo programa poderia ser executado num SIC standard e num SIC/XE A única alteração necessária seria a ativação de MACROS ou MACROX 18

19 Tabelas e Lógica do Macroprocessador Em razão da estrutura de 1 passagem, a definição de cada macro tem que aparecer antes das instruções que ativam a macro correspondente São 3 as estruturas de dados principais: – DEFTAB – NAMTAB – ARGTAB 19

20 Tabelas e Lógica do Macroprocessador DEFTAB – Armazena o protótipo da macro e as instruções que formam o corpo da macro – As referências aos parâmetros da macro são convertidas para uma notação posicional para que sua substituição pelos argumentos se torne mais eficiente NAMTAB – Armazena os nomes das macros que funcionam como índice de DEFTAB – Identifica o início e o fim da macro 20

21 Tabelas e Lógica do Macroprocessador ARGTAB – Armazena os argumentos da instrução de ativação de macro segundo sua posição na lista de argumentos – Conforme a macro é expandida, os argumentos de ARGTAB vão sendo colocados no lugar do parâmetros correspondentes no corpo da macro 21

22 Tabelas e Lógica do Macroprocessador (a) entradas de NAMTAB e DEFTAB que definem a macro RDBUFF; (b) entradas de ARGTAB para ativação de RDBUFF na linha 190 22

23 Tabelas e Lógica do Macroprocessador Quando a notação ?n é reconhecida numa linha de DEFTAB, uma operação simples de indexação fornece o argumento apropriado estraído de ARGTAB 23

24 Tabelas e Lógica do Macroprocessador 24

25 Tabelas e Lógica do Macroprocessador Quando uma definição de macro está sendo registrada em DEFTAB, o procedimento normal seria prosseguir até que a diretiva MEND fosse encontrada Entretanto, usando essa idéia, uma macro definida dentro de outra macro levaria a um erro Para isso, a procedure DEFINE mantém um contador (NIVEL) que é incrementado a cada diretiva MACRO encontrada 25

26 Referências Leland L Beck. Desenvolvimento de software básico. 2ª ed. Rio de Janeiro: Campus, 1993. 525p. 26


Carregar ppt "Software Básico Silvio Fernandes 2009.1 Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula."

Apresentações semelhantes


Anúncios Google