К сожалению, данный код некорректен, посколько не учитывает возможность ненулевого альфа-байта. При наличии оного, ессно, получается кака.
Маскирование добавляет к нему все те же самые 2 "больших" and.
Ну а во-вторых, что значит "проще"? Это абсолютно разные форматы, и для 5-5-5 отдельные процедуры уже есть

Ну и в третьих — lea с индексными регистрами не есть хорошо.
AS>>Вероятно, и тут еще есть над чем поработать.
M>Мне кажется, удобнее конвертировать в 15-битный формат. Например, так:
M>M> mov eax, [esi + 4]
M> mov ebx, [esi]
M> shr eax, 3
M> shr ebx, 3
M> shl al, 3
M> shl bl, 3
M> shl ax, 3
M> shl bx, 3
M> shl eax, 10
M> shr ebx, 6
M> or eax, ebx
M> lea esi, esi + 8
M> mov [edi], eax
M> lea edi, edi + 4
M>