Source -> Native -> Instructions. A series of questions

Although I have a background in high level programming, I’ve grown increasingly interested in low-level processes. Here I have a series of questions:

  1. How is native code diffrent than the code run on your processor. Is a JIT compiler used by Windows to turn the native code into processor specific code. How is the formatting diffrent? Is each instruction two bytes?

  2. In the assembly instruction add, what does the first bit mean?

  3. In assembly, each instruction is given a location in virtual machine. For example, store C, #B, #B doesn’t refer to the absolute position in memory, it refers to a piece of virtual memory (and each process has a share). But the thing I don’t get is how assembly differentiates between one process and another. I mean, that seems like a job for the OS.

  4. In assembly, if A, B, C, D refer to registers, and #A or #FF00FF refers to a memory location than how are “special” memory location accessed, like the BIOS or a USB.

  5. If the size of an address register is 2^32 for a 32 bit processor, then every store or load instruction must be at least 3 bytes long, because it needs to include in itself a destination.

  6. How exactly does C (or any other native language) code translate to instructions and computer processes. I realize that this is a loaded question, so I’d be happy to know of any books or sites that offer insight into this.

  7. When an executable is clicked on, a GUI process tells Windows to call the main function of that executable. The main function is sort of like onLoad() in Flash (I’m sorry if this sounds INCREDIBLY n00bish, but most of my experience is in managed code).
    -If this is the case, then how are handlers regulated within Windows, allowing me to write a program that keeps on operating without using a while loop?
    -I’ve seen in my little experience with unmanaged code that Windows exits when the main function exits. Why does this happen in native C code for me but not in C#?
    -When an executable is ran, is the whole thing loaded into memory, or just the variable decelerations at the start of the file? Is the whole file loaded into RAM, but the unfinished instructions are stored as instructions to be jumped to?
    -How is a DLL diffrent than a .cs file or any other class library?
    -I just realized that using className is always a reference to a .cs
    file or a dll
    -How exactly do DLLs work? When using is called, are the DLLs loaded into RAM, and the functions stored as instructions but the variables are all loaded in (this would make sense, since the vars in the DLL are accessable to the programmer
    -So is a dll just an exe with no main function?

If you are reading this, you are probably very tolerant of n00bishness. That is a great virtue. Thank you for your time.