Atividade de Laboratório 6

Objetivos

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.

Descrição

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.

Ilustração dos três satélites no plano cartesiano.

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.

Entrada e Saída

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:

Para realizar a leitura de dados, basta utilizar a chamada de sistema 63, como no template abaixo:
    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:

Exemplo

Entrada:

+0700 -0100
2000 0000 2240 2300
Saída:
-0088 +0016

Dicas

Geometria do problema

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.

Implementação da Raiz Quadrada

Processamento dos dados de entrada

A imagem a seguir uma tabela com os códigos ASCII.

Tabela ASCII
Fonte: https://commons.wikimedia.org/wiki/File:Ascii_Table-nocolor.svg

Entrega

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