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.
Download

Linguagem Assembly Apoo - Departamento de Ciência de