Ответ 1
Первые две инструкции складывают dst
и src
вместе, сохраняя результат в аккумуляторе. Третья инструкция вычисляет то, что иногда называют "сквозным переносом", а четвертая сохраняет результат в dst
.
Ниже приведена эквивалентная реализация C:
int32_t sum = dst + (int32_t)src;
dst = (int16_t)((sum & 0xffff) + (sum >> 16));
Википедия рассказывает о сквозном переносе в своем обзоре дополнения:
Для добавления двух чисел, представленных в этой системе, одно выполняет обычное двоичное сложение, но затем необходимо выполнить сквозной перенос: то есть добавить любой результирующий перенос обратно в итоговую сумму.
Конечный перенос используется, например, при расчете контрольных сумм IPv4.