
Originally Posted by
Ioannis
My main concern is how to save the W register and then restore it.
I tried
MOVW _wsave
but did not compile.
Ioannis
The command would be: movwf
Here is a quick attempt at converting the asm to PBP. Note that this is not the most efficeint/elegant conversion, but it should be a bit clearer was to what's happening.
Code:
crc VAR BYTE
i_w VAR BYTE
goto start
crc_8:
crc = i_w ^ crc ;xorwf crc,f
i_w = 0 ;clrw
IF crc.0 = 1 THEN ;btfsc crc,0
i_w = i_w ^ $5E ;xorlw 0x5e
END IF
IF crc.1 = 1 THEN ;btfsc crc,0
i_w = i_w ^ $BC ;xorlw 0xbc
END IF
IF crc.2 = 1 THEN ;btfsc crc,0
i_w = i_w ^ $61 ;xorlw 0x61
END IF
IF crc.3 = 1 THEN ;btfsc crc,0
i_w = i_w ^ $C2 ;xorlw 0xc2
END IF
IF crc.4 = 1 THEN ;btfsc crc,0
i_w = i_w ^ $9D ;xorlw 0x9d
END IF
IF crc.5 = 1 THEN ;btfsc crc,0
i_w = i_w ^ $23 ;xorlw 0x23
END IF
IF crc.6 = 1 THEN ;btfsc crc,0
i_w = i_w ^ $46 ;xorlw 0x46
END IF
IF crc.7 = 1 THEN ;btfsc crc,0
i_w = i_w ^ $8C ;xorlw 0x8c
END IF
crc = i_w ;movwf crc
RETURN
start:
crc = 0 ;clrf crc
i_w = 1 ;movlw 1
GOSUB crc_8 ;call crc_8
crc = 0 ;clrf crc
i_w = 2 ;movlw 2
GOSUB crc_8 ;call crc_8
crc = 0 ;clrf crc
i_w = 4 ;movlw 4
GOSUB crc_8 ;call crc_8
crc = 0 ;clrf crc
i_w = 8 ;movlw 8
GOSUB crc_8 ;call crc_8
crc = 0 ;clrf crc
i_w = $10 ;movlw 0x10
GOSUB crc_8 ;call crc_8
crc = 0 ;clrf crc
i_w = $20 ;movlw 0x20
GOSUB crc_8 ;call crc_8
crc = 0 ;clrf crc
i_w = $40 ;movlw 0x40
GOSUB crc_8 ;call crc_8
crc = 0 ;clrf crc
i_w = $80 ;movlw 0x80
GOSUB crc_8 ;call crc_8
END
Bookmarks