A program that attempts to translate machine code back into assembly language as an aid to debugging. A simple disassembler operates on one instruction at a time, translating the operation code to the appropriate mnemonic, displaying register references and addressing modes in the symbolic form used in the assembly language, and converting addresses into hexadecimal or symbols. More ambitious disassemblers try to show the structure of the program by replacing branch destinations with alphanumeric symbols, and placing the corresponding symbol as a label in the appropriate position in the program.