Они используют бит переноса для сложения и вычитания. Операции ассемблера для «сложения с переносом» и «вычитания с переносом» (или «заимствования») могут использоваться для сложения и вычитания произвольной длины битов с расширенной точностью.
Для умножения, если у вас есть только 32-битный результат от умножения, вы можете разбить его на 16-битные пары значений и умножить, а затем сдвинуть и сложить (с переносом), чтобы получить полный 64-битный результат из 32- бит умножить. По сути, использование длинной версии (любые два 16-разрядных умножения соответствуют 32-разрядному результату) можно использовать для генерации произвольных умножений на длину в битах с использованием более ограниченной точности.
FWIW, 32-битная команда Intel asm 'mul' может помещать 64-битный результат в EDX: EAX, так что вы можете делать умножения на 32-битные блоки (с добавлением 64-битных значений), а не на 16-битные битовые блоки (с 32-битными значениями для сдвига и добавления).