6502 Режим адресации с метками - PullRequest
0 голосов
/ 23 июня 2018

Я смотрю пример кода с этого сайта:

http://www.6502asm.com/

И, глядя на это, я вижу, что у них есть некоторые инструкции, что вместо непосредственного использования ячейки памяти они используют метку, например, в alive.asm:

lda ypos,x

И YPOS

ypos:
dcb $00,$02,$20,$02,$40,$02,$60,$02
dcb $80,$02,$a0,$02,$c0,$02,$e0,$02
dcb $00,$03,$20,$03,$40,$03,$60,$03
dcb $80,$03,$a0,$03,$c0,$03,$e0,$03
dcb $00,$04,$20,$04,$40,$04,$60,$04
dcb $80,$04,$a0,$04,$c0,$04,$e0,$04
dcb $00,$05,$20,$05,$40,$05,$60,$05
dcb $80,$05,$a0,$05,$c0,$05,$e0,$05

Я знаю, что метки различаются в зависимости от ассемблера, но я предполагаю, что он проходит через этот список, но как работает его специфика

1 Ответ

0 голосов
/ 25 июня 2018

Вот подробности об инструкции lda ypos,x:

  1. Если ypos находится вне нулевой страницы (равно или больше 0x0100):

    • Код операции 0xBD: он использует индексированный абсолютный режим адресации с использованием индексного регистра X, также называемого абсолютный, X режим
    • вычисляет адрес, добавляя содержимое регистра X к 2-байтовому адресу, представленному меткой ypos, затем загружает регистр A (аккумулятор) с байтом, расположенным по вычисленному адресу
    • его размер 3 байта ;для пересечения границы страницы требуется 4 такта процессора + 1, т. е. если старший байт ypos отличается от старшего байта вычислительного адреса ypos + X.
    • itобновляет только статус флаги N и Z (отрицательный и ноль)

  2. Если ypos находится внутри нулевой страницы (между 0x00 и0xFF), то это может зависеть от вашего ассемблера (проверьте код операции): либо он использует индексированный абсолютный режим адресации и работает, как описано ранее, либо:
    • Код операции 0xB5: используется индексная нулевая страница , режим адресации , использующий индексный регистр X, также называемый zeropage, режим X
    • вычисляет адрес, добавляя содержимое регистра X к 1-байтовому адресу, представленному меткой ypos, , заключая в диапазон 0x00-0xFF , затем загружает Aрегистр (аккумулятор) с байтом, расположенным по вычисленному адресу.
      Примечание: будь очень машинойЭто полезно, потому что, вероятно, это не ожидаемое поведение, если значения, определенные в ypos, выходят за нулевую страницу.В ассемблере может быть определенный синтаксис для принудительной настройки абсолютного режима адресации X.
    • его размер составляет 2 байта ;требуется 4 такта процессора
    • обновляется только статус флаги N и Z (отрицательный и ноль)
...