id12 has a simple flow-control tracer and disassembler for 8086. You could
use it to produce compilable assembler listings of .com programs and
.com-like device drivers.

The 386 instruction printer in gdb is written by Pace Willisson. Pace
mentioned that with some modification, the instruction printer can be used to
disassembler 8086 code. (I have more detail if anyone is interested.)

There are also several good commercial disassemblers to use, like
Borland Turbo debugger and Sourcer, if you do not need source.