Хостинг портала RFpro.ru: Московский хостер Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64 РАССЫЛКИ ПОРТАЛА RFPRO.RU Лучшие эксперты данной рассылки Номер выпуска: | 1423 | Дата выхода: | 07.03.2011, 04:00 | Администратор рассылки: | Лысков Игорь Витальевич (Старший модератор) | Подписчиков / экспертов: | 217 / 66 | Вопросов / ответов: | 1 / 4 | Вопрос № 182356: Здравствуйте! Прошу помощи в следующем вопросе: Существует массив данных, например buffer db 100 dup (?). Какой лучше всего оптимальный цикл использовать с целью перестановки местами двух соседних байтов после его заполнения?. например "абвг&... Вопрос № 182356: Здравствуйте! Прошу помощи в следующем вопросе: Существует массив данных, например buffer db 100 dup (?). Какой лучше всего оптимальный цикл использовать с целью перестановки местами двух соседних байтов после его заполнения?. например "абвг" после обработки имело значение "багв" ? Отправлен: 02.03.2011, 03:24 Вопрос задал: ANATOLY FIRST (4-й класс) Всего ответов: 4 Страница вопроса » Отвечает Павел Юрьевич (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-битных.
Код: mov ecx, 0 next: mov eax, dword ptr [buffer + ecx*4] mov edx, eax shl eax, 8 and eax, 0ff00ff00h and edx, 0ff00ff00h shr edx, 8 or eax, edx mov dword ptr [buffer + ecx*4], eax inc ecx cmp ecx, 25 jb next
Исправлена программа. Будьте внимательны ----- • Отредактировал: Лысков Игорь Витальевич (Старший модератор) • Дата редактирования: 02.03.2011, 14:05 (время московское) Ответ отправил: coremaster1 (Профессионал) Ответ отправлен: 02.03.2011, 08:29 Номер ответа: 266060 Россия, Москва Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"? | Отправить SMS #thank 266060 на номер 1151 (Россия) | Еще номера » | Отвечает Кривенко Евгений Владимирович (4-й класс) : Здравствуйте, ANATOLY FIRST!
mov ecx,[sizebufer] ;размер буфера shr ecx,1 lea esi,[bufer] mov edi,esi
_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 чел. Оценить выпуск » Нам очень важно Ваше мнение об этом выпуске рассылки! Скажите "спасибо" эксперту, который помог Вам! Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА на короткий номер 1151 (Россия) Номер ответа и конкретный текст СМС указан внизу каждого ответа. Полный список номеров » * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов) ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются. *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании. |
Комментариев нет:
Отправить комментарий