|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Окт 8, 2003 20:33:10 Предлагаю отправлять сюда прикольные кусочки кода. Для начала такой код: altohex:;(edi - строка) aam 16 lea edx,[eax+7676h] shr edx,4 and edx,909h lea eax,[eax+edx+2f2fh] xchg al,ah stosw ret Данный код по адресу edi записывает две шестнадцатиричные цифры, которые представляют байт из регистра al. |
|
|
Дата: Окт 9, 2003 09:55:53 · Поправил: q_q Black_mirror указанный код - работает с числами в диапазоне от 0 до 99. Зачем 16 после aam? код для AL от 0 до 15 для преобразования в ’0’…’9’ и ’A’…’F’, придумал не я add al,90h ; Al is from 90h to 09Fh.
daa ; Al is from 90h to 99h (carry clear) or 00h to 06h (carry set).
adc al,40h ; Al is from 0D0h to 0D9h or 41h to 46h.
daa ; Al is from 30h to 39h ("0" to "9") or 41h to 46h ("A" to "F"). |
|
|
Дата: Окт 9, 2003 13:11:14 q_q 16 потому что в регистре al чимло в диапазоне от 0 до 255, которое выводится в шестнадцатиричном виде,а не число от 0 до 99, которое выводится в десятичном виде. А вот код который написал Four-F в другой теме: cmp al, 10 sbb al, 69h das Команд на одну меньше а делают тоже самое 8) |
|
|
Дата: Окт 9, 2003 18:57:26 · Поправил: The Svin :) word to hex А код с DAS получает только одну ЦИФРУ. И автор не Four-F, он известен с 1986 года, по крайней мере. shl eax,4 mov ecx,eax and eax,0ff0h shr ch,4 shr al,4 and ecx,0f0f00h shl ecx,8 add eax,06060606h add ecx,eax mov eax,ecx and ecx,10101010h shr ecx,4 sub eax,ecx shl ecx,3 add eax,2a2a2a2ah add eax,ecx bswap eax |
|
|
Дата: Окт 9, 2003 23:34:26 |
|
|
Дата: Окт 10, 2003 02:53:29 · Поправил: Black_mirror The Svin Я имел ввиду что он короче кода q_q. А вот моя версия wordtohex: axtohex:;(edi - строка) shr eax,8 aam 16 bswap eax aam 16 xchg al,ah bswap eax lea edx,[eax+76767676h] shr edx,4 and edx,9090909h lea eax,[eax+edx+2f2f2f2fh] xchg al,ah stosd ret Вроде покороче будет 8) |
|
|
Дата: Окт 10, 2003 05:06:42 Мой вариант был разумеетс на скорость :) |
|
|
Дата: Окт 10, 2003 11:10:47 aam al,10 call al2hex xchg ah,al al2hex: add al,30 cmp al,39 jle @@Ret add al,7 @@Ret: ret |
|
|
Дата: Окт 10, 2003 11:12:47 Укоротил на одну команду: axtohex:;(edi - строка) ror eax,8;в предыдущем варианте тоже должен быть ror! aam 16 rol eax,16 xchg al,ah aam 16 bswap eax lea edx,[eax+76767676h] shr edx,4 and edx,9090909h lea eax,[eax+edx+2f2f2f2fh] stosd ret The Svin Не люблю оптимизировать на скорость, приходится перебирать варианты, так как предсказать, что пустой цикл будет выполнятся 5 тактов, а если внутрь добавить одну инструкцию то 2 - невозможно. Хотя после того, как это установлено сразу найдется объяснение 8) |
|
|
Дата: Окт 10, 2003 15:53:15 У меня алгоритм без цикла - линейный. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.081 |