当我写我的6502/NES仿真器时,这真的困扰着我.
6502的商店说明如下:
STA $2A78 - Store the value of the accumulator into memory address $2A78.然而,该指令使用绝对寻址模式,它应该返回存储在内存$2A78中的8位值。AND指令确实遵循以下规则:
(If $6A is stored in $2A78)
AND $2A78 - Perform a logical AND between the accumulator and the value stored in $2A78 (which is $6A)因此,在正常情况下,STA绝对指令应该将累加器值存储在存储在$2A78中的8位零页地址中。如果要将值真正存储在$2A78中,寻址模式不应该是立即的吗?例如,STA #2A78。
此外,还有其他的指示行为“异常”类似于商店的指示吗?
发布于 2017-07-31 07:07:26
我想你可能会对寻址方式的使用感到困惑。绝对寻址模式仅仅意味着要用于操作的内存地址紧跟在操作码之后。
在您提到的两种情况中,STA和AND都是这样的。
但是,如何使用该内存地址取决于操作码本身。STA将使用它作为存储累加器的位置。AND将使用它加载一个字节,然后使用该字节来修改累加器。尽管存在这种差异,它们都是绝对的寻址模式。
您似乎要说的是,您希望存储到内存地址的存储直接使用以下内容:
STA #$2A78我明白为什么你会认为这更符合逻辑,但CPU汇编语言不是这样设计的,现在不太可能有人去修复它了:)
请注意,这对直接使用16位地址值的8位累加器AND没有什么意义。
https://stackoverflow.com/questions/45408950
复制相似问题