Как стать автором
Обновить

Комментарии 7

Ниже короткий фрагмент кода, наглядно иллюстрирующий реализующий одну и ту же функциональность (увеличение на единицу элементов массива) для двух процессоров — CP1610 и MOS6502.

Похоже что не элементов массива, а элемента массива, но зато 32 раза?
Да, вы правы — регистр R3 не меняется. Этот сравнительный фрагмент я взял из одного форума — его в качестве примера привёл человек, который много чего для Intellivision написал, из-за чего я мельком глянул и не стал вдумываться. А зря.
На самом деле у меня даже нет идей как его исправить так, чтобы он выглядел нормально. Если заменить R3 на autoincremented R4/R5, то увеличены будут только половина элементов.
А если вкорячить туда INC R3, это будет как-то криво смотреться.

P.S. Надо же, кто-то внимательно это читает :)
P.P.S. Пока уберу код из поста, оставлю в этом комментарии:

; CP1610

MVII #$4000, R3
MVII #$20, R0
@@loop:
MVI@ R3, R1
INCR R1
MVO@ R1, R3
DECR R0
BNEQ @@loop

; MOS6502

LDX #$1F
@@loop:
LDA $4000, X
CLC
ADC #$01
STA $4000, X
DEX
BPL @@loop

Так на 6502 тоже только одна ячейка инкрементируется в цикле, а не последовательные ячейки.
Почему одна? X же уменьшается в каждой итерации.
— Absolute,X and absolute,Y: $c000,X and $c000,Y
These are the absolute addressing versions of zero page,X and zero page,Y. For example:

LDX #$01
STA $0200,X ;Store the value of A at memory location $0201
Сорри, теперь я не обратил внимание на то что там не просто 'LDA $4000', а 'LDA $4000, X'
А отчего в коде для 6502 в цикле не использован INC $4000, X?
Возможно автора этого сравнения (см. коммент выше) беспокоили флаги. В смысле он считал, что в этом случае примеры будут как бы неэквивалентны.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации