SX Microcontroller Math Method

24 bit binary addition

Translated and optimized for the Scenix SX by Nikolai Golovchenko

From: Dwayne Reid

...here is an example that takes the value in R1H,M,L and adds it to the value contained in AD2H,M,L (result in AD2H,M,L). You should be able to see how to extend it to more than 24 bits.

There is a similar version that does subtraction. I often extend to 40 bits or more - its easier to do this when manipulating integer values than it is to try and figure out which bits I can discard.

;now add new sample
	mov	W, R1L		;
	add	AD2L, W	;LS byte

	mov	W, R1M		;middle byte
	snb	C		;take R1M+1 if carry
	movsz	W, ++R1M	;if R1M+1==0 skip addition to preserve carry
	add	AD2M, W	;

	mov	W, R1H		;MS byte
	snb	C
	movsz	W, ++R1H
	add	AD2H, W	;

And 24-bit substraction: AD2 = AD2 - R1

	mov	W, R1L		;
	sub	AD2L, W	;LS byte

	mov	W, R1M		;middle byte
	sb	C		;take middle byte + 1 if borrow
	movsz	W, ++R1M	;if R1M+1==0 skip substraction to preserve borrow
	sub	AD2M, W	;

	mov	W, R1H		;MS byte
	sb	C
	movsz	W, ++R1H
	sub	AD2H, W	;