46 lines
513 B
NASM
46 lines
513 B
NASM
CPU 8086
|
|
|
|
_start:
|
|
push bp
|
|
mov bp, sp
|
|
mov si, [bp+8]
|
|
push word [si]
|
|
mov si, [bp+10]
|
|
push word [si]
|
|
call crc16
|
|
mov di, [bp+6]
|
|
mov [di], ax
|
|
mov sp, bp
|
|
pop bp
|
|
retf 6
|
|
|
|
crc16:
|
|
push bp
|
|
mov bp, sp
|
|
mov bx, [bp+4]
|
|
add [bp+6], bx
|
|
mov ax, -1
|
|
.L2:
|
|
cmp bx, [bp+6]
|
|
jne .L5
|
|
pop bp
|
|
ret
|
|
.L5:
|
|
mov dl, [bx]
|
|
mov cl, 0x8
|
|
shl dx, cl
|
|
xor ax, dx
|
|
mov dl, cl
|
|
.L4:
|
|
mov cx, ax
|
|
shl cx, 1
|
|
test ax, ax
|
|
xchg cx, ax
|
|
jge .L3
|
|
xor ax, 4129
|
|
.L3:
|
|
dec dl
|
|
jne .L4
|
|
inc bx
|
|
jmp .L2
|