Little Man Computer (LMC) CPU Simulator - Gibraltar University Version
Program
; Test Hardware and loop INP ; Enter Start STA 90 STA 99 INP ; Step STA step STA 94 LDA 90 loop: STA 91 STA 92 STA 93 SUB step STA 99 BRZ end BRP loop end: OUT HLT step DAT 20

Central Processing Unit
Program Counter:  
MAR: - MDR:
CIR:
Accumulator:

Clock Speed:

Input:
Output:
Random Access Memory
00 01 02 03 04 05 06 07 08 09
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49
50 51 52 53 54 55 56 57 58 59
60 61 62 63 64 65 66 67 68 69
70 71 72 73 74 75 76 77 78 79
80 81 82 83 84 85 86 87 88 89
90 91 92 93 94 95 96 97 98 99
Current FDE
Log File:
Hardware Controller
90
91
92
93
99
98
97
96
OFF
95
X Close

About this LMC/CPU Simulator

This LMC simulator is based on the Little Man Computer (LMC) model of a computer, created by Dr. Stuart Madnick in 1965. LMC is generally used for educational purposes as it models a simple Von Neumann architecture computer which has all of the basic features of a modern computer. It is programmed using assembly code. You can find out more about this model on this wikipedia page. This version was based on the version at 101computing.net. It includes a new editor based on the Ace Editor and has syntax highlighting. We also include a new hardware device controller concept which allows LEDs, seven segment displays and a toggle switch mapped to individual memory locations further enhancing the nature of a small computer

© 101Computing.net

© Gibraltar University

X Close

LMC Instruction Set

Note that in the following table “xx” refers to a memory address (aka mailbox) in the RAM. The online LMC simulator has 100 different mailboxes in the RAM ranging from 00 to 99.

Mnemonic Name Description Op Code
INP INPUT Retrieve user input and stores it in the accumulator. 901
OUT OUTPUT Output the value stored in the accumulator. 902
LDA LOAD Load the Accumulator with the contents of the memory address given. 5xx
STA STORE Store the value in the Accumulator in the memory address given. 3xx
ADD ADD Add the contents of the memory address to the Accumulator 1xx
SUB SUBTRACT Subtract the contents of the memory address from the Accumulator 2xx
BRP BRANCH IF POSITIVE Branch/Jump to the address given if the Accumulator is zero or positive. 8xx
BRZ BRANCH IF ZERO Branch/Jump to the address given if the Accumulator is zero. 7xx
BRA BRANCH ALWAYS Branch/Jump to the address given. 6xx
HLT HALT Stop the code 000
DAT DATA LOCATION Used to associate a label to a free memory address. An optional value can also be used to be stored at the memory address.
; Adding two numbers INP STA num1 INP ADD num1 OUT HLT num1 DAT
; Max of two inputs INP STA num1 INP STA num2 SUB num1 BRP pos LDA num1 OUT BRA exit pos: LDA num2 OUT exit: HLT num1 DAT num2 DAT
; Count down timer INP loop: OUT STA count SUB one STA count BRP loop HLT one DAT 1 count DAT
; Multiply two inputs INP STA NUM1 INP STA NUM2 LOOP: LDA TOTAL ADD NUM1 STA TOTAL LDA NUM2 SUB ONE STA NUM2 BRP LOOP LDA TOTAL SUB NUM1 STA TOTAL OUT HLT NUM1 DAT NUM2 DAT ONE DAT 1 TOTAL DAT 0
; Triangular Numbers loop: LDA number ADD counter OUT STA number LDA counter ADD one STA counter LDA ten SUB counter BRP loop HLT counter DAT 1 number DAT 0 one DAT 1 ten DAT 10
INP STA final BRZ onev SUB one STA iteration STA counter LDA final STA num mult: LDA iteration BRZ end SUB one BRZ end LDA final ADD num STA final LDA counter SUB one STA counter SUB one BRZ next BRA mult next: LDA final STA num LDA iteration SUB one STA iteration STA counter SUB one BRZ end BRA mult end: LDA final OUT HLT onev: LDA one OUT HLT final DAT 0 counter DAT 0 one DAT 1 iteration DAT 0 num DAT 0
LDA #5 ADD #7 SUB #2 OUT
;Indirect Addressing INP loop: STA count STA @address LDA address SUB one STA address LDA count SUB one BRP loop HLT count DAT one DAT 1 address DAT 99
; Simple Code to take ; input and set LED at 99 loop: STA 99 INP STA 90 STA 91 STA 92 STA 93 SUB #1 BRZ end BRP loop end: HLT