When the Assembler run-time system is initialized, it allocates an area of memory called the system queue area to the executable program. You can specify how much of this memory is below the line and how much is above the line.
The main executable program and any other executables that it loads are loaded into memory below or above the line depending on the program's RMODE settings. When a program issues requests for extra memory using the macros GETMAIN or STORAGE OBTAIN, it can specify whether the memory needs to come from the below-the-line allocation or the above-the-line allocation, depending on its addressing needs.
In general the assembler run time allocates memory addresses bottom up from absolute address 0, while the COBOL run time allocates memory addresses top down, either from the 2 gigabyte line down, or the 16 megabyte line down.