Reverse compilation and the asm21toc translator

Reverse compilation is the process of translating machine level programs written by humans into high level language programs. We distinguish between this and decompilation which is the translation of compiler generated machine-level programs back into high level programs. Our interest in this field stems from our work with Digital Signal Processing (DSP) devices. DSP's are specialised microprocessors optimised for the execution of the Fast Fourier Transform and related alorithms.

DSP's often have unusual instruction sets and small virtual address spaces that make them poor compiler targets. As a result, traditional DSP's are usually programmed at assembler level. In the last few years, cheap VLIW and superscalar DSP's have appeared. These processors are very hard to program at assembler level because of the complex timing constraints that must be met by the programmer without the assistance of hardware interlocks. Programming in a high level language (usually C) is the most practical approach: the compiler has algorithms built in to it that guarantee correct timing.

This shift to high level programming has left a lot of intellectual property locked up in assembler source so we wrote a translator from Analog Devices ADSP-21xx assembly language to ANSI-C. To get an overview of the tool's capabilities read the user manual. You can download a copy of the software here in the form of a 32-bit PC executable that will run from the command prompt on Windows-95, Windows-98 and Windows NT systems. If you would like a version compiled for Unix, please contact us directly.

We have published a few papers describing our translator that you can read here in Postcript form: