There are two types of disassemblers. There are a symbolic disassemblers that Ruud and Garth mentioned above.
Here are some examples of the output (with some comments added afterwards, and some labels replaced with more meaningful names afterwards):
http://www.brouhaha.com/~eric/retrocomputing/apple/apple1/basic/a1basic.dis (Apple 1 BASIC)
http://www.ittybittycomputers.com/IttyBitty/TinyBasic/TB.asm (Tiny BASIC)
http://retro.hansotten.nl/uploads/6502docs/FOCALV3D.ZIP (Focal)
The other type might be called a numeric disassembler (which does not generate labels). Here is an example of that type of output.
http://home.comcast.net/~mjmahon/AP1BASIC.txt (also Apple 1 BASIC, which also has a few comments added afterwards)
This type of disassembler can be found in the Monitor of Daryl Rictor's (8BIT) SBC-2 (and, I think SBC-3). He has source code you can download on his website.
The first type of disassembler is helpful when you want to generate assembler source from object code. The second type of disassembler is helpful for debugging when you want to see what instructions are actually in memory.
For disassemblers of the first type, I've tended to use disassembly "scripts" for producing source code, rather than trying to figure it out as you go, like Ruud's approach.