Reference articles on history, science, culture and more
Encyclopedia

CPU Sim

Software development environment

CPU Sim is a software development environment for the simulation of simple computers. It was developed by Dale Skrien to help students understand computer architectures. With this application the user is able to simulate new or existing simple CPUs. Users can create new virtual CPUs with custom machine language instructions, which are implemented by a sequence of micro instructions. CPU Sim allows the user to edit and run assembly language programs for the CPU being simulated.

CPU Sim has been programmed using the Java Swing package. This means that it is platform independent (runs on every platform that has a Java virtual machine installed).

01Wombat 1 Sample CPU

A sample computer system, the Wombat 1, is provided with CPU Sim. It has the following registers:

The assembly language of the Wombat 1 computer consists of 12 instructions. Each instruction is stored on 16 bits; the first 4 are the opcode and the other 12 are the address field.

Mnemonic Operation code Field length Meaning
stop 0 16 stops the program execution
load 1 4 12 transfers data from memory to the accumulator
store 2 4 12 transfers data from the accumulator to memory
read 3 4 (12) puts the data from the IO console to the accumulator
write 4 4 (12) sends the data from the accumulator to the IO console
add 5 4 12 adds the data from memory to the accumulator and the result is then stored in the accumulator
subtract 6 4 12 subtracts the data from memory from the accumulator and the result is then stored in the accumulator
multiply 7 4 12 multiplies the data from the memory by the accumulator and the result is then stored in the accumulator
divide 8 4 12 divides the data from the memory into the accumulator and the result is then stored in the accumulator
jmpz 9 4 12 jump to address if the accumulator is 0
jmpn A 4 12 jump to address if the accumulator is negative
jump B 4 12 unconditioned jump to address

02Features

CPU Sim has the following features:

  • allows the creation of a CPU (a virtual one), including the registers, RAM, microinstructions, and machine instructions;
  • allows the creation, editing, and execution of assembly language programs for the simulated CPU;
  • allows stepping forward and backward through the execution of assembly language programs.

03Example program for the Wombat 1 CPU

This program reads in integers until a negative integer is read. It then outputs the sum of all the positive integers.

Start: read // read n -> acc jmpn Done // jump to Done if acc < 0. add sum // add sum to the acc store sum // store the new sum jump Start // go back & read in next number Done: load sum // load the final sum write // write the final sum stop // stop sum: .data 2 0 // 2-byte location where sum is stored

The following modification of the program is also used sometimes:

Start: read // read n -> acc jmpz Done // jump to Done if nacc is 0. add sum // add sum to the acc store sum // store the new sum jump Start // go back & read in next number Done: load sum // load the final sum write // write the final sum stop // stop sum: .data 2 0 // 2-byte location where sum is stored

This one can use negative input to subtract, or 0 to break the loop.

Watch videos about CPU SimExplainers and documentaries on YouTube (opens in a new tab)

Sources and credits

This article is adapted from the Wikipedia article CPU Sim, written by its contributors and licensed under CC BY-SA 4.0. Fathomly has changed the layout, removed citation markers, navigation and maintenance notices, and adjusted punctuation. This adapted version is shared under the same license. For references, see the original article.

Fathomly is not affiliated with or endorsed by the Wikimedia Foundation. Spotted a problem? Tell us.