Реферат: Алгоритм сжатия "Unbuffered RLE"
// выхода из бесконечного цикла,
// если алгоритм должен работать
// не внутри аппаратного устройства
//
//-----------------------------//
//
in al, Number_of_InputPort // AL = следующий байт из входного потока
cmp al, ah // равен ли он предыдущему байту?
jnz Put_to_OutputStream // если нет, вывести его в выходной поток
//
cmp bl, 0 // повторы байта уже начались (BL <> 0)?
jnz Increment_Counter // если да, увеличить счетчик повторов на 1
out Number_of_OutputPort, al // записать байт в выходной поток
//
Increment_Counter: //------------------------
//
inc bl // BL = +1 одинаковый байт поступил
cmp bl, 255 // превышен лимит счетчика в 255 повторов?
jnz Get_from_InputStream // если нет, взять следующий байт
//
Put_Counter: //------------------------
//
dec bl // BL = сколько раз декодеру копировать байт
mov al, bl // передать счетчик в AL
out Number_of_OutputPort, al // и вывести его в выходной поток
mov bl, 0 // BL = очистить счетчик повторов
jmp Get_from_InputStream // взять из входного потока следующий байт
//
Put_to_OutputStream: //------------------------