Linguagem de Montagem 2 Operações e Operandos Revisão Para executar uma tarefa qualquer, um computador precisa receber instruções precisas sobre o que fazer Esse conjunto de instruções chamamos de algoritmo Isso constitui num PROGRAMA de computador? Revisão - Algoritmo vs. Programa Um algoritmo não representa, necessariamente, um programa de computador, Ele representa os passos necessários para realizar uma tarefa Sua implementação pode ser feita por um computador, por outro tipo de autômato ou mesmo por um ser humano. Revisão - Algoritmo vs. Programa Programa é a formalização de um algoritmo em qualquer linguagem capaz de ser transformada em instruções que serão executadas por um computador gerando os resultados esperados O Programa é uma referência ao código fonte, escrito em alguma linguagem de programação Revisão - Linguagem de Programação Método padronizado para expressar instruções para um computador Conjunto de regras sintáticas e semânticas usadas para definir um programa de computador Uma linguagem permite que um programador especifique precisamente sobre quais dados um computador vai atuar Revisão - Linguagem de Programação A primeira e mais primitiva linguagem de computador é a própria linguagem de máquina Aquela que o computador entende diretamente e pode ser diretamente executada pelos circuitos do processador (pelo hardware) Formada por 0 e 1 Imagine então um programa extenso escrito apenas usando 1's e 0's Revisão - Linguagem de Programação Cada família de computadores possui sua própria linguagem de máquina. Um programa em linguagem de máquina é dependente do computador Somente poderá ser executado em computadores da mesma família Ou seja para cada computador o programa devia mudar Revisão - Linguagem de Montagem A primeira tentativa bem-sucedida para resolver o problema acima descrito foi a criação de uma linguagem em que os códigos numéricos foram substituídos por mnemônicos – – – LOAD = carregar ADD = somar MOVE = mover dados entre os registradores Revisão - Linguagem de Montagem Essa linguagem simbólica recebeu o nome de Assembly Language (Linguagem de Montagem) O programador não precisava decorar os códigos numéricos que representavam as diferentes instruções e os endereços reais de armazenamento Ele deveria decorar mnemônicos para as instruções e definir nomes para as referências dos endereços Tradução Um computador é sempre monoglota Outro programa deve ler o programa escrito numa linguagem X e traduzir para a linguagem nativa do computador A tradução da linguagem de montagem para a linguagem de máquina é chamado de montagem e feita pelo Montador Montagem Processo Código Fonte Tradução Linguagem de Máquina Montagem O código fonte é examinado, instrução por instrução e é feita a tradução, gerando o código que será executado O código fonte neste processo é escrito em Assembly O código final é chamado de código objeto Montagem Os passos executados pelo programa Montador são: 1. 2. 3. 4. Verificar a correção do código de instrução e substituir os mnemônicos pelos códigos numéricos binários equivalentes Resolver as referências de memória Reservar espaço em memória para o armazenamento das instruções e dados Converter valores de constantes em binário Linguagem de Montagem 8086 O 8086 é um microprocessador de 16 bits da Intel Foi desenvolvido em 1978 Utiliza a arquitetura x86 Utiliza uma linguagem de montagem de mesmo nome Elementos Básicos Rótulo (Label) – – – Nomeia uma linha no código Necessários para identificação de saltos; Devem ser alfanuméricos começando por letras; Código de operação (mnemônico) – especifica o tipo de instrução; Elementos Básicos Operandos (argumentos): – – – Registradores Endereços de memória Dados Comentário – Forma de declarar a natureza da idéia codificada. Elementos Básicos Sintaxe [Rótulo:] [Cod. oper.] loop: [Operando(s)] [;Comentário] MOV AX,25h ; inicializa AX com 25h ADD AX,AX ; AX <-- AX + AX Rótulos Pode ser um rótulo de instrução, um nome de sub-rotina, um nome de variável Contendo de 1 a 31 caracteres, iniciando por uma letra Só pode conter letras, números e os caracteres ? . @ _ : $ % . Rótulos Validos – – – LOOP1: .TEST @caracter Inválidos – – – DOIS BITS 2abc #42 Mnemônicos – Instruções Cabeçalho – – – – – – – – DOSSEG segmento MODEL STACK DATA CODE START END TITLE - diz à CPU como organizar o - declara o modelo que vamos usar - quanta pilha vamos alocar? - o quê vai no segmento de dados - o quê vai no segmento de código - o início do seu código - o fim do seu código - palavra de inicio do código Mnemônicos – Instruções Operações Aritméticas Operação – ADD – SUB – MUL – DIV - Formato da instrução ADD <destino> <fonte> SUB <destino> <fonte> MUL <fonte> DIV <fonte> Mnemônicos – Instruções Transferência de dados – MOV - <destino>, <fonte> Operações Lógicas – – – AND OR NOT - <destino> <fonte> <destino> <fonte> <fonte> Registradores AX - o acumulador. – BX - a base. – Comumente usado como uma base ou registrador apontador CX - o contador. – Comumente usado em operações matemáticas e de E/S Usado freqüentemente em loops DX - o deslocamento – Similar ao registrador de base. Variáveis Cada variável possui um tipo e recebe um endereço de memória; Usa-se pseudo-instruções para definir o tipo da variável; O Montador atribui o endereço de memória. Variáveis Definição Pseudoinstrução Entende-se por DB define byte (8 bits) DW define word (16 bits, 2 bytes consecutivos) DD define doubleword (2 palavras, 4 bytes consecutivos) DQ define quadword (4 palavras, 8 bytes consecutivos) DT define ten bytes (10 bytes consecutivos) Variáveis Eexemplo: Alfa A WORD1 CONTA DB DB DW DW 0 ;equivale a 00h 10h 0h ;equivale a 0000h 0150h Um Programa em Assembly TITLE programa .MODEL SMALL .STACK 200h .DATA .CODE START: MOV AX,B SUB AX,A SUB AX,A MOV A,AX END ;AX contem a variável B ;AX contem B - A ;AX contem B - 2A ;movimenta o resultado para A