Joshua S, Y10
The Collatz Sequence starts with any positive number and either halves it if it is even or triples it and adds one if it is odd, continuing until it reaches 1 after which it stops. The unproven theory says that for all positive integers this sequence should eventually reach one.
When I first looked at the collatz sequence problem for purposes of assembly language, the first thing I did was decompose the required algorithm into its component parts; an even/odd checker, a part that would triple a number and add 1, a part that would halve a number and a part that would stop the algorithm once one was reached. I then realised that it was nowhere near as hard as it seemed – each of the four main elements were fairly simple, the hardest being the division. Mr Gwilt demonstrated the method to achieve the odd/even checker in class. The triple and add one was easy – simply add the number to itself twice and add one, although this exact code isn’t demonstrated in my code below, as I also integrated the stop code into the odd function*. The division, however, required a more complicated algorithm, and two variables. It worked by loading the value of x and storing it as y, then looping code that would load y, subtract one, and store the new value. It would then undergo a check in which y was doubled and then x subtracted – if y was half of x, the program would divert to another label called output, which would output x and return to loop, else it would continue looping until it got there.
* by subtracting one from the accumulator (which I had just loaded with the current value of x, the variable used to hold the current term) then using the BRZ command, I could check if x was currently 1, then divert to the stop code if it was. Since I had subtracted one, I had to add two to get the triple-add-one effect, and store a new x.
You can try out Little Man Computer (by Peter Higginson) online here: