• Labs

Lab 17: VM

Tip 1

Realizar o laboratório individualmente. Mas trabalhar no grupo e trocar ideias.

Nesse lab iremos criar programas em VM para o nosso Z01.1, essa entrega é individual e não vale nota, mas será cobrado na última avaliação.

Esse laboratório mistura exercícios com leitura de teoria, é essencial que você realize as leituras recomendadas para cada secção e então voltar para fazer os exercícios.

Antes de começar

Esse laboratório não faz parte de um projeto, mas será necessário atualizar o repositório de vocês com o Z01. Escolham um do grupo para fazer isso, ele não será um scrum master!

  • Não seguir sem realizar a etapa anterior.

Treinando RPN

Abra o simulador online da calculadora hp48 e realize os seguintes cálculos:

  1. 12 + 34 + 56 – 78 + 90 – 12
  2. (12 × 34) + (56 × 78) – (90 × 12)
  3. 3 × (4 + (5 × (6 + 7))) (Dica: comece pelo parêntese mais interno)
  4. \(1/\sqrt{121}\)

Exercícios extraídos de: https://hansklav.home.xs4all.nl/rpn/

VM Z01 - básico

TEORIA

Leia a Teoria/VM antes de seguir.

Vamos agora trabalhar com a nossa vm, vocês terão que implementar os programas a seguir e testar com o script (executar ./compileALL.py localizado na pasta do projeto e então SIM=ghdl pytest --tb=no -s.).

Info

A descrição do que deve ser feito está no próprio código

  • h_VM/src/vm/1a-Add
  • h_VM/src/vm/1b-Calculadora

Você notou que nesses códigos pedimos para salvar o resultado em temp 0, fazemos isso pela operação de pop temp 0. Vamos estudar um pouco a respeito disso:

TEORIA

Leia a Teoria/VM - Segmentos antes de seguir.

goto (jump)

Nossa linguagem vm suporta realizar condições e loops, vamos ver como isso é feito e praticar um pouco!

TEORIA

Leia a Teoria/VM - jump antes de seguir.

Implementem os códigos a seguir

  • h_VM/src/vm/1c-loop
  • h_VM/src/vm/1c-div

Tip 2

De uma olhada nos códigos de exemplo, tem coisa de condição lá!

funções

Vamos agora fazer o uso de funções em VM, o que irá nos permitir fazer as seguintes operações: \(10/2 + 15*3*\sqrt{121}/2^5\), lembre que no nosso hardware não possuímos os operadores de multiplicação, divisão, raiz quadrada e muito menos exponencial. Mas com o uso de funções podemos implementar isso em código e usar para implementar a equação anterior.

div(10,2) + div(mult(mult(15,3), sqrt(121.2))), exp(2,5))
  • note que os operadores viraram chamadas de funções.

TEORIA

Leia a Teoria/VM - Funções antes de seguir.

Vamos agora trabalhar com funções na nossa VM, implementem os códigos a seguir:

  • h_VM/src/vm/2b-Calculadora
  • h_VM/src/vm/2c-Calculadora
  • h_VM/src/vm/2d-Calculadora