Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouJúlia Garro Alterado mais de 11 anos atrás
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
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.