O objetivo desta atividade é exercitar o uso de instruções aritméticas e a manipulação de entrada e saída utilizando o conjunto de instruções da arquitetura RISC-V.
Neste laboratório, você deve fazer um programa em linguagem de montagem do RISC-V que calcule a sua posição geográfica num plano bidimensional, baseado no tempo atual e em mensagens recebidas de 3 satélites, como ilustrados na figura a seguir.
Para simplificar o problema, assumimos que o satélite A se encontra na origem no plano cartesiano (0, 0), enquanto B e C têm posições (0, YB) e (XC, 0), respectivamente. Os satélites enviam mensagens contendo uma Marca Temporal (timestamp) continuamente através de ondas que se propagam em todas as direções numa velocidade de 3 x 108 m/s. Em um dado instante TR, você recebeu uma mensagem de cada satélite contendo os tempos TA, TB e TC. Supondo que todos os tempos estejam perfeitamente sincronizados, imprima sua coordenada (x, y) no plano cartesiano. Note que a formulação utilizada neste exercício não é realista.
Seu programa deve ler da entrada padrão os valores YB, XC, TA, TB, TC e TR e imprimir na saída padrão a sua coordenada (x, y).
Entrada:
li a0, 0 # file descriptor = 0 (stdin) la a1, input_adress # buffer li a2, 1 # size (lendo apenas 1 byte, mas tamanho é variável) li a7, 63 # syscall read (63) ecall input_adress: # buffer
Saída:
Observações:
Entrada:
+0700 -0100 2000 0000 2240 2300Saída:
-0088 +0016
Existem diversas formas de resolver o problema. Aqui, sugerimos a utilização das fórmulas do círculo. Seja dA, dB e dC as distâncias entre sua posição e os satélite A, B e C, respectivamente, temos que:
x2 + y2 = dA2 | (Eq. 1) |
x2 + (y - YB)2 = dB2 | (Eq. 2) |
(x - XC)2 + y2 = dC2 | (Eq. 3) |
Assim, a partir das Equações 1 e 2, temos:
y = (dA2 + YB2 - dB2) / 2YB | (Eq. 4) |
x = + sqrt(dA2 - y2) OU - sqrt(dA2 - y2) | (Eq. 5) |
Para encontrar o x correto, basta substituir os dois valores possíveis na Equação 3 e verificar qual mais se aproxima de satisfazer a igualdade.
A imagem a seguir uma tabela com os códigos ASCII.
Você deve submeter um arquivo no SuSy chamado raXXXXXX-lab6.s, em que XXXXXX é seu RA com 6 dígitos.
Endereço para a entrega da atividade no sistema SuSy: https://susy.ic.unicamp.br:9999/mc404ab/06a ou https://susy.ic.unicamp.br:9999/mc404ab/06b