By its definition, movaps instruction can't get immediate value. It can only get another register or memory location. You can see it in its documentation.
MOVAPS xmm1, xmm2/m128 Move packed single-precision floating-point values from xmm2/m128 to xmm1.
MOVAPS xmm2/m128, xmm1 Move packed single-precision floating-point values from xmm1 to xmm2/m128.
You are referring to the early 80s of the last century. The 8086 architecture used this way of addressing 20-bit physical memory, the then tremendous amount of 1 (One!) MByte, or "one million bytes of memory", as Intel calls it in /1/, p.2-7.
These "logical addresses", as Intel called them in /1/, served primarily two purposes:
One idea ...
Typically, a register's value being used in a function prior to being initializing it is a hint that it may be a parameter.
Here we see ecx being used for the first time in this function:
00893c1e 8bf1 mov esi,ecx
There are a few different standard calling conventions that pass parameters in the ecx register such as fastcall. C++ compilers ...