Реферат: Алгоритм сжатия "Unbuffered RLE"
jnz Get_from_InputStream // если байты не одинаковы, взять следующий байт
//
in al, Number_of_InputPort // AL = следующий байт из входного потока
mov bl, al // BL = счетчик повторов
mov al, ah // восстановить в AL текущий байт
//
Copy_Byte: //------------------------
//
cmp bl, 0 // есть ли еще повторы байта?
jz Get_from_InputStream // если нет, взять следующий байт
out Number_of_OutputPort, al // записать байт в выходной поток
dec bl // BL = еще один байт скопировали
jmp Copy_Byte // копировать байт дальше
Все, рассказ закончен. Будем полагать, вы осведомлены теперь, а значит подготовлены. Возникни у вас похожая задача, решение готово. Напомню только, что алгоритм эффективен с позиций строгих ограничений, накладываемых на исполняющие аппаратные устройства. Никаких привилегий в степени сжатия он не дает, ибо это всего лишь собрат RLE, который используют ту же самую методику сжатия. Если в RLE за счет принудительного введения поля счетчика оказывается по одному лишнему байту на каждую "запись" для разнобоев, то в Unbuffered RLE этот байт не затрачивается ввиду отсутствия "записей" для разнобоев, но зато каждая "запись" для повторов теперь занимает по 3 байта, и вот здесь затрачивается один лишний байт.