12.07.2015 Views

Instruções de uso do montador DAEDALUS

Instruções de uso do montador DAEDALUS

Instruções de uso do montador DAEDALUS

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Instruções</strong> <strong>de</strong> <strong>uso</strong> <strong>do</strong> monta<strong>do</strong>r <strong>DAEDALUS</strong>(baseadas em texto extraí<strong>do</strong> da monografia apresentada como trabalho <strong>de</strong>diplomação no curso <strong>de</strong> Bacharela<strong>do</strong> em Ciência da Computação por Luís Ricar<strong>do</strong>Schwengber, sob orientação <strong>do</strong> Professor Raul Fernan<strong>do</strong> Weber)Porque usar um monta<strong>do</strong>r?Quan<strong>do</strong> a complexida<strong>de</strong> <strong>do</strong> conjunto <strong>de</strong> instruções <strong>de</strong> um computa<strong>do</strong>r e o tamanho <strong>do</strong>sprogramas que precisamos <strong>de</strong>senvolver aumentam, a correção <strong>de</strong> erros nos programas escritosem linguagem simbólica fica mais difícil. No caso <strong>do</strong>s simula<strong>do</strong>res usa<strong>do</strong>s em nosso curso, nomo<strong>do</strong> <strong>de</strong> en<strong>de</strong>reçamento direto não é possível o <strong>uso</strong> <strong>de</strong> en<strong>de</strong>reços simbólicos, ou seja, nãopo<strong>de</strong>mos fazer referência a posições <strong>de</strong> memória através <strong>de</strong> nomes; precisamos colocar ospróprios en<strong>de</strong>reços. Quan<strong>do</strong> é preciso inserir instruções no meio <strong>do</strong> código, todas asinstruções que referenciam en<strong>de</strong>reços posteriores a ponto <strong>de</strong> inserção normalmente precisamser modificadas. Com um monta<strong>do</strong>r, são usa<strong>do</strong>s nomes associa<strong>do</strong>s às instruções ouvariáveis/constantes que as instruções referenciam. Quan<strong>do</strong> a posição <strong>de</strong>stas na memóriamuda, o próprio monta<strong>do</strong>r se encarrega <strong>de</strong> recalcular os en<strong>de</strong>reços e acertar as referências nasinstruções. Além disso, um monta<strong>do</strong>r representa uma ferramenta indispensável para se<strong>de</strong>senvolver programas com maior robustez e confiabilida<strong>de</strong>. Para tanto, é necessário embutirno mesmo recursos que tornem mais natural a tarefa <strong>de</strong> codificação da linguagem simbólica, oque é feito através <strong>de</strong>:• Possibilida<strong>de</strong> <strong>de</strong> <strong>de</strong>claração <strong>de</strong> rótulos, que são usa<strong>do</strong>s para <strong>de</strong>signar tanto valores <strong>de</strong>variáveis/constantes como instruções. Um rótulo correspon<strong>de</strong> a uma posição <strong>de</strong> memória esubstitui um en<strong>de</strong>reço, seja este <strong>de</strong> um operan<strong>do</strong> ou um en<strong>de</strong>reço <strong>de</strong> <strong>de</strong>svio.• Existência <strong>de</strong> diretivas <strong>de</strong> montagem, também <strong>de</strong>nominadas pseu<strong>do</strong>-instruções oucoman<strong>do</strong>s <strong>do</strong> monta<strong>do</strong>r. A maioria das diretivas são usadas para controlar a montagem <strong>do</strong>programa objeto (usadas somente em tempo <strong>de</strong> montagem) e não geram código. Outrassão usadas para gerar variáveis e constantes, atribuin<strong>do</strong> nomes às mesmas e <strong>de</strong>finin<strong>do</strong> seusvalores (ou simplesmente reservan<strong>do</strong> espaço para elas, no caso <strong>de</strong> variáveis nãoinicializadas).Para uma mesma arquitetura po<strong>de</strong> haver várias implementações diferentes <strong>de</strong> ummonta<strong>do</strong>r. Normalmente, os mesmos mnemônicos são aceitos por todas as implementações,<strong>de</strong> mo<strong>do</strong> que haverá diferença entre as implementações apenas na quantida<strong>de</strong> e qualida<strong>de</strong> dasaplicações das diretivas.Formato <strong>de</strong> uma linha <strong>de</strong> código fonte:Um programa fonte para o monta<strong>do</strong>r Daedalus é composto por uma série <strong>de</strong> linhas <strong>de</strong>código fonte, cada linha conten<strong>do</strong> instruções ou diretivas <strong>do</strong> monta<strong>do</strong>r.Linhas conten<strong>do</strong> instruçõesUma linha <strong>de</strong> instrução contém um mnemônico <strong>de</strong> uma instrução e irá gerarexatamente uma instrução <strong>de</strong> máquina. Seu formato geral apresenta vários campos. Oscoloca<strong>do</strong>s entre colchetes no formato abaixo são opcionais:[RÓTULO:] MNEMÔNICO [OPERANDOS] [;COMENTÁRIO]• Um campo <strong>de</strong> rótulo é um símbolo <strong>de</strong>fini<strong>do</strong> pelo usuário ao qual é atribuí<strong>do</strong> o valorcorrente <strong>do</strong> conta<strong>do</strong>r <strong>de</strong> programa, e que é introduzi<strong>do</strong> na tabela <strong>de</strong> símbolos <strong>do</strong> monta<strong>do</strong>r.


2Portanto um rótulo não po<strong>de</strong> ser re<strong>de</strong>fini<strong>do</strong>. O rótulo <strong>de</strong>ve começar na primeira posição dalinha (coluna 1) e <strong>de</strong>ve ser segui<strong>do</strong> por um caractere <strong>do</strong>is-pontos (:), que não faz parte <strong>do</strong>rótulo. Para criar os rótulos, veja as regras <strong>de</strong> formação <strong>de</strong> símbolos, adiante.• Um campo <strong>de</strong> mnemônico i<strong>de</strong>ntifica uma instrução <strong>de</strong> uma das máquinas <strong>de</strong>scritas(Ramses ou Cesar) e correspon<strong>de</strong> a uma única instrução executável. Deve ser coloca<strong>do</strong>após o ":" que segue o rótulo, separa<strong>do</strong> <strong>de</strong>ste por pelo menos um espaço. Se não houverrótulo na linha, o mnemônico <strong>de</strong>ve começar pelo menos na coluna 2.• Campos <strong>de</strong> operan<strong>do</strong> po<strong>de</strong>m conter zero ou mais operan<strong>do</strong>s separa<strong>do</strong>s conforme a notaçãovista em aula para o código simbólico <strong>de</strong> cada instrução. A quantida<strong>de</strong> <strong>de</strong> operan<strong>do</strong>s<strong>de</strong>pen<strong>de</strong> da instrução especificada pelo mnemônico. Os operan<strong>do</strong>s <strong>de</strong>vem ser separa<strong>do</strong>s <strong>do</strong>mnemônico por pelo menos um espaço.• Um campo <strong>de</strong> comentário começa com um ponto-e-vírgula (;) e termina com o caractere<strong>de</strong> nova linha. Ele <strong>de</strong>ve ser separa<strong>do</strong> <strong>do</strong>s operan<strong>do</strong>s - se existirem - ou <strong>do</strong> mnemônico - senão houver operan<strong>do</strong>s - por pelo menos um espaço.Linhas conten<strong>do</strong> instruçõesUma linha <strong>de</strong> diretiva também contém vários campos opcionais:[NOME:] DIRETIVA [OPERANDOS] [;COMENTÁRIO]Diferente <strong>de</strong> um campo <strong>de</strong> mnemônico, uma diretiva (pseu<strong>do</strong>-instrução) <strong>de</strong>senvolvealguma função durante o processo <strong>de</strong> montagem, não produzin<strong>do</strong> qualquer código executável,mas po<strong>de</strong> reservar e inicializar espaço <strong>de</strong> da<strong>do</strong>s <strong>do</strong> programa. Para criar os nomes usa<strong>do</strong>s nasdiretivas, veja as regras <strong>de</strong> formação <strong>de</strong> símbolos, adiante.Dentre as várias diretivas implementadas encontram-se as seguintes:Diretiva:Função:DBreserva um byte para variáveis, permitin<strong>do</strong> opcionalmente inicializá-las comum valor <strong>de</strong>cimal ou hexa.Formato: [nome-variável] DB valorInicialDiretiva:Função:DWreserva <strong>do</strong>is bytes (uma palavra <strong>do</strong> processa<strong>do</strong>r César = 16 bits) para variáveis,permitin<strong>do</strong> opcionalmente inicializá-las com um valor <strong>de</strong>cimal ou hexa.Formato: [nome-variável] DW valorInicialDiretiva:Função:DABreserva um array <strong>de</strong> bytes (8 bits) para variáveis, permitin<strong>do</strong> opcionalmenteinicializá-las valores <strong>de</strong>cimais ou hexa<strong>de</strong>cimais. O usuário po<strong>de</strong> especificar umnúmero entre parênteses, o que gerará um array inician<strong>do</strong> na posição <strong>de</strong>memória referenciada pelo nome da variável e com o valor padrão 0 <strong>de</strong>


3tamanho <strong>de</strong> 1 byte, ou então <strong>de</strong>finir os elementos <strong>do</strong> array utilizan<strong>do</strong> ossepara<strong>do</strong>res <strong>de</strong>fini<strong>do</strong>s.Formato: [nome-variável] DAB valor1,valor2,...,valorN ou[nome-variável] DAB [númeroDeBytes]Diretiva:Função:DAWreserva um array <strong>de</strong> palavras (16 bits) para variáveis, permitin<strong>do</strong>opcionalmente inicializá-las com valores <strong>de</strong>cimais ou hexa<strong>de</strong>cimais.In<strong>de</strong>pen<strong>de</strong>nte da máquina será gera<strong>do</strong> um array usan<strong>do</strong>-se a notação bigendian. O usuário po<strong>de</strong> especificar um número entre parênteses, o que geraráum array inician<strong>do</strong> na posição <strong>de</strong> memória referenciada pelo nome da variávele com o valor padrão 0 <strong>de</strong> tamanho <strong>de</strong> 2 bytes, ou então <strong>de</strong>finir os elementos <strong>do</strong>array utilizan<strong>do</strong> os separa<strong>do</strong>res <strong>de</strong>fini<strong>do</strong>s.Formato: [nome-variável] DAW valor1,valor2,...,valorN ou[nome-variável] DAW [númeroDeWord’s]Diretiva:Função:Formato:ORGAltera o valor <strong>do</strong> conta<strong>do</strong>r <strong>de</strong> posição. Após encontrar um diretiva ORG, omonta<strong>do</strong>r passa a colocar o código gera<strong>do</strong> a partir <strong>do</strong> en<strong>de</strong>reço especifica<strong>do</strong>pelo ORG. Essa diretiva é útil para separar a área <strong>de</strong> códigos da <strong>de</strong> variáveis. Omonta<strong>do</strong>r toma o cuida<strong>do</strong> <strong>de</strong> emitir um aviso (Warning) sobre o fato <strong>de</strong> se estarsobrescreven<strong>do</strong> uma posição <strong>de</strong> memória já utilizada ou ainda estarultrapassan<strong>do</strong> o tamanho <strong>de</strong> memória existente da máquina específica.ORG posiçãoMemóriaSímbolos e ConstantesUm símbolo (usa<strong>do</strong> como rótulo <strong>de</strong> uma instrução ou nome nas diretivas que geramáreas <strong>de</strong> da<strong>do</strong>s, bem como para referenciar as mesmas nas instruções) po<strong>de</strong> conter até 1024caracteres, mas é recomendável utilizar poucos para não comprometer a performance <strong>de</strong>gerência <strong>de</strong> strings. As regras para a <strong>de</strong>finição <strong>de</strong> um símbolo são:• O primeiro caractere não po<strong>de</strong> ser numérico;• Os outros caracteres po<strong>de</strong>m ser a-z, A-Z, 0-9 e sublinha ( _ );Constantes são usadas na codificação <strong>de</strong> instruções e na <strong>de</strong>finição <strong>de</strong> valores emdiretivas. Uma constante po<strong>de</strong> ser representada por um valor <strong>de</strong>cimal, escrito em sua formanatural ou então por um valor hexa<strong>de</strong>cimal (cujo primeiro dígito <strong>de</strong>ve ser numérico),representa<strong>do</strong> com o valor precedi<strong>do</strong> pela letra H. Nas diretivas DB, DW, DAB e DAW po<strong>de</strong>madicionalmente ser utiliza<strong>do</strong>s caracteres ASCII individuais (entre apóstrofes, como em 'A').


4Exemplos:MOV #15,R0LDR A #15MOV #H0ABC,2002DB 5DB H1ADW 0DW H2A1DAB 10, H15, 5, H0DDAW 65000, H0FFFDB 'A'DB 'A','B','C'DW 'A'ImplementaçãoO programa monta<strong>do</strong>r foi <strong>de</strong>senvolvi<strong>do</strong> na linguagem Object Pascal, a<strong>do</strong>tada pelaferramenta <strong>de</strong> <strong>de</strong>senvolvimento Delphi, versão 4.0 (build 5.33) da Borland InpriseCorporation.A interface básica oferece a possibilida<strong>de</strong> <strong>de</strong> edição <strong>de</strong> arquivos fonte que po<strong>de</strong>m sercarrega<strong>do</strong>s <strong>de</strong> arquivos grava<strong>do</strong>s anteriormente pelo monta<strong>do</strong>r ou escritos <strong>de</strong>s<strong>de</strong> seu início.Para obter-se o mapa <strong>de</strong> memória gera<strong>do</strong> para uma máquina em específico basta escolher umadas opções disponíveis e clicar no botão para executar a montagem.As capturas <strong>de</strong> tela a seguir foram feitas com a versão preliminar <strong>do</strong> monta<strong>do</strong>r.Algumas características (máquinas alvo e nomes <strong>de</strong> diretivas) foram alteradas na versãoALFA, que está sen<strong>do</strong> colocada à disposição em ftp://inf.ufrgs.br/pub/inf108.Figura 3.1 - Edição e montagem <strong>de</strong> um arquivo fonteNa parte inferior da janela <strong>de</strong> edição existe um campo <strong>de</strong> saída, on<strong>de</strong> o programa exibeavisos eventualmente gera<strong>do</strong>s durante o processo <strong>de</strong> montagem. Ele é muito útil na


5verificação em tempo <strong>de</strong> programação das incoerências introduzidas no texto a ser utiliza<strong>do</strong>na montagem.É possível visualizar o mapa <strong>de</strong> memória gera<strong>do</strong> através <strong>do</strong> menu View <strong>do</strong> monta<strong>do</strong>r,sen<strong>do</strong> que se po<strong>de</strong> escolher valores hexa ou <strong>de</strong>cimais para sua apresentação. A visualização<strong>do</strong> mapa <strong>de</strong> memória da máquina hipotética CESAR, por ser <strong>de</strong> 64kbytes, po<strong>de</strong> ser um tanto<strong>de</strong>morada, mas é feita apenas após um processo <strong>de</strong> montagem.Após a geração <strong>do</strong> mapa <strong>de</strong> memória é possível carregá-lo nos simula<strong>do</strong>res járeferencia<strong>do</strong>s, e cuja compatibilida<strong>de</strong> é garantida para cada máquina individualmente, semnecessida<strong>de</strong> <strong>de</strong> configurações quaisquer.Figura 3.2 - Carga <strong>do</strong> mapa <strong>de</strong> memória gera<strong>do</strong> num <strong>do</strong>s simula<strong>do</strong>res disponíveisListagem da tabela <strong>de</strong> símbolosO monta<strong>do</strong>r, além <strong>de</strong> gerar um mapa <strong>de</strong> memória compatível para a carga nossimula<strong>do</strong>res disponíveis, também gera em um arquivo <strong>de</strong>nomina<strong>do</strong> tabSimb.txt a listagem databela <strong>de</strong> símbolos e seus respectivos valores tanto em hexa como em <strong>de</strong>cimal.


6Figura 3.3 - Listagem da Tabela <strong>de</strong> Símbolos

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!