Происходит то, что вы сравниваете первые буквы двух строк, а затем используете инструкцию 'xchg' для обмена первыми четырьмя буквами каждой строки.
Если для вас нормально, что они не будут полностью отсортированы (просто переупорядочены в порядке убывания первых букв), вы можете дублировать фрагмент xchg пять раз для завершения обмена.
Кроме того, я не уверен в ваших циклах и в том, выполняются ли они правильное количество раз. В общем, старайтесь не использовать инструкцию 'loop', используйте явные условные переходы, такие как jnz, они быстрее.
редактировать:
mov eax, [esi]
xchg eax, [esi+20]
mov [esi], eax
mov eax, [esi+4]
xchg eax, [esi+24]
mov [esi+4], eax
mov eax, [esi+8]
xchg eax, [esi+28]
mov [esi+8], eax
mov eax, [esi+12]
xchg eax, [esi+32]
mov [esi+12], eax
mov eax, [esi+16]
xchg eax, [esi+36]
mov [esi+16], eax