b"\n_START_ARTICLE_\nLittle man computer\n_START_PARAGRAPH_\nIl Little Man Computer (LMC, letteralmente L'omino-computer) \xc3\xa8 un modello di computer a istruzioni, creato dal dottor Stuart Madnick nel 1965._NEWLINE_Viene generalmente usato come mezzo di istruzione, perch\xc3\xa9 rappresenta un semplice computer con Architettura di von Neumann, la base di ogni computer contemporaneo. Pu\xc3\xb2 essere programmato sia in linguaggio macchina sia in linguaggio Assembly.\n_START_SECTION_\nArchitettura di sistema\n_START_PARAGRAPH_\nL'idea di base del LMC \xc3\xa8 la seguente: si immagina un omino chiuso in una stanzetta (o direttamente dentro il computer). Da un lato della stanza, ci sono 100 buche delle lettere (che rappresentano la memoria del computer), numerate da 0 a 99. Ognuna di esse pu\xc3\xb2 contenere un'istruzione oppure un dato, codificati con 3 caratteri numerici, dal valore 000 al valore 999._NEWLINE_Dall'altro lato della stanza ci sono invece due ulteriori buche delle lettere, chiamate INBOX e OUTBOX, usate per ricevere dati e trasmetterli in uscita. Al centro della stanza c'\xc3\xa8 una sorta di scrivania da lavoro con un calcolatrice che ha solo due semplici funzioni: addizione e sottrazione. La calcolatrice rappresenta l'accumulatore. Assieme alla calcolatrice \xc3\xa8 presente un contatore azzerabile, che rappresenta il Program Counter._NEWLINE_Il Program Counter contiene l'indirizzo della prossima istruzione che l'Omino dovr\xc3\xa0 portare a termine. In condizioni normali, non appena tale istruzione viene eseguita, il Program Counter viene incrementato di 1: in questo modo l'Omino svolger\xc3\xa0 tutte le istruzioni in sequenza. \xc3\x88 per\xc3\xb2 possibile attraverso istruzioni di salto codificare istruzioni di iterazione (cicli), o anche strutture di selezione condizionata del tipo if-else, queste ultime semplicemente settando il Program Counter a una specifica istruzione se qualche particolare condizione \xc3\xa8 verificata, ad esempio se il valore mostrato dalla calcolatrice \xc3\xa8 zero oppure \xc3\xa8 positivo._NEWLINE_Proprio come nell'Architettura di von Neumann, la memoria contiene sia istruzioni sia dati, bisogna quindi fare attenzione a fermare il contatore quando si raggiunge un indirizzo contenente dei dati, o l'Omino li considerer\xc3\xa0 istruzioni e tenter\xc3\xa0 di trattarli come tali._NEWLINE_Per utilizzare l'LMC, l'utente immette dei dati nelle buche delle lettere e poi segnala all'Omino di cominciare l'esecuzione. L'Omino comincer\xc3\xa0 dall'istruzione contenuta nell'indirizzo di memoria numero zero: in questo modo, resettando il Program Counter a zero si riavvia il programma.\n_START_SECTION_\nComandi\n_START_PARAGRAPH_\nAnche se l'LMC in realt\xc3\xa0 rappresenta il lavoro di un processore binario, \xc3\xa8 stato scelto di utilizzare numeri decimali per semplicit\xc3\xa0 e per venire incontro agli studenti che potrebbero non essere accostumati a lavorare con il sistema binario o esadecimale.\n_START_SECTION_\nEsempio\n_START_PARAGRAPH_\nQuesto programma riceve un numero in input dall'utente e lo decrementa di uno fino ad arrivare a zero._NEWLINE_INP_NEWLINE_LOOP SUB ONE // Etichetta l'indirizzo di memoria con LOOP, l'istruzione poi sottrarr\xc3\xa0 il valore immagazzinato all'indirizzo etichettato ONE dall'accumulatore_NEWLINE_OUT_NEWLINE_BRZ QUIT // Se il valore nell'accumulatore \xc3\xa8 0, salta all'indirizzo etichettato QUIT_NEWLINE_BRA LOOP // Se il valore nell'accumulatore \xc3\xa8 diverso da 0, salta all'indirizzo etichettato LOOP_NEWLINE_QUIT HLT // Etichetta questo indirizzo di memoria con QUIT_NEWLINE_ONE DAT 1 // Immagazzina il valore 1 in questo indirizzo, e lo etichetta come ONE (dichiarazione di una variabile)_NEWLINE_Questo programma riceve un numero in input dall'utente, lo eleva al quadrato e lo emette come output, poi ripete richiedendo un nuovo numero. Inserire 0 farebbe terminare il programma._NEWLINE__NEWLINE_(Nota: un input che producesse in output un valore superiore a 999 causerebbe un errore nel programma a causa del limite di cifre consentito dal modello LMC)._NEWLINE_START LDA ZERO // Inizializza per riproduzioni multiple del programma_NEWLINE_STA RESULT_NEWLINE_STA COUNT_NEWLINE_INP // Input dell'utente_NEWLINE_BRZ END // Salta all'etichetta END se l'input = 0_NEWLINE_STA VALUE // Immagazzina input in VALUE_NEWLINE_LOOP LDA RESULT // Carica RESULT_NEWLINE_ADD VALUE // Somma VALUE, ovvero l'input dell'utente, a RESULT_NEWLINE_STA RESULT // Immagazzina il nuovo RESULT_NEWLINE_LDA COUNT // Carica COUNT_NEWLINE_ADD ONE // Somma ONE a COUNT_NEWLINE_STA COUNT // Immagazzina il nuovo COUNT_NEWLINE_SUB VALUE // Sottrae l'input dell'utente, VALUE, da COUNT_NEWLINE_BRZ ENDLOOP // Se \xc3\xa8 zero (VALUE \xc3\xa8 stato aggiunto a RESULT un numero VALUE di volte), salta a ENDLOOP_NEWLINE_BRA LOOP // Salta a LOOP per continuare ad aggiungere VALUE a RESULT_NEWLINE_ENDLOOP LDA RESULT // Carica RESULT_NEWLINE_OUT // Produce in output RESULT_NEWLINE_BRA START // Salta a START per l'inizializzazione e per ricevere un nuovo input VALUE_NEWLINE_END HLT // HALT - zero \xc3\xa8 stato immesso come input, quindi esco_NEWLINE_RESULT DAT // Calcola il risultato (0 di default)_NEWLINE_COUNT DAT // Contatore (0 di default)_NEWLINE_ONE DAT 1 // Costante, di valore 1_NEWLINE_VALUE DAT // Input dell'utente, ovvero il valore da elevare al quadrato (0 di default)_NEWLINE_ZERO DAT // Costante, di valore 0 (0 di default)_NEWLINE_Nota: Se nessun valore \xc3\xa8 specificato dopo un'istruzione DAT, di default viene immagazzinato 0."