When working with x86's, I use this for assembly:
http://www.emu8086.com/ The emulator however contains only a simple implementation of the full functionality of 8086. But it's a good program for those who want to learn assembly. Contains a whole bunch of tutorials (even how to make your own operating system!) also. If I wanted to get serious on programming, I would use a C compiler (unless hardware timing was critical then I would definintly use assembly).
For disassembling I would use a hex editor (I guess any would do) or the DOS EDIT program. With the DOS EDIT program, set to look in binary format, I could see the raw data which just gives me an rough idea of the format of the program. (For example, notice that there is a MZ in the beginning of every EXE program). Now the hex editor way: With the manufactures CPU datasheet, I would look up the instruction hex opcodes in the datasheet and match them to the ones I see in the hex editor. Then I would rewrite it out in assembly. Doing it this way, instead of using a disassembler made for the CPU already, allows me to read carefully every line and allows me to understand the program a lot better and I have organized the code my way making further changes easier.
Take a look at these tools if you are interested:
http://www.thefreeco...ssemblers.shtml