Size: a a a

Ассемблер

2021 October 04

E

Entusiast in Ассемблер
Тоже верно))
источник

ST

Saenro T in Ассемблер
Можно прям вообще мало кода сделать, если в камне есть SSE 4.2:
 
   lea    esi, [somedata]
   mov    ecx, length/4
   xor    ebx, ebx
@@: lodsd
   crc32  ebx, eax
   loop  
@b
   ret

CRC32 будет в ebx
источник

LG

Lena Golovach in Ассемблер
спасибо чекну
источник

LG

Lena Golovach in Ассемблер
 include 'win32a.inc'
 format PE console 4.0

section '.text' code readable executable

   mov                 eax,00B704CEh ; init
   mov                 ebx,01864CFBh ; poly
   mov                 esi,_data ; input
   mov                 ecx,[length] ; input length
   xor                 edi,edi ; used to iterate thru input
begin:
   movzx               edx,byte [esi+edi]
   shl                 edx,10h
   xor                 eax,edx
   mov                 edx,8
_loop:
   shl                 eax,1
   test                eax,01000000h
   jz                  update
   xor                 eax,ebx
update:
   dec                 edx
   jnz                 _loop
   inc                 edi
   cmp                 edi,ecx
   jnz                 begin
   and                 eax,00FFFFFFh
finish:
   cinvoke             itoa,eax,checksum,10h
   invoke              MessageBox,0,0,eax,0
   sub                 eax,eax
   ret
   int3

section '.data' data readable writeable

 length dd 4
 _data db 'fasm',0
 checksum rb 6


section '.idata' import data readable

 library user32,'user32.dll',\
         ntdll,'ntdll.dll'

 import user32,\
        MessageBox,'MessageBoxA'

 import ntdll,\
        itoa,'_itoa'

section '.reloc' fixups data readable discardable
источник

LG

Lena Golovach in Ассемблер
из OpenPGP реализация crc24
источник

LG

Lena Golovach in Ассемблер
я вот чет не пойму где у тебя там инициализация и полиномы, мне вникать не хочется в математику,  нет времени вспоминать курс вышки из универа, проще будет взять что-то готовое
источник

ST

Saenro T in Ассемблер
Инициализация не обязательно.
Но обычно там делают либо FFFFFFFF, либо 00000000.
И то и другое хреново, хотя где-то всё-таки лучше FFFFFFFF.
А полином уже вшит микрокодом в камень.
источник

LG

Lena Golovach in Ассемблер
вот это как по мне выглядит получше ) скажи пожалуйста в прицнипе полиномы любые байты могут быть или есть какие-то ограничения ?
источник

LG

Lena Golovach in Ассемблер
любые 8 байт ?
источник

ST

Saenro T in Ассемблер
Можешь сделать так:
   xor ebx, ebx
   xor eax, eax
   not ebx
@@: xor ebx, [esi]
   add esi, 4
   crc32 eax, ebx
   loop @b
   ret
источник

E

Entusiast in Ассемблер
xor ebx, ebx
xor eax, eax

Замени на
xor ebx, ebx
mov eax, ebx
источник

ST

Saenro T in Ассемблер
Ни в коем случае не любые. Только те байты, которые дают максимальный период. В этом и суть неприводимого полинома.
источник

LG

Lena Golovach in Ассемблер
похоже всетаки придется вникать в математику
источник

LG

Lena Golovach in Ассемблер
я понимаю что краткость сестра таланта ) но с моими скромными познаниями это уже в ущерб пониманию идет
источник

LG

Lena Golovach in Ассемблер
как вот здесь всеже добавить инициализацию в ручную ?
источник

LG

Lena Golovach in Ассемблер
и на байты инициализации тоже какие-то ограничения или пофиг ?
источник

ST

Saenro T in Ассемблер
xor rax, rax
dec rax
— это и есть инициализация
источник

LG

Lena Golovach in Ассемблер
понял спасибо
источник

E

Entusiast in Ассемблер
А почему сразу не занести туда -1?
источник

ST

Saenro T in Ассемблер
По байтикам дороже
источник