
Сообщение от
GriV
Есть такие замечательные команды как adc и sbc - используют флаг CY
Например типовая задача уменьшить значение аккумулятора не менее какого то (например 23).
обычно делают:
dec a
cp 23
jr nc,$+3
inc a
а можно вот так аккуратно:
sub 23
adc a,22
работает много элегантнее и что очень важно имеет всегда одну и ту же длительность (что особенно интересно демописателям где каждый раз приходиться пересчитывать такты).
Или обратная задача - увеличить значение но не более какого то (например 75)
В этом случае делаем так:
add a,-75
sbc a,-1-75
В этом случае выше 75 ну никак не поднимется с теми же преимуществами.
Прошло всего-то 14 лет - а кто-то проверял, как это работает? Я проверил (понадобилось). Немного не так работает, как заявлено.
Код:
ld a, 23
sub 23
adc a, 22
оставляет в А значение 22, хотя должно быть 23.
То есть, формула должна быть:
sub x+1
adc a, x
а не
sub x
adc a, x-1
К этому:
Код:
add a,-75
sbc a,-1-75
претензий нет.