UDA 4 — Esempio di prova pratica n. 2
Durata: 1 ora · Al simulatore · Punteggio: 10 punti · Argomenti: UDA 4
(porte di I/O, IN/OUT, LED, interruttori, tastiera)
Nota per il docente: prova di esempio con due tracce. Si consiglia di assegnare una traccia per classe (o una per banco) e di preparare varianti con porte/tracce diverse.
Consegna
Sezione intitolata “Consegna”Scrivi un programma in assembly che:
- assembla senza errori e gira nel simulatore;
- usa almeno una porta di ingresso e almeno una porta di uscita;
- resta in ciclo (continua a funzionare, non termina con
HALT); - è commentato (una riga di commento per ogni blocco logico).
Consegna il sorgente (il simulatore lo salva da solo: scarica il .asm) e mostra la demo.
Traccia A — “Eco invertito”
Sezione intitolata “Traccia A — “Eco invertito””Leggi gli 8 interruttori (0x90) e mostra sui LED (0x20) il loro valore invertito
bit per bit (dove l’interruttore è acceso il LED è spento e viceversa), in continuazione.
Verifica osservabile: con tutti gli interruttori spenti i LED sono tutti accesi; accendendo un solo interruttore, il LED corrispondente si spegne.
Traccia B — “Conta i caratteri”
Sezione intitolata “Traccia B — “Conta i caratteri””Ogni volta che viene premuto un tasto sulla tastiera (0xC0), incrementa un contatore e
mostralo sui LED (0x20) in binario. Attenzione: quando non c’è nessun tasto la porta
restituisce 0x00 e non si deve contare.
Verifica osservabile: i LED mostrano 0; digitando tre tasti i LED mostrano 3 (0x03);
alla nona lettura si accende anche il quarto LED (0x09).
Bonus e colloquio
Sezione intitolata “Bonus e colloquio”- Bonus (+1): incapsula la scrittura sui LED in una subroutine con un contratto chiaro (input/output/registri preservati).
- Colloquio (1 punto): rispondi a due domande del docente, ad esempio:
«perché quella porta è di ingresso?», «cosa cambia se usi
in a,(c)invece diin a,(n)?», «cosa succede se togli il ciclo?».
Griglia di correzione
Sezione intitolata “Griglia di correzione”| Indicatore | 0 | 1–2 | 3–4 |
|---|---|---|---|
| Funzionamento | non funziona | funziona in parte / con aiuto | funziona come richiesto |
| Uso delle porte | nessuna porta | 1 porta | almeno 1 IN e 1 OUT, corrette |
| Stile e commenti | assenti | minimi | chiari, a blocchi logici |
| Bonus subroutine | — | — | +1 se presente e corretta |
| Colloquio | non risponde | parziale | +1 completo |
(Totale: 4 + 2 + 2 + 1 + 1 = 10)
Soluzioni (per il docente)
Traccia A
Sezione intitolata “Traccia A”; eco invertito: interruttori -> LED (bit invertiti)ciclo: in a, (0x90) ; legge gli interruttori cpl ; inverte tutti i bit out (0x20), a ; mostra sui LED jp cicloTraccia B
Sezione intitolata “Traccia B”; conta i caratteri: tastiera -> contatore sui LED ld b, 0 ; contatore dei carattericiclo: in a, (0xC0) ; legge la tastiera (0 = nessun tasto) or a jr z, mostra ; nessun tasto: non contare inc b ; nuovo caratteremostra: ld a, b out (0x20), a ; contatore sui LED jp cicloVarianti per la classe (stesso livello)
Sezione intitolata “Varianti per la classe (stesso livello)”- scambiare le porte: LED → interruttori (ingresso
0x90, uscita…0xA0con la LUT?); - “mostra solo i bit dispari degli interruttori” (
and 0xAA); - “conta i caratteri ma mostra il valore invertito” (
cplprima dell’out); - “accendi tutti i LED solo se almeno due interruttori sono accesi” (richiede un po’ di logica in più: è già una mezza sfida).