ВІСІ-машини

ВІСІ (bit vector-indicated compressed instruction) — алгоритм для стиснення коду зі змінною довжиною інструкцій. Базується на методі Великого пальця тільки тут ми кодуємо команди в 8-ми бітове ключове слово. Використовує вектор бітів, що вказує чи кодована інструкція вже стиснена.

Головна ідея — зменшити команди, що часто зустрічаються і при цьому зберегти вирівнювання пам'яті.

У цьому алгоритмі беруться команди, що найчастіше зустрічаються в об'єктному коді, і з них формується словник. Словник ділиться на сектори, що містять команди тієї ж довжини. Спеціальні регістри вказують на початкові позиції кожного з секторів. Команди, що часто зустрічається, замінюються кодованими словами. В ВІСІ машині кодоване слово — це 8-бітний словниковий індекс. Щоб розрізняти команди і кодовані слова використовується вектор бітів, біти якого вказують чи стиснена команда. Якщо застосувати цей вектор і для некодованих команд і для кодованих слів, ми втратимо вирівнювання пам'яті. Щоб уникнути цієї помилки, групуються вказівники кожних восьми команд і збираються разом в вектор вказівників, що зберігається в пам'яті окремо. Ці біт-карти не долучаються до команд і зберігаються окремо в пам'яті. Читання біт-карти означає читання слова з пам'яті.

Для декодування ВІСІ-машин вводиться додатковий етап, що називається поствибірковим. На цьому етапі перевіряється, на яку інструкцію посилається вказівник, на початкову, чи на стиснену. Якщо вказує на стиснену команду, то з словника витягається відповідна команда. В іншому випадку ця команда просто ігнорується.