From e4473e14f640a104dffeb52cabbe90b4722848f5 Mon Sep 17 00:00:00 2001 From: Paul Mathieu Date: Wed, 24 Sep 2025 00:45:32 +0200 Subject: [PATCH] make crc16.s --- crc16.s | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 crc16.s diff --git a/crc16.s b/crc16.s new file mode 100644 index 0000000..000465d --- /dev/null +++ b/crc16.s @@ -0,0 +1,52 @@ + .arch i8086,jumps + .code16 + .att_syntax prefix +#NO_APP +#APP + .global main +main: + push %bp + mov %sp, %bp + mov 8(%bp), %si + push (%si) + call crc16 + add $0x2, %sp + mov 6(%bp), %di + mov %ax, (%di) + pop %bp + lret $4 + +#NO_APP + .text + .global crc16 + .type crc16, @function +crc16: + pushw %bp + movw %sp, %bp + xorw %bx, %bx + movw $-1, %ax +.L2: + cmpw 4(%bp), %bx + jne .L5 + popw %bp + ret +.L5: + movb (%bx), %dl + movb $8, %cl + shlw %cl, %dx + xorw %dx, %ax + movb %cl, %dl +.L4: + movw %ax, %cx + shlw $1, %cx + testw %ax, %ax + xchgw %ax, %cx + jge .L3 + xorw $4129, %ax +.L3: + decb %dl + jne .L4 + incw %bx + jmp .L2 + .size crc16, .-crc16 + .ident "GCC: (GNU) 6.3.0"