Вопрос № 182356: Здравствуйте! Прошу помощи в следующем вопросе: Существует массив данных, например buffer db 100 dup (?). Какой лучше всего оптимальный цикл использовать с целью перестановки местами двух соседних байтов после его заполнения?. например "абвг&...
Вопрос № 182356:
Здравствуйте! Прошу помощи в следующем вопросе: Существует массив данных, например buffer db 100 dup (?). Какой лучше всего оптимальный цикл использовать с целью перестановки местами двух соседних байтов после его заполнения?. например "абвг" после обработки имело значение "багв" ?
Отвечает Павел Юрьевич (10-й класс) :
Здравствуйте, ANATOLY FIRST!
Можно вот так:
Код:
mov ecx,50 /* Количество пар */ mov eax,0 next: rol word ptr [buffer+eax*2],8 inc eax dec ecx
jnz next
Добавлено пропущенное word ptr Будьте внимательны...
-----
∙ Отредактировал: Лысков Игорь Витальевич (Старший модератор)
∙ Дата редактирования: 02.03.2011, 13:27 (время московское)
Ответ отправил: Павел Юрьевич (10-й класс)
Ответ отправлен: 02.03.2011, 07:20
Номер ответа: 266058 Россия, Челябинск ICQ # 197232777
Оценка ответа: 1 Комментарий к оценке: Использовал такой же алгоритм, но он не работает.
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 266058
на номер 1151 (Россия) |
Еще номера »
Ответ поддержали (отметили как правильный):
1 чел.
Отвечает coremaster1 (Профессионал) :
Здравствуйте, ANATOLY FIRST! Чтобы минимизировать количество итераций можно обрабатывать сразу несколько пар байт. По две пары на 32-битных машинах, и по четыре на 64-битных.
_cikl: lodsw xchg al,ah stosw loop _cikl
----- COGITO ERGO SUM
Ответ отправил: Кривенко Евгений Владимирович (4-й класс)
Ответ отправлен: 02.03.2011, 12:46
Номер ответа: 266062 Украина, Евпатория Тел.: +380508277782 Mail.ru-агент: eukr7@mail.ru Абонент Skype: EuKrEuA
Оценка ответа: 5 Комментарий к оценке: Спасибо. Все работает.
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 266062
на номер 1151 (Россия) |
Еще номера »
Ответ поддержали (отметили как правильный):
1 чел.
Отвечает Лысков Игорь Витальевич (Старший модератор) :
Здравствуйте, ANATOLY FIRST! Хочу предложить вариант с MMX. При этом, наши данные должны быть выровнены на границе 8 байт и их число должно быть кратно 8 Например, для 13*8=104 байт:
Код:
xor edi,edi next: movq mm0,
qword ptr buffer[edi*8] movq mm1,mm0 psllw mm0,8 psrlw mm1,8 por mm0,mm1 movq qword ptr buffer[edi*8],mm0 inc edi cmp edi, 13 jb next emms
----- Люби своего ближнего, как самого себя
Ответ отправил: Лысков Игорь Витальевич (Старший модератор)
Ответ отправлен: 02.03.2011, 12:56
Номер ответа: 266064 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru
Оценка ответа: 5
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 266064
на номер 1151 (Россия) |
Еще номера »
Ответ поддержали (отметили как правильный):
2 чел.
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.