The reason that decoder.exe has such a lame output is that a S-record file is very dumb. All it basically knows is "these bytes go there", and doesn'r care, nor should it care, about what they are, code, or string, or jump tables, or...
A relocatle assembler is going to concatenate all the .o files, THEN generate other things. All boundaries are usually lost.
I don't know what you're trying to accomplish by reversing an S-file... but what's wrong with .lst and .map files, which have way more information?
Al