Первый:
У вас есть:
ldab sp ; load byte into b where sp points (e.g. Samples[0]=0x12)
addb #1 ; add 1 to b !-( b goes from 0x12 to 0x13
ldaa b,sp ; load byte into a where b+sp points (Samples[0x13]=???)!!
cba ; compare b&a
То, что вы хотите сделать вместо этого, выглядит примерно так:
...
ldab sp ; load byte into b where sp points (e.g. Samples[0]=0x12)
ldaa 1,sp ; load byte into a where sp+1 points (e.g. Samples[1]=0xCD)
cba ; compare b&a
...
Second:
Вы проверяете a
против b
(через cba
), но ничего не делаете с результатом сравнения. После cba
вам нужно условно перейти вокруг кода подкачки - пропустите два хранилища, которые выполняют подкачку. От того, как вы пропустите, зависит, будет ли сортировка увеличиваться или уменьшаться.
В-третьих:
Обмен, который вы хотите сделать, заключается в сохранении b
, куда пришло a
из (в вышеупомянутом) и магазине a
, откуда b
пришло из (в вышеупомянутом).
У вас есть:
movb 0,sp , y
staa 0,sp
И я думаюВы хотите что-то более похожее (заказ для этого не важен):
staa sp ; store a where b came from
stab 1,sp ; store b where a came from
Четвертый:
Вы зацикливаетесь достаточно - о чем свидетельствует тот факт, что метка loop
никогда не упоминается инструкцией условного перехода. Итак, этот код неполон.
почему мой цикл останавливается на 3
Не уверен, но похоже, что ваш код подкачки стирается y
Счетчик цикла. Попробуйте мои предложения.