Hi,
I don't follow your code that well but the formula...
0.125*(M1*256+M2-0x0FA0)
As far as I can see you're combining two bytes into a word where M1 is the high byte anf M2 the low byte. Then you subtract 4000 from that value and multiply 0.125. You can combine the two bytes into a word simply by creating a word variable and aliasing the high and low bytes. Subtracting 4000 is a no brainer and multiplying by 0.125 is the same as dividing by 8, dividing by 8 is the same as shifting the value 3 places to the right, right?
Code:
Result VAR WORD                 ' This is the "output" value.
Value VAR WORD                  ' This is the "input" variable consisting of two bytes, namely... 
M1 VAR Value.HighByte           ' ...M1,m which is the high byte and...
M2 VAR Value.LowByte            ' ...M2, qhich is the low byte

' Now, if M1 is 15 ($0F) and M2 is 160 ($A0) Value is $0FA0 so the result, after subtracting 4000 ($0FA0) will be 0.

Sign VAR BIT

Result = (Value - 4000)         ' Subtract 4000
Sign = Result.15                ' Remember if the value is negative.
Result = ABS(Result)            ' Take the absolute value of Result.
Result = Result >> 3            ' Divide that by 8
If Sign THEN Result = -Result   ' If the original value (before dividing by 8) was negative, so is the result.
Now, Result will be a signed two-complements number, if the high bit is set the value is negative, else it's positive. To display it on the LCD you can use the SDEC modifier, it will print it correctly with a negative sign in front (if negative of course). To display a fixed number of digits you can use for example SDEC3 which will display 3 digits (012 or -123 for example).

Just be aware that incrementing M2 so it rolls over will not automatically increment M1, for that to happen you must increment Value.

Not sure that's what you're really asking but I tried... :-)

/Henrik.