Цитата Сообщение от Reobne Посмотреть сообщение
Теория правильная, но на практике, если этой программой 3 разделить на 3 получится 0.
3*85/256 = 0.99609...
Если округлить до ближайшего целого - то получится правильный ответ, 1.

Например, если у нас в HL - результат от умножения на 85, то:
Код:
LD A,H
RL L
ADC A,0
Округлит результат.

---------- Post added at 16:07 ---------- Previous post was at 15:59 ----------

Только что проверил. Округление - это хорошо, но в деле нахождения остатка помогает плохо. Неверное частное без округления при умножении на 85 и делении на 256 получается только для тех чисел, которые делятся на 3 нацело. Но этот случай легко предусмотреть. Например, находим частное q = i*85/256 (округляем в меньшую сторону). Умножаем частное на 3, вычитаем из делимого. Получаем остаток, который будет равен 3 (а не 0) в случае, если исходное число делится на 3 нацело. Просто проверяем, что если вычисленный остаток равен 3 - то обнуляем его, и все.