计算CRC

CRC全称循环冗余校验,做数据传输时,经常用到CRC检测数据是否正确。


  ;initialize table with values
  tabInit proc uses edi
    LOCAL @len: DWORD
  
         mov    edi, offset crc_tab
         xor    ecx, ecx
         mov    @len, ecx
         
        R@@:
         mov    eax, @len
         mov    ecx, 8h
         
         @@:
        test    eax, 1h
      .if ZERO?
         shr    eax, 1h
      .else
         shr    eax, 1h
         xor    eax, 0EDB88320h      
      .endif            
        loop    @B
          
       stosd
         inc    @len
         cmp    @len, 100h
          jl    R@@
        
      return    0
  tabInit endp
  
  ;calculates CRC32 value.
  calc proc uses esi buffer:DWORD, length:DWORD
         mov    esi, buffer
         mov    ecx, length
         mov    ebx, offset crc_tab
         mov    edx, 0ffffffffh
         
         @@:
         xor    eax, eax
       lodsb
         xor    al, dl
         mov    eax, DWORD PTR [ebx + eax]
         shr    edx, 8h
         xor    edx, eax
        loop    @B
        
         mov    eax, edx
         ret
  calc endp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值