2014-10-05 4 views
2

У меня есть случайное число (от 0 до 31) x, хранящееся по адресу $00, и другое случайное число (от 0 до 31) y, хранящееся по адресу $01. Я хочу использовать эти два числа в качестве координат и получить адрес $xy. Например, если x = 2, y = 10, адрес будет $020a. Я новичок, так может ли кто-нибудь поделиться эффективным способом сделать это?6502 Сборка преобразует двузначное число в 4 цифры

Я хочу сохранить некоторое другое значение в производном адресе $020a, поэтому для этого мне это нужно.

+1

Каков фактический вопрос? У вас есть координаты x и y в 00 и 01. Работа выполнена? Что дальше? Прочтите координаты x и y и сделайте то, что вы должны делать с ними ....? – GreenAsJade

+0

Да, гораздо яснее. Адрес будет $ 020a с x = 2 и y = 10 вправо? – craigdfrench

+0

@silverglade Yep :) – Meteorite

ответ

1

Вы должны использовать косвенную адресацию. Косвенная адресация берет адрес плюс регистр Y, поэтому убедитесь, что вы сначала очистили регистр Y.

LDY #0 
LDA ($0),Y 

Для хранения по этому адресу:

LDA #$FF ; or whatever you want to store 
LDY #0 
STA ($0),Y 

Вот еще информация о косвенной адресации: http://www.obelisk.demon.co.uk/6502/addressing.html#IDY

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

+0

Спасибо @StilesCrisis! Именно то, что мне нужно! – Meteorite

1
LDY #$00 
LDA #VALUE 
STA ($00),Y 

Это загружает данные в аккумулятор из адреса, содержащегося в $ 00 и $ 01, как описано в вашем вопросе.

Когда адрес $ 00 имеет 10 или $ 0a, а адрес $ 01 имеет 2 или $ 2, это будет записывать значение VALUE в адрес $ 02a.

Это использует непрямой индексной адресации описаны в http://www.dwheeler.com/6502/oneelkruns/asm1step.html

+0

Спасибо @silverglade! Очень полезно! – Meteorite

+1

Возвращение старых Commodore 64 воспоминаний. О, радость. – craigdfrench

+0

Ха-ха. На самом деле так весело изучать язык ассемблера 6502. – Meteorite