Yes, that is correct. And the compiler also tells the linker what locations in the program code must be fixed up with the addresses assigned by the linker.I think, In AT89S52, when we have global or static variables in the program, they should have fixed memory locations, and the linker will assign locations for them at link time.