In this challenge we will create a computer program using LMC (Little Man Computer) that takes a number as an input (e.g. 5) and outputs a countdown from this value. (e.g: 220.127.116.11.1.0).
By completing this challenge we will investigate the use of the branching instruction BRP to create a looping effect.
We have produced the flowchart of our countdown timer using LMC instructions:
You can now type and test this code using one of the following online LMC Simulators:
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.
|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.|