Prática Introdução aos Computadores 2006/2007 Linguagem Assembly Apoo Valores e Endereçamento Transferências de dados Grupo Tipo de Transferência Load Carrega dados para registos Store Guarda dados dos registos Modo Directo load <mem> <Ri> Ri <- mem Imediato loadn <num> <Ri> Ri <- num Indirecto loadi <Ri> <Rj> R_j <- (Ri) store <Ri> <mem> mem <- Ri storer <Ri> <Rj> Rj <- Ri storei <Ri> <Rj> (Rj) <- Ri Pseudo-instruções: Reservar memória: Inicializar memória: <label>: mem <num> <label>: const <num> Exemplo: dados: const 4 const 5 cont 6 result: mem 2 P1 Escrever um programa em Assembly Apoo para: 1. Colocar os valores 7, 8 e 9 respectivamente nos registos R1, R2 e R3. 2. Inicializar a posição de memória label com o valor 3 e colocar o conteúdo dessa posição de memória no registo R4. 3. Inicializar o registo R1 com o valor 6 e colocar o conteúdo do registo R1 no registo R5. 4. Inicializar uma posição de memória dadoscom o valor 3, colocar o endereço desta posição de memória no registo R2 e colocar no registo R1 o conteúdo da posição de memória cujo endereço é o conteúdo do registo R2. P2 Escrever um programa em Assembly Apoo para: 1. Reservar uma posição de memória memory. Colocar o valor 3 no registo R2 e guardar esse valor na posição de memória memory. 2. Colocar nos registos R1 e R2 respectivamente os valores 6 e 7. Trocar o conteúdo dos registos (i.e. no fim R1 deve conter o valor 7 e R2 o valor 6). 3. Reservar uma posição de memória mem e colocar o endereço desta posição no registo R2. Colocar o valor 4 no registo R1 e guardar o valor em R1 na posição cujo endereço está em R2. P3 Escrever um programa em Assembly Apoo para: 1. Guardar os valores 1, 4, 5 e 2 respectivamente nos registos R1, R2, R3 e R4. 2. Rodar o conteúdo dos quatro registos (i.e. em R1, R2, R3 e R4 devem ficar respectivamente os valores 2, 1, 4 e 5). Prática Introdução aos Computadores 2006/2007 Aritmética Operação Adição Substração Multiplicação Divisão inteira Resto divisão inteira Incremento Decremento Colocar a zero Sintaxe add <Ri> <Rj> sub <Ri> <Rj> mul <Ri> <Rj> div <Ri> <Rj> mod <Ri> <Rj> inc <Ri> dec <Ri> zero <Ri> Semântica Rj = Ri + Rj Rj = Ri - Rj Rj = Ri * Rj Rj = Ri / Rj Rj = Ri % Rj Ri = Ri + 1 Ri = Ri - 1 Ri = 0 P4 Escrever um programa em Assembly Apoo para: 1. Inicializar a posição de memória dados e a posição de memória seguinte respectivamente com os valores 37 e 40. Adicionar estes valores e colocar o resultado na posição de memória soma. 2. Colocar três valores a partir da posição de memória com endereço xdados e outros 3 valores a partir de ydados. Reservar três posições de memória a partir de zsoma e colocar neste vector a soma dos elementos de ı́ndice correspondente dos vectores xdados e ydados. 3. Colocar 3 valores x1, x2 e x3 (que deve escolher) a partir da posição de memória xdados. Calcular as somas parcelares x1,x1+x2 e x1+x2+x3 e colocar estes três valores respectivamente nas posições de x1, x2 e x3. P5 Escrever programas em Assembly Apoo para cada um dos seguintes problemas: 1. Coloque na posição de memória dias o número de dias que almoça fora por semana. Multiplique esse número por 2, some 5, multiplique por 50, some 1751 e subtraia o ano em que nasceu (use os 4 digitos). Por fim, guarde o resultado na posição de memória resultado. Ao executar o programa deve obter em resultado um número de 3 algarismos. O primeiro digito desse número é o número de dias que almoça fora por semana. Os dois restantes são a sua idade! 2. Dividir o conteúdo da posição de memória dividendo pelo conteúdo da posição de memória divisor e colocar o resultado da divisão inteira e do resto respectivamente nas posições de memória quociente e resto. 3. Defina a posição de memória dados com uma sequência de 3 valores. Calcule a sua média na posição de memória med. 4. Inicializar a posição de memória n com o valor 4. Calcular o factorial desse valor e colocar o resultado na posição de memória factorial.