Little Man ComputerEl Little Man Computer (LMC) és un model educatiu d'ordinador, creat pel Dr. Stuart Madnick en 1965.[1] L'LMC s'utilitza generalment per a l'ensenyament, ja que modela un ordinador senzill amb arquitectura de von Neumann, que té totes les característiques bàsiques d'un ordinador modern. Pot ser programat en codi màquina (però en sistema decimal en lloc de binari) o en codi assemblador.[2][3][4] Arquitectura del sistemaEl model LMC es basa en el concepte d'un petit home tancat en una habitació petita o un ordinador en aquest escenari. En un extrem de l'habitació, hi ha 100 bústies (memòries), numerades del 0 al 99 i cada una pot contenir una instrucció o dada de 3 dígits (del 000 al 999). A més, hi ha dues bústies en l'altre extrem etiquetades entrada i sortida que s'utilitzen per a la recepció i la sortida de dades. Al centre de l'habitació, hi ha una àrea de treball que conté una senzilla calculadora amb dues funcions (suma i resta) coneguda com a acumulador i un comptador reprogramable conegut com el comptador de programa. El comptador de programa conté l'adreça de la següent instrucció que l'homenet durà a terme. Aquest comptador de programa normalment s'incrementa en 1 després d'executar cada instrucció, permetent que l'home petit treballe de forma seqüencial al llarg del programa. El programa incorpora instruccions de bifurcació que permeten realitzar iteracions (bucles) i estructures de programació condicionals, fixant el comptador de programa a una adreça de memòria no seqüencial si es compleix una condició determinada (normalment el valor en l'acumulador és zero o positiu). Tal com s'especifica en l'arquitectura von Neumann, la memòria conté tant les instruccions com les dades. Per tant, és necessari tindre cura d'aturar el comptador de programa quan s'arriba a una adreça de memòria que conté dades, o l'homenet intentarà tractar-lo com una instrucció. Per a utilitzar l'LMC l'usuari carrega les dades en les bústies i després l'indica al petit homenet que comence l'execució, a partir de la instrucció emmagatzemada a l'adreça de memòria zero. Restablir el comptador de programa a zero reinicia eficaçment el programa. Cicle d'execucióPer a executar un programa, el petit home realitza els següents passos:
OrdresEncara que l'LMC sí que reflecteix el funcionament real dels processadors binaris, es va triar la simplicitat dels nombres decimals per a minimitzar la complexitat als estudiants, ja que els pot resultar incòmode treballar en un sistema binari o hexadecimal. InstruccionsAlguns simuladors LMC es programen utilitzant directament instruccions numèriques de 3 dígits i d'altres amb codis mnemònics de 3 lletres i etiquetes. En qualsevol cas, el conjunt d'instruccions és deliberadament molt limitat (normalment unes deu instruccions) per a simplificar la comprensió. Si l'LMC utilitza codis mnemotècnics i etiquetes, després, aquests, es converteixen en instruccions numèriques de 3 dígits quan s'assembla el programa. El primer dígit d'una instrucció numèrica representa l'ordre a executar i els dos últims dígits representen l'adreça de memòria de la bústia corresponent a aquesta ordre. La taula de sota mostra un conjunt típic d'instruccions numèriques i els codis mnemotècnics equivalents.
ExemplesUtilització de codis d'instruccions numèriquesAquest programa s'ha escrit utilitzant codis numèrics (instruccions 901 a la 000). El programa demana dos números com a ENTRADA i n'obté la resta com a SORTIDA. Observeu que l'execució comença a la bústia 00 i acaba a la bústia 07. Els desavantatges de la programació amb LMC utilitzant codis d'instrucció numèrics es descriuran després.
Utilització de codis mnemònics i etiquetesEl llenguatge assemblador és un llenguatge de programació de baix nivell que utilitza la mnemotècnia i etiquetes en lloc de codis d'instruccions numèriques. Tot i que l'LMC només utilitza un conjunt limitat de mnemotècnics, la conveniència d'utilitzar una regla mnemotècnica per a cada instrucció del llenguatge assemblador es fa evident en el mateix programa que es mostra a continuació (el programador ja no ha de recordar-se d'una sèrie de codis numèrics anònims i pot programar amb un conjunt de codis mnemotècnics més fàcils de memoritzar). Si la sentència és una instrucció que implica una adreça de memòria (ja sigui una instrucció de salt o dades que s'han de càrregar o guardar enlloc), llavors s'utilitza una etiqueta per a nomenar aquesta adreça.
INP STA FIRST INP STA SECOND LDA FIRST SUB SECOND OUT HLT FIRST DAT SECOND DAT EtiquetesSense etiquetes el programador necessita calcular manualment les bústies (adreces de memòria) on emmagatzemar les dades. En l'exemple amb codis numèrics, si s'afegeix una nova instrucció abans de la instrucció HLT final, aleshores es mou la instrucció HLT des de la bústia 07 a la 08 (l'etiquetatge de d'adreces del programa comença en la posició 00). Suposem que l'usuari introdueix 600 com a primera entrada (instrucció 901 de la bústia 00). La instrucció 308 (bústia 01) fa que aquest valor s'emmagatzemi en la bústia 08, i sobreescriu la instrucció 000 (HLT) amb el valor 600. La instrucció 600 significa saltar a l'adreça (bústia) 00 del programa, i en lloc d'aturar-se, el programa quedaria atrapat en un bucle sense fi. Per a solucionar aquesta dificultat, la majoria dels llenguatges assembladors (incloent l'LMC) combinen els mnemònics amb etiquetes. Una etiqueta no és més que una paraula que s'utilitza per a nomenar qualsevol adreça de memòria on s'emmagatzema una instrucció o dades, o per referir-se a aquesta adreça en una instrucció. Quan un programa s'assembla:
En l'exemple de llenguatge assemblador que utilitza mnemotècnia i etiquetes, si una nova instrucció s'insereix abans de la instrucció HLT final, llavors la ubicació de l'adreça marcada amb l'etiqueta FIRST estaria ara en la posició de memòria 09 en lloc de 08, i la primera instrucció STA es convertiria al 309 (STA 09) en lloc de 308 (STA 08) quan s'assemble el programa. Per tant, les etiquetes s'utilitzen per a:
ExempleAquest programa demana una entrada a l'usuari, i fa un compte enrere fins a zero. INP LOOP SUB ONE // Etiqueta aquesta instrucció com LOOP i resta el valor d'ONE al valor de l'acumulador OUT BRZ QUIT // Si el valor de l'acumulador és 0, salta a l'adreça etiquetada QUIT BRA LOOP // Si el valor de l'acumulador no és 0, salta a l'adreça etiquetada LOOP QUIT HLT // Etiqueta aquesta adreça com QUIT ONE DAT 1 // Emmagatzema 1 en aquesta adreça de memòria, i l'etiqueta ONE (declaració de variables) Aquest programa demana una entrada d'usuari, calcula el seu quadrat, mostra la resposta i torna a repetir. La introducció d'un zero finalitza el programa. START LDA ZERO // Inicialitza l'execució del programa múltiple STA RESULT STA COUNT INP // Entrada proporcionada per l'usuari BRZ END // Salt del programa a END si entrada = 0 STA VALUE // Emmagatzema l'entrada com a VALUE LOOP LDA RESULT // Carrega el resultat en RESULT ADD VALUE // Suma l'entrada VALUE a RESULT STA RESULT // Emmagatzema el nou resultat en RESULT LDA COUNT // Carrega el compte COUNT ADD ONE // Suma ONE al comtpe COUNT STA COUNT // Emmagatzema COUNT SUB VALUE // Resta l'entrada VALUE a COUNT BRZ ENDLOOP // Si zero (VALUE suma RESULT VALUE vegades) salta a ENDLOOP BRA LOOP // Salta a LOOP per a continuar sumant VALUE a RESULT ENDLOOP LDA RESULT // Carrega RESULT OUT // Trau RESULT BRA START // Salta a START per a començar i demanar altre VALUE END HLT // S'atura (S'ha introduït un zero per fer-ho!) RESULT DAT // Resultat computat (per defecte 0) COUNT DAT // Comptador (per defecte 0) ONE DAT 1 // Constant amb valor 1 VALUE DAT // Entrada proporcionada per l'usuari, el valor que volem al quadrat (per defecte 0) ZERO DAT // Constant amb valor 0 (per defecte 0) Nota: Si no hi ha dades després d'una declaració DAT, llavors s'emmagatzema a l'adreça de memòria el valor predeterminat 0. Referències
Enllaços externs
|
Portal di Ensiklopedia Dunia