Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.05.2015, 19:53   #1
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию Контрольная сумма

читал тут разное, и вспомнил, что когда-то развлекал себя на тему контрольных сумм.

Код:
PUBLIC	crc32_table, crc16_table

OPTION PROLOGUE:NONE
OPTION EPILOGUE:NONE


.CONST

ALIGN 16
crc32_table		DWORD	000000000h, 077073096h, 0EE0E612Ch, 0990951BAh, 0076DC419h, 0706AF48Fh, 0E963A535h, 09E6495A3h
				DWORD	00EDB8832h, 079DCB8A4h, 0E0D5E91Eh, 097D2D988h, 009B64C2Bh, 07EB17CBDh, 0E7B82D07h, 090BF1D91h
				DWORD	01DB71064h, 06AB020F2h, 0F3B97148h, 084BE41DEh, 01ADAD47Dh, 06DDDE4EBh, 0F4D4B551h, 083D385C7h
				DWORD	0136C9856h, 0646BA8C0h, 0FD62F97Ah, 08A65C9ECh, 014015C4Fh, 063066CD9h, 0FA0F3D63h, 08D080DF5h
				DWORD	03B6E20C8h, 04C69105Eh, 0D56041E4h, 0A2677172h, 03C03E4D1h, 04B04D447h, 0D20D85FDh, 0A50AB56Bh
				DWORD	035B5A8FAh, 042B2986Ch, 0DBBBC9D6h, 0ACBCF940h, 032D86CE3h, 045DF5C75h, 0DCD60DCFh, 0ABD13D59h
				DWORD	026D930ACh, 051DE003Ah, 0C8D75180h, 0BFD06116h, 021B4F4B5h, 056B3C423h, 0CFBA9599h, 0B8BDA50Fh
				DWORD	02802B89Eh, 05F058808h, 0C60CD9B2h, 0B10BE924h, 02F6F7C87h, 058684C11h, 0C1611DABh, 0B6662D3Dh
				DWORD	076DC4190h, 001DB7106h, 098D220BCh, 0EFD5102Ah, 071B18589h, 006B6B51Fh, 09FBFE4A5h, 0E8B8D433h
				DWORD	07807C9A2h, 00F00F934h, 09609A88Eh, 0E10E9818h, 07F6A0DBBh, 0086D3D2Dh, 091646C97h, 0E6635C01h
				DWORD	06B6B51F4h, 01C6C6162h, 0856530D8h, 0F262004Eh, 06C0695EDh, 01B01A57Bh, 08208F4C1h, 0F50FC457h
				DWORD	065B0D9C6h, 012B7E950h, 08BBEB8EAh, 0FCB9887Ch, 062DD1DDFh, 015DA2D49h, 08CD37CF3h, 0FBD44C65h
				DWORD	04DB26158h, 03AB551CEh, 0A3BC0074h, 0D4BB30E2h, 04ADFA541h, 03DD895D7h, 0A4D1C46Dh, 0D3D6F4FBh
				DWORD	04369E96Ah, 0346ED9FCh, 0AD678846h, 0DA60B8D0h, 044042D73h, 033031DE5h, 0AA0A4C5Fh, 0DD0D7CC9h
				DWORD	05005713Ch, 0270241AAh, 0BE0B1010h, 0C90C2086h, 05768B525h, 0206F85B3h, 0B966D409h, 0CE61E49Fh
				DWORD	05EDEF90Eh, 029D9C998h, 0B0D09822h, 0C7D7A8B4h, 059B33D17h, 02EB40D81h, 0B7BD5C3Bh, 0C0BA6CADh
				DWORD	0EDB88320h, 09ABFB3B6h, 003B6E20Ch, 074B1D29Ah, 0EAD54739h, 09DD277AFh, 004DB2615h, 073DC1683h
				DWORD	0E3630B12h, 094643B84h, 00D6D6A3Eh, 07A6A5AA8h, 0E40ECF0Bh, 09309FF9Dh, 00A00AE27h, 07D079EB1h
				DWORD	0F00F9344h, 08708A3D2h, 01E01F268h, 06906C2FEh, 0F762575Dh, 0806567CBh, 0196C3671h, 06E6B06E7h
				DWORD	0FED41B76h, 089D32BE0h, 010DA7A5Ah, 067DD4ACCh, 0F9B9DF6Fh, 08EBEEFF9h, 017B7BE43h, 060B08ED5h
				DWORD	0D6D6A3E8h, 0A1D1937Eh, 038D8C2C4h, 04FDFF252h, 0D1BB67F1h, 0A6BC5767h, 03FB506DDh, 048B2364Bh
				DWORD	0D80D2BDAh, 0AF0A1B4Ch, 036034AF6h, 041047A60h, 0DF60EFC3h, 0A867DF55h, 0316E8EEFh, 04669BE79h
				DWORD	0CB61B38Ch, 0BC66831Ah, 0256FD2A0h, 05268E236h, 0CC0C7795h, 0BB0B4703h, 0220216B9h, 05505262Fh
				DWORD	0C5BA3BBEh, 0B2BD0B28h, 02BB45A92h, 05CB36A04h, 0C2D7FFA7h, 0B5D0CF31h, 02CD99E8Bh, 05BDEAE1Dh
				DWORD	09B64C2B0h, 0EC63F226h, 0756AA39Ch, 0026D930Ah, 09C0906A9h, 0EB0E363Fh, 072076785h, 005005713h
				DWORD	095BF4A82h, 0E2B87A14h, 07BB12BAEh, 00CB61B38h, 092D28E9Bh, 0E5D5BE0Dh, 07CDCEFB7h, 00BDBDF21h
				DWORD	086D3D2D4h, 0F1D4E242h, 068DDB3F8h, 01FDA836Eh, 081BE16CDh, 0F6B9265Bh, 06FB077E1h, 018B74777h
				DWORD	088085AE6h, 0FF0F6A70h, 066063BCAh, 011010B5Ch, 08F659EFFh, 0F862AE69h, 0616BFFD3h, 0166CCF45h
				DWORD	0A00AE278h, 0D70DD2EEh, 04E048354h, 03903B3C2h, 0A7672661h, 0D06016F7h, 04969474Dh, 03E6E77DBh
				DWORD	0AED16A4Ah, 0D9D65ADCh, 040DF0B66h, 037D83BF0h, 0A9BCAE53h, 0DEBB9EC5h, 047B2CF7Fh, 030B5FFE9h
				DWORD	0BDBDF21Ch, 0CABAC28Ah, 053B39330h, 024B4A3A6h, 0BAD03605h, 0CDD70693h, 054DE5729h, 023D967BFh
				DWORD	0B3667A2Eh, 0C4614AB8h, 05D681B02h, 02A6F2B94h, 0B40BBE37h, 0C30C8EA1h, 05A05DF1Bh, 02D02EF8Dh
f.hump вне форума Ответить с цитированием
Старый 08.05.2015, 19:53   #2
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

Код:
crc16_table		WORD	00000h, 0C0C1h, 0C181h, 00140h, 0C301h, 003C0h, 00280h, 0C241h
				WORD	0C601h, 006C0h, 00780h, 0C741h, 00500h, 0C5C1h, 0C481h, 00440h
				WORD	0CC01h, 00CC0h, 00D80h, 0CD41h, 00F00h, 0CFC1h, 0CE81h, 00E40h
				WORD	00A00h, 0CAC1h, 0CB81h, 00B40h, 0C901h, 009C0h, 00880h, 0C841h
				WORD	0D801h, 018C0h, 01980h, 0D941h, 01B00h, 0DBC1h, 0DA81h, 01A40h
				WORD	01E00h, 0DEC1h, 0DF81h, 01F40h, 0DD01h, 01DC0h, 01C80h, 0DC41h
				WORD	01400h, 0D4C1h, 0D581h, 01540h, 0D701h, 017C0h, 01680h, 0D641h
				WORD	0D201h, 012C0h, 01380h, 0D341h, 01100h, 0D1C1h, 0D081h, 01040h
				WORD	0F001h, 030C0h, 03180h, 0F141h, 03300h, 0F3C1h, 0F281h, 03240h
				WORD	03600h, 0F6C1h, 0F781h, 03740h, 0F501h, 035C0h, 03480h, 0F441h
				WORD	03C00h, 0FCC1h, 0FD81h, 03D40h, 0FF01h, 03FC0h, 03E80h, 0FE41h
				WORD	0FA01h, 03AC0h, 03B80h, 0FB41h, 03900h, 0F9C1h, 0F881h, 03840h
				WORD	02800h, 0E8C1h, 0E981h, 02940h, 0EB01h, 02BC0h, 02A80h, 0EA41h
				WORD	0EE01h, 02EC0h, 02F80h, 0EF41h, 02D00h, 0EDC1h, 0EC81h, 02C40h
				WORD	0E401h, 024C0h, 02580h, 0E541h, 02700h, 0E7C1h, 0E681h, 02640h
				WORD	02200h, 0E2C1h, 0E381h, 02340h, 0E101h, 021C0h, 02080h, 0E041h
				WORD	0A001h, 060C0h, 06180h, 0A141h, 06300h, 0A3C1h, 0A281h, 06240h
				WORD	06600h, 0A6C1h, 0A781h, 06740h, 0A501h, 065C0h, 06480h, 0A441h
				WORD	06C00h, 0ACC1h, 0AD81h, 06D40h, 0AF01h, 06FC0h, 06E80h, 0AE41h
				WORD	0AA01h, 06AC0h, 06B80h, 0AB41h, 06900h, 0A9C1h, 0A881h, 06840h
				WORD	07800h, 0B8C1h, 0B981h, 07940h, 0BB01h, 07BC0h, 07A80h, 0BA41h
				WORD	0BE01h, 07EC0h, 07F80h, 0BF41h, 07D00h, 0BDC1h, 0BC81h, 07C40h
				WORD	0B401h, 074C0h, 07580h, 0B541h, 07700h, 0B7C1h, 0B681h, 07640h
				WORD	07200h, 0B2C1h, 0B381h, 07340h, 0B101h, 071C0h, 07080h, 0B041h
				WORD	05000h, 090C1h, 09181h, 05140h, 09301h, 053C0h, 05280h, 09241h
				WORD	09601h, 056C0h, 05780h, 09741h, 05500h, 095C1h, 09481h, 05440h
				WORD	09C01h, 05CC0h, 05D80h, 09D41h, 05F00h, 09FC1h, 09E81h, 05E40h
				WORD	05A00h, 09AC1h, 09B81h, 05B40h, 09901h, 059C0h, 05880h, 09841h
				WORD	08801h, 048C0h, 04980h, 08941h, 04B00h, 08BC1h, 08A81h, 04A40h
				WORD	04E00h, 08EC1h, 08F81h, 04F40h, 08D01h, 04DC0h, 04C80h, 08C41h
				WORD	04400h, 084C1h, 08581h, 04540h, 08701h, 047C0h, 04680h, 08641h
				WORD	08201h, 042C0h, 04380h, 08341h, 04100h, 081C1h, 08081h, 04040h

.CODE

ALIGN 16
?CRC32@Crypt@@YAXAEAIPEBEI@Z	PROC	
	PUSH rsi

		XOR rax, rax
		MOV rsi, rdx
		LEA r9, [crc32_table]
		MOV r10d, [rcx]
		NOT r10d

	align 16
		calc_loop:
			LODSB
			XOR al, r10b
			
			SHR r10d, 8
			XOR r10d, [r9+rax*4]

		DEC r8
		JNZ calc_loop

		NOT r10d
		MOV [rcx], r10d

	POP rsi	
	RET
?CRC32@Crypt@@YAXAEAIPEBEI@Z	ENDP

ALIGN 16
?CRC16@Crypt@@YAXAEAGPEBEI@Z	PROC	
	PUSH rsi

		XOR rax, rax
		MOV rsi, rdx
		LEA r9, [crc16_table]
		MOV r10w, [rcx]
		NOT r10w
		
	align 16
		calc_loop:
			LODSB
			XOR al, r10b
			
			SHR r10w, 8
			XOR r10w, [r9+rax*4]

		DEC r8
		JNZ calc_loop

		NOT r10w
		MOV [rcx], r10w

	POP rsi	
	RET
?CRC16@Crypt@@YAXAEAGPEBEI@Z	ENDP


ALIGN 16
?ADLER32@Crypt@@YAXAEAIPEBEI@Z	PROC
	PUSH rsi

	XOR r10, r10
	XOR r11, r11
	XOR rax, rax

	MOV r10w, [rcx]
	MOV r11w, [rcx+2]

	MOV rsi, rdx
	MOV edx, 65521

align 16
	crc_loop:
		LODSB

		ADD r10d, eax		
		ADD r11d, r10d

		CMP r10d, edx
		JB no_above_1
			SUB r10d, edx
		no_above_1:

		CMP r11d, edx
		JB no_above_2
			SUB r11d, edx
		no_above_2:

	DEC r8d
	JNZ crc_loop

	CMP r11d, edx
	JB no_above_3
		SUB r11d, edx
	no_above_3:

	MOV [rcx], r10w
	MOV [rcx+2], r11w

	POP rsi

	RET
?ADLER32@Crypt@@YAXAEAIPEBEI@Z	ENDP



END
f.hump вне форума Ответить с цитированием
Старый 08.05.2015, 19:55   #3
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

объявлено так:
Код:
namespace Crypt {

	void ADLER32(unsigned int & hash, const unsigned char * message, unsigned int mlength);

	void CRC32(unsigned int & hash, const unsigned char * message, unsigned int mlength);
	void CRC16(unsigned short & hash, const unsigned char * message, unsigned int mlength);
}
может кому пригодится.

Последний раз редактировалось f.hump; 09.05.2015 в 11:18.
f.hump вне форума Ответить с цитированием
Старый 09.05.2015, 00:01   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Обычно при выкладывание асм-кода принято указывать платформы и диалект (компилятор).
p51x на форуме Ответить с цитированием
Старый 09.05.2015, 00:14   #5
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

да я где-то уже писал, что пишу я для Win x64, пользуюсь MS Visual C++ Express в комбинации с компиляторами из Win SDK/DDK.
f.hump вне форума Ответить с цитированием
Старый 09.05.2015, 09:26   #6
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

..ну по регистрам видно, что код для х64 (xor rax,rax), а вот сишное объявление смутило. Теперь всё ясно. Спасибо, забросим в копилку...
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 09.05.2015, 16:44   #7
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

ну, и пусть еще будет md5

объявлено так
Код:
namespace Crypt {

void md5(unsigned int * hash, const char * message, unsigned int mlength, bool);

}
под hash должно быть зарезервированно как минимумум 4 unsigned int, если последний bool == false то в качестве IV будет взят дефолтный, иначе, первые 4 unsigned int of hash будут взяты за IV. результат в первых 4-х unsigned int of hash.
Вложения
Тип файла: txt md5_x64.asm.txt (20.7 Кб, 128 просмотров)

Последний раз редактировалось f.hump; 09.05.2015 в 16:50.
f.hump вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Контрольная сумма Sheleh Общие вопросы Delphi 2 30.08.2013 17:06
Контрольная сумма Vito89 Общие вопросы Delphi 1 17.03.2011 00:21
Контрольная сумма Bad-Teo Фриланс 4 29.12.2010 01:46