Увеличение первых двух байтов адресной сборки MOS6502

здесь у меня проблема, так как регистры всего 8 бит, я не могу хранить 16-битный адрес, поэтому мне нужно разделить его на два байта, например:

адрес: %4300 будет разделен с прямым порядком байтов

старший байт: 43

младший байт: 00

проблема в том, что я не могу увеличить старший байт адреса, а только младший байт, используя простую инструкцию INC.

Например:

LDA $4300
ADC #01
STA %4300

РЕДАКТИРОВАТЬ:

я хочу увеличить адрес памяти, который составляет 4300 долларов США, но я просто хочу увеличить первые два байта, так что старший байт, мне не нужно записывать значение для этого адреса

пример:

LDA #$4300
ADC #1

; the result i want should be $4400 and so on..

как я могу это решить?

Спасибо!


person Lukas    schedule 27.10.2018    source источник
comment
Почему вы не можете использовать ответ Росса с двумя далеко разделенными адресами, например inc $4300/bne/inc $4400? Какие два адреса содержат ваши два байта данных, и какими должны быть начальное и конечное состояния?   -  person Peter Cordes    schedule 28.10.2018


Ответы (1)


Если вы хотите увеличить или изменить значение адреса или любой части данных, вам нужно знать адрес этого адреса.

На первый взгляд это может показаться немного запутанным, но имейте в виду, что все, с чем работает ЦП, находится либо в пространстве его памяти, либо внутри регистра.

Это включает в себя все инструкции и значения, которые выдает ваш компилятор. Таким образом, чтобы увеличить старший байт вашего адреса (4300 долларов США), вы должны знать, где на самом деле находятся эти данные.

Еще одна вещь, которую нужно знать, 6502 является «прямым порядком байтов», поэтому инструкции сначала считывают младший байт, а затем старший байт. Таким образом, в памяти ваш адрес $4300 на самом деле будет $00, за которым следует $43.

Теперь есть много разных способов добиться того, что вы хотите сделать, но вот простой пример:

cool_address:   .res 2  ; We reserve 2 bytes somewhere in RAM
                        ; and give it the label cool_address
                        ; so we can easily access it.
...

LDA #$00                ; Put $00 into the Accumulator
STA cool_address        ; Store the Accumulator in the 1st byte of address
LDA #$43                ; Put $43 into the Accumulator
STA cool_address+1      ; Store the Accumulator in the 2nd byte of address

                        ; At this point, the 2 bytes at cool_address are
                        ; 00 43

INC cool_address+1      ; Increment 2nd byte of address


                        ; At this point, the 2 bytes at cool_address are
                        ; 00 44

Метка cool_address теперь может быть присвоена любой инструкции, которая принимает адрес, и инструкция будет работать с адресом $4400.

person Jeff Alyanak    schedule 30.10.2018