Skip to content

Commit

Permalink
update porj nadm
Browse files Browse the repository at this point in the history
  • Loading branch information
rafaelcorsi committed Oct 18, 2023
1 parent 2a183d6 commit 4c04c3e
Show file tree
Hide file tree
Showing 3 changed files with 102 additions and 66 deletions.
16 changes: 4 additions & 12 deletions docs-src/class/asm-lab-2.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,7 @@ Ao final desse lab você deve ser capaz de:

!!! info
Vamos continuar com o mesmo repositório criado no lab passado.

!!! tip
Para fazer esse lab, você deve ter lido a teoria sobre [mapa de memória](https://insper.github.io/Z01.1/Teoria-Z01-mapadeMemoria/)

!!! note
Dúvidas sobre assembly? [Z01->Resumo Assembly](https://insper.github.io/Z01.1/Util-Resumo-Assembly/)

Esse lab deve ser feito no Z01Simulador, para abrir o programa digitar `bits nasm gui` com o **env ativado!**

Todos os arquivos possuem teste, após programar no `Simulador` execute o teste
<!--
## LEDs
Expand Down Expand Up @@ -153,16 +144,17 @@ Problemas relacionado a chave do nosso Z01
Dica: Utilize a instrução `notw %D` para inverter o valor salvo no registrador `%D`
## LCD
-->

Trabalhando com o LCD.

!!! exercise "LCD1"
- File: `lcd1.nasm`
- Test: Visual no simulador
- Test: execute `pytest lcd1` e visualize o arquivo gerado

Task: Execute o arquivo no simulador o observe os 16 primeiros pxs acenderem

Dica: `movw $-1, (%A)`: Gera o vetor `1111111111111` e grava no endereço que %A aponta (primeiros pxs do LCD)
Dica: `movw $-1, (%A)`: Gera o vetor `1111111111111` e grava no endereço que `%A` aponta (primeiros pxs do LCD)

!!! exercise "LCD2"
- File: `lcd2.nasm`
Expand Down
149 changes: 95 additions & 54 deletions docs-src/class/asm-proj.md
Original file line number Diff line number Diff line change
@@ -1,84 +1,125 @@
# E - Assembly

| Entrega |
|--------------|
| 24/10 - Segunda |

![Assembly](figs/F-Assembly/sistema-assembly.svg)
| Deadline: {{proj_asm_deadline}} |
|-----------------------------------------------------------------------------------|
| ^^MEDIADOR CRIA PRIMEIRO^^ [Classroom]( {{proj_asm_classroom}}) |
| ^^AO FINAL:^^ Preencher para entregar [==Mediador==]( {{proj_forms_mediador}}) |
| ^^AO FINAL:^^ Preencher para entregar [==Dev==]( {{proj_forms_dev}}) |

Nesse projeto cada grupo terá que implementar diversos códigos em assembly a fim de entendermos a linguagem e as limitações do hardware propostos.

## Instruções

Seguir as instruções a seguir para desenvolvimento do projeto.

### Entendendo a Organização do Projeto

Agora iremos trabalhar na pasta `sw/nasm/` do repositório de entregado grupo. A pasta possui diversos arquivos `.nasm` assim como o arquivo `nasm_test.py` que executa os testes.

### Executando o Script de Teste

Abra o terminal na pasta `sw/nasm/` e execute o pytest

```bash
$ pytest -k MODULO
```

Lembre que o módulo é o programa `nasm` que deseja testar.

## Projeto
## Descrição

Deve-se implementar diversos programas na linguagem de máquina do Z01 que irão manipular a memória RAM a fim de implementar o que é pedido. **A descrição a seguir está classificada em ordem de dificuldade, começando pelos mais simples.**

### Módulos

A descrição de cada módulo está localizada no cabeçalho do arquivo.**
A descrição de cada módulo está localizada no cabeçalho do arquivo.

!!! info ""
🧩 indica código com certo grau de dificuldade.

- abs
- **Arquivo** : `abs.nasm` (==lab 13==)
- max
- **Arquivo** : `max.nasm` (==lab 13==)
- mult
- **Arquivo** : `mult.nasm` (==lab 13==)
- mod
- mod
- **Arquivo** : `mod.nasm`
- div
- div 🧩
- **Arquivo** : `div.nasm`
- pow
- pow 🧩
- **Arquivo** : `pow.nasm`
- É par
- **Arquivo** : `isEven.nasm`
- String length
- **Arquivo** : `stringLength.nasm`
- Chaves e Leds
- **Arquivo** : `SWeLED.nasm`
- É impar
- **Arquivo** : `isOdd.nasm`
- Number of 4
- **Arquivo** : `numberOf4.nasm`
- Number of x
- **Arquivo** : `numberOfx.nasm`
- Vector Mean 🧩
- **Arquivo** : `vectorMean.nasm`
- Linha
- **Arquivo** : `LCDlinha.nasm`
- **Arquivo** : `linha.nasm`
- Edite o arquivo para desenhar uma linha completa no lcd
- vectorFill 🧩
- **Arquivo**: `vectorFill.nasm`
- ==Consulte explicação detalhada no final da página==

### Conceito B

#### Conceito B

- Palíndromo
- add32
- **Arquivo**: `add32.nasm`
- ==Consulte explicação detalhada no final da página==
- Palíndromo 🧩
- **Arquivo** : `palindromo.nasm`
- Fatorial
- Fatorial 🧩
- **Arquivo** : `fatorial.nasm`
- Vector Mean
- **Arquivo** : `vectorMean.nasm`
- String length 🧩
- **Arquivo** : `stringLength.nasm`
- LCD Quadrado
- **Arquivo** : `LCDquadrado.nasm`
- **Arquivo** : `quadrado.nasm`

#### Conceito A
### Conceito A

- Multiplo de dois:
- Multiplo de dois
- **Arquivo** : `multiploDeDois.nasm`
- MatrizDeterminante:
- MatrizDeterminante 🧩
- **Arquivo** : `matrizDeterminante.nasm`
- Chaves e Leds 2
- **Arquivo** : `SWeLED2.nasm`
- Letra Grupo
- **Arquivo** : `LCDletraGrupo.nasm`
- **Arquivo** : `letra.nasm`

#### Extra
## Explicação

A seguir explicação detalhada para alguns módulos

### Add32.nasm

Todas as operações do nosso computador Z01.1 são de 16 bits (dai que vem o 'w' no final dos comandos, de word). No entanto, queremos utilizá-lo agora para realizar uma operação matemática de 32 bits.

Considere que os 16 bits MAIS significativos (MSB) de um número W estejam armazenados na RAM[0] e os 16 bits MENOS significativos (LSB) estejam armazenados na RAM[0]. Considere também que os 16 bits MAIS significativos de um número T estejam armazenados na RAM[2] e os 16 bits MENOS significativos estejam armazenados na RAM[3].

``` text
| RAM | Variável | byte |
|-----|----------|------|
| 0 | W[15:8] | MSB |
| 1 | W[7:0] | LSB |
| 2 | T[15:8] | MSB |
| 3 | T[7:0] | LSB |
| 4 | R[15:8] | MSB |
| 5 | R[7:0] | LSB |
```

Faça um código em Assembly que:

- calcula: `R = W + T`.
- salve os 16 bits MAIS significativos do resultado na RAM[4] e os 16 bits MENOS significativos na RAM[5]

> DICA:
>
> Simule no papel antes de sair programando, entenda o que deve ser feito!
Testes:

- `noOverflow`: Testa apenas a soma dos termos MSB + MSB e LSB + LSB independente
- `onlyOverflow`: Testa apenas o estouro de LSB + LSB -> MSB
- `full`: Teste completo

### vectorFill.nasm

Escreva um programa em assembly que preenche um vetor (que está salvo na memória) com uma constante. O vetor começa sempre na RAM[5] e possui tamanho definido pela RAM[4]. O valor da constante (a ser usado) está salvo na RAM[3].

Veja o exemplo a seguir (`-k vectorFill_example`):

```
INICIAL FINAL
-------------------------------------
valor ---> RAM[3]: 7 |
tamanho ---> RAM[4]: 4 |
--- RAM[5]: 0 | RAM[5]: 7
| RAM[6]: 0 | RAM[6]: 7
vetor | RAM[7]: 0 ===> RAM[7]: 7
--- RAM[8]: 0 | RAM[8]: 7
RAM[9]: 0 | RAM[9]: 0
```

Criar um programa em python que converte um tabela do excel (onde cada célula equivale a um px pintado) em um código nasm que executa no Z01 e gera a imagem da tabela
Testes:

- `vectorFill_example`: Testa o exemplo (valor 7 e tamanho 4)
- `vectorFill_generic`: Teste genérico.
3 changes: 3 additions & 0 deletions mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,9 @@ extra:
proj_seq_classroom: https://classroom.github.com/a/ajXuOGbs
proj_seq_deadline: 07/10 - Domingo

proj_asm_classroom: https://classroom.github.com/a/Ks7en_0Q
proj_asm_deadline: 30/10 - Segunda

proj_forms_mediador: https://docs.google.com/forms/d/e/1FAIpQLSf3zNsrLDsf4Y_nQDBNIvMCgc7Bo8TeZhxcpInMACX4pCnOxQ/viewform?usp=sf_link
proj_forms_dev: https://docs.google.com/forms/d/e/1FAIpQLSdHZselm85uDTPkpzhUef5t8xVNvONvJsETDzoJDp85oIU4jQ/viewform?usp=sf_link

Expand Down

0 comments on commit 4c04c3e

Please sign in to comment.