Besides the memory types ROM (read-only)
and RAM (random access = read and write)
there also exists EEPROM, which stands for
"electrically erasable and programmable ROM",
and of course its modern version, flash.
While EEPROMs need to be deleted completely,
which takes some seconds up to even minutes,
before you can re-program (write to) them,
flash can be deleted and overwritten
quickly in small sub-blocks.
The program memory of a microcontroller
typically is an EEPROM, programmed from
a computer through a data connection,
as an I/O device of the programmer's PC.
When the microcontroller is turned on,
its sole program starts to run right from
the program memory address "0" on.
This is what happens in every pocket calculator,
washing machine, tv remote control, and so on,
all the many devices all around us today
that use microcontrollers.
The computer, however, uses EEPROM or flash
only for its lowest program memory address
range, while the vast majority of its
address space is located in RAM.
The (EEP)ROM program, the firmware,
runs the boot sequence which tests for the
presence of essential I/O devices such as
a keyboard and a monitor, implements a
boot manager user interface where the user
can change fundamental settings of the computer
after pressing hotkeys during the early boot stage,
and then loads the main program (usually the
operating system or an operating-system installer)
from the storage device set in the boot manager.
After the loading (copying from the storage device
to the program memory RAM), the program pointer
is set to the start address of the loaded
main program, and so it is finally run.