Você está na página 1de 7

Universidade Federal de Minas Gerais Instituto de Cincias Exatas Departamento de Cincia da Computao Disciplina Software Bsico (DCC008) - 2013/02

Trabalho Prtico 4 - Ligador 1 Descrio Geral

O objetivo deste trabalho projetar e implementar um Editor de Ligao para os programas feitos na linguagem interpretada pela mquina virtual construda nos trabalhos anteriores. A tarefa do editor de ligao ou linker rearranjar o cdigo do programa, incorporando a ele todas as partes referenciadas no cdigo original, resultando em um cdigo executvel pelo processador. Essa tarefa pode ser realizada tambm pelos chamados carregadores.

Informaes Importantes
O trabalho deve ser feito individualmente, podendo ser discutido entre os colegas, mas cdigo fonte no poder ser trocado. A data de entrega ser especicada atravs de uma tarefa no Moodle; Poltica de Atrasos: A entrega de cada trabalho prtico deve ser realizada at a data estipulada na tarefa correspondente do Moodle. As tarefas foram programadas para aceitar submisses atrasadas, mas estas sero penalizadas. A penalizao pelo atraso ser geomtrica com o mesmo conforme a frmula abaixo: 2d1 0, 32

Desconto(%) =

Essa frmula d a porcentagem de desconto para d dias de atraso. ATENO: Note que depois de 6 dias o trabalho avaliado em 0 pontos. Com base na poltica acima, altamente recomendvel que se esforcem para entregar o TP dentro do prazo para que no tenhamos problemas futuros. O trabalho dever ser implementado obrigatoriamente na linguagem C; Dever ser entregue exclusivamente o cdigo fonte com os arquivos de dados necessrios para a execuo e um arquivo Makele que permita a compilao do programa nas mquinas UNIX do departamento;

Alm disso, dever ser entregue uma pequena documentao contendo todas as decises de projeto que foram tomadas durante a implementao, sobre aspectos no contemplados na especicao, assim como uma justicativa para essas decises. Esse documento no precisa ser extenso (entre 3 e 5 pginas); A nfase do trabalho est no funcionamento do sistema e no em aspectos de programao ou interface com o usurio. Assim, no dever haver tratamento de erros no programa de entrada; Todas as dvidas referentes ao Trabalho Prtico sero esclarecidas por meio do frum, devidamente nomeado, criado no ambiente Moodle da disciplina; A entrega do trabalho dever ser realizada por meio do Moodle, na tarefa criada especicamente para tal. As instrues de submisso, alguns arquivos de teste, e o esqueleto da organizao dos arquivos esto presentes no arquivo tp4_seulogin.tar.gz, disponvel para download no Moodle: ATENO: trabalhos que no seguem esse padro sero penalizados.

Especicao da Mquina

Como os trabalhos prticos da disciplina so dependentes das etapas anteriores, convm relembrar algumas informaes sobre a mquina virtual: A menor unidade enderevel nessa mquina um inteiro; Os tipos de dados tratados pela mquina tambm so somente inteiros; A mquina possui uma memria de no menos que 1000 posies, 3 registradores de propsito especco e 8 registradores de propsito geral; Os registradores de propsito especco so: PC (contador de programas): contm o endereo da prxima instruo a ser executada; SP (apontador da pilha): aponta para o elemento no topo da pilha; PSW (palavra de status do processador): consiste em 2 bits que armazenam o estado da ltima operao lgico/aritmtica realizada na mquina, sendo um dos bits para indicar que a ltima operao resultou em zero, e outro bit para indicar que a ltima operao resultou num resultado negativo; Os registradores de propsito geral so indexados por um valor que varia de 0 a 7; A nica forma de endereamento existente na mquina direto, relativo ao PC; As instrues READ e WRITE leem e escrevem um inteiro na sada padro do emulador; As instrues so codicadas em um inteiro, podendo ter dois, um ou nenhum operando, que o caso das instrues RET e HALT.

Os operandos podem ser uma posio de memria (M, codicado como inteiro) ou um registrador (R, codicado como um inteiro entre 0 e 7). O conjunto de instrues o mesmo da mquina anterior, conforme a Tabela 1. As operaes marcadas com * atualizam o valor do PSW.
Cd 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 Smbolo LOAD STORE READ WRITE COPY ADD SUB AND OR XOR NOT JMP JZ JNZ JN JP PUSH POP CALL Operandos RM RM R R R1 R2 R1 R2 R1 R2 R1 R2 R1 R2 R1 R2 R1 M M M M M R R M Signicado Carrega Registrador Armazena Registrador L valor para registrador Escreve contedo do registrador Copia registrador Soma dois registradores Subtrai dois registradores AND(bit a bit) de dois registradores OR(bit a bit) de dois registradores XOR(bit a bit) de dois registradores NOT(bit a bit) de um registrador Desvio incondicional Desvia se zero Desvia se no zero Desvia se negativo Desvia se positivo Empilha valor do registrador Desempilha valor no registrador Chamada de subrotina Ao Reg [R] M em[M + P C ] M em[M + P C ] Reg [R] Reg [R] valor lido Imprime Reg [R] Reg [R1] Reg [R2] * Reg [R1] Reg [R1] + Reg [R2] * Reg [R1] Reg [R1] Reg [R2] * Reg [R1] Reg [R1] AND Reg [R2] * Reg [R1] Reg [R1] OR Reg [R2] * Reg [R1] Reg [R1] XOR Reg [R2] * Reg [R1] NOT Reg [R1] * PC PC + M Se P SW [zero], P C P C + M Se !P SW [zero], P C P C + M Se P SW [negativo], P C P C + M Se !P SW [negativo] e !P SW [zero], P C P C + M SP SP 1 M em[SP ] Reg [R] Reg [R] M em[SP ] SP SP + 1 SP SP 1 M em[SP ] P C PC PC + M P C M em[SP ] SP SP + 1

20 21

RET HALT

Retorno de subrotina Parada

Tabela 1: Instrues da Mquina de Khattab Alm das instrues acima, existem tambm as pseudo-instrues WORD e END: WORD A Usada para alocar uma posio de memria cujo valor ser A, ou seja, quando houver tal instruo, a posio de memria que est sendo referenciado pelo PC dever receber o valor A END Indica o nal do programa para o montador. BEGINMACRO Indica o incio da denio de uma macro. ENDMACRO Indica o m da denio de uma macro.

Descrio do Editor de Ligao

Os principais objetivos do Editor de Ligao a ser projetado e implementado neste trabalho so: Permitir relocao de programas: endereo de carga de programa deve ser denido somente aps a traduo. Permitir traduo separada: os mdulos de um programa so montados separadamente e depois combinados para formar um nico programa objeto. 3

Algumas informaes importantes sobre a implementao so: Dever ser feita uma modicao no montador implementado no Trabalho Prtico 2 para que ele gere informaes que sero utilizadas na relocao e ligao dos programas. Dever ser implementado o editor de ligao que combine os diversos sub-programas que foram montados independentemente. Deve-se tomar cuidado para que no momento da ligao, o trecho de cdigo correspondente funo main, ou seja, o ponto de incio do programa, esteja no incio do cdigo objeto nal, para que o objeto gerado possa ser executado com o valor inicial de PC correspondendo a zero. No necessrio considerar situaes em que o PC seja iniciado com valor diferente de zero. Para a implementao do editor de ligao, informao adicional precisa ser gerada pelo montador do trabalho prtico 2. Alm de no gerar erros no segundo passo da montagem, devido a smbolos desconhecidos, o arquivo gerado deve conter a tabela de smbolos do programa. O programa gerado pelo montador, portanto, no necessariamente executvel, mas um formato que servir de entrada para o editor de ligao, que deve realizar as 3 tarefas conforme descritas no captulo 7 do livro texto: alocao, ligao e relocao, produzindo, assim, a partir de 1 ou mais arquivos gerados pelo montador, 1 programa executvel nico, no formato que possa ser carregado e executado na mquina virtual do trabalho prtico 1.

Descrio da Tarefa

Os alunos devero modicar o montador e implementar o editor de ligao denido acima. Alm disso, devero ser criados dois programas de testes, obrigatoriamente contendo mais de um mdulo cada um, a saber: Calculadora: Programa que l trs nmeros (a, b, c ) e realiza as operaes adio, subtrao, multiplicao, diviso inteira (imprimindo o quociente e o resto) e exponenciao. Onde: b a operao a ser realizada: b =1: adio; b =2: subtrao; b =3: multiplicao; b =4: diviso inteira (imprimindo o quociente e o resto); b =5:exponenciao; a e c so os valores aos quais a operao ser realizada; Cada operao deve ser implementada em um mdulo diferente. Nmero Primo: Programa que l um nmero n e imprime o primeiro nmero primo maior que n. A implementao desses programas de teste sero avaliados, portanto no devem ser compartilhados entre os colegas. Por outro lado, outros programas de teste adicionais podem ser compartilhados. Lembre-se de colocar todos os testes (inclusive os obrigatrios) no diretrio tst/ e de cit-los em sua documentao.

Formato da Entrada de Dados

O formato de entrada do montador modicado exatamente igual ao formato utilizado no montador implementado no trabalho prtico 02. A entrada do editor de ligao deve seguir algum formato intermedirio que combine cdigo de mquina com as informaes geradas pelo montador modicado. Exemplo: Programa principal contido no arquivo main.amk: READ R0 READ R1 STORE R0 A STORE R1 B LOAD R0 ZERO LOAD R1 ZERO CALL CALC HALT A: WORD 0 B: WORD 0 ZERO: WORD 0 END Mdulo de clculo contido no arquivo calculo.amk: CALC: LOAD R5 A LOAD R6 B SUB R5 R6 JN MB MA: LOAD R7 A JMP OK MB: LOAD R7 B OK: WRITE R5 WRITE R6 WRITE R7 RET END Para um teste inicial do seu editor de ligao, utilize o programa acima. Ateno: Tal programa no testa todas as instrues e no deve ser utilizado como nico teste do seu programa. A sada do Editor de Ligao deve ser submetida a MK para garantir que o programa foi traduzido corretamente.

Formato da Sada de Dados

Esse formato dever ser especicado por cada aluno como deciso de projeto. Basicamente, dever ser considerado o fato de que o montador modicado dever disponibilizar tanto o cdigo traduzido quanto informaes necessrias para o processo de ligao. A sada do editor de ligao um programa objeto no formato aceito pela mquina virtual implementada no Trabalho Prtico 01.

Formato de Chamada do Editor de Ligao


n nomes de arquivos de entrada: contendo os mdulos objetos a serem ligados informados como os n primeiros argumentos na chamada da aplicao. Nome do arquivo que contm o programa principal: informado por meio da opo -m. Nome do arquivo de sada do editor de ligao: informado por meio da opo -o.

O editor de ligao receber n + 2 argumentos quando da sua chamada:

Exemplo: ./ligador modulo1.mmk modulo2.mmk modulo3.mmk -m main.mmk -o programa.mk A chamada acima tem a seguinte semntica: executar o editor de ligao para relocar e ligar os mdulos escritos nos arquivos (modulo1.amk, modulo2.amk, modulo3.amk e main.amk), sendo que o arquivo amk.o contm o programa principal. A sada deve ser escrita no arquivo programa.mk. Note que a nica sada de dados do programa o arquivo de sada. No necessrio imprimir informaes na tela.

Sobre a Documentao
Deve conter as decises de projeto. Deve conter as informaes de como executar o programa. Obs.: necessrio cumprir os formatos denidos acima para a execuo, mas tais informaes devem estar presentes tambm na documentao. No incluir o cdigo fonte no arquivo de documentao. Deve conter elementos que comprovem que o programa foi testado (e.g. imagens da telas de execuo). Os arquivos relativos a testes devem ser enviados no pacote do trabalho, conforme descrito na Seo 2. A documentao deve conter referncias a esses arquivos, explicao do que eles fazem e dos resultados obtidos.

10

Consideraes Finais

As decises de projeto devem fazer parte apenas da estrutura interna do seu programa, no podendo afetar a interface de entrada e sada, com exceo da sada do montador modicado, que ser baseada em uma deciso particular de projeto. Aps a implementao deste trabalho, tem-se um conjunto de ferramentas com as quais possvel escrever um programa em uma linguagem de alto nvel e traduzi-lo para a linguagem que a mquina virtual reconhece, seguindo os passos abaixo: 1. Executar o Expansor de Macros em cada um dos mdulos do programa. 2. Executar o Montador em cada um dos arquivos obtidos no passo anterior. 3. Executar o Editor de Ligao, obtendo-se o programa objeto nico. 4. Executar a Mquina Virtual, tendo como entrada o programa objeto gerado na etapa anterior. A Figura 1 mostra o uxo esquemtico dessas operaes.
modulo1m.amk modulo1.amk modulo1.mmk

modulo2m.amk

Expansor de Macros

modulo2.amk

Montador

modulo2.mmk

Editor de Ligao

programa.mk

Emulador

modulo3m.amk

modulo3.amk

modulo3.mmk

Figura 1: Fluxo de operao das ferramentas implementadas nos trabalhos prticos. As extenses dos arquivos so apenas convenes para facilitar a identicao dos tipos de arquivos. No caso desse exemplo, as extenses so: .amk: Arquivo com linguagem assembly da Mquina de Khattab. .mmk: Arquivo intermedirio que o novo montador deve gerar e ser lido pelo editor de ligao. Esse formato deve ser especicado pelo aluno e devidamente documentado. .mk: Arquivo binrio executvel da da Mquina de Khattab que ser executado pelo emulador.

Você também pode gostar