---
# System prepended metadata

title: Resultados dos programas para Breno

---

# Resultados dos programas para Breno 

## Programa data_transfer.asm

O programa em questão testa se as instruções de transferência e tal...

A explicação básica é colocar dados na pilha, salvar esses dados na memória em endereços específicos e colocar na pilha novamente a partir da memória em uma ordem diferente.

![image](https://hackmd.io/_uploads/Sy1wNdU86.png)

No final o resultado esperado são dados na pilha nessa ordem:

8 1 4 2

### Testbench

O testbench vai verificar o empilhamento, transferência da pilha para memória e desempilhamento. No final ele vai ler o ponteiro as primeiras 4 posições do ponteiro e criar um número decimal usando o seguitne critério:

$$
N = \sum_{i=0}^4 stack[i]\cdot10^i
$$

Dessa forma o número esperado ao final de todas as instruções é 2418. Esta foi a forma encontrada para apresentar o teste de todas as instruções, outros testes foram feitos (só pra ele nao xiar kkkk) mas foi escolhido apresentar o atendimento dessas instruções de transferencia de dados a partir deste programa

![image](https://hackmd.io/_uploads/Hy1wvOLI6.png)


### Resultados

![image](https://hackmd.io/_uploads/BkZ2P_IIa.png)

## Programa ula.asm

Breno é bom deixar claro que a ula foi testada antes.. e que a ideia aqui foi testar a execução correta do programa e não testar ostensivamente diferentes operações.

A ideia desse programa é básica: testar todas as instruções da seguinte forma: Insere os valores dos operandos através do PUSH_I (push imediato), executa a operação e faz um desempilhamento para esvaziar a pilha e não atrapalhar na próxima instrução

Como ele ficou fino.. da pra colocar o resultado dele do lado dele kkkk e já apresentar a saída do testbench

Segue o programa:

![image](https://hackmd.io/_uploads/rkDpd_LI6.png)

### Testbench

![image](https://hackmd.io/_uploads/HyKUYOUUT.png)

### Resultados

![image](https://hackmd.io/_uploads/S19pFOU8T.png)

## Programa loop.asm

Este programa teve como finalidade testar a capacidade de se gerar desvios, o programa teve com objetivo criar um loop infinito para testar isoladamente a função GOTO assim como capacidade da arquitetura de mudar o contador de programa.

![image](https://hackmd.io/_uploads/BkOkiOL8T.png)

As instruções linhas 0:2 fazem uma soma de 1+1 e devolvem a saída na pilha. A instrução da linha 3 retorna para a linha 1, que vai adicionar um operando e a linha 2 volta a somar o resultado da ula com o operando 1. Espera-se que este programa nunca chege nas linhas 4, 5 e 6.

### Testbench

Para o testbench, será verificado se no estado do controlador de decodificação, qual o número da instrução que está sendo executada. (todas as instruções passam por esse estado, por isso a escolha)

![image](https://hackmd.io/_uploads/HkGZpuUUp.png)


### Resultados

![image](https://hackmd.io/_uploads/HyAVRdLIT.png)


De forma similar foi feito para testar a capacidade de se gerar desvios para todas as branches

![image](https://hackmd.io/_uploads/H10_yFLL6.png)

A ideia foi gerar um test verdadeiro e um falso, o primeiro desvio através do branch é verdadeiro é pula pula para instrução 2 e o segundo desvio através dos branches é falso e não deve pular para instrução 0.

Nesta configuração a arquitetura deve ser capaz de se chegar na instrução 5 apenas se a instrução de branch estiver correta para casos de desvio ou não.

Foi testado para todas as instruções mudando os operandos para fazer estes testes e omitido mas tá lá zipado kkk todas as isntruções chegaram na instrução 5 colocando 20 na pilha.

## Programa routines.asm

Para testar a capacidade de rotina foi feito uma funçãoq ue soma 2 numeros que já estão na pilha e desempilha estes numeros para memória.

![image](https://hackmd.io/_uploads/ByTjeFLLa.png)

Neste programa, a rotina é iniciada no endereço de programa 6 e é executada as instrução 6,7, 8 quando a instrução de retorno RET é utilizada. Sendo assim é esperado que a função seja chamada 2 vezes, uma para executar 2+3 e outra para fazer 3+4

O testbench é esse ai.. ele verifica através do endereço de programa, qual instrução tá sendo executada e em que ordem

![image](https://hackmd.io/_uploads/ByTT3YULa.png)

### Resultados

![image](https://hackmd.io/_uploads/HkuJ3FUUa.png)

Como esperado a routina no endereço de programa 6 foi chamada 2x, uma vez logo após a instrução no endereço 2 e outra logo após a instrução no endereço 5, sendo essas duas instruções, uma CALL. É possível verificar também a capacidade da cpu de retornar para a instrução que estava sendo executada após o RET.

### Waveform

Aproveitando e mostrando o valor no testbench

Tá no telegram essas imagens, será que bate botar wave formw???? saindo aqui do café 21:57 fui kkk

![image](https://hackmd.io/_uploads/ByTKjFUI6.png)

![image](https://hackmd.io/_uploads/Hk79sFUU6.png)

