【发布时间】:2021-05-17 05:54:08
【问题描述】:
我正在构建一个基于 W65C02S 的计算机,我尝试自己构建基本上所有的工具。包括汇编器(是的,我知道它们存在,我只是想自己从头开始制作一切,为了好玩)。
在处理JSR操作码(绝对寻址模式)时,我发现在将程序计数器放入堆栈之前,它先从堆栈中读取一个字节(此时程序计数器设置为80 2e ,堆栈指针为01b6):
READ address: 80 2e data: 20 JSR ; Read the opcode
READ address: 80 2f data: 14 14 ; Read the LO byte of operand
READ address: 01 b6 data: 74 't' ; Read the stack (why?!)
WRITE address: 01 b6 data: 80 --- ; Write HI byte of PC
WRITE address: 01 b5 data: 30 '0' ; Write LO byte of PC
READ address: 80 30 data: 80 80 ; Read HI byte of operand
READ address: 80 14 data: 8d STA ; Read opcode at `80 14` (the JSR operand)
它工作正常,但它首先从堆栈中读取的原因是什么?
(更新:解释表格。这是来自我自己的工具。我正在使用 Arduino 来查看数据和地址总线,看看那里发生了什么。它是一个只运行我自己的代码的硬件 CPU。)
【问题讨论】: