В обоих приведенных примерах от установленного режима Hi-Color зависит третий операнд одной из команд shid. От переменной команды можно избавиться следующим способом.
При выполнении задачей подготовительных действий обязательно считывается массив info, содержащий наиболее важные характеристики установленного видеорежима. В частности, в байте этого массива со смещением 2in указан размер кода зеленого цвета. В режимах Hi-color там находится число 5 или 6. Это число надо сохранить в специально выделенном байте, присвоив ему удобное для вас имя, например gcoisize, и использовать в подпрограммах примеров 7.17 и 7.18 при обработке зеленого цвета.
Причем величина сдвига может быть либо явно указана в записи команды, либо помещена в регистр el, который применяется в качестве первого операнда команды. В примерах 7.17 и 7.18 регистр сх используется в качестве счетчика, поэтому понадобятся две дополнительные команды для сохранения и восстановления его содержимого. Таким образом", одна переменная команда shid может быть заменена следующей группой команд:
push сх ; сохраняем счетчик повторов цикла
mov cl, gcoisize ; cl = величина сдвига (5 или 6)
shid ах, bx, cl ; сдвиг на величину, указанную в cl
pop сх ; восстанавливаем счетчик повтором цикла
Учитывая, что цикл преобразований повторяется не более 256-ти раз, дополнительные потери времени будут не столь велики, зато подпрограмма окажется применимой во всех видеорежимах Hi-Color.