title: Instruction step
text: # Instruction step
  
  Instruction step è l'esecuzione di una singola istruzione di un programma per computer. La modalità di esecuzione step-by-step (passo-passo) serve per determinare come sta funzionando un programma. È utilizzata sia per verificare la correttezza del flusso di programma durante l'esecuzione del software, che la corretta valorizzazione delle variabili dopo l'esecuzione di una singola istruzione (single step).
  
  Nel caso di un programma in linguaggio di alto livello, un singolo statement può corrispondere a diverse istruzioni in linguaggio macchina, mentre nel linguaggio Assembly ciascuna istruzione corrisponde ad un passo di programma.
  
  Ci sono diverse tecniche per interrompere l'esecuzione del programma. Nei primi computer si ricorreva ad un segnale hardware di interrupt, attivato dopo un numero di cicli macchina corrispondenti all'istruzione da eseguire. Un hardware complesso consentiva di emulare il processore, interrompendo l'esecuzione dopo ogni istruzione e visualizzare il contenuto di registri e variabili (tracing).
  
  Successivamente sono state introdotte dai costruttori di microprocessori istruzioni di interruzione software, che possono essere temporaneamente sostituite all'istruzione successiva a quella da eseguire, per ottenere l'interruzione del programma. Tuttavia la tecnica di interruzione hardware rimane ancora necessaria in caso il programma non possa essere sovrascritto (perché residente in PROM, piuttosto che in RAM). In ogni caso, sia con l'interruzione hardware che software, il controllo passa and un altro programma, detto debugger, che visualizza il contenuto di registri e variabili e attende un comando dal programmatore.
  
  Generalmente i comandi supportati dal debugger sono:
  
  * L'avvio da un punto qualsiasi del programma
  * L'esecuzione di una istruzione (single step), o più istruzioni
  * L'inserimento di breakpoints, eventualmente condizionati a specifici eventi
  * L'ispezione e modifica di variabili, dati e registri
  * L'ispezione di parti del programma
  
  Nelle famiglie più recenti di processori sono state incorporate delle apposite interfacce di debug (ad esempio JTAG e ONCE), con opportuni microprogrammi che semplificano notevolmente le procedure di debugging. Tali interfacce possono essere gestite tramite applicazioni visuali su PC, collegato per mezzo di una porta seriale, al target. Queste applicazioni consentono di effettuare il debugging sul codice sorgente in linguaggio ad alto livello, svincolando il programmatore dal trattamento del codice macchina, dal calcolo degli indirizzi, dalla notazione esadecimale ed altre difficoltà del debugging di basso livello.
  
  