Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабы / !lab2 / UDPClient / crc

.cpp
Скачиваний:
16
Добавлен:
17.04.2013
Размер:
1.11 Кб
Скачать
#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;
}

Соседние файлы в папке UDPClient