I've written a short python script which disassembles .hack files back into .asm files.
Note that the translation is not 1:1, as comments and label names are stripped out by the assembler. However, if you re-assemble a disassembled file the same machine code will be generated as when the original was assembled.
If you have some time to kill: Run your programs through this and tell me if the re-assembled output differs (that means there's a bug in my code). Thanks!