首页 > 解决方案 > 在 6502 中寻址

问题描述

我最近开始在 6502 汇编中编程,但遇到了一个问题。我希望能够存储一个从地址 $0300 开始的 16 位内存地址,然后我想在该地址存储一个值。

例如存储地址 $2016 将是 $0300:#$20, $0301:#$16。然后我想读取这两个字节并将值存储为 2016 美元。我似乎找不到允许这样做的寻址模式,是否有类似的东西,或者我是否必须使用零分页。

标签: assembly6502addressing-mode

解决方案


您需要找到两个零页面位置并通过它们进行索引。间接寻址只能通过零页获得。而且,事实上,没有不使用索引的零页面间接模式。

假设$02$03可用。将字节复制到那里。

; Store the address you want to access in zp memory
lda $300
sta $03     ; Note I'm swapping the bytes (see below)
lda $301
sta $02
; access the address indirectly through zero page
ldx #0
lda $data
sta ($02,x) ; x is zero so address used is $02

$300我在将它们复制到零页时交换字节的原因是您已经以大端顺序存储了地址(在您的问题中),即低地址的高字节。6502 是小端,这意味着它需要低地址的低字节。您应该真正遵循 6502 约定并存储您的字节,以便$300contains$16$301contains $20


推荐阅读