Salta ai contenuti

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.

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.


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.

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 (+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 di in a,(n)?», «cosa succede se togli il ciclo?».
Indicatore01–23–4
Funzionamentonon funzionafunziona in parte / con aiutofunziona come richiesto
Uso delle portenessuna porta1 portaalmeno 1 IN e 1 OUT, corrette
Stile e commentiassentiminimichiari, a blocchi logici
Bonus subroutine——+1 se presente e corretta
Colloquionon rispondeparziale+1 completo

(Totale: 4 + 2 + 2 + 1 + 1 = 10)


Soluzioni (per il docente)
; 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 ciclo
; conta i caratteri: tastiera -> contatore sui LED
ld b, 0 ; contatore dei caratteri
ciclo:
in a, (0xC0) ; legge la tastiera (0 = nessun tasto)
or a
jr z, mostra ; nessun tasto: non contare
inc b ; nuovo carattere
mostra:
ld a, b
out (0x20), a ; contatore sui LED
jp ciclo
  • scambiare le porte: LED → interruttori (ingresso 0x90, uscita… 0xA0 con la LUT?);
  • “mostra solo i bit dispari degli interruttori” (and 0xAA);
  • “conta i caratteri ma mostra il valore invertito” (cpl prima dell’out);
  • “accendi tutti i LED solo se almeno due interruttori sono accesi” (richiede un po’ di logica in più: è già una mezza sfida).