【彙編】用匯編語言實現32位循環冗餘校檢和(CRC-32)

實現基本思路

以CRC-16爲例spa

CRC-16 碼由兩個字節構成,在開始時 CRC 寄存器的每一位都預置爲1,而後把CRC寄存器與 8bit 的數據進行異或,以後對CRC寄存器從高位到低位進行移位,在最高位的位置(MSB)補0,而最低位(LSB,移位後已經被移出CRC寄存器)若是爲1,則把寄存器與預約義的多項式碼進行異或,若 LSB 爲0,則無需進行異或。重複上述的由高至低的移位 8 次,第一個 8bit 數據處理完畢,用此時 CRC 寄存器的值與下一個 8bit 數據異或並進行如前一個數據似的8次移位。全部字符處理完成後CRC 寄存器內的值即爲最終的 CRC 值it

  1. 設置CRC寄存器,並給其賦值FFFFH
  2. 將數據的第一個 8bit 字符與16位 CRC 寄存器的低8位進行異或,並把結果存入 CRC 寄存器。
  3. CRC 寄存器向右移移位,MSB補0,移出並檢查 LSB。
  4. 若是LSB爲0,重複第三步;若LSB爲1,CRC寄存器與多項式碼相異或。注意:該步檢查LSB應該是右移前的LSB,即第3步前的LSB。
  5. 重複第3與第4步直到8次移位所有完成,此時一個 8bit 數據處理完畢。
  6. 重複2至5步直到全部數據所有處理完畢。
  7. 最終 CRC 寄存器的內容即爲 CRC 值。
相關文章
相關標籤/搜索