Baixe o app para aproveitar ainda mais
Prévia do material em texto
Linguagem de Montagem e Linguagem de Máquina. Prof. Wilfredo Blanco Figuerola ORGANIZAÇÃO DE COMPUTADORES E SISTEMAS OPERACIONAIS 2 Linguagem de Montagem e Linguagem de Máquina 24 de fevereiro de 2010 Tópicos Introdução Conceitos básicos História Arquitetura Linguagem de Máquina Elementos de uma instrução Representação e classificação de uma instrução Programação em Linguagem de Montagem/Assembly (8086) Arquitetura Sintaxes (Comentários, Instruções, Diretivas) Instruções Exemplo Montagem e Ligação de Programas. ORGANIZAÇÃO DE COMPUTADORES E SISTEMAS OPERACIONAIS 3 Linguagem de Montagem e Linguagem de Máquina 24 de fevereiro de 2010 Introdução Conceitos básicos Linguagem/Código de máquina: instruções que o processador é capaz de executar. Essas instruções, chamadas de código de máquina, são representadas por sequências de bits, normalmente limitadas pelo número de bits do registrador principal (8, 16, 32, 64 ou 128) da CPU. Linguagem de montagem ou assembly: notação legível por humanos para o código de máquina que uma arquitetura de computador específica utiliza. Tradutor: Programas que convertem um programa usuário escrito em alguma linguagem (fonte) para uma outra linguagem (alvo). Montador/Assembler: um tradutor onde a linguagem fonte é a linguagem de montagem e a linguagem alvo é a linguagem de máquina ORGANIZAÇÃO DE COMPUTADORES E SISTEMAS OPERACIONAIS 4 Linguagem de Montagem e Linguagem de Máquina 24 de fevereiro de 2010 Introdução Conceitos básico (resumo) Linguagem de montagem (símbolos/mnemônicos.) Linguagem/Código de Máquina Unidade de Processamento Central (CPU) Linguagem de alto nível (C, C++, Java, C#) Montador/Assembler Compilalor 1 1 1 N N = I+J; MOV EAX, I ADD EAX, J MOV N, EAX Pentium 4 ORGANIZAÇÃO DE COMPUTADORES E SISTEMAS OPERACIONAIS 5 Linguagem de Montagem e Linguagem de Máquina 24 de fevereiro de 2010 Introdução História Linguagem de montagem (segunda geração) Linguagens de alto nível Linguagem/Código de Máquina (primeira geração) (+)Complexidade (-) (-)Produtividade (+) Por que usar linguagem de montagem? (+)Desempenho(-) (+)acesso à máquina(-) Código menor e mais rápido • Cartão inteligente • Drivers • Tratadores de interrupções de baixo nível em um S.O. • Controladores em sistemas embutidos de tempo real ORGANIZAÇÃO DE COMPUTADORES E SISTEMAS OPERACIONAIS 6 Linguagem de Montagem e Linguagem de Máquina 24 de fevereiro de 2010 Introdução Arquitetura Arquitetura de computador = própria linguagem de máquina/linguagem de montagem. Funções de alto nível ≠ para cada arquitetura. Arquitetura Quantidade Registradores Bits Introduzido (Ano) 6502 3 8 1975 x86 16 16-32 1978 ARM 16 32 1983 IBM/360 16 32 1964 Z/Architecture 16 32-64 2000 UltraSPARC 32 64 1995 Alpha 32 64 1992 POWER 32 32-64 1992 x86-64 64 64 2000 Itanium 128 64 2001 MOV EAX, I ADD EAX, J MOV N, EAX Pentium 4 MOVE.L I, D0 ADD.L J, DO MOVE.L N, EAX Motorola 680x0 ORGANIZAÇÃO DE COMPUTADORES E SISTEMAS OPERACIONAIS 7 Linguagem de Montagem e Linguagem de Máquina 24 de fevereiro de 2010 Linguagem de Máquina Elementos de uma instrução Internamente, cada instrução é representada como uma seqüência de bits. Instrução é dividida em campos, correspondentes aos elementos de uma instrução. Cada instrução deve conter toda a informação necessária para que a CPU possa executá-la, ou seja: Código de operação: Especifica a operação a ser efetuada. Referência a operando fonte: Os dados envolvidos na operação devem estar referenciados na instrução. Referência a operando de destino: Deve-se fornecer informações que possibilite o armazenamento de qualquer resultado gerado pela instrução. (Binary: 10110000 01100001) MOV AL 61h Código de operação Referência a operando Referência a operando ORGANIZAÇÃO DE COMPUTADORES E SISTEMAS OPERACIONAIS 8 Linguagem de Montagem e Linguagem de Máquina 24 de fevereiro de 2010 Linguagem de Máquina Representação e classifição de uma instrucao Na maioria dos conjuntos de instruções, é usado mais de um formato de instruções!!! [ op | rs | rt | rd |shamt| funct ] -> tipo Registro [ op | target address ] -> tipo desvio Ex: arquitetura MIPS 6 5 5 5 5 6 total de 32bits [ op | rs | rt | rd |shamt| funct] 0 1 2 6 0 32 decimal 000000 00001 00010 00110 00000 100000 binário [ op | endereço destino ] 2 1024 decimal 000010 00000 00000 00000 10000 000000 binário R-tipo J-tipo ORGANIZAÇÃO DE COMPUTADORES E SISTEMAS OPERACIONAIS 9 Linguagem de Montagem e Linguagem de Máquina 24 de fevereiro de 2010 Linguagem de Máquina Representação e classifição de uma instrução Número de endereços por instrução constitui uma decisão de projeto importante. Poucos endereços por instrução instruções de menor extensão Instruções mais primitivas (CPU menos complexa) instruções por programa é maior (maior tempo de execução) Máquinas modernas empregam instruções de 2 ou 3 endereços, possibilitando flexibilidade para usar múltiplos registradores. [ op | rs | rt | rd |shamt| funct] 0 1 2 6 0 32 decimal 000000 00001 00010 00110 00000 100000 binário ORGANIZAÇÃO DE COMPUTADORES E SISTEMAS OPERACIONAIS 10 Linguagem de Montagem e Linguagem de Máquina 24 de fevereiro de 2010 Linguagem de Máquina Representação e classifição de uma instrucao Considere o comando: y=(A-B)(C+DE) ORGANIZAÇÃO DE COMPUTADORES E SISTEMAS OPERACIONAIS 11 Linguagem de Montagem e Linguagem de Máquina 24 de fevereiro de 2010 Linguagem de Máquina Representação e classifição de uma instrução Classificação de instruções de máquina : Processamento de dados: Instruções aritméticas e lógicas; Armazenamento de dados: Instruções de manipulação de memória; Movimentação de dados: Instruções de E/S; Controle: Instruções de teste e desvios. ORGANIZAÇÃO DE COMPUTADORES E SISTEMAS OPERACIONAIS 12 Linguagem de Montagem e Linguagem de Máquina 24 de fevereiro de 2010 Linguagem de Máquina Representação e classifição de uma instrução Dificuldade do programador lidar com representações binárias de instruções de máquina. Uso de uma representação simbólica: Os códigos de operação são representados por abreviações, chamadas mnemônicos. Ex.: ADD Adição SUB Subtração MPY Multiplicação Os operandos também são representados de maneira simbólica. Ex: ADD R, Y ORGANIZAÇÃO DE COMPUTADORES E SISTEMAS OPERACIONAIS 13 Linguagem de Montagem e Linguagem de Máquina 24 de fevereiro de 2010 Programação em Linguagem de Montagem/Assembly (8086) Arquitetura Registrador de Flags (Semáforos) Registrador com 16 bits. Os bits 0, 2, 4, 6, 7 e 11 contém flags de estado CPAZSTIDO XXXXXX X C – Carry P – Paridade A – Auxiliar Z – Zero S – Sinal O – Overflow ORGANIZAÇÃO DE COMPUTADORES E SISTEMAS OPERACIONAIS 14 Linguagem de Montagem e Linguagem de Máquina 24 de fevereiro de 2010 Programação em Linguagem de Montagem/Assembly (8086) Sintaxes (Comentários, Instruções, Diretivas) Comentários permitem que explicações sobre determinadas linhas de programa sejam realizadas sem ocasionar erro de compilação. Os comentários podem ser utilizados de três formas diferentes: como uma linha em branco; como uma linha iniciada com o caractere ponto e vírgula (;) e seguida de texto depois de uma instrução, bastando adicionar o caracter (;) para delimitar o início do comentário. Exemplos de comentários ; comentário como uma linha iniciada com ponto e vírgula MOV AX, 6fH ; comentário depois de uma instrução ORGANIZAÇÃO DE COMPUTADORES E SISTEMAS OPERACIONAIS 15 Linguagem de Montagem e Linguagem de Máquina 24de fevereiro de 2010 Programação em Linguagem de Montagem/Assembly (8086) Sintaxes (Comentários, Instruções, Diretivas) Sintaxe das Instruções [label:] mneumônico [operando(s)] [; comentário] Sintaxe das Diretivas Exemplos de diretivas .DATA: Marca o início do segmento de dados, no qual todas as variáveis, tabelas e mensagens devem ser colocadas. Sintaxe: .DATA .CODE: Marca o início do segmento de código do programa. No caso de um programa possuir mais de um segmento de código, um nome deve ser especificado para cada segmento. Sintaxe: .CODE [segmento] ORGANIZAÇÃO DE COMPUTADORES E SISTEMAS OPERACIONAIS 16 Linguagem de Montagem e Linguagem de Máquina 24 de fevereiro de 2010 Programação em Linguagem de Montagem/Assembly (8086) Instruções Instruções assembly: indicam as ordens que devem ser executadas pela CPU e são transcrições (ou notações) simplificadas, que correspondem aos códigos binários das instruções de máquina. Instrução MOV Tipos de Transferências Possíveis Registrador Registrador Memória Registrador Registrador Memória Memória Constante Registrador Constante Instrução XCHG XCHG DESTINO,ORIGEM Tipos de Transferências Possíveis Registrador Registrador Memória Registrador ORGANIZAÇÃO DE COMPUTADORES E SISTEMAS OPERACIONAIS 17 Linguagem de Montagem e Linguagem de Máquina 24 de fevereiro de 2010 Programação em Linguagem de Montagem/Assembly (8086) Instruções Instruções logicas: As operações lógicas são realizadas bit a bit, entre os bits de mesma ordem. AND destino,origem OR destino,origem XOR destino,origem NOT destino Tipos de Transferências Possíveis Registrador Registrador Memória Registrador Registrador Memória Memória Constante Registrador Constante Instruções soma (subtração): dos dois operandos substitui o valor do operando destino. add destino,origem sub destino,origem ORGANIZAÇÃO DE COMPUTADORES E SISTEMAS OPERACIONAIS 18 Linguagem de Montagem e Linguagem de Máquina 24 de fevereiro de 2010 Programação em Linguagem de Montagem/Assembly (I) Instruções Instrução JMP: Salta incondicionalmente para o endereço referenciado na instrução. JMP endereço A instrução JMP deve ser usada em dois casos: Para pular instruções que não serão executadas; e Para auxiliar a execução de loops. Outras instruções: MUL DIV JXXX -> intruções de desvio condicional CMP Instruções de Deslocamento Instruções de Rotação ORGANIZAÇÃO DE COMPUTADORES E SISTEMAS OPERACIONAIS 19 Linguagem de Montagem e Linguagem de Máquina 24 de fevereiro de 2010 Programação em Linguagem de Montagem/Assembly (8086) Exemplo Hello world! .MODEL Small .STACK 100h .DATA msg db 'Hello, world!$' .CODE start: mov ah, 09h mov dx, offset msg mov ah,4Ch int 21h end start ; definição do modelo desejado ;********************************************************************* DOSSEG .MODEL modelo ; definição do segmento de pilha ; **************************************************************************** .STACK [tamanho] ; ; criação do segmento de dados ; **************************************************************************** .DATA ; variáveis ; início do segmento de código ; **************************************************************************** .CODE ; procedimento principal ; **************************************************************************** Principal PROC NEAR ; início do procedimento principal MOV AX, @DATA ; instruções para que DS e ES MOV DS, AX ; apontem para a área de MOV ES, AX ; dados criada ; corpo do programa principal MOV AH, 4Ch ; função para término de programa INT 21h ; através da INT 21h Principal ENDP ; final do procedimento principal END Principal ; final do programa ORGANIZAÇÃO DE COMPUTADORES E SISTEMAS OPERACIONAIS 20 Linguagem de Montagem e Linguagem de Máquina 24 de fevereiro de 2010 Programação em Linguagem de Montagem/Assembly (8086) Exercícios Faça um programa para carregar dados (modo imediato) em AX e BX e, em seguida subtraí-los, deixando o resultado em AX. Faça um programa para somar operandos BCD provenientes das locações de memória 0200 e 0201, deixando o resultado em 0202. Exercícios: ORGANIZAÇÃO DE COMPUTADORES E SISTEMAS OPERACIONAIS 21 Linguagem de Montagem e Linguagem de Máquina 24 de fevereiro de 2010 Montagem, Ligação e Depuração de Programas. Salvar como HelloWorld.asm MONTAGEM TASM.EXE Montador para a linguagem Assembly. Sintaxe: TASM [opções] fonte [,objeto] [,listagem] [,referência_cruzada] [;] Linha de Comando mais Comumente Utilizada: TASM /z/zi programa Opção Significado /z Display source line with error message /zi Debug info: zi=full TLINK.EXE Ligador – cria um programa executável a partir de um objeto. Sintaxe: TLINK [opções] objetos [, executável] [, mapa] [, bibliotecas] [;] Linha de Comando mais Comumente Utilizada: TLINK /x/v programa Opção Significado /x No map file at all /v Full symbolic debug information HelloWorld.obj HelloWorld.exe .MODEL Small .STACK 100h .DATA msg db 'Hello, world!$' .CODE start: mov ah, 09h mov dx, offset msg mov ah,4Ch int 21h end start ORGANIZAÇÃO DE COMPUTADORES E SISTEMAS OPERACIONAIS 22 Linguagem de Montagem e Linguagem de Máquina 24 de fevereiro de 2010 Referencias Tanenbaum A. S. Organização Estruturada de Computadores. S. Paulo: Pearson Prentice Hall, 5a edição, 2007. Torres Gabriel. Hardware Curso Completo. R. De Janeiro: Axcel Books do Brasil Editora Ltda, 4ª edição, 2001. LAYNET. Assembly Tutorials. Disponível em <http://www.laynetworks.com/assembly%20tutorials.htm> Acesso em 23 de fevereiro de 2010 Monteiro, Mário A. Introdução à Organização de Computadores. R. De Janeiro: LTC Editora S.A., 4ª edição, 2001. WIKIPÉDIA. Assembly language. Disponível em: <http://en.wikipedia.org/wiki/Assembly_language> Acesso em 23 de fevereiro de 2010. ______. Machine Code. Disponível em: <http://en.wikipedia. org/wiki/Machine_code > Acesso em 23 de fevereiro de 2010. ______ Pipelining. Disponível em: http://en.wikipedia.org/wiki/Pipelining. Acesso em 23 de fevereiro de 2010
Compartilhar