8 位索引之后的数据使用 LZSS 压缩进行压缩。运行时支持库具有例程 __TI_decompress_lzss() 来解压缩使用 LZSS 压缩的数据。此函数的第一个参数是指向位于 8 位索引后的字节的地址,第二个参数是 C 自动初始化记录的运行地址。
LZSS 的解压缩算法如下所示:
- 读取 16 位,它们是标记下一个 LZSS 编码数据包开始的编码标志 (F)。
- 对于 F 中的每个位 (B),从最低有效位到最高有效位,执行以下操作:
- 如果 (B & 0x1),则读取接下来的 16 位并将其写入输出缓冲区。然后前进到 F 中的下一位 (B) 并重复此步骤。
- 否则,将接下来的 16 位读入 temp (T),长度 (L) = (T & 0xf) + 2,以及偏移量 (O) = (T >> 4)。
- 如果 L == 17,则读取接下来的 16 位 (L');然后 L += L'。
- 如果 O == LZSS end of data (LZSS_EOD),我们已经到达数据的末尾,算法结束。
- 在位置 (P) = 输出缓冲区 - 偏移量 (O) - 1 处,从位置 P 读取 L 个字节并将它们写入输出缓冲区。
- 转到步骤 2a。