Going to try this without giving too many hints away. And i think you only understand what i'm about to say if you already solved it anyway.
Is this actually done on assembly level?
The somewhat longer question:
I'm going to use Mult.asm as an example.
Let's say that R0 = 5 and R1 = 2000, for calculation 1.
For calculation 2, let's make R0=2000, and R1=5
Won't this make one of the calculations really long depending on how you did your code?
Making it shorter would require you to find the lowest/highest value and calculate with the help of
this. So, is this done on OS level in most if not all cases, or are there reasons to do it on assembly
This is a good observation that the order of the operands vastly affects the run time of the "repeated addition" multiplication algorithm.
There are better algorithms for multiplication, one of which is presented in chapter 12 where you will be writing the OS's multiply function. These algorithms take approximately the same time to run regardless of the operand values.
This is analogous to the way that the standard decimal multiplication algorithm takes about the same amount of work to multiply 123*987 as it does for 987*123
x 987 x 123
Usually OS and library functions are optimized so that application programmers don't need to worry about how things like argument order may affect performance.