Students in IFSM 310 need to gain an understanding of computer hardware and architecture: the CPU with its registers, ALU, fetch-execute cycle, instruction set, addressing modes; memory; and I/O devices. An ideal way to learn this is to do some assembly language programming. Real assembly and machine languages however, are complex, typically consisting of a couple of hundred or more instructions, a dozen addressing modes, various pseudo-ops for data and space allocation, special purpose registers. In a survey course that also includes coverage of data representation, digital logic design, and operating systems, not much time exists to explore the machine language level of a system. I don't think students can get much from the textbook's treatment of these topics; it is overly technical, consisting in some parts of copies of wiring diagrams of various CPUs and the programmer's summary of the instructions and addressing modes. So I created this system that is a simulator for a basic computer with a simple assembly language. The simulated machine has 13 instructions (input and output; load and store to/from memory and registers; add, multiply, negate data; compare data; and branch on various conditions) that operate on integer data. Although small, the instruction set is complete in the sense that any code could be written in it. The other instructions that real machines provide add convenience and efficiency. It has 8 registers and a small memory. Three addressing modes are used: absolute, immediate, and register. There are no pseudo-ops. The simulator loads a program from a file and then emulates the execution of it. Various errors are reported to help students. Pedagogically this is much more useful than attempting to explain the VAX or Pentium language. It is much better to understand a small yet complete model than to become merely confused over the complexity of an actual system.