не асм, но для затравки (до 0.1°):
Код
// convert 12-bit temperature data of ds18b20 to signed celsius fixed-point (with tenth)
S16 ds1w_12bit2tenth(U16 value) {
U8 value_sign = (value >> 8) & 0x80; // remember sign of value
if (value_sign) value = 0 - value; // convert to absolute value
value = (value >> 1) + (value >> 3); // convert from 12-bit to fixed point
if (value_sign) value = 0 - value; // restore sign of result
return value;
}