SX Microcontroller Math Method

Two's complement 8 bit

from Andy Warren

If [...] your original number is in a register, you can do it with this bit of code:

	not	REG	;REG = two's-complement of REG.
	inc	REG	;

or this one:

	mov	W, /REG	;W = two's-complement of REG
;*** WARNING: ADDLW was expanded in three instructions! Check if previous instruction is a skip instruction. 
;        ADDLW   1       ;(REG is unchanged).
	mov	Hack, W
	mov	W, #1	;(REG is unchanged).
	add	W, Hack

If the original number is in W, the easiest way is:

;*** WARNING: Manual replacement required for "SUBLW k" instruction (w = k - w). Check if previous instruction is a skip instruction. 
        SUBLW   0       ;W = two's-complement of W.

Clyde Smith-Stubbs [clyde at htsoft.com] of HI-TECH Software says

[These snippits do not handle the problem: REG = 0x80] because there is no correct result in this case. The value 0x80 interpreted as 2's complement is legal, and equal to -128. The negative of this, 128, is NOT representable as an 8 bit 2's complement number.