Добавил:
korayakov
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
#include "stdafx.h"
#include "crc.h"
#define CRC_POLYNOM 0x04C11DB7
void FillCRCTable(DWORD* pCRCTable)
{
DWORD poly = CRC_POLYNOM;
__asm {
mov esi,pCRCTable
xor ebx, ebx //ebx=0, будет использоваться как указатель
InitTableLoop:
xor eax, eax //eax=0 для получения новой позиции
mov al, bl //младшие 8 бит ebx копируются в младшие 8 бит eax генерируется номер позиции
xor cx, cx
entryLoop:
test eax, 1
jz no_topbit
shr eax, 1
xor eax, poly
jmp entrygoon
no_topbit:
shr eax, 1
entrygoon:
inc cx
test cx, 8
jz entryLoop
mov dword ptr[ebx*4 + esi], eax
inc bx
test bx, 256
jz InitTableLoop
}
}
DWORD CalcCRC(char* pBuffer,DWORD dwBufLen,DWORD* pCRCTable)
{
DWORD result;
__asm {
mov eax,0FFFFFFFFh
mov esi,pBuffer
mov edi,pCRCTable
mov ecx,dwBufLen
computeLoop:
xor ebx, ebx
xor al, byte ptr [esi]
mov bl, al
shr eax, 8
xor eax, dword ptr[4*ebx+edi]
inc esi
loop computeLoop
xor eax, 0FFFFFFFFh
mov result,eax
}
return result;
}