Вы находитесь на странице: 1из 10

Arquitetura de Computadores

CAPTULO 7 NVEL DE LINGUAGEM DE MONTAGEM 7.1 Introduo Difere dos nveis inferiores por ser implementado por traduo. A traduo usada quando um processador est disponvel para uma mensagem fonte mas no para uma linguagem alvo O programa tradutor converte um programa fonte (escrito numa linguagem fonte) para um programa equivalente, o programa objeto (na linguagem de mquina do processador disponvel). A traduo feita em duas etapas, as quais so realizadas em seqncia: Gerao de um programa em linguagem alvo (programa objeto). Execuo do programa gerado. Existem dois tipos de tradutores: Compilador: linguagem fonte = linguagem de alto nvel; linguagem objeto = linguagem de mquina. Montador (Assembler): linguagem fonte = linguagem de montagem (Assembly) representao simblica da linguagem de mquina; linguagem objeto = linguagem de mquina. Linguagem Fonte (Linguagem de Montagem) Programa Fonte Linguagem Alvo (Linguagem de Mquina) Programa Objeto

Montador

Figura 7.1. Processo de montagem. 7.2 Linguagem de Montagem Razo de uso da linguagem de montagem: Melhorar o desempenho. Algumas mquinas podem no ter um compilador disponvel. Cada comando em linguagem resulta em um comando em linguagem de mquina: uma linha de programa fonte uma linha de programa objeto. Representao simblica da linguagem de mquina: Cdigos de operao e operandos (nmeros) substitudos por mnemnicos e rtulos. Ao contrrio da programao em alto nvel, o programador de linguagem de montagem dispe de todos os recursos do nvel ISA. Programa no portvel (vlido apenas para uma mesma famlia de processadores).

Arquitetura de Computadores

7.3 Formato de um Comando em Linguagem de Montagem Uma instruo em linguagem de montagem contm, pelo menos, um campo de operao e outros campos que a especificam. Label K: Operao DD 2 Operando(s) Comentrios ; Define Dado K reservando 4 bytes iniciando com 2. ; Adicione K a EAX ; Desvie para DESTINO

DESTINO

ADD JUMP

EAX, K DESTINO

Figura 7.2. Exemplo de formato de comandos em linguagem de montagem. Campo de Rtulo (Label): nome simblico atribudo a um endereo. Permite que destinos de desvios sejam identificados facilmente pelo programador. Campo de Operao: abreviatura simblica do OPCODE. Deve lembrar o tipo de operao realizada pela instruo. Exemplo: ADD = soma. Campo de operando(s): especifica simbolicamente o(s) endereo(s), registrador(es) ou constante(s) utilizados como operandos. Campo de comentrios: documento o programa (o qual seria ilegvel sem este campo). Ignorado pelo montador. 7.4 Linguagem de Montagem versus Linguagem de Alto Nvel Um programa em linguagem de montagem mais eficiente, mais difcil de programar e tem de 5 a 10 vezes mais instrues do que o seu equivalente em linguagem de alto nvel. Envolve mais programadores (a um custo maior) Independente da linguagem, um programador pode produzir um determinado nmero de linhas de cdigo por ms. Programas em linguagem de montagem so difceis de entender. Mudanas de programadores so bastante prejudiciais. Num programa, uma pequena percentagem do cdigo responsvel por grande parcela do tempo de execuo. Soluo: Afinao = implementao dos trechos crticos do programa em linguagem de mquina. Trechos no crticos desenvolvidos em linguagem de alto nvel.

Arquitetura de Computadores

7.5 O processo de Montagem Montagem: traduo de programa fonte em programa objeto. Problema da Referncia Futura: desvios para posies de destino situadas adiante da posio da instruo de desvio so representados por smbolos ainda no definidos. Conseqncia: no possvel converter o programa diretamente, linha aps linha. Soluo - Traduo em Dois Passos: 1. Definio de smbolos, armazenados em uma tabela. 2. Traduo do programa usando os smbolos definidos no passo 1. Passo 1: O montador analisa as instrues, uma a uma, at encontrar uma pseudo-instruo de fim de programa (END). No processo de anlise das instrues, usando uma Tabela de Cdigos de Operao, o montador constri uma Tabela de Smbolos, a qual ser usada no Passo 2. Tabela de Cdigos: A Tabela de Cdigos contm uma entrada para cada cdigo de operao (opcode) simblico (mnemnico) da linguagem de montagem. A tabela tem vrios campos que permitem, a partir do mnemnico, definir o seu valor em linguagem de mquina, o tamanho e tipo dos operandos, o tamanho da instruo, etc.: Campo de Cdigo de Operao Simblico: contm o mnemnico associado instruo. Campos de Operandos: contm o tipo de operandos manipulados pela instruo. Campo de Cdigo de Operao: contm o valor numrico do cdigo de operao em linguagem de mquina. Para cada tipo de operandos (modos de endereamento diferentes), utiliza-se um cdigo de operao diferente. Campo de Tamanho de Instruo: contm o tamanho da instruo correspondente (usado para incrementar o ILC). Campo de Classe de Instruo: contm um nmero de classe que separa cdigos de operao em grupos dependentes do nmero e do tipo de operandos. Permite ao montador tratar da mesma maneira instrues semelhantes.

Arquitetura de Computadores

Cdigo de Tipo do Tipo do Cdigo de Tamanho operao primeiro segundo operao da simblico operando operando em Hexa Instruo em bytes

Classe da instruo

Figura 7.3. Exemplo de entrada de uma Tabela de Cdigos de Operao. Construo da Tabela de Smbolos: Instrues so analisadas, uma a uma, em seqncia. Contador de Localizao de Instruo (ILC - Instruction Location Counter), zerado no incio do Passo1, incrementado do comprimento da instruo corrente a cada instruo analisada. O ILC prov o endereo "de execuo" da instruo montada. Com base no ILC, uma Tabela de Smbolos montada. A Tabela de Smbolos contm os seguintes campos: Campo de smbolo: contm o prprios labels, (ou um ponteiro para os mesmos). Campo de Valor: contm o valor numrico atribudo ao smbolo (o valor do ILC da instruo). Outras informaes (campos opcionais). Exemplo: Comprimento dos dados associados ao smbolo. Bits de relocao, que especificam se o smbolo muda de valor se o programa carregado em um endereo diferente daquele assumido pelo montador. Informaes sobre se o smbolo ou no acessvel fora do procedimento. Smbolo Valor do ILC Outras informaes

Figura 7.4. Uma entrada da Tabela de Smbolos. Passo 2: Gera o programa objeto. Produz a expanso binria da instruo a partir das tabelas. Produz informaes necessrias ao procedimento de Ligao. Gera mensagens de erro caso estes existam no programa fonte.

Arquitetura de Computadores

7.6 Macros Macros so abreviaturas simblicas para trechos do programa fonte. Usadas para diminuir o tamanho do cdigo quando um mesmo trecho de linhas de cdigo aparece repetido vrias vezes no programa fonte. Definio de uma Macro: S aparece uma vez no programa fonte. Possui a seguinte estrutura: Cabealho da Macro: contm um nome mnemnico da Macro. Corpo da Macro: contm as linhas de cdigo, propriamente ditas, que executam a tarefa definida para a Macro. Fim de Macro: pseudo-instruo de fim de Macro informa ao montador onde a Macro termina. O montador deve manter uma tabela de Macros com o nome de cada uma delas e ponteiros correspondentes para uma tabela de definies das mesmas, onde esto armazenados os corpos das Macros. Chamada de Macro: feita no programa fonte atravs do nome da Macro. O nome da Macro substitui o corpo da Macro em todos os lugares onde este deveria aparecer dentro do programa fonte. MOV MOV MOV MOV EAX, P EBX, Q Q, EAX P, EBX TROCA MACRO MOV EAX, P MOV EBX, Q MOV Q, EAX MOV P, EBX ENDM . . . TROCA . . . TROCA (b)

. . . MOV MOV MOV MOV EAX, P EBX, Q Q, EAX P, EBX (a)

Figura 7.5. Cdigo em Assembly. a) Sem Macro. b) Com Macro.

Arquitetura de Computadores

Expanso de Macro: Substituio da chamada de Macro pelo corpo da Macro. realizada pelo montador no incio do Passo 1 da montagem. Aps a expanso, o corpo da Macro pode aparecer repetidas vezes no programa. O programa objeto no tem chamadas de Macro. Diferentemente das chamadas de procedimentos, as chamadas de Macro no precisam de instruo de retorno. Parmetro de Comparao Quando feita a chamada? O corpo inserido no programa objeto em todo lugar em que aparece? Uma instruo de chamada inserida e executada no programa objeto? Precisa de instruo de retorno para retomar a instruo seguinte chamada? Quantas cpias do corpo aparecem no programa objeto? Chamada de Macro Durante a montagem Sim Chamada de Procedimento Durante a execuo No

No

Sim

No

Sim

Uma para cada chamada

Uma

Figura 7.6. Comparao entre Macros e Procedimentos. Macros com parmetros: Algumas Macros podem receber parmetros. Na definio da Macro, utilizam-se parmetros formais (genricos). Exemplo de cabealho: SOMA3 MACRO A, B, C. Na chamada da Macro, utilizam-se os parmetros reais. Exemplo: SOMA3 X, Y, Z; SOMA3 K, L, M; etc. Quando a Macro expandida, cada parmetro formal substitudo pelos correspondentes parmetros reais. Os parmetros reais so colocados no campo de operandos da chamada da Macro correspondente.

Arquitetura de Computadores

7.7 Ligao e Carga Programas podem ser constitudos de vrios procedimentos. Antes da execuo, todos os procedimentos traduzidos devem ser ligados apropriadamente, em um nico programa, a ser carregado na memria principal para execuo. O software que faz a ligao denominado Ligador (Linker). O linker produz um nico programa, o Mdulo Absoluto de Carga, a partir dos vrios mdulos objeto obtidos da traduo dos vrios procedimentos (mdulos fonte). O Mdulo de Carga contm todos os mdulos ligados em um nico programa executvel. Um software denominado Carregador (Loader) responsvel por carregar o Mdulo de Carga na memria principal para execut-lo. Procedimento Fonte 1 ... Procedimento Fonte N

Montador

Mdulo Objeto 1

...

Mdulo Objeto N

Linker

Mdulo de Carga

Loader

Memria Principal Programa Executvel Figura 7.7. O processo de Montagem, Ligao e Carga.

Arquitetura de Computadores

Para criar o Mdulo de Carga, o Linker une todos os Mdulos Objeto em um nico espao de endereamento: As referncias a endereos devem ser todas atualizadas (Problema de Relocao). Este problema inexistente quando a memria segmentada. Quando existe um Procedimento A que chama a um Procedimento B, o endereo absoluto de B s conhecido aps a ligao (Problema de Referncia Externa). Tarefas do Linker: i. ii. iii. iv. Construir uma Tabela com todos os Mdulos Objeto e seu respectivos comprimentos. Atribuir um Endereo de Carga a cada Mdulo Objeto. Relocar todas as instrues que contm um endereo adicionando uma Constante de Relocao (endereo inicial de cada mdulo). Encontrar todas as instrues que referenciam outros procedimentos e inserir nelas o endereo absoluto dos mesmos. Endereo 0 Vetores exceo

Endereo 0 Vetores exceo

de

de

100 Mdulo Objeto A

100 Mdulo Objeto A

400 CALL B 500 Mdulo Objeto B 600 JUMP 300 800 CALL C 900 Mdulo Objeto C 1100

400 CALL 500 500 Mdulo Objeto B 600 JUMP 800 800 CALL 900 900 Mdulo Objeto C 1100

(a) (b) Figura 7.8. Mdulos objeto. a) Antes da ligao. b) Depois da Ligao.

Arquitetura de Computadores

Mdulo A B C

Comprimento 400 400 200

Endereo Inicial 100 500 900

Figura 7.9. Exemplo de Tabela de Mdulos Objeto. Estrutura de um mdulo objeto: A maioria dos Linkers requer dois passos: i. Ler todos os mdulos objeto, construir uma Tabela de nomes e comprimentos de mdulos e uma Tabela global de smbolos internos e externos. ii. Ler os mdulos objeto, reloc-los e lig-los para formar um nico mdulo. Campo Identificao Tabela de Smbolos Internos Tabela de Smbolos Externos Instrues e constantes Dicionrio de Relocao Fim de Mdulo Contedo Nome do mdulo e comprimentos das suas partes Lista de smbolos definidos no mdulo corrente que outros mdulos podem referenciar Lista de smbolos definidos em outros mdulos utilizados no mdulo corrente. Lista de instrues e seus correspondentes smbolos externos Cdigo montado e constantes (nica parte do mdulo objeto que ser carregada na memria para execuo) Lista de endereos a serem relocados Indicao de fim de mdulo

Figura 7.10. Estrutura de um mdulo objeto. Tempo de Mapeamento (Binding Time): Tempo de Mapeamento: tempo no qual um endereo real da memria principal atribudo a um smbolo. Exemplo: quando o programa escrito, quando o programa carregado, quando a instruo que usa o endereo executada, etc. Em Sistemas de Tempo Compartilhado, programas podem ser carregados em endereos diferentes, quando executados em instantes diferentes. Devem ser relocados dinamicamente. Soluo: mapear smbolos em endereos virtuais e alterar a tabela de pginas para realizar o novo mapeamento virtual-fsico.

Arquitetura de Computadores

Ligao Dinmica: Ligao de procedimentos compilados separadamente no momento em que estes so chamados pela primeira vez. Procedimentos raramente utilizados s so ligados se necessrio. Melhor aproveitamento da memria virtual.