这是专门针对内斯控制台的,它使用了一个稍微修改过的8位6502微处理器。下面是代码,我的评论解释了每一行的作用,就我的基本理解而言(如果我误解了任何一行,请告诉我):
lda #$00 ; Load the accumulator (A register) with the immediate value 0x00
sta $02 ; Store the value in the accumulator into memory address $02
lda #$03 ; Load the accumulator with the immediate value 0x03
sta $03 ; Store the value in the accumulator into memory address $03
lda #$14 ; Load the accumulator with the immediate value 0x14
sta $0302 ; Store the value in the accumulator into memory address $0302
clc ; Clear the carry flag (CLC instruction)
lda #$10 ; Load the accumulator with the immediate value 0x10
ldy #$02 ; Load the Y register with the immediate value 0x02
adc ($02),y
字符串
看起来,在最后一行adc ($02)
之前,存储器地址和寄存器的状态如下:
$02
=0x00
$03
=0x03
$0302
=0x14
A
=0x10
Y
=0x02
因此,最后一行在我看来似乎表明了以下几点:
$02
+Y
0x00
+0x02
0x02
,存储在该地址的值为0x00
1.现在我们将0x00
添加到一个寄存器,它只是0x10
,但显然结果应该如下,因此我有点困惑,我犯了一个错误:A=$24 X=$00 Y=$02
一些额外的说明,假设以下是正确的:
- 内存位置$02和$03中的值先前已设置为指定地址$0300。*
这是什么时候发生的?我特别想理解这行。它们都指定为地址$0300
吗?
1条答案
按热度按时间dfty9e191#
adc ($02),y
是间接索引寻址的一个例子。$02
周围的括号表示$02
不包含操作数,但$02
和$03
一起包含一个16位地址,当添加到y
时包含操作数。下面是
adc ($02),y
发生的序列$02
加载数字,即$00
。$03
加载地址,即$03
。$0300
。这有时称为基址y
与基址相加得到$0302
。这个新的数字用作查找操作数的地址。$0302
处的字节,即$14
,并将其添加到累加器中。