· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.ZEN —› Код для медитации

Посл.отвђт Сообщен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