СМ>не вникая в сущность я бы сделал так
СМ>СМ> lodsd
СМ> mov ebx, eax
СМ> shr ah, 2
СМ> shr eax, 3
СМ> shr ebx, 8
СМ> and eax, 07FFh
СМ> and ebx, 0F800h
СМ> mov edx, [esi]
СМ> or eax,ebx
СМ> shr dh, 2
СМ> mov ebx, edx
СМ> shl ebx, 8
СМ> and edx, 03FF8h
СМ> and ebx, 0F8000000h
СМ> shl edx, 13
СМ> or eax, ebx
СМ> add esi, 4
СМ> or eax, edx
СМ> stosd ; тут мы пишем не в EDI+4 а в EDI, надо EDI перед циклом увеличить на 4
СМ>
СМ>ну и cld вне цикла и коррекция EDI.
СМ>нет никакой гарантии, что lods/stosd выполняются быстрей чем mov eax, [esi]; add esi, 4
Конечно, нет. Они выполнятся медленнее
Вопрос не в том, как быстрее работать с памятью — это я и сам знаю. Вопрос в том, как быстрее запаковать 2 32-х битные точки в один 32-х битный регистр в формате 5-6-5 или 5-5-5 — т.е. может есть какой хитрый биттрик.
Впрочем, я потом измерил производтельность еще раз, минимизировав нагрузку на систему — мой вариант дает выигрыш порядка 10% от первоначального.Но вопрос все-равно интересен