A method of decompressing a computer program of executable instructions, the program having been compressed by splitting each instruction of a plurality of the instructions of the program into a first symbol and a second symbol, wherein each instruction of the plurality consists of one opcode and one or more operands, the first symbol comprising the opcode and the second symbol comprising the one or more operands, the first symbol assigned to first subset and the second symbol assigned to a second subset, assigning a first codeword to the first symbol representing a compressed form of the first symbol and assigning a second codeword to the second symbol representing a compressed form of the second symbol, generating a first codeword-symbol assignment table for the first subset of symbols and a second codeword-symbol assignment table for the second subset of symbols, storing the codewords of the first subset as a first image representing a first compressed split instruction and the code words of the second subset as a second image representing a second compressed split instruction, the first and second compressed split instructions representing a compressed form of the program, the method of decompressing, comprising the steps of:
- accessing the first compressed split instruction;
- reading a codeword in the first compressed split instruction and looking up a first symbol in the first codeword-symbol assignment table;
- outputting the first symbol as a formed symbol of the first subset;
- accessing the second compressed split instruction;
- reading a codeword in the second compressed split instruction and looking up a second symbol in the second codeword-symbol assignment table;
- outputting the second symbol as a formed symbol of the second subset;
- and
- merging the first symbol of the first subset with the second symbol of the second subset to form a decoded instruction.