|
Когда работаете со знаком и есть перенос при сложении, это означает что результат сложения отрицательный. Т.е. Вы после анализа переноса должны вычесть к-т из старшей части аккумулятора.
Младшие 16 разрядов результата сложения беззнаковые. С ними все как и было.
Можно проверить по шагам.
1.Расширьте знак входных данных, т.е.
сделайте их 24-х разрядными и старшие 8 разрядов - расширение знака.
2. Складывайте расширенные 24-х разрядные. Результат тоже 24-х разрядный. Перенос из 24-го разряда не важен.
А в старшем байте (разряды 23-16) будет либо 0, либо -1 (0xff).
Умножьте со знаком старший байт результата сложения (разряды 23-16) на к-т. Результат положите в старшую часть аккумулятора.
3. Младшие 16 разрядов рез-та сложения беззнаковые, умножайте их на к-т, т.к. как раньше.
E-mail: info@telesys.ru