The aim of this challenge is to write a program using LMC to list all the factors of a given number.
The program will:
- Ask the user to enter a positive number (e.g. 12)
- Display all the factors of this number (e.g. 1,2,3,4,6,12)
High Level Flowchart
Here is the high-level flowchart for this algorithm. You can use it to first implement this algorithm using a high level language such as Python.
In order to implement this code in LMC you will first need to work out how to calculate the remainder (mod) of a division.
To complete this challenge you will need to use one of the following online LMC Simulators:
Here is a test plan to test your algorithm
|Test #||Type of Test||Input Values||Expected Output||Actual Output|
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.|