AABSTRCT

Date: Thu, 21 Jan 93 20:37:13 PST
From: "Jerzy Tarasiuk" 
Message-Id: <1225.JT@zfja-gate.fuw.edu.pl>
To: Keith Petersen 
Subject: Disassemblers on SIMTEL20

I tried to use several disassemblers (most of them taken from SIMTEL20
directory PD1:) to produce .ASM file from ROM image and
compared them to check what is most useful. Here is my notebook (I
send it hoping the info can be useful for someone who want to get
disaasembler for 8088 and need some help to select it; can you put
it in  to make it accessible for all ?):

SOURCER (made by V COMMUNICATIONS)
Commercial product. Some people assume it is good disassembler.
However, the program is sophist. If ancient Greece sophists proved
black is white or white is black. This program even if told where is
code and where is data will interpret machine code as data (words,
bytes or strings), and will disassembly what is data (e.g. strings).
Don't use it: although program looks beatifully and produces a lot
of information, most of it is unusable because of program sophism!

ID12 (Intelligent Disassembler 1.2; source, GNU copyleft)
Seems to be most dumby disassembler I saw. And it has some serious
bugs: some instructions are incorrectly interpreted, seems it doesn't
know what are lengths of some instructions like CMP (it incorrectly
disassembled CMP and next found a conditional jump taking next opcode
as displacement or so, result was jump pointing to data and disassem-
bling the data) and seems it doesn't recognize 186/286 opcodes.
It attempts to find locations which can be reach and unassemble code
found there (can specify "entry" and "exit" locations).
Data (all what wasn't interpreted as code) is shown as strings (if
consist of printable characters) or decimal bytes (making enjoing
game to quess what address can be formed from them, e.g. DB 'x',35).
Also creates symbols for some values used in program (seems when the
value is used as address) but doesn't define them in program. Of
course doesn't show addresses of code or data: game would be to easy.

BUBBLE (Bubble Chamber, Beta Release, RH Factor Sooftware)
Interactive. Don't use for .EXE files: attempts to unassemble header
as machine code. When I tried it, it assumed several bytes on begin
are code, all remaining is data. I edited map for it (press F6) and
showed where is next code. It interpreted all remaining as code.
Needed to find next data (shown as machine instructions only: new
enjoying game to guess what character string is shown as these machine
instructions). On output: constants are shown as hex, without leading
0 (e.g. AA55h, not 0AA55h which MASM can recognize). I supposed it
uses hex notation, but DUP-s are decimal ( DB 77 DUP (00h) ).
And, as ID12, it loses labels (BTW, it makes labels for code only).

ASMGEN: would be nice if weren't creating a lot of labels which are
never used (L0001 EQU $-2  L0002 EQU $-1  L0003 EQU $  PUSH AX  ...).

DIS86 (Interactive Disassembler 2.12, by Dr. James R. Van Zandt)
Shareware ($25 appreciated, $125 for network installation, for $50
can get new version). Seems attempt to unassemble anything using it
requires a lot of manual work and some work can be done with same
efficiency using DEBUG (or some better debugger; DIS86 has commands
slightly better than debug) in conjunction with screen-to-file save
TSR: I was unable to find any advantage of DIS86 over the combination.
Surely using DEBUG to dump all hex, then look for what is obviously
data, unassemble all remaining and use good editor requires less work.
Don't waste your time to try this product, there are better ones.

RES86 (RESOURCE by Ward Christensen, Larry Etienne, Craig Derouen)
Old, .ASM source + 16kB .COM file. No documentation. Interactive
(however looks worse than BUBBLE). Use DEBUG instead!

MD86 (Masterful Disassembler - i8086 version 1.00)
ShareWare (registration $17.50 to get user's manual and diskette).
With a lot of trouble I was able to get it working, but it seems
to be completely unusable due to large number of bugs! A game of
quessing: what next unexpected behavior it will show due to bug?
Of course, all work done during hour session can be destroyed by
one keystroke which, based on documentation, should be correct.

DMPPRG20 (DUMPPROG version 2.01, (c) D.J. Murdoch, 1991, 1992,
       (c) 1992 Jeroen Pluimers, based on PD code by William Peavy)
Take up to 80486 opcodes! Reads .EXE and .MAP. I was unable to force
it to read correctly data taken from ROM, even creating .MAP for it.
Suppose it can work fine for .EXE created by Turbo Pascal or C.
Can be installed into Borland Pascal IDE (I don't have the animal).

Best:  1. ASMGEN   2. BUBBLE (have bugs but I used it (once only!))
I didn't try DEB2ASM.PQS: can anyone tell if it is useful ?

Jerzy Tarasiuk, Computer Centre of Physics Department,
                University of Warsaw, Warsaw, Poland.