title: SUBLEQ
text: # SUBLEQ
  
  SUBLEQ o subtract and branch if less equal (Sottrai e salta se minore o uguale a zero) è una istruzione che permette l'implementazione di un OISC, un calcolatore con una sola istruzione, e che quindi si programma senza microcodice (essendo sottintesa l'unica possibile istruzione).
  
  ## Sintassi
  
  L'istruzione richiede 3 operatori, tutti indirizzi di memoria: il contenuto del primo viene sottratto al contenuto del secondo, e se il risultato è minore o uguale a zero, setta il program counter al terzo (effettua un JUMP). Ipoteticamente, si considera un array di memoria infinito, anche se per sviluppare un emulatore occorrono dei limiti. Il listato in codice macchina è dato nella forma
  
  Le istruzioni sono codificate tramite numeri interi, positivi o negativi. Un particolare significato riveste l'indirizzo -1: l'istruzione data prima
  
  significherebbe sottrarre il contenuto della 16ª cella dalla cella -1, ovviamente inesistente: questa istruzione viene interpretata come l'invio della 16ª cella all'output e prosegue alla 3ª istruzione. Similmente l'istruzione
  
  legge dallo standard input un carattere e ne immette il valore nella cella 16. Il salto ad un valore negativo, qualunque esso sia, termina il programma. Un emulatore in C è del tipo
  
  Nel codice sopra mancano le procedure di stampa, input e lettura.
  
  ## Hello World!
  
  Il classico programma che stampa "Hello World!":
  
  ## Istruzioni derivate
  
  Vediamo come si simulano le istruzioni in pseudo-assembler. Per effettuare un JMP assoluto si usa
  
  Per simulare un'addizione (ADD A B) si ricorre al seguente codice
  
  Omettere il terzo operatore significa saltare comunque all'istruzione successiva. Per simulare una MOV A B, basta azzerare preventivamente B, e sommare.
  
  Per effettuare una moltiplicazione, occorre sommarre n volte:
  
  Una divisione viene invece effettuata per sottrazioni successive:
  
  Istruzioni con uno stack, tipo push e pop, sono possibili, usando un doppio riferimento indiretto.
  
  