Actually, the most important thing you need is to figure out the binary format of .exe files (Unless you are planning to use an existing linker, at which point I think you need to output obj files which also have a binary format).
You also need to deal with a LOT of assembly, unless you are already VERY familiar with the x86 instruction set, I'd try something else.
Here are a couple possibilities:
There used to be a thing called "Tiny C"--I'm guessing this is it: http://bellard.org/tcc/
It is a good enough compiler to build itself, but not so complex that it's hard to understand. It's a bare-bones "How-to build a compiler" lesson in a box. Messed with it on the 8088.
Output for an "Embedded" cpu. They tend to have simple assembly languages and very clearly defined executable formats.
Output C-code. This is a cheat for sure, but you can concentrate on your language and not worry too much about the assembly language. (It's done wonders for Apple, that's all Objective-C is).
Finally, if you really want to go the .exe route, first write an app that produces a "Hello world" exe. Don't bother having it "Compile" anything, just hand edit the code, get it into the exe format and run it--in doing this you will KNOW that you got all your bits lined up and into the right spots, then you can start on a compiler with some confidence.
After this, then creating the language can be done through a lot of the procedures given here--but if you just want to see how it all works, I'd definitely do a few small iterations first, don't worry about what you will run into until you run into it.