Definição do Trabalho 08/1 - Inf

Propaganda
UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL
INSTITUTO DE INFORMÁTICA - DEPARTAMENTO DE INFORMÁTICA APLICADA
INF01107 - Arquitetura e Organização de Computadores I – Turma A - 2008
Trabalho Prático 1 - Simulador NEANDER
Escrever um programa para o simulador Neander que implemente as quatro operações aritméticas
básicas (soma, subtração, multiplicação e divisão) sobre números inteiros positivos, representados em
complemento de dois (ou seja, os operados estão na faixa entre 0 e 127, inclusive).
Para a definição da operação devem ser obrigatoriamente utilizadas as seguintes posições:
Palavra 128 – primeiro operando da operação
Palavra 129 – segundo operando da operação
Palavra 130 – código da operação (1: soma, 2: subtração, 3: multiplicação, 4: divisão)
Palavra 131 – resultado da operação
Palavra 132 – código de erro (veja abaixo)
Não é necessário realizar nenhum teste sobre a correção do resultado, ou seja, eventuais "vai-um" ou
estouros de representação devem ser ignorados. A operação de divisão corresponde a uma divisão
inteira, ou seja, o quociente é um número inteiro e o resto é descartado. A correção da entrada deve ser
indicada através dos seguintes códigos no endereço 132:
Código 0: entrada correta
Código 1: operando(s) fora da faixa, ou seja, negativo(s)
Código 2: operandos dentro da faixa, mas código de operação inválido
Código 4: tentativa de divisão por zero
Em caso de erro, deve ser devolvido zero como resultado da operação.
Os valores das posições 128 a 130 de memória não devem ser alterados pelo programa.
Dicas:
1. O simulador Neander não possui operação de subtração. Entretanto, uma subtração pode ser
transformada em uma soma através do complemento do subtraendo.
2. O simulador Neander não possui operação de multiplicação. Entretanto, uma multiplicação não é
nada mais que uma série de somas sucessivas.
3. O simulador Neander não possui operação de divisão. Entretanto, o quociente de uma divisão pode
ser calculado através de uma série de subtrações sucessivas.
Os trabalhos serão corrigidos de forma automática, com 20 grupos de valores diferentes. Portanto,
devem ser observadas rigorosamente as seguintes especificações:
 o código do programa deve iniciar no endereço 0 da memória.
 a primeira instrução executável deve estar no endereço 0.
 os endereços das variáveis devem ser exatamente os especificados acima.
 para constantes e variáveis adicionais, ou para trechos extras de programa, usar os endereços
de memória de 133 em diante.

o programa será executado 20 vezes de forma consecutiva (sem ser carregado de disco a cada
vez); portanto é necessário inicializar todas as variáveis utilizadas.
O programa deverá ser entregue no Moodle, na área de “Entrega do Primeiro Trabalho”, juntamente
com uma documentação contendo uma breve descrição do método utilizado e uma listagem do
programa fonte usando mnemônicos simbólicos para as instruções (LDA, STA, etc ...) e indicando os
endereços de memória nos quais as instruções ficam armazenadas, assim como os endereços dos
operandos das instruções, em decimal. Para o nome do arquivo de memória do Neander, utilize a letra
inicial do seu primeiro nome, seguida do seu número de cartão. Assim, por exemplo, o aluno João da
Silva, cartão número 123456, deve denominar o seu arquivo de J123456.MEM. Como o Moodle só
permite o envio de um único arquivo, compacte todos os arquivos usando Zip ou Rar.
Data de Entrega: 05/05/2008 via http://moodle.inf.ufrgs.br
Exemplos de casos de teste (todos os valores estão indicados no sistema decimal)
Endereço 128 129 130 131 132
Endereço
128
129 130 131 132
128
8
4
0
1
18
12
1
30
0
Caso 1
Caso 9
44
1
5
0
2
105
56
2
49
0
Caso 2
Caso 10
29
1
1
30
0
12
12
3
144
0
Caso 3
Caso 11
115 15
1
130
0
103
2
4
51
0
Caso 4
Caso 12
105 127
2
234
0
101
5
4
20
0
Caso 5
Caso 13
47
3
3
141
0
45
130
5
0
1
Caso 6
Caso 14
122 100
4
1
0
128
129
1
0
1
Caso 7
Caso 15
28
0
4
0
4
35
32
3
96
0
Caso 8
Caso 16
Download