Baixe o app para aproveitar ainda mais
Prévia do material em texto
LINGUAGEM DE MÁQUINA LINGUAGEM DE MÁQUINA E LINGUAGEM ASSEMBLYE LINGUAGEM ASSEMBLY 77oo P. Engenharia de Computação P. Engenharia de Computação FACIT / 2018FACIT / 2018 LABORATÓRIO DE LABORATÓRIO DE SOFTWARE BÁSICOSOFTWARE BÁSICO Prof. Maurílio J. InácioProf. Maurílio J. Inácio LINGUAGEM DE MÁQUINA E LINGUAGEM ASSEMBLY Introdução Diferente da linguagem de máquina, a linguagem de montagem (ou assembly) é implementada por tradução e não por interpretação. Os tradutores convertem um programa escrito em linguagem-fonte para uma linguagem- alvo (ou linguagem-objeto). Tradução é usada quando há um processador (de hardware ou de software) disponível para a linguagem-fonte, mas não para a linguagem-alvo. 2 LINGUAGEM DE MÁQUINA E LINGUAGEM ASSEMBLY Introdução 3 Programa escrito em linguagem- fonte (programa fonte) Programa escrito em linguagem- alvo (programa objeto) Tradução Execução Programa escrito em linguagem- fonte (programa fonte) Interpretação e execução LINGUAGEM DE MÁQUINA E LINGUAGEM ASSEMBLY Introdução Tradutor: Vantagem: execução mais rápida. Desvantagem: programas fonte maiores e mais rígidos. Interpretador: Vantagem: programas fonte menores e mais fexíveis. Desvantagem: execução mais lenta. De modo geral, os tradutores podem ser divididos em dois grupos, dependendo da relação existente entre a linguagem-fonte e a linguagem-alvo: montadores e compiladores. 4 LINGUAGEM DE MÁQUINA E LINGUAGEM ASSEMBLY Introdução Montador ou assembler é utilizado quando a linguagem-fonte (chamada linguagem de montagem ou assembly) for uma representação simbólica para uma linguagem de máquina. Compilador é utilizado quando a linguagem- fonte for uma linguagem de alto nível (Java, C, etc.) e a linguagem-alvo for uma linguagem de máquina ou uma representação simbólica dessa linguagem. É possível na compilação de um programa escrito em linguagem C, por exemplo, optar por gerar o código de máquina e também o código do montador (assembler). 5 LINGUAGEM DE MÁQUINA E LINGUAGEM ASSEMBLY Linguagem de montagem Uma linguagem de montagem pura é aquela na qual cada comando produz, exatamente, uma instrução de máquina (correspondência um-para- um). Um programa em linguagem de montagem de n linhas produzirá um programa de linguagem de máquina de n palavras. É mais fácil (?) programar em linguagem de montagem do que em linguagem de máquina. Na linguagem de montagem usam-se nomes simbólicos para comandos e endereços (ADD, MOV, L1, etc.) ao invés de códigos numéricos (binário, octal ou hexadecimal) usados na linguagem de máquina. 6 LINGUAGEM DE MÁQUINA E LINGUAGEM ASSEMBLY Linguagem de montagem O programador da linguagem de montagem, e também o de linguagem de máquina, tem acesso a todas as características e todas as instruções da máquina-alvo. Esta é uma vantagem em relação a programação em alto nível. Algumas linguagens para programação de sistemas, como a linguagem C, estão numa fronteira entre as linguagens de alto nível e as linguagens de baixo nível. Seus programadores programam em alto nível mas têm acesso a recursos de baixo nível da máquina. 7 LINGUAGEM DE MÁQUINA E LINGUAGEM ASSEMBLY Linguagem de montagem Um programa em linguagem de montagem só pode rodar em uma determinada família de máquinas, enquanto um programa de alto nível tem potencial para rodar em diversas máquinas com arquiteturas diferentes. 8 LINGUAGEM DE MÁQUINA E LINGUAGEM ASSEMBLY Programação em linguagem de montagem Diferenças em programar em linguagem de montagem, em relação a programar em linguagem de alto nível: é uma tarefa mais difícil. consome muito mais tempo. tem depuração mais demorada. a manutenção também é mais difícil. Por que alguém programaria em linguagem de montagem? Há duas razões possíveis ... Por razão de performance: produz-se código de máquina muito menor e muito mais rápido. 9 LINGUAGEM DE MÁQUINA E LINGUAGEM ASSEMBLY Programação em linguagem de montagem a maioria das aplicações embutidas, como código de cartões inteligente (smart cards), código de um telefone celular, drivers de dispositivos, rotinas de BIOS, laços internos de aplicações de desempenho critico, exigem velocidade de processamento. Por razão de acesso aos recursos da máquina alguns procedimentos precisam de acesso completo ao hardware. por exemplo, as rotinas do sistema operacional para tratamento das interrupções e exceções de baixo nível, rotinas dos controladores de dispositivos dos sistemas embutidos que rodam em tempo real caem nessa categoria. 10 LINGUAGEM DE MÁQUINA E LINGUAGEM ASSEMBLY Programação em linguagem de montagem Existe uma solução híbrida para programação conhecida como sintonia ou ajuste: desenvolve-se o programa em linguagem de alto nível (tarefa mais rápida e simples). depois otimiza-se o código re-escrevendo os trechos de programas que consomem mais tempo de processamento em linguagem de montagem (o que aumenta a efciência do programa). Isto requer um estudo prévio dos tempos gastos no processamento do programa. 11 LINGUAGEM DE MÁQUINA E LINGUAGEM ASSEMBLY Programação em linguagem de montagem 12 - Comparação entre programação em linguagem de montagem e linguagem de alto nível LINGUAGEM DE MÁQUINA E LINGUAGEM ASSEMBLY Programação em linguagem de montagem Além da efciência e acesso a recursos de hardware, o uso da linguagem de montagem é importante para: enfrentar problemas de falta de memória em dispositivos embarcados. escrever compiladores em conjunto com seus montadores. se conhecer melhor uma determinada máquina. "Para estudantes de arquitetura de computadores, escrever um pouco de código em linguagem de montagem é a única maneira de ter uma ideia de como realmente são as máquinas no nível da arquitetura” (Tanenbaum, 2007). 13 LINGUAGEM DE MÁQUINA E LINGUAGEM ASSEMBLY Formato de declarações em linguagem de montagem Linguagens de montagens para máquinas diferentes e níveis diferentes são razoavelmente parecidas. Declarações em linguagem de montagem têm, geralmente, quatro partes: um campo para rótulo ou label. um campo de código de operação ou opcode. um campo de operandos. um campo de comentários. 14 LINGUAGEM DE MÁQUINA E LINGUAGEM ASSEMBLY Formato de declarações em linguagem de montagem 15 - Fragmento de programa em linguagem de montagem para o Pentium 4. LINGUAGEM DE MÁQUINA E LINGUAGEM ASSEMBLY Formato de declarações em linguagem de montagem 16 - Fragmento de programa em linguagem de montagem para o Motorola 680x0. LINGUAGEM DE MÁQUINA E LINGUAGEM ASSEMBLY Formato de declarações em linguagem de montagem 17- Fragmento de programa em linguagem de montagem para o UltraSparc. LINGUAGEM DE MÁQUINA E LINGUAGEM ASSEMBLY Formato de declarações em linguagem de montagem Os fragmentos de programa anteriores têm 4 labels: Fórmula, I, J e N. Labels tem a função de permitir o uso de nomes simbólicos para endereços de memória. São necessários em alguns comandos executáveis, porque esses comandos podem ser o alvo de desvios e também necessários para palavras de dados, para que os dados lá armazenados possam ser acessíveis por meio de nome simbólico. Cada máquina tem, obrigatoriamente, um conjunto de registradores, que recebem nomes muito diferentes. 18 LINGUAGEM DE MÁQUINA E LINGUAGEM ASSEMBLY Formato de declarações em linguagem de montagem Exemplos: Pentium 4: EAX, EBX, ECX. Motorola: D0, D1, D2. UltraSparc: %R1, %R2. O campo de comentário não tem infuência alguma no processo de montagem ou no processo de geração do programa (usado apenas para fns de documentação). 19 LINGUAGEM DE MÁQUINA E LINGUAGEM ASSEMBLY Pseudo-instruções Além de especifcar as instruções de máquina a serem executadas, um programa escrito em linguagem de montagem também pode contercomandos para o próprio montador. Essas instruções podem, por exemplo, solicitar que ele reserve um espaço de memória ou faça que a listagem que estiver sendo impressa salte para uma nova página. Esses comandos para o próprio montador são conhecidos como pseudo- instruções ou diretivas do assembler. Pseudo-instruções são, geralmente, específcas em cada montador. 20 LINGUAGEM DE MÁQUINA E LINGUAGEM ASSEMBLY Pseudo-instruções Exemplo: Microsoft MASM (assembler da Intel para a família Pentium). As pseudo-instruções não são ditadas pela arquitetura para a qual o montador se destina, e sim pelo gosto do escritor do montador. 21 LINGUAGEM DE MÁQUINA E LINGUAGEM ASSEMBLY Pseudo-instruções 22 - Algumas pseudo-instruções disponíveis no MASM. LINGUAGEM DE MÁQUINA E LINGUAGEM ASSEMBLY Pseudo-instruções 23 - Algumas pseudo-instruções disponíveis no MASM. LINGUAGEM DE MÁQUINA E LINGUAGEM ASSEMBLY Pseudo-instruções Exemplo de usos de pseudo-instruções: WORDSIZE EQU 16 IF WORDSIZE GT 16 WSIZE: DD 32 ELSE WSIZE: DD 16 ENDIF 24 LINGUAGEM DE MÁQUINA E LINGUAGEM ASSEMBLY Macros Programadores de linguagem de montagem frequentemente precisam repetir sequências de instruções várias vezes dentro de um programa. Uma maneira óbvia de fazer isso é re-escrever as instruções onde forem necessárias. Quando se faz necessário repetir várias vezes uma mesma sequência de instruções no programa de montagem, uma alternativa é usar uma macro. 25 LINGUAGEM DE MÁQUINA E LINGUAGEM ASSEMBLY Macros 26 - Código de linguagem de montagem sem macro (a) e com macro (b). LINGUAGEM DE MÁQUINA E LINGUAGEM ASSEMBLY Macros Entende-se por defnição de macro a maneira de se atribuir um nome a uma parte do código de um programa escrito na linguagem de montagem Após a defnição de uma macro, o programador pode escrever o nome da macro em vez das instruções que a compõem. Assim, uma macro nada mais é do que uma abreviatura para uma parte do código. 27 LINGUAGEM DE MÁQUINA E LINGUAGEM ASSEMBLY Macros Embora montadores diferentes tenham notações diferentes para defnir macros, em geral, uma macro contém sempre: Um cabeçalho de macro informando o nome da macro. Um texto, englobando as instruções do corpo da macro. Uma pseudo-instrução (por exemplo: ENDM) para marcar o fm da macro. O uso do nome da macro como se fosse um código de operação é conhecido como chamada da macro. A substituição pelo corpo da macro é chamada expansão da macro. 28 LINGUAGEM DE MÁQUINA E LINGUAGEM ASSEMBLY Macros A expansão ocorre durante o processo de montagem e não durante a execução do programa. Chamadas de macro não podem ser confundidas com chamadas procedimentos (ou chamada de funções). A diferença básica é que uma chamada de macro é uma instrução para o montador substituir o nome da macro pelo corpo da macro. Uma chamada de procedimento é uma instrução de máquina que é inserida no programa objeto e que mais tarde será executada para chamar o procedimento. 29 LINGUAGEM DE MÁQUINA E LINGUAGEM ASSEMBLY Macros 30 - Comparação entre chamadas de macro e chamadas de procedimento. LINGUAGEM DE MÁQUINA E LINGUAGEM ASSEMBLY Macros Os montadores de macro tratam a questão de sequências de instruções quase idênticas permitindo que a defnição de macro forneçam: parâmetros formais. parâmetros reais. Quando uma macro é expandida, cada parâmetro formal que parece no corpo da macro é substituído pelo correspondente parâmetro real. 31 LINGUAGEM DE MÁQUINA E LINGUAGEM ASSEMBLY Macros 32 - Sequência de declarações quase idênticas. (a) sem macro (b) com macro. LINGUAGEM DE MÁQUINA E LINGUAGEM ASSEMBLY Características avançadas Um problema que ocorre com todos os montadores que suportam macros é a duplicação de rótulos (labels). Se a macro é chamada duas ou mais vezes, o label será duplicado causando um erro de montagem. Uma solução é que fazer com que o programador forneça um nome do label diferente em cada chamada, como um parâmetro. Outra solução é permitir a declaração do label como sendo LOCAL e que o montador gere automaticamente um novo label a cada expansão. Alguns montadores têm uma regra que impõe que labels numéricos sejam automaticamente locais. 33 LINGUAGEM DE MÁQUINA E LINGUAGEM ASSEMBLY Características avançadas O MASM e grande parte de outros montadores permitem que macros sejam defnidas dentro de outras macros, o que é muito útil em combinação com montagem condicional. Exemplo: M1 MACRO IF WORDSIZE GT 16 M2 MACRO ... ENDM ELSE M3 MACRO ... ENDM ENDIF ENDM 34 LINGUAGEM DE MÁQUINA E LINGUAGEM ASSEMBLY Implementação de um processador de macros Para implementar a facilidade de macro, um montador deve ser capaz de executar duas funções: Salvar as defnições das macros, geralmente usando tabelas que guardam os nomes, os parâmetros formais e o corpo das macros. Expandir as chamadas das macros, sempre que o montador encontra uma defnição de macro ele lê o corpo da macro e insere essas instruções, com parâmetros formais trocados pelos reais, no programa em linguagem de montagem. 35 Slide 1 Slide 2 Slide 3 Slide 4 Slide 5 Slide 6 Slide 7 Slide 8 Slide 9 Slide 10 Slide 11 Slide 12 Slide 13 Slide 14 Slide 15 Slide 16 Slide 17 Slide 18 Slide 19 Slide 20 Slide 21 Slide 22 Slide 23 Slide 24 Slide 25 Slide 26 Slide 27 Slide 28 Slide 29 Slide 30 Slide 31 Slide 32 Slide 33 Slide 34 Slide 35
Compartilhar