I am writing an assembly program, assembling it and replacing the kernel.img file on a SD card with raspbian installed on it. Will the memory address of the first instruction be zero? Either because the kernel.img file is the first thing loaded into memory (but this seems unlikely), or because the CPU will translate memory addresses relative to the start of the program into the real memory addresses?
Or will the first memory address be arbitrary?
I ask because if I have some data 4 bytes into the program, will the address of that data be 4 or will it be "address of the start of the program" + 4?
(I know I could use a label to reference the start of the data, but please assume I can't)