De ehhez minek assembly?
value = variable24bit * variable8bit;
value = (uint16_t)variable16bit * variable8bit; /* castolás csak akkor kell, ha variable16bit igazából nagyobb, de te tudod, hogy befér 16 bitbe. */
Oké, az első a általában 32 bites szorzásra fordul, de a modernebb gcc-k pl már tudnak 24 biten számolni.
Az olvashatóság meg megszokás kérdése, de azért a c-t szerintem többen tudják olvasni, mint az assemblyt. Főleg, hogy utóbbi nagyon platformfüggő.