Most efficient way to switch order in which data is read in assembly
strongly recommend you do not try to "use the least number of cycles and code that I can". 

This will make it pointlessly hard to succeed. 

I strongly recommend you get the program working first, using the technical approach you feel most comfortable with. 

Then if you have any remaining time, polish the code in any way you like.

Experienced professional developers call efforts like "use the least number of cycles and code that I can" premature optimisation. 

It is one of the major causes of failure to deliver adequate software on time.

Personally, I find getting working solutions first, aiming to have it mostly working in about 40% of the time, usually gives me insight into better strategies for solving the problem. 

A good understanding of the problem, and a working 'test bed' which solves the problem, which I can manipulate, and run test against, will usually beat small-scale tactics like focusing on minimal instructions or fewest cycles every time.

If you want to build a program which is in some way optimal, build a simple program which you understand first. 

Making a program that works, work better is almost always easier than trying to make a constrained (smallest, fastest, ...) program work at all.

I am very familiar with C, and pretty good with AVR. So I would probably write it in C first, as simply as I could, then read the assembler output from the compiler. It won't write code like a human learning to code. It'll likely be much better. However it'll give most of the instructions needed, and a target to beat.

I think having the number stored once, and using the switch to decide two things:  


which end to start, and
what to add to the address of the start position (-1)


might be pretty straightforward. The display routine will take those two values in as parameters (-1 in  register and the start address in another pair)

Edit:
AFAIK, the AVR processor was deliberately designed to be a target for C compilers (which makes your assignment seem a little bit odd, but it is likely effective at helping understand what is going on 'under the covers'). So you may be able to do better, but gcc should be reasonably good, and a relatively easy match to the C. 

It might do a few weird tricks, because, AFAIK, it has been polished for more than 15 years, so it may have sneaky tricks to shave a cycle or an instruction here and there