Hier ein Beispiel einer CRC-16 Prüfung

Gast #1482456
Lesenswert?

Hier eine CRC-16 Prüfung aus einem 32 Bit Datenwort 0x3d23f034
im Old School Assembler

Gegencheck mit CRC-Calculator von
https://www.ghsi.de/component/option,com_wrapper/Itemid,151/
war erfolgreich ;)
1
GPOLYNOM = w6
2
CRC = w3
3
DATA = w4
4
COUNT = w5
5
RESULT = w0
6

7
_test_crc:
8
  MOV #0x8005,GPOLYNOM
9
  MOV #0x3d23,CRC      ;Testdaten 3d23f034
10
  MOV #0xf034,DATA
11
  MOV #0x10,COUNT      ;Anzahl Bit-Shifts (DATA.Length)
12
  CALL _calculate_crc    ;Berechne CRC..
13
  MOV #0x0000,DATA    ;GPOLYNOM.Length - 1 an Testdaten als 0 anhängen
14
  MOV #0x0f,COUNT      ;GPOLYNOM.Length - 1
15
  CALL _calculate_crc    ;Berechne CRC..
16
  XOR CRC,GPOLYNOM,CRC  ;Restwert / GPOLYNOM => CRC
17
  MOV #0x1,RESULT      ;Rückgabewert der Prüfung auf true setzen
18
  MOV #0x6eef,w6      ;Zu erwartende CRC-Summe aus den Testdaten
19
   CPSEQ w6,CRC      ;CRC korrekt?
20
  MOV #0x0,RESULT      ;NEIN ! Rückgabewert auf false setzen
21
RETURN  
22

23
_calculate_crc:
24
  BTSC CRC,#0xf      ;High-Bit von CRC gesetzt?  
25
   XOR CRC,GPOLYNOM,CRC          ;Ja! CRC / GPOLYNOM = CRC
26
  RLC DATA,DATA      ;DATA << 1
27
  RLC CRC,CRC       ;CRC << 1 (DATA Bit)
28
  DEC COUNT,COUNT      ;
29
  CP0 COUNT        ;
30
  BRA NZ,_calculate_crc  ;Datenpaket durch?
31
RETURN
32
  
33
.end

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren