Я изучаю ассемблер для NES, и я написал эту программу:
.org $8000 ; set code to start of rom
Start: ; make a label called start
lda #$ff ; set acc to 0xff
sta $0000 ; store address 0x0000 to acc which is 0xff
jmp Start ; jump to label start
Я компилирую программу с помощью NESASM3, она успешно компилируется, затем запускаю ее в своем эмуляторе, когда я захожу в средство просмотра памяти в эмуляторе, смотрю на адрес $0000, это 01, а не FF, как я запрограммировал.
.inesmap
,.inesprg
и т. д.)? Вы уверены, что код действительно выполняется (вы его пошагово проходили в отладчике эмулятора)? - person Michael   schedule 26.02.2019LDA #$ff
должен собираться в байтыA9 FF
, так какLDA #
имеет код операцииA9
. Таким образом, вы ожидаете увидетьA9
в качестве первого байта, а неFF
, и, поскольку вы установили.org
в$8000
, вы ожидаете увидеть его по адресу$8000
, а не по нулевому. В противном случае см. ответ Майкла о настройке векторов NMI, start и IRQ, чтобы 6502 знал, с чего начать выполнение, а также поля, специфичные для NES, необходимые для гарантии определенного расположения памяти. - person Tommy   schedule 27.02.2019