Увеличение первых двух байтов адресной сборки MOS6502 - PullRequest
0 голосов
/ 28 октября 2018

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

addr: % 4300 будетразделить на младший байтовый

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

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

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

, например:

LDA $4300
ADC #01
STA %4300

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

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

пример:

LDA #$4300
ADC #1

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

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

спасибо!

1 Ответ

0 голосов
/ 30 октября 2018

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

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

Это включает в себя все инструкции и значения, которые выдает ваш компилятор. Таким образом, чтобы увеличить старший байт вашего адреса ($ 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.

...