首页
社区
课程
招聘
[旧帖] 一小段汇编有点不明白 0.00雪花
发表于: 2006-12-28 14:12 3810

[旧帖] 一小段汇编有点不明白 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

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 201
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
效果是一样的,指令周期不同而已
lea是取有效地址 []相当于offset
2006-12-28 15:57
0
雪    币: 224
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
jnc     @F  ;为何是@F,而不是@@?
@F表示后面第一个@@
2006-12-28 16:15
0
雪    币: 101
活跃值: (12)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
4
效果是一样的,指令周期不同而已
lea是取有效地址 []相当于offset
======
最主要的是lea不影响标志位
2006-12-28 19:12
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢,解了心中的一点疑惑
2006-12-29 10:32
0
游客
登录 | 注册 方可回帖
返回
//