make crc16.s
This commit is contained in:
52
crc16.s
Normal file
52
crc16.s
Normal file
@@ -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"
|
Reference in New Issue
Block a user