CPUsim este un mediu care permite simularea funcționării unei unități
centrale de prelucrare a calculatorului numeric. Acest program are următoarele facilităţi: - Permite definirea unui CPU propriu utilizatorului; - Permite definirea unui limbaj de asamblare şi a unui limbaj maşină al utilizatorului. CPUsim are implementat un calculator simplu denumit Wombat1 şi un limbaj de asamblare elementar pentru acest calculator, care permit rularea unor programe simple. Aceste programe pot fi rulate normal sau în regim pas cu pas. In regim pas cu pas programele pot fi rulate la nivel de instrucțiune sau la nivel de microoperație. O microoperație reprezintă toate operațiile care por fi executate într-un ciclu de ceas. Pentru început vom utiliza calculatorul Wombat1, dar pe măsură ce aplicațiile vor deveni mai complexe vom adăuga facilitățile necesare.
Procesorul calculatorului didactic Wombat1 are definite următoarele
registre:
pc (program counter) - memorează adresa instrucțiunii următoare;
acc (accumulator) – registru acumulator; ir (instruction register) – registrul de instrucțiuni; mar (memory address register) – registrul de adrese; mdr (memory data register) – registrul de date; status – registrul de stare.
Programul ce urmează să fie executat pe calculatorul Wombat1 este adus
în fereastra W1-0.a. Limbajul de asamblare a calculatorului Wombat1 este compus din 12 instrucțiuni. Aceste instrucţiuni ocupă 16 biţi dintre care primii 4 (0 - 3) reprezintă codul operației, iar ceilalți 12 – câmpul de adresă (4 – 15). In continuare se prezintă aceste instrucțiuni împreună cu corespondentul în limbaj mașină al codului operației.
Mnemonic Cod operaţie Lung. câmp Semnificaţie
stop 0 16 opreşte execuţia programului load 1 4 12 transferă data din memorie în acumulator store 2 4 12 transferă data din acumulator în memorie read 3 4 (12) încarcă data de la consolă şi o depune în acumulator write 4 4 (12) trimite la consolă data din acumulator add 5 4 12 adună data din memorie la acumulator. Rez. în acumul. subtract 6 4 12 scade data din memorie din acumulator. Rz. în acumulator multiply 7 4 12 înmulţeşte data din memorie cu acumulatorul. Rez. în ac. devide 8 4 12 împarte data dim memorie la acumulator. Rez. în acumul. jump 9 4 12 salt necondiţionat la adresă jmpz A 4 12 salt la adresa dacă acumulaorul este 0 jmpn B 4 12 salt la adresă dacă acumulatorul este negativ Pentru alocare de memorie şi inițializare se utilizează instrucţiunea Sum: .data 2 0; prin care se informează asamblorul că variabilei sum i se rezervă în memorie doi octeţi şi că valoarea iniţială a variabilei este 0. Acum putem să începem simularea. Se activează fereastra W1-0.a și din Execute se alege comanda Assamble & load. Programul este asamblat şi în memorie este încărcat programul obiect, fapt ușor de observat în fereastra RAM Main. Din Execute se alege acum comanda Debug Mode, care permite executarea programului pas cu pas. In partea de sus a ecranului apare acum un nou tool bar. Acționarea comenzii Step by instr, permite execuția programului instrucțiune cu instrucțiune, iar acționarea comenzii Step by micro, ne dă posibilitatea să executăm programul microoperație cu microoperație.