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

[旧帖] 一小段汇编有点不明白 0.00雪花

2006-12-28 14:12
3646
;**********************************************************
;函数功能:生成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

阿里云助力开发者!2核2G 3M带宽不限流量!6.18限时价,开 发者可享99元/年,续费同价!

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