9. Software de Sistema - Montadores (capítulo 9 do livro texto) Usuário Programas Programas de Aplicação Utilitários Depuradores Processador Ligadores de Macro Compiladores Montador Carregadores Sistema Operacional (Gerenciador de Processador, Memória, E/S, etc) Software Aplicativo Software de Sistema Microprogramas Hardware Circuitos Físicos DCA-FEEC-UNICAMP: Introdução à Computação Digital - 2009 - Prof. Léo Pini Magalhães 459 Software de Sistema – cont. Software de Sistema é um conjunto de programas que define a maneira como os diversos elementos do hardware devem operar de modo a resolver os problemas dos usuários de forma simples e eficiente. SISTEMA COMPUTACIONAL = HARDWARE + SOFTWARE DE SISTEMA DCA-FEEC-UNICAMP: Introdução à Computação Digital - 2009 - Prof. Léo Pini Magalhães 460 Software de Sistema – cont. Sem um software de sistema os usuários seriam responsáveis pelo controle direto de todas as operações executadas pelos elementos de hardware. • os programas seriam escritos em linguagem de máquina; • o programador seria responsável pelo carregamento, na memória, do programa a ser executado; não seria fácil utilizar os mecanismos de entrada e saída, exigindo-se conhecimento das peculiaridades de cada periférico e fazendo com que o esforço de programação fosse desviado do problema a ser resolvido; o programador seria responsável pelo gerenciamento do uso da memória para garantir a completa execução de um programa; em caso de sistemas com múltiplos usuários, o gerenciamento dos recursos existentes e a sincronização entre os diversos programas seriam extremamente complexos; etc. • • • DCA-FEEC-UNICAMP: Introdução à Computação Digital - 2009 - Prof. Léo Pini Magalhães 461 9.1 Montadores (Assemblers) Um Montador é um programa cujos dados de entrada são sequências de caracteres que constituem o programa em Linguagem Simbólica, de Montagem ou "Assembly", e cujo resultado é um conjunto de palavras de máquina (sequências de bits) que constituem o programa em linguagem de máquina. O programa gerado, em linguagem de máquina, pode ser carregado na memória e executado ("load and go"), ou ser a entrada de outro programa, o Carregador, que após algum processamento para adequar os endereços ao bloco de memória disponível, carrega-o na memória para ser executado. DCA-FEEC-UNICAMP: Introdução à Computação Digital - 2009 - Prof. Léo Pini Magalhães 462 Montadores (Assemblers) – cont. Esquema de funcionamento de um Montador típico Programa em linguagem de montagem ( Assembly ) MONTADOR Programa em linguagem de máquina tabelas DCA-FEEC-UNICAMP: Introdução à Computação Digital - 2009 - Prof. Léo Pini Magalhães 463 9.2 Linguagem de Montagem – L. Assembly FORMATO GENÉRICO DE INSTRUÇÃO <RÓTULO> <CÓDIGO DE OPERAÇÃO> <OPERANDOS/MODIFICADORES> <COMENTÁRIOS> RÓTULO - composto de variáveis alfanuméricas, iniciando com letras, identifica endereços onde são armazenados instruções e dados; CÓDIGO DE OPERAÇÃO - conjunto de letras que formam mnemônicos para as instruções; OPERANDOS - identificam variáveis, pelos rótulos, ou registradores da UCP; MODIFICADORES - identificam modos de endereçamento; COMENTÁRIOS - descrevem o programa. DCA-FEEC-UNICAMP: Introdução à Computação Digital - 2009 - Prof. Léo Pini Magalhães 464 Linguagem de Montagem – cont. Exemplo: ROT: MOVE R1,R2 ; armazena o conteúdo do registrador R1 em R2 DELIMITADORES Os campos da instrução em linguagem simbólica são separados por delimitadores. Novamente, estes delimitadores são definidos pelo projetista do MONTADOR. Exemplos de delimitadores: espaço - entre campos : - separa o rótulo ; - separa o comentário , - separa operandos DCA-FEEC-UNICAMP: Introdução à Computação Digital - 2009 - Prof. Léo Pini Magalhães 465 Linguagem de Montagem – cont. Exemplos de Instruções Assembly • Máquina de 1 endereço LDA S1 ; load S1 em Acc ou Acc (S1) ADD S2 ; Acc (Acc) + (S2) STORE R ; store R ou R (Acc) Exemplo de programa de Saída de dado (isolada) LOOP: RS: RD: IN TSTBIT JNZ LDA OUT : : : : EQU EQU RS 2 LOOP dado RD ; leitura do registrador RS ; bit 2 de RS=1 ? ; loop de espera ou saída de dado ? ; Acc (dado) ; porta RD (Acc) 10000 10002 ; porta de status da interface ; porta de dados (saída) DCA-FEEC-UNICAMP: Introdução à Computação Digital - 2009 - Prof. Léo Pini Magalhães 466 Linguagem de Montagem – cont. Exemplos de Instruções Assembly – cont. • Máquina de 2 endereços MOVE S1, R ; R (S1) ADD S2, R ; R (R) + (S2) Exemplo de programação de Interface (E/S mapeada) PROG: RC: MOVE :::: EQU #10, RC ; RC 10 : : : : 1000A ; porta de controle da interface DCA-FEEC-UNICAMP: Introdução à Computação Digital - 2009 - Prof. Léo Pini Magalhães 467 Linguagem de Montagem – cont. Exemplos de Pseudo-Instruções Pseudo-instruções facilitam a programação. São diretrizes para os programas montadores, não gerando código executável. DC / DW / DB - atribui a uma posição da memória um valor (dado); CINCO: DW 5 ; a posição de memória referenciada por CINCO recebe o valor 5 DS - define área alocada em quantidade de palavras/bytes AREA: DS 20 : MOVE #3,AREA+5 ; reserva 20 posições ; acesso à área especificada EQU - define rótulo ABC: EQU 1028 ; o rótulo ABC equivale à posição de memória 1028 DCA-FEEC-UNICAMP: Introdução à Computação Digital - 2009 - Prof. Léo Pini Magalhães 468 Linguagem de Montagem – cont. Exemplos de Pseudo-Instruções – cont. ORG - define origem ORG 1000 ; o que segue (dado ou instrução) estará na posição 1000 ADR - define que a posição contém o endereço do rótulo especificado X1: DW 12 : AX1: ADR X1 ; a posição AX1 contém o endereço X1 END - define fim de programa Exemplo: ...... X1: AX1: ORG 5000 DW 12 :::: ADR X1 ; conteúdo de AX1 é o end. de X1 DCA-FEEC-UNICAMP: Introdução à Computação Digital - 2009 - Prof. Léo Pini Magalhães 469 9.3 Tarefas de um Montador Para traduzir o programa em linguagem simbólica para um programa em linguagem de máquina, o Montador deve : a. b. c. substituir os mnemônicos da instrução e modificadores de endereço pelos equivalentes binários; determinar posições de memória, relativas ao programa, para os endereços simbólicos (rótulos); substituir todas as referências a um dado endereço simbólico pelo endereço binário correspondente. Para determinar posições de memória para os endereços simbólicos (b), o montador utiliza a informação dada pelo programador nas pseudoinstruções; estas não são traduzidas para Linguagem de Máquina, servindo somente para orientar o montador na geração do programa em linguagem de máquina. DCA-FEEC-UNICAMP: Introdução à Computação Digital - 2009 - Prof. Léo Pini Magalhães 470 Tarefas de um Montador-cont. exemplo de tradução por um montador (palavra de 16 bits) – Motorola 68000 N° comando 0 1 2 Instrução A: DW 10 B: DW 20 C: DS 7 3 4 MOVE A,D1 LOOP: ADD B, D1 5 MOVE D1, C : n : END End. Relativo 0 2 4 : : 16 18 20 22 24 26 28 : Código Objeto 0000000000001010 0000000000010100 0000000000000000 : : 0000000000000000 0011001000111000 0000000000000000 1101001000111000 0000000000000010 0011000111000001 0000000000000100 : DCA-FEEC-UNICAMP: Introdução à Computação Digital - 2009 - Prof. Léo Pini Magalhães 471 Tarefas de um Montador-cont. exemplo de tradução por um montador (palavra de 16 bits) – Motorola 68000 N° comando 0 1 2 Instrução A: DW 10 B: DW 20 C: DS 7 modo Abs. - Reg. 3 4 5 : n MOVE A,D1 LOOP: ADD B, D1 MOVE D1, C : END End. Relativo 0 2 4 : : 16 18 20 22 24 26 28 : Código Objeto 00000000.00001010 00000000.00010100 0000000000000000 : : 0000000000000000 0011001000111000 0000000000000000 1101001000111000 0000000000000010 0011000111000001 0000000000000100 : DCA-FEEC-UNICAMP: Introdução à Computação Digital - 2009 - Prof. Léo Pini Magalhães byte 0,1 2, 3 7x2 bytes end.A end.B end.C 472 Código de máquina (68000) Na transparência 472: endereços 18 a 21 (em bytes) size op.destino op.fonte end. 18 00 x x yyyzzz yyyzzz word=11 001 MOVE A, D1 end. 20 000 111 modo 000 seguido do valor do rótulo A (seu endereço) DCA-FEEC-UNICAMP: Introdução à Computação Digital - 2009 - Prof. Léo Pini Magalhães 473 9.4 Estruturas de dados no processo de montagem Tabela de Símbolos TS PF Programa Fonte Montador (ASM) TIM Tabela de Instruções de Máquina PLM Programa em Linguagem de Máquina TPI Tabela de Pseudo-Instruções DCA-FEEC-UNICAMP: Introdução à Computação Digital - 2009 - Prof. Léo Pini Magalhães 474 Estruturas de dados no processo de montagem – cont. Tabela de Instruções de Máquina - TIM • • TIM associa o mnemônico de uma instrução com a instrução de máquina em binário a tabela TIM – a seguir - pode possuir vários campos com informações relevantes. O número de campos que compõe a tabela TIM depende de características específicas do processador e da sintaxe da linguagem simbólica. Dois campos estão sempre presentes na tabela TIM : MNEMÔNICO - onde estão os mnemônicos das instruções, definidos pela sintaxe da linguagem simbólica. CÓDIGO DE OPERAÇÃO - onde estão os códigos de operação das instruções de máquina. Outros campos podem completar a informação : COMPRIMENTO DA INSTRUÇÃO (em bytes) - contém o comprimento da instrução. ROTINA DE TRATAMENTO DE OPERANDOS - onde estão relacionadas as rotinas que o montador deve ativar para gerar o endereço dos operandos, quando estes são expressões ou dependem dos modos de endereçamento. DCA-FEEC-UNICAMP: Introdução à Computação Digital - 2009 - Prof. Léo Pini Magalhães 475 Estruturas de dados no processo de montagem – cont. Tabela de Instruções de Máquina – TIM – cont. Exemplo de tabela TIM - TABELA DE INSTRUÇÕES DE MÁQUINA Mnemônico : Código de Operação : Comprimento (bytes) Rotina de Tratamento de operandos : : MOVE 00xx ???????? ?????? 2a6 RMOV RTS 0100 1110 0111 0101 2 RRTS : : : : 00=byte; 10=long; 11=word DCA-FEEC-UNICAMP: Introdução à Computação Digital - 2009 - Prof. Léo Pini Magalhães 476 Estruturas de dados no processo de montagem – cont. Tabela de Pseudo-Instruções – TPI • • relaciona o mnemônico da pseudoinstrução com a rotina que o montador deve ativar para processar a pseudoinstrução a tabela TPI pode possuir vários campos com informações relevantes. Dois campos estão sempre presentes na tabela TPI : MNEMÔNICO - onde estão os mnemônicos das pseudoinstruções, definidos pela sintaxe da linguagem simbólica. ROTINA DE TRATAMENTO DE OPERANDOS - onde estão relacionadas as rotinas que o montador deve ativar para processar a pseudoinstrução. Outros campos podem completar a informação, como : COMPRIMENTO DA PSEUDOINSTRUÇÃO - contém o número de bytes ou palavras que deve ser reservado para pseudoinstruções como em DB (Define Byte) ou DW (Define Word). DCA-FEEC-UNICAMP: Introdução à Computação Digital - 2009 - Prof. Léo Pini Magalhães 477 Estruturas de dados no processo de montagem – cont. Tabela de Pseudo-Instruções – TPI – cont. Exemplo de tabela TPI – Tabela de Pseudoinstruções Mnemônico Comprimento (bytes) Rotina de Tratamento : : : ORG - RORG DW 2 RDW DC.B 1 : DC.W 2 : DC.L 4 : : : : DCA-FEEC-UNICAMP: Introdução à Computação Digital - 2009 - Prof. Léo Pini Magalhães 478 Estruturas de dados no processo de montagem – cont. Tabela de Símbolos - TS A Tabela de Símbolos é construída durante a montagem e relaciona cada símbolo (ou rótulo) definido no código fonte com um valor em representação binária do seu endereço de memória. Exemplo de tabela TS – Tabela de Símbolos (para o exemplo da transparência 472) Símbolo Valor (em decimal) A 0000 B 0002 C 0004 LOOP 0022 DCA-FEEC-UNICAMP: Introdução à Computação Digital - 2009 - Prof. Léo Pini Magalhães 479 9.5 O processo de montagem Para realizar a tradução, os Montadores são geralmente implementados como Montadores de dois Passos. Os dois Passos significam que o Montador deverá ler o programa fonte duas vezes. Existem Montadores de 1 Passo, onde o programa fonte é lido uma única vez; porém, este fato implica em restrições no programa fonte (ver Exercícios 3, 5 e 6 do livro texto). Para o Montador de dois Passos: . no primeiro passo o Montador lê o código fonte e determina os endereços para as referências simbólicas, construindo a Tabela de Símbolos. . no segundo passo o código fonte é lido novamente e os mnemônicos das instruções e referências simbólicas são substituídos por códigos de máquina. DCA-FEEC-UNICAMP: Introdução à Computação Digital - 2009 - Prof. Léo Pini Magalhães 480 O processo de montagem – cont. As tarefas associadas aos dois passos são: PASSO 1 - Definir símbolos (rótulos) • • • • processar pseudoinstruções, utilizando a Tabela de Pseudoinstruções; determinar o comprimento da instrução de máquina, de acordo com a Tabela de Instruções de Máquina; atualizar o contador de posições CP, de acordo com o comprimento de cada instrução ou pseudoinstrução; guardar os valores dos símbolos (endereço equivalente) na Tabela de Símbolos. PASSO 2 - Gerar o programa em linguagem de máquina • • • substituir símbolos por valores indicados na Tabela de Símbolos; gerar instruções de máquina; gerar dados (constantes definidas). DCA-FEEC-UNICAMP: Introdução à Computação Digital - 2009 - Prof. Léo Pini Magalhães 481 O processo de montagem – cont. Passo 1 – processar símbolos CP ← 0 lê busca TPI não encontrou ERRO encontrou não encontrou DW DS EQU PASSO 2 busca TIM encontrou L ← comprimento L ← comprimento da instrução dos dados END ORG L←0 CP ← valor guardar rótulo = CP na TS CP ← CP + L DCA-FEEC-UNICAMP: Introdução à Computação Digital - 2009 - Prof. Léo Pini Magalhães 482 O processo de montagem – cont. CP ← 0 Passo 2 – gerar códigos No Passo 2 o contador de posições CP é zerado e o programa fonte é lido novamente. lê busca TPI encontrou DW DS não encontrou calcula / insere busca TIM constante encontrou L ← comprimento L ← comprimento da instrução dos dados processa C.O. processa operandos insere no PLM CP ← CP + L ORG EQU END FIM CP ← valor A cada instrução lida é feita a busca nas tabelas TPI e TIM. No Passo 2 não é necessário prover um tratamento de erro quando a instrução não pertencer às tabelas TIM e TPI; o tratamento de erro é ativado no Passo 1 e o Passo 2 não é executado. DCA-FEEC-UNICAMP: Introdução à Computação Digital - 2009 - Prof. Léo Pini Magalhães 483 O processo de montagem – Fluxo de Dados As estruturas de dados manipuladas nos passos 1 e 2 são: • • • • • • Programa Montador (ASM); Contador de posições (CP); Tabela de Instruções de Máquina (TIM); Tabela de Pseudoinstruções (TPI); Tabela de Símbolos (TS); Programa em linguagem de Máquina (PLM). ASM CP PASSO 1 PF PLM PASSO 2 CP TIM TPI TS DCA-FEEC-UNICAMP: Introdução à Computação Digital - 2009 - Prof. Léo Pini Magalhães 484 9.6 Exemplo START: VOLTA: DADO: ORG MOVE DCR JNZ MVI HLT DW END 0100H DADO,R0 R0 VOLTA #11H,R1 20H Para ilustrar as diferenças entre processadores, neste exemplo, diferentemente do apresentado na transparência 472 temos palavra de 8 bits (1 byte) bem como outros códigos de operação e comprimentos de instrução. DCA-FEEC-UNICAMP: Introdução à Computação Digital - 2009 - Prof. Léo Pini Magalhães 485 Exemplo – cont. TIM - TABELA DE INSTRUÇÕES DE MÁQUINA Mnemônico (*) Código de Operação (hexadecimal) Comprimento (bytes) Rotina de Tratamento de operandos MOVE R0 11 3 RMOV MVI R1 21 2 RMVI HLT 00 1 RHLT JNZ 60 3 RJMP DCR R0 30 1 RDCR : : : : (*) só está representada a parte que gera o C.O. DCA-FEEC-UNICAMP: Introdução à Computação Digital - 2009 - Prof. Léo Pini Magalhães 486 Exemplo – cont. TPI - TABELA DE PSEUDOINSTRUÇÕES Mnemônico Rotina de Tratamento ORG RORG END REND DS RDS DW RDW : : DCA-FEEC-UNICAMP: Introdução à Computação Digital - 2009 - Prof. Léo Pini Magalhães 487 Exemplo – cont. No Passo 1 é gerada a tabela TS a partir do processamento do comprimento das instruções conforme mostrado a seguir. Endereço (CP) 0100 START: 0101 0102 0103 VOLTA: 0104 0105 0106 0107 0108 0109 010A DADO: MOVE DADO,R0 DCR JNZ R0 VOLTA MVI #11H,R1 HLT DW 20H DCA-FEEC-UNICAMP: Introdução à Computação Digital - 2009 - Prof. Léo Pini Magalhães 488 Exemplo – cont. No Passo 1 é gerada a tabela TS a partir do processamento do comprimento das instruções conforme mostrado a seguir. Endereço (CP) 0100 START: 0101 0102 0103 VOLTA: 0104 0105 0106 0107 0108 0109 010A DADO: MOVE DADO,R0 DCR JNZ R0 VOLTA MVI #11H,R1 Tabela de Símbolos HLT DW 20H Símbolo Valor START 0100 VOLTA 0103 DADO 010A DCA-FEEC-UNICAMP: Introdução à Computação Digital - 2009 - Prof. Léo Pini Magalhães 489 Exemplo – cont. Seguindo o algoritmo descrito no Passo 2 e utilizando a tabela gerada no Passo 1, obtemos o seguinte PLM (devemos observar que os endereços dos operandos estão armazenados em 2 bytes, por exemplo nos endereços 101-102 e 105-106) : Endereço 0100 0101 0102 0103 0104 0105 0106 0107 0108 0109 010A PLM (em hexadecimal) 11 01 0A 30 60 01 03 21 11 00 20 DCA-FEEC-UNICAMP: Introdução à Computação Digital - 2009 - Prof. Léo Pini Magalhães 490 9.7 Exercícios 1. Resolva os exercícios (1) a (6) do livro texto. DCA-FEEC-UNICAMP: Introdução à Computação Digital - 2009 - Prof. Léo Pini Magalhães 491