То, как вы решаете l oop вернуться к print_digits
, неверно:
; I've omitted the SEC since it's pointless
cpx #$1
bcc print_digits
Это перейдет к print_digits
, только если X
без знака ниже 1. Единственное возможное значение, для которого это может быть истиной, равно 0, поэтому вышеприведенное также можно описать как переход к print_digits
, если X
равно 0.
Если мы посмотрим на все print_digits
l oop, поэтому его можно описать следующим псевдокодом:
x = numDigits - 1;
do
{
print(digits[x]);
x--;
} while (x == 0);
Единственный сценарий ios, в котором это даст вам правильный результат, - это когда numDigits
равен 1 или 2. Для чего-то большего кроме этого, вы напечатаете один ди git, а затем выйдете из l oop.
То, что вы действительно хотите, выглядит примерно так:
x = numDigits - 1;
do
{
print(digits[x]);
x--;
} while (x >= 0);
То есть заменить:
dex
sec
cpx #$1
bcc print_digits
на:
dex ; Updates the N flag after decrementing X
bpl print_digits ; Jump if N is clear, i.e. if X >= 0