I can see you're quite confused. :-)
First, code is data, it is just data that has a specific meaning to the processor[1].
Second, the "bits" are charge levels moving like piped water along the wires of the logic. Note that charge level (voltage) isn't actual electrons zipping around: though electrons do move, they move quite slowly compared to the change in voltage.
RAM means Random access memory, and the D in DRAM is for "Dynamic", because it doesn't last long without refresh. Modern chips have internal refresh logic, which reads all bits and writes them back again, resulting in recharging the store. Almost all RAM stores bits as two levels of charge, for example a potential of 0 volts for logic 0 and a potential of 1.5 volts for a logic 1. It is possible, though not at all common, to have multi-valued bits, so 0.. 0.1 volts for 0, 0.9 .. 1.1 volts for 1, 1.9 .. 2.1 volts for 2 and 2.9 .. 3.1 volts for 3, for a cell storing 2 bits (binary digits) of data.
The actual voltages used in logic (memory or otherwise) aren't important, but of course each end of the wire linking components must agree on what they are. If you look at electronic datasheets, you will find a statement as to the voltages that the chip interprets as each logic level. A common one for TTL logic at 5 volt (nominal) was between 0 and 0.5V is logic 0, and 3.5 volts to 5.1 volts is logic 1.
When a location in memory is written to, the electronics is set such that whatever was there is overwritten - whether it was a 0 or a 1. Sometimes, this logic works the "wrong" way: the "natural" value is logic 1 and the value that has to be forced is a 0. Either way, that's all in the DRAM chip: everything else considers the memory to be a place that can be written and rewritten as much and as frequently as needed. If you're wondering what happened to the "old" data, the charge is sent to ground, and it forms part of the reason that chips consume power.
When a processor fetches code from memory, it is sent through a pipeline of stages: these serve to speed the processor up. Many modern processors are also microprogrammed: the internal logic runs multiple "instructions" from the one incoming one, and those internal instructions are even lower level. To understand all this properly you need to understand the internals of the processor, and x86 is not the place to start on that!! Something simpler would be the Rockwell 6502 (Acorn BBC / C= 64 et al). Moreover, people have written emulators so you can play all sorts of games very easily.
On bootup, most of the processor will be held in reset state until all the external logic has settled down into a stable condition. It will then either load a value into the instruction pointer and fetch instructions from that point, or load a value from a fixed point in memory into the instruction pointer, then fetch instructions from that point. The latter is called indirect addressing.
The BIOS, on a PC, is the code an x86 processor runs on boot. At one time, it was also used throughout execution of the OS too. At boot, it's job is to put all the hardware into a good (not just stable) state, set up a table describing the hardware that the OS will use later, find a bootable disk and, if successful load the first sector from disk into RAM and jump into it, expecting that sector to contain the boot code.
Real PCs are more complicated than this and EFI is complicating matters too, so I strongly suggest sticking with the 8bit micros to begin with as they're simpler inside as well as narrower.
HTH
[1] Some processors differentiate memory chips used for code from those used for data, which is called "Harvard" architecture memory. However, "code is data" is still true even then.