6502 хранить инструкции (STA, STX и т. д.) и адреса памяти

Это действительно беспокоит меня при написании моего эмулятора 6502/NES...

Инструкции магазина 6502 работают следующим образом:

STA $2A78 - Store the value of the accumulator into memory address $2A78.

Однако эта инструкция использует режим абсолютной адресации, который должен возвращать 8-битное значение, хранящееся в памяти $2A78. Инструкция AND следует этому правилу:

(If $6A is stored in $2A78)
AND $2A78 - Perform a logical AND between the accumulator and the value stored in $2A78 (which is $6A)

Поэтому в обычных ситуациях абсолютная инструкция STA должна сохранять значение аккумулятора в 8-битном адресе нулевой страницы, который хранится в $2A78. Если бы он действительно сохранял значение в $2A78, не должен ли режим адресации быть немедленным? - напр. STA #2A78

Кроме того, есть ли какие-либо другие инструкции, которые ведут себя «ненормально», как инструкции магазина?


person H.J Jang    schedule 31.07.2017    source источник
comment
Что вы имеете в виду, нормальные ситуации? Что вы имеете в виду, 'Поэтому? Ваш аргумент не ясен. Чтобы мы могли устранить ваше непонимание, какую ссылку вы используете?   -  person philipxy    schedule 31.07.2017


Ответы (1)


Я думаю, вас может смутить использование режимов адресации. Режим абсолютной адресации просто означает, что адрес памяти, используемый для операции, следует сразу за кодом операции.

В обоих упомянутых вами случаях, STA и AND, дело обстоит именно так.

Однако как используется этот адрес памяти, зависит от самого кода операции. STA будет использовать его как место для хранения аккумулятора. AND будет использовать его для загрузки байта, а затем использовать этот байт для изменения аккумулятора. Оба они являются абсолютным режимом адресации, несмотря на эту разницу.

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

STA #$2A78

и я понимаю, почему вы можете думать, что это более логически последовательно, но язык ассемблера процессора был разработан не так, и вряд ли кто-то собирается это исправить сейчас :-)

Обратите внимание, что нет большого смысла напрямую AND 8-битного аккумулятора использовать 16-битное адресное значение.

person paxdiablo    schedule 31.07.2017
comment
Оооо, это все объясняет! Эта диаграмма, на которую я ссылался (drive.google.com/file/ d/0B6OHeG0FVYP8ZFNVd1p5emVfNnM/) сбивало с толку инструкции по хранению — теперь это имеет смысл :) - person H.J Jang; 31.07.2017