Arquitectura de computadores 2008/2009
Aeroespacial / IST
ARQUITECTURA DE COMPUTADORES
4º Trabalho de Laboratório
Programação Assembly
Objectivo: Pretende-se que os alunos aumentem a sua compreensão e domínio da linguagem assembly que está
directamente ligada a linguagem máquina que é a linguagem natural dos processadores. O desenvolvimento de um
pequeno programa permite que os alunos ganhem algumas competências na utilização desta linguagem, quer para
utilização futura em aplicações específicas, quer para servir como informação de carácter geral que permita melhorar a
sua forma de utilização de um computador tanto a nível de utilização de linguagens de mais alto nível como na sua
utilização como parte de um sistema mais complexo.
1. INTRODUÇÃO
O trabalho consiste no desenvolvimento de uma pequena aplicação no processador P3. A aplicação deve ser
desenvolvida em assembly e executada no simulador disponibilizado no site. A aplicação consiste num pequeno jogo de
artilharia de faz uso intensivo dos periféricos do P3.
2. O JOGO DE ARTILHARIA
Este jogo é um jogo clássico de artilharia balística, provavelmente uma das primeiras aplicações dos computadores. O
jogo é jogado por dois jogadores que controlam dois canhões de artilharia, que disparam balas de canhão de forma a
tentar atingir o outro jogador. Cada jogador controla o ângulo e a velocidade do disparo.
As posições dos canhões são sorteadas aleatoriamente em cada novo round, sendo um round constituído por dois
disparos, um para cada jogador. O canhão do jogador um deve ficar à esquerda com centro numa coluna entre 10 e 30 e
o canhão do jogador dois deve ficar à direita com centro numa coluna entre 50 e 70.
Cada jogo consiste em 4 rounds, devendo a pontuação de cada jogador estar representada na primeira linha da janela de
texto em cada instante, na forma:
Jogador 1: X Pontos Jogador 2: X Pontos
A posição dos dois canhões é actualizada em cada round. Em cada jogada o ângulo e a velocidade de disparo devem ser
controladas utilizando os interruptores da placa. O primeiro interruptor aumenta o ângulo de disparo (sentido contrário
aos ponteiros do relógio) e o segundo interruptor diminui. O valor do ângulo deve aumentar ou diminuir em intervalos
de 0,2 segundos e em passos de 10º. Este ângulo deve ser representado em graus no ecrã LCD na forma:
Angulo: XX
O terceiro e o quarto interruptor aumentam e diminuem a velocidade de disparo, devendo a velocidade corrente ser
representada nos leds. Todos os leds preenchidos corresponde a uma velocidade de 16 caracteres por segundo, enquanto
um led corresponde a um carácter por segundo. O valor da velocidade deve aumentar ou diminuir também em intervalos
de 0,2 segundos. Para disparar o utilizador deve pressionar o botão I0.
Cada canhão deve ser representado pela seguinte sequência de caracteres:
ccc
ccccc
ccccccc
e cada disparo deve ser originado do centro e topo do canhão.
Arquitectura de computadores 2008/2009
Aeroespacial / IST
Detecta-se se um canhão foi atingido de uma forma simplificada, nomeadamente verificasse a posição da bala quando
esta atinge a linha de cima do canhão de testa-se se esta se encontra a menos de 4 caracteres do centro. A simulação da
trajectória da bala deve terminar quando esta atingir o canhão ou atingir o fim da janela de texto. Deve-se assumir que
esta mantém o tamanho de 24 linhas 80 colunas.
A posição e velocidade da bala devem ser representadas por variáveis de 16 bits representadas em vírgula fixa, em que
os oito bits mais significativos indicam a parte inteira do número e os bits menos significativos a parte fraccionária.
x = b16 b15 b14 b13 b12 b11 b10 b9 b8 . b7 b6 b5 b4 b3 b2 b1 b0
A posição da bala deve ser dada pelas componentes x_bala e y_bala e a velocidade por vx_bala e vy_bala. A posição da
bala deve ser actualizada em intervalos de 200
controlados pelo timer, segundo as equações:
x_bala = x_bala + vx_bala / 4
y_bala = y_bala + vy_bala / 4
vx_bala = vx_bala
y_bala = vy_bala + 1/4 (0040h).
Notar que o valor inicial da velocidade é negativo. Divide-se por quatro em vez de multiplicar por 0.2 (200ms) para
permitir fazer a operação usando um SHRA, já que a exactidão da simulação não é muito importante para esta
aplicação. Estas equações derivam directamente das equações de movimento do projéctil:
∆ ∆
∆
tal como definido pelo timer. O valor da aceleração considerado, , é de 1⁄4
O intervalo de tempo ∆ é de 200
5/4 caracteres por segundo2. O alcance de um projéctil com a mesma posição inicial e final é dado por:
5
sin 2
Para uma velocidade de inicial de 7 caracteres por segundo e um ângulo de 45º resulta um alcance 39 caracteres, metade
de um ecrã, o que será próximo do desejado em muitos casos. São livres para fazer os ajustes que desejarem à
velocidade inicial e à aceleração gravítica.
O ângulo do canhão só pode assumir 17 valores discretos de 10 a 170 graus com saltos de 10º resultando que o seno e o
co-seno dos ângulos correspondentes podem ser guardados numa tabela de valores em vírgula fixa, nomeadamente na
tabela, SinCos disponibilizada com o esqueleto do projecto. Os valores iniciais de vx_bala e vy_bala podem ser
calculados multiplicando o valor lido nesta tabela pelo valor escolhido para a velocidade. Para poder ter uma aplicação
a funcionar antes de implementar a escolha do ângulo, pode assumir que este é de 45º ou 50º dado que tal permite
manter quase todas as funcionalidades do jogo.
No fim do jogo deve ser apresentada no ecrã uma mensagem indicando o vencedor. Dá-se início a um novo jogo
pressionando o botão I0.
3. PREPARAÇÃO E PLANEAMENTO DO PROJECTO
Comece por estudar a arquitectura (a nível do programador) e o conjunto de instruções do P3. Instale o assemblador e o
simulador do P3, e familiarize-se com o respectivo funcionamento e potencialidades (carregamento de programas,
simulação, visualização do conteúdo dos registos, debug, periféricos disponíveis, funcionamento das interrupções, etc.).
Utilize os conhecimentos adquiridos na cadeira de programação quando programar o seu código, nomeadamente no que
diz respeito à estruturação e organização de programas em subrotinas, e ainda no que diz respeito a comentários e
documentação dessas subrotinas.
O seu trabalho também pode ser facilitado se usar um editor de texto que faça highlight do código. Existem vários
editores de texto open source, aqui fica a nossa sugestão, que não sendo perfeita, já poupa trabalho: ConTEXT,
disponível em http://www.context.cx/.
Utilize o esqueleto do projecto colocado na página da cadeira, e aproveite as rotinas lá apresentadas.
Arquitectura de computadores 2008/2009
Aeroespacial / IST
4. FASEAMENTO DO PROJECTO
O projecto deverá ser desenvolvido essencialmente em casa. A primeira aula de laboratório destina-se à apresentação e
discussão de dúvidas e que possam surgir. A segunda aula de laboratório destinasse apenas a apresentação e discussão
do trabalho.
5. AVALIAÇÃO DO PROJECTO
O projecto será avaliado de acordo com os seguintes tópicos:
Cotação
Funcionamento
Apresentação do canhão:
1 val
Posicionamento aleatório do canhão:
1 val
Controlo do ângulo de disparo do canhão:
1 val
Apresentação no LCD do ângulo de disparo:
1 val
Controlo da velocidade de disparo do canhão:
1 val
Apresentação nos leds da velocidade de disparo:
1 val
Controlo do disparo com I0:
1 val
Representação do movimento da bala:
1 val
Temporização do movimento da bala:
1 val
Detecção de colisão:
1 val
Apresentação da pontuação no ecrã:
1 val
Detecção de fim de fogo e indicação do vencedor:
1 val
Reinício de jogo pressionando I0:
1 val
Comentários:
2 val
Estrutura do código:
2 val
Escolha de nomes:
1 val
Eficiência do código:
2 val
Código
6. ENTREGA DO TRABALHO
O projecto deve ser entregue na segunda semana do laboratório, devendo ser passado para uma pen disponibilizada pelo
docente. Apenas deverá ser fornecido um ficheiro com o código em assembly pronto a compilar. O nome do ficheiro
deve ter a forma: AC2008_n1_n2.as, em que n1 e n2 são os números dos elementos do grupo. O Ficheiro deve ter no
seu início comentários com o nome e o número de todos os elementos do grupo.
7. BIBLIOGRAFIA
[1] M. Morris Mano, Charles R. Kime, “Logic and Computer Design Fundamentals”, Prentice-Hall International, Inc.
[2] G. Arroz, J.C. Monteiro, A. Oliveira, “Manual do Simulador do P3”, IST, 2005
Download

Guia do laboratório 4