assembly - 在 6502 中寻址
问题描述
我最近开始在 6502 汇编中编程,但遇到了一个问题。我希望能够存储一个从地址 $0300 开始的 16 位内存地址,然后我想在该地址存储一个值。
例如存储地址 $2016 将是 $0300:#$20, $0301:#$16。然后我想读取这两个字节并将值存储为 2016 美元。我似乎找不到允许这样做的寻址模式,是否有类似的东西,或者我是否必须使用零分页。
解决方案
您需要找到两个零页面位置并通过它们进行索引。间接寻址只能通过零页获得。而且,事实上,没有不使用索引的零页面间接模式。
假设$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 约定并存储您的字节,以便$300
contains$16
和$301
contains $20
。
推荐阅读
- php - 嵌套 for 循环将 JSON 插入 php 中 SQL 表的同一行
- javascript - Error 对象是否具有文字语法?
- java - 如何使用 ListObjectsV2Request 上的前缀或分隔符过滤 AWS 中的键?
- angular - 角度 4 中字节数组的文档查看器(doc 或 docx)
- go - 带有自定义 css 的 Golang FileServer
- tcpdump - tcpdump 文件大小 = 网络流量?
- r - 使用大型数据框创建新的变量多个 ifelse 语句
- oop - 避免全局变量或使用依赖注入?
- javascript - PHP 将表拆分为较小的表
- javascript - Python_crawling