там всё просто ld - грузит в YL значение очередного байта, а st - пишет это значение в выходной массив 256 байт, причём значение является и индексом элемента массива.
когда весь входной массив перебрали и "привели к 256", в финале просматриваем выходной 256 байт сверху вниз до первого ненулевого значения, которое и будет максимумом.
Для увеличения скорости, чтобы не контролировать выход из цикла в каждой итерации, цикл не побайтовый, а линейными кусками по 256 байт,
досрочного выхода по 256 нет, т.к. это редкий случай, и тратить четверть вычислительных ресурсов (добавив ещё одну команду в 3-байтовый цикл - ненужное расточительство.
Если принципиально нужно возможность гарантированного досрочного выхода, то есть вариант с побайтовой тупой сравнилкой, но он в 2 с лишним раза бролее медленный :)
--------------
P.S. Всё же добавил контроль на возможный максимум, но через каждые 256 байт :)) Это несильно (на доли %) увеличило время выполнения, но добавило возможность досрочного выхода если максимум уже встретился
досрочного выхода по 256 при побайтовом контроле нет, т.к. это редкий случай, и тратить четверть вычислительных ресурсов (добавив ещё одну команду в 3-байтовый цикл - ненужное расточительство.
Вместо этого контроль на максимум и досрочный выход реализован за главным циклом и делается по окончании обработки каждых 256 байт входных данных.