Pyfunc has a good answer if you want to know the header and inner workings of PE executables (and the mention of ELF). He is also totally right about the assembly recommendation.
As for your disassembler request, I recommend OllyDBG for on-the-fly debugging, IDA Pro for code analysis and PEExplorer for PE (windows executables) headers analysis. SoftICE is prefered by many people for the debugging stage, though.
While these works for any compiled executable or library, languages running in a virtual mode (cross-platform bitcode or interpreted common language) like Java or .NET Framework are dealt differently. For example, a .NET executable would be easily analysable via a software like Reflector because it would allow to get back to the high level programming language instead of debugging assembly.
A good knowledge of what you are dealing with (language the software was written in, I/O operations, etc) will allow you to better discernate a program subtilities. You can use PEiD to help you with this analyse.
Please bear in mind that disassembly and reverse engineering can be illegal depending in which country you are and on which piece of software you apply it. If unsure, you should always use these kind of software on your own projects or programs your compiled yourself (OpenSource ones would be a good idea to begin with).