I use an inline disassembler originally written by David Sullins.
The tool is simple but clever, once it's given with a list of input
adresses it follows the execution path of the code.
In order to simplify the 8051 code understanding I've modified disassm
to print origins of all jumps and calls.
I use dis51 on UNIX/LInux systems, but it should work on Vindoz too.
The only problem could come from Cariage Return chars which are different
on Unix and DOS, but this won't prevent (normal) compilers from
working properly. See EVOLUTION file for my documentation.
dis51.tgz