En aquesta pàgina podeu trobar un simulador del Computador Més Senzill Possible versió 1 (SAP-1, Simple-As-Possible Computer), proposat per Albert Paul Malvino i Jerald A. Brown al llibre «Digital Computer Electronics» (Editorial McGraw-Hill Education).
L’animació ha estat creada amb fins docents i educatius amb Processing i publicada a la web mitjançant la llibreria Processing.js per a l’assignatura de «Fonaments de Computadors» del Grau en Enginyeria Informàtica de la Universitat Rey Juan Carlos. També es fa servir regularment en activitats divulgatives com ara la Setmana de la Ciència i en tallers d’introducció a l’Arquitectura de Computadors.
Introducció:
El SAP-1 és computador amb una arquitectura basada en un bus. Conté els següents elements:
- Bus multiplexat de dades/adreces d’ample 8 bits.
- Registres actius per flanc, de 4 o 8 bits. Els registres que poden escriure al bus contenen un buffer triestat intern. Aquells que no hi escriuen no tenen aquest buffer. Els registres són:
- Comptador de programa (PC, program counter).
- Registre d’entrada i d’adreça de memòria (input and MAR, input and memory address register).
- Registre d’instrucció (IR, instruction register).
- Acumulador (A, accumulator).
- Registre B (B register).
- Registre de sortida (OUT, output register).
- Memòria d’accés aleatori (RAM, random-access memory) de lectura-escriptura de mida 16×8 (16 adreces de 8 bits cadascuna). Està unificada per tal d’hostatjar a la vegada dades (variables) i un programa.
- Unitat aritmeticològica (ALU, arithmetic-logic unit) amb dues operacions disponibles (sumar i restar) per a dades en complement a 2 de 8 bits (des de -128 fins a +127, inclusivament).
- Display de díodes LED per visualitzar dades emmagatzemades al registre OUT. En aquest simulador, mostrem directament el valor numèric que correspon als díodes LED en base decimal.
- Unitat de control (CU, control unit), de tipus controlador-seqüenciador.
Característiques principals del SAP-1:
- Màquina basada en acumulador, amb dos registres de propòsit específic (registres B i de sortida).
- Conjunt d’instruccions reduït (LDA, ADD, SUB, OUT, HLT).
- Les instruccions d’ALU (ADD/SUB) realitzen operacions per a 2 operands, on un operand (l’acumulador) és a la vegada font i destinació. L’ample de l’ALU (ample de paraula) és 8 bits.
- Modes d’adreçament: absolut a memòria i implícit.
- Les dades s’interpreten en complement a 2 per tal de permetre la resta.
- Bus de tipus multiplexat, és a dir, transmet alternativament dades o adreces. L’ample n’és 8 bits, encara que les adreces només són d’ample 4.
- Memòria unificada per a dades i un programa (arquitectura de von Neumann), de 16 bytes. Per defecte el programa comença a l’adreça 0.
- Format d’instrucció de 8 bits (4 bits per al codi d’operació + 4 bits per a l’adreça de l’operand, si n’hi ha).
- Les instruccions s’executen en diversos cicles (camí de dades multicicle). La unitat de control pot construir-se de forma cablejada o microprogramada. En aquest segon cas, calen dues memòries ROM auxiliars.
Programa per defecte:
El simulador proporciona un programa precarregat per defecte, que és el que ve mencionat a l’exemple 10-3 de la pàgina 145 del llibre de Malvino i Brown. Aquest programa en assemblador és el següent:
LDA 9 ADD 10 ADD 11 SUB 12 OUT HLT
Cadascuna de les instruccions ocupa 1 byte en memòria. La primera instrucció del programa s’emmagatzema a l’adreça 0 de la memòria RAM. Totes les instruccions del programa ocupen adreces consecutives, sense deixar-hi buits intermedis. Com que aquest programa té 6 instruccions, l’última s’emmagatzema a l’adreça 5. Per altra banda, a les adreces de memòria 9, 10, 11 i 12 es troben emmagatzemades les dades numèriques 16, 20, 24 i 32. La resta d’adreces es troben sense assignar i no es fan servir en aquest programa.
Les instrucciones en assemblador del SAP-1 tenen un mnemònic, que és una seqüència de 3 lletres que permet distingir una instruccio d’altra. Aquest mnemònic es correspon amb el codi d’operació (COp), que són els 4 bits més significatius de la instrucció en llenguatge màquina (binari) i que són proporcionats pel registre d’instrucció (IR) a la unitat de control (CU).
Les instruccions LDA, ADD i SUB van seguides d’un operand numèric (de 0 a 15 en assemblador, o els 4 bits menys significatius de la instrucció en binari). Es tracta de l’adreça de memòria a la qual es troba realment la dada amb què volem treballar (adreçament absolut a memòria). En aquestes instruccions hi ha sempre un segon operand implícit, és a dir, que no s’assenyala expressament en assemblador, però que es fa servir a l’operació. Es tracta del registre acumulador (A), que guarda el resultat de l’última operació.
Les instruccions OUT i HLT no tenen operands en assemblador. OUT utilitza com a operands implícits l’acumulador (A) i el registre de sortida (OUT). HLT no fa servir cap mena d’operand, ja que la seva funció és indicar al simulador que ha d’acabar l’execució del programa.
Totes les instruccions tenen el comptador de programa (PC) com a operand implícit, ja que és incrementat en 1 unitat perquè apunti a la següent instrucció.
Què fa aquest programa? Molt senzill.
- Tots els registres del SAP-1, fins i tot l’acumulador (A), comencen la simulació amb el valor 0. La instrucció LDA 9 cerca la dada que està guardada a l’adreça de memòria 9 i l’escriu a A. Com que en aquesta adreça hi és la dada 16, A passa a valer 16 (en binari 00010000).
- La instrucció ADD 10 busca la dada que està guardada a l’adreça de memòria 10 (que val 20) i l’afegeix al valor contingut a A (16). El resultat (36) es torna a guardar a A (36 en binari és 00100100).
- La instrucció ADD 11 cerca la dada que està guardada a l’adreça de memòria 11 (que val 24) i l’afegeix al valor contigut a A (36). El resultat (60) es torna a guardar a A (60 en binari és 00111100).
- La instrucció SUB 12 busca la dada que està guardada a l’adreça de memòria 12 (que val 32) i la resta al valor contigut a A (60). El resultat (28) es torna a guardar a A (28 en binari és 00011100).
- La instrucció OUT llegeix el valor de l’acumulador i l’envia al registre OUT. Per això, OUT passa a valer 28 (000111000).
- Per acabar, la instrucció HLT atura el simulador. Per tornar a executar el programa, o per tal de modificar-lo, cal fer clic al botó «Reiniciar».
Funcionament del simulador:
- Totes les parts interactives es dibuixen en color groc i subratllades i canvien de color en posar el ratolí al damunt. Les parts inhabilitades es mostren en color gris.
- Just després que es carregui la pàgina apareix una finestra de benvinguda. Premeu el botó «Acceptar» perquè desaparegui.
- Aleshores es mostra l’estructura interna del SAP-1. Els únics elements interactius permesos són la memòria RAM i la barra de desplaçament que controla la velocitat de l’animació.
- Primerament, cal carregar un programa a la memòria. Per això, feu clic a la memòria RAM. Apareixerà una nova pantalla amb el contingut de la memòria en aquest moment, que inicialment està buida (tots els bits valen 0). En prémer sobre qualsevol de les 16 adreces de memòria, se’n desassembla el contingut, és a dir, es reinterpreta el valor emmagatzemat com si fos adés una instrucció, adés una dada. Per altra banda, també podeu carregar el programa per defecte. Si voleu restablir la memòria i buidar-ne el contingut, premeu el botó «Esborrar programa». Per tal de retornar a la pantalla principal del simulador, premeu el botó «Tornar». Fixeu-vos-hi que, fins que no hi hagi un programa carregat a la memòria, no podreu iniciar la simulació.
- Una vegada de tornada a la pantalla principal, hi ha dues opcions per engegar el simulador. Per una banda, podeu prémer el botó de «Play» (triangle que apunta cap a la dreta), situat a la part inferior esquerra de la pantalla. En aquest moment es posa en marxa el rellotge (CLK) i comença l’execució del programa carregat en memòria. El programa s’executa d’una tirada. Amb la simulació engegada, el botó de «Play» esdevé un botó de pausa. Podeu aturar la simulació i tornar a engegar-la tantes vegades com desitgeu. Per altra banda, hi ha un botó de «Play 1/2 CLK», que només està disponible quan el simulador està en mode pausa. En prémer aquest botó, s’avança només mig cicle de rellotge en l’execució del programa, cosa que és molt útil per estudiar amb detall la seqüència de passos que van succeint.
- En qualsevol moment i sense caldre pausar el simulador, es pot modificar la velocitat d’execució del programa mitjançant la barra de desplaçament de la part inferior dreta de la pantalla. Com més a la dreta sigui la barra, més ràpida és l’execució.
- Si voleu tornar a començar la simulació des del principi, premeu el botó «Reiniciar» (dos triangles que apunten cap a l’esquerra). Fixeu-vos-hi que només el podeu prémer quan el simulador està en mode pausa. Reiniciar el simulador no esborra el programa carregat a la memòria. Si voleu modificar-lo, podeu tornar a fer clic sobre la memòria RAM.
- Durant l’execució d’un programa, veureu a la part superior dreta de la pantalla la paraula de control generada per la unitat de control. Aquests senyals s’activen i desactiven en els moments precisos per tal de realitzar la correcta execució dels programas.
- Al bell mig de la pantalla es mostra el bus de 8 bits. El color negre es reserva per al nivell baix de tensió (0 volts) o valor 0 lògic; el color vermell es reserva per al nivell alt de tensió (5 volts) o valor 1 lògic; per acabar, el color gris es reserva per a l’estat d’alta impedància (desconnexió o corrent elèctric nul), que es produeix quan no hi ha cap component del computador escrivint al bus.
- Durant cadascun dels passos en què es divideix l’execució del programa, els elements actius es mostren de color blanc i els inactius, de color gris. S’entén que un element és actiu quan està escrivint un valor al bus o llegint-ne, o quan està realitzant alguna operació interna.
- L’execució del programa continua automàticament fins que s’assoleixi la instrucció HLT (aturada), o bé, si es detecta un codi d’operació no vàlid. Per tal de començar una altra vegada, cal prémer el botó de «Reiniciar».
Tornar a l’índex d’animacions (en castellà)