小鱼塘--自说自话的地方

  • 小玩意
  • 小想法
记录自己技术和想法地方
  1. 首页
  2. nes
  3. 正文

寻址模式(1.2)

12 11 月, 2026 1点热度 0人点赞 0条评论
内容目录

背景

寻址模式主要为了读取操作数方式,为了读取正确的值,然后进行争取操作

寻址模式

  1. 索引寻址
  2. 其他寻址

索引的模式

Zero page indexed X

val = PEEK((arg + X) % 256)

arg :pc 读取值
X:寄存器
arg + x : 得到index
peek : 读取 arg+x偏移的值

Zero page indexed Y

val = PEEK((arg + Y) % 256)

arg:pc读取值
X:寄存器
arg + y : 得到 index
peek:读取 arg + y 偏移的值

Absolute indexed X

val = PEEK(arg + X)

arg:地址
X:X寄存器
PEEK:读取 arg+X 地址

Absolute indexed Y

val = PEEK(arg + Y)

arg:地址
Y:Y寄存器
PEEK:读取 arg+Y 地址

Indexed indirect

val = PEEK(PEEK((arg + X) % 256) + PEEK((arg + X + 1) % 256) * 256) 

这个是arg是单字节,这个是Zero Page 处理,按照这个公式写代码就可以了

本质区别

索引是通过偏移(主要是x,y),多一个偏移,不是单纯的oprand(操作数),二其他寻址基本是操作数

cpu 指令

CPU 指令通常由 操作码(Opcode) 和 操作数(operand)

多加一个cpu 周期原因

周期 总线上在干什么 ALU 在干什么
T1 取 opcode 译码
T2 取 base_lo 闲置(没有可算的东西)
T3 取 base_hi 算 base_lo + X
T4 把地址放上去读数据 检查进位
T5 重读一次(仅当有进位) 闲置

T4 如果检测进位了,代表是溢出,那么就必须重新计算一下地址,这个硬件为了实现读取16位地址逻辑,这个周期用来正确计算地址,如果没有溢出就不用重新计算

T4还没有计算进位地址,如果进位就需要T5重新读取,这个时候计算进位

一些命令会增加一个周期,我之前写Nes 模拟器是 没有处理,貌似也不是特别影响

缩写

d,x
d,y
a,x
a,y
(d,x)
(d),y

这里的d:direct page 等于 zero page
a:Absolute

标签: 暂无
最后更新:12 11 月, 2026

小鱼儿

爱研究技术,爱玩LOL

点赞
< 上一篇

COPYRIGHT © 2022 小鱼塘. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

湘ICP备18005349号