-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
2a183d6
commit 4c04c3e
Showing
3 changed files
with
102 additions
and
66 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters