-
-
[旧帖]
一小段汇编有点不明白
0.00雪花
-
发表于:
2006-12-28 14:12
3810
-
;**********************************************************
;函数功能:生成CRC-32表
;**********************************************************
init_crc32table proc
;如果用C语言来表示,应该如下:
;
; for (i = 0; i < 256; i++)
; {
; crc = i;
; for (j = 0; j < 8; j++)
; {
; if (crc & 1)
; crc = (crc >> 1) ^ 0xEDB88320;
; else
; crc >>= 1;
; }
; crc32tbl[i] = crc;
; }
;
;呵呵,让我们把上面的语句改成assembly的:
mov ecx, 256 ; repeat for every DWORD in table
mov edx, 0EDB88320h
$BigLoop:
lea eax, [ecx-1];这儿是把什么给eax,是255,254...吗?与mov eax,ecx-1有何区别?
push ecx
mov ecx, 8
$SmallLoop:
shr eax, 1
jnc @F ;为何是@F,而不是@@?
xor eax, edx
@@:
dec ecx
jne $SmallLoop
pop ecx
mov [crc32tbl+ecx*4-4], eax
dec ecx
jne $BigLoop
ret
init_crc32table endp
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!