Laboratório 7
Objetivo
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.
Nesta atividade, você deve escrever um programa em linguagem assembly RISC-V que calcula suas coordenadas geográficas em um plano bidimensional, com base no tempo atual e nas mensagens recebidas de 3 satélites
Para simplificar o exercício, assume-se que o satélite A está posicionado na origem do plano cartesiano (0, 0)
, enquanto B e C estão posicionados em (0, YB) e (XC, 0), respectivamente. Os satélites enviam continuamente mensagens com um carimbo de tempo através de ondas que se propagam em todas as direções a uma velocidade de 3 x 108 m/s. Em um determinado momento TR, você recebe uma mensagem de cada satélite contendo os carimbos de tempo TA, TB e TC. Supondo que todos os relógios estão perfeitamente sincronizados, imprima suas coordenadas (x, y)
no plano cartesiano. Note que a formulação utilizada neste exercício não é realista
Entrada
- Linha 1 - Coordenadas XC e YB. Os valores estão em metros, representados por inteiros de 4 dígitos na base decimal e precedidos por um sinal (
+
ou-
). - Linha 2 - Tempos TR, TA, TB e TC. Os valores estão em nanossegundos, representados por inteiros de 4 dígitos na base decimal.
Saída
Suas coordenadas: (x, y)
. Os valores estão em metros, aproximados, representados por inteiros de 4 dígitos na base decimal e precedidos por um sinal (+
ou -
).
Exemplos
Input | Output |
---|---|
-0100 +0700 | -0088 +0016 |
2300 2000 0000 2240 |
Input | Output |
---|---|
-2042 +1042 | -0902 -0215 |
9913 6823 4756 6047 |
Input | Output |
---|---|
+0280 -2168 | +0989 -1626 |
9550 3207 5791 3638 |
Input | Output |
---|---|
+0965 -2491 | -0065 -1941 |
9357 2884 7511 2033 |
Input | Output |
---|---|
+1337 -0656 | +1255 -2381 |
9133 0162 2023 1192 |
Dicas
-
Valores múltiplos escritos ou lidos na mesma linha serão separados por um único espaço
-
Cada linha termina com um caractere de nova linha
\n
-
Para este exercício, soluções aproximadas são aceitas com um erro absoluto menor que 10
-
O uso do mesmo método utilizado no lab anterior com mais iterações (por exemplo,
21
iterações) é recomendado. Outros métodos de aproximação da raiz quadrada podem ser usados, contanto que: -
Utilize apenas números inteiros. Números de ponto flutuante ou a instrução de raiz quadrada do RISC-V não podem ser usados
-
É melhor trabalhar com distâncias em metros e tempo em nanossegundos, para que os valores de entrada fornecidos não causem overflow ao usar o método proposto e uma boa precisão possa ser alcançada
-
Há muitas maneiras de resolver este exercício. Aqui, propomos uma abordagem que utiliza a equação de um círculo. Dado que dA, dB e dC são as distâncias entre sua posição e os satélites A, B e C, respectivamente: x2+y2=d2A Eq.(1)x2+(y−yB)2=d2B Eq.(2)(x−xC)2+y2=d2C Eq.(3)
- Usando as Equações 1 e 2: y=d2A+y2B−d2B2yB Eq.(4)x=±√d2A−y2 Eq.(5)
Tip
Para encontrar o valor correto de x, você pode tentar ambos os valores possíveis na Equação 3 e verificar qual está mais próximo de satisfazer a equação.
Entrega
O código deve ser testado no seguinte link o report gerado deve ser submetido no Classroom com o nome de {SeuRA}_lab7.report
Warning
Esta é uma atividade que deve ser realizada programando-se em linguagem de montagem - A submissão de programas em linguagem de programação de alto nível, como C
, ou de programas gerados por ferramentas de compilação, serão considerados como fraude