I did one long, long ago in TP but lost the source in a disk crash and the (paper) notes in a moving (lost a couple boxes choked full of books and notebooks).
IIRC, though, a disassembler for the 8086 was not very difficult because the opcode/operands (don't rightly remember which) have some bits which tell you which mode was used for the operands: register, direct, indirect, register-indirect, etc. Any good 8086 assembler reference (like, say, the Intel ones) will explain all that.
There are some tricky parts, like dealing with segment prefixes and other such overrides, but it was not very difficult.