Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 为什么NES初始化代码是这样的(6502程序集)?_Assembly_Initialization_Reset_6502 - Fatal编程技术网

Assembly 为什么NES初始化代码是这样的(6502程序集)?

Assembly 为什么NES初始化代码是这样的(6502程序集)?,assembly,initialization,reset,6502,Assembly,Initialization,Reset,6502,基本上,它所做的似乎是用0,增量x初始化前面提到的所有地址,跳回标签的开头,再次用1,增量x填充所有地址,并且它一遍又一遍地发生,直到BNE为false(如果零标志为1)。所以基本上当INX发生在X为0xFF时,X将为0(对吗?),BNE将为false,它将停止分支并继续程序。我理解其余的大部分内容,但为什么它会对看似随机的内存地址执行此操作?为什么是0x000、0x100、0x200等?为什么这个循环会发生256次?后面的代码显示程序正在等待第二个VBLANK(与NES PPU相关),我有点明

基本上,它所做的似乎是用0,增量x初始化前面提到的所有地址,跳回标签的开头,再次用1,增量x填充所有地址,并且它一遍又一遍地发生,直到BNE为false(如果零标志为1)。所以基本上当INX发生在X为0xFF时,X将为0(对吗?),BNE将为false,它将停止分支并继续程序。我理解其余的大部分内容,但为什么它会对看似随机的内存地址执行此操作?为什么是0x000、0x100、0x200等?为什么这个循环会发生256次?后面的代码显示程序正在等待第二个VBLANK(与NES PPU相关),我有点明白,但是256时间循环是怎么回事?它说它需要燃烧大约30k个循环,但为什么这样呢

注意:原来我在阅读代码时没有注意,当我问这个问题时,我一时忘记了STA指令做了什么。上述部分信息不正确。

请仔细查看。给定

它将累加器存储到
$300+x
,并且
x
正在递增

因此,在连续的迭代中,您将执行:

sta $300,x
为什么需要这样做:既然需要等待时间,为什么不将内存置于“已知状态”呢。这有助于消除以后由于bug而导致的不可预测的行为。 例如,在C语言中:一个未初始化的指针总是有一个值0(null)可能会有帮助

sta $300,x
Accumulator -> $300+00
Accumulator -> $300+01
Accumulator -> $300+02
...
Accumulator -> $300+FF