Assembly 编写仿真器:仿真器如何从地址理解操作码?

Assembly 编写仿真器:仿真器如何从地址理解操作码?,assembly,emulation,opcode,6502,Assembly,Emulation,Opcode,6502,我很难理解SNES如何理解什么是操作码,什么是地址/参数。我知道每个操作码都由唯一的十六进制字节编码。它们是紧接着的字节吗?如果是这样的话,它如何知道接受一个字节或两个字节(对于绝对地址或直接地址) 如果是这种情况,是否意味着文件的第一个字节(在头之后)是操作码?处理器有一个PC(程序计数器)寄存器,其中包含下一条要执行的指令的地址。复位时,PC设置为开始执行的固定值 每个指令的第一个字节是操作码字节;它的编码决定了指令将做什么以及需要多少操作数字节。处理器从PC中的地址提取操作码字节并递增PC

我很难理解SNES如何理解什么是操作码,什么是地址/参数。我知道每个操作码都由唯一的十六进制字节编码。它们是紧接着的字节吗?如果是这样的话,它如何知道接受一个字节或两个字节(对于绝对地址或直接地址)

如果是这种情况,是否意味着文件的第一个字节(在头之后)是操作码?

处理器有一个PC(程序计数器)寄存器,其中包含下一条要执行的指令的地址。复位时,PC设置为开始执行的固定值

每个指令的第一个字节是操作码字节;它的编码决定了指令将做什么以及需要多少操作数字节。处理器从PC中的地址提取操作码字节并递增PC。检查操作码并提取任何必要的操作数字节,始终从PC指向的内存中提取,每次递增。获取完整指令后,PC将指向下一条指令的操作码

CPU然后执行由操作码字节及其操作数确定的操作,这称为指令执行。例如,在跳转的情况下,执行可能会改变PC,但在执行结束时,PC将指向要执行的下一条指令的操作码字节,称为fetch execute cycle的周期将继续

程序中的错误通常是由于PC被更改为一个值,而该值不是程序员/编译器编写的指令的开始。CPU没有办法知道这一点,不管怎样,都会继续执行从未打算执行的内存内容,并执行基本上随机的操作

了解这一切是如何组合在一起的一个很好的资源是一本书,但大部分内容都可以从该网站获得

希望有帮助。

处理器有一个PC(程序计数器)寄存器,其中包含要执行的下一条指令的地址。复位时,PC设置为开始执行的固定值

每个指令的第一个字节是操作码字节;它的编码决定了指令将做什么以及需要多少操作数字节。处理器从PC中的地址提取操作码字节并递增PC。检查操作码并提取任何必要的操作数字节,始终从PC指向的内存中提取,每次递增。获取完整指令后,PC将指向下一条指令的操作码

CPU然后执行由操作码字节及其操作数确定的操作,这称为指令执行。例如,在跳转的情况下,执行可能会改变PC,但在执行结束时,PC将指向要执行的下一条指令的操作码字节,称为fetch execute cycle的周期将继续

程序中的错误通常是由于PC被更改为一个值,而该值不是程序员/编译器编写的指令的开始。CPU没有办法知道这一点,不管怎样,都会继续执行从未打算执行的内存内容,并执行基本上随机的操作

了解这一切是如何组合在一起的一个很好的资源是一本书,但大部分内容都可以从该网站获得

希望有帮助

如果是这种情况,是否意味着文件的第一个字节(在头之后)是操作码

SNES的CPU基于,这在某种程度上是6502的进化。为了向后兼容,65C816包括与6502(实际上是65C02)二进制兼容的仿真模式。还有本机模式,这里有16位寄存器和所有的jazz

每个模式都有自己的向量表:

本机模式:

$FFE4: COP (co-processor interrupt)
$FFE6: BRK
$FFE8: ABORT
$FFEA: NMI (vertical blank)
$FFEC: - (no RESET in native mode)
$FFEE: IRQ
仿真模式:

$FFF4: COP
$FFF6: -
$FFF8: ABORT
$FFFA: NMI (vertical blank)
$FFFC: RESET
$FFFE: IRQ or BRK
当CPU复位时,它在仿真模式下启动,并期望在逻辑地址$FFFC处找到复位向量(ROM中对应的物理偏移量取决于内存映射模式)。

重置向量中存储的地址应指向重置/电源循环后要执行的第一段代码。通常从禁用中断开始,将CPU切换到本机模式,然后继续初始化系统的其余部分(图形处理器、声音处理器..):

如果是这种情况,是否意味着文件的第一个字节(在头之后)是操作码

SNES的CPU基于,这在某种程度上是6502的进化。为了向后兼容,65C816包括与6502(实际上是65C02)二进制兼容的仿真模式。还有本机模式,这里有16位寄存器和所有的jazz

每个模式都有自己的向量表:

本机模式:

$FFE4: COP (co-processor interrupt)
$FFE6: BRK
$FFE8: ABORT
$FFEA: NMI (vertical blank)
$FFEC: - (no RESET in native mode)
$FFEE: IRQ
仿真模式:

$FFF4: COP
$FFF6: -
$FFF8: ABORT
$FFFA: NMI (vertical blank)
$FFFC: RESET
$FFFE: IRQ or BRK
当CPU复位时,它在仿真模式下启动,并期望在逻辑地址$FFFC处找到复位向量(ROM中对应的物理偏移量取决于内存映射模式)。

重置向量中存储的地址应指向重置/电源循环后要执行的第一段代码。通常从禁用中断开始,将CPU切换到本机模式,然后继续初始化系统的其余部分(图形处理器、声音处理器..):


让我们看一看应该使事情更清楚的模拟器。模拟器是为特定的微处理器设计的。该微处理器有一种定义良好的机器语言,可以指示哪些操作码具有零、一、两个或多个参数以及它们需要的外观。所有这些知识都内置在模拟器中