Because ntldr is the one which loads ntoskrnl.exe.
that means ntldr has a PE parsing functionality and it does dyanamic linking of ntoskrnl and hal.dll
After that phase it is the responsibility of code present in ntokrnl.exe to dynamically link the other drivers which are getting loaded.
For this ntoskrnl.exe itself should know its base address.