Реферат: Алгоритм сжатия "Unbuffered RLE"

mov ah, al // этот байт теперь становится предыдущим

cmp bl, 0 // были ли повторы байта (BL <> 0)?

jz Put_Byte // если нет, вывести в выходной поток байт

//

dec bl // BL = сколько раз декодеру копировать байт

mov al, bl // передать счетчик в AL

out Number_of_OutputPort, al // и вывести его в выходной поток

mov bl, 0 // BL = очистить счетчик повторов

mov al, ah // восстановить в AL текущий байт

//

Put_Byte: //------------------------

//

out Number_of_OutputPort, al // записать байт в выходной поток

jmp Get_from_InputStream // взять из входного потока следующий байт

Итак, регистр BL играет роль счетчика, увеличивающегося в тот момент, когда из входного потока приходят одинаковые байты. Разумеется, каждый следующий одинаковый байт увеличивает счетчик (регистр BL) на 1. Регистр AL принимает в себя тот байт, который только что поступил из входного потока. В регистре AH хранится предыдущий байт входного потока. Поскольку код ориентирован под конструкцию считывающего приемника, то есть входной порт микропроцессора подключен к свето-фотодиодной матрице, а его выходной порт подключен прямо к транспортной магистрали, поэтому и извлечение байт из входного потока и выталкивание байт в выходной поток выполнено при помощи команд чтения/записи портов ввода-вывода (номера требуемых портов заданы константами Number_of_InputPort и Number_of_OutputPort). Кроме того, работа по сжатию входного потока сделана в форме бесконечного цикла, подразумевая тот случай, когда аппаратный приемник без перерыва сканирует некую внешнюю информацию, соответственно, также постоянно эта информация (уже сжатая) поступает в транспортную магистраль.

И ниже то же самое, но уже для программистов в языках высокого уровня. Ну, на всякий случай, вдруг нет желания разбираться в ассемблерном коде.

Счетчик = 0

Предыдущий_байт = Взять_байт_из_входного_потока

Выходной_поток = Предыдущий_байт

Бесконечный цикл

Текущий_байт = Взять_байт_из_входного_потока

Если Текущий_байт = Предыдущий_байт тогда

Если Счетчик = 0 тогда Выходной_поток = Текущий_байт

Счетчик = Счетчик + 1

Если Счетчик = 255 тогда

Выходной_поток = Счетчик – 1

Счетчик = 0

Конец если

Иначе

К-во Просмотров: 247
Бесплатно скачать Реферат: Алгоритм сжатия "Unbuffered RLE"