SUBLEQ
# 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.

