隐式指令(Implicit)
对于6502芯片的很多指令来讲,需要操作信息的来源和目标位置是由操作指令隐式指定的,不需要我们人为的设置操作数。例如, 清除进位标志指令(CLC)和从子程序返回指令(RTS)就是隐式的。
累加器(Accumulator)
有些指令有一个选项可以直接操作累加器。程序员使用一个特定的操作字符A
来实现这个个操作。
LSR A ;对累加器逻辑右移一位(Logical shift right one bit)
ROR A ; 向右循环移动一位(Rotate right one bit)
直接寻址(Immediate)
直接寻址允许我们直接在指令中指定一个8位常量。这个常量以一个特殊字符#
开头,后面跟着数字表达式。例如:
LDA #10 ;将数字10($0A)加载到累加器中(Load 10 ($0A) into the accumulator)
LDX #LO LABEL ;Load the LSB of a 16 bit address into X
LDY #HI LABEL ;Load the MSB of a 16 bit address into Y
零页(Zero Page)
使用零页寻址模式的指令只有一个8位地址操作数。这限制了它只能寻址前256字节的内存(例如00FF),其中地址的最有效字节总是0。在零页模式下,只有地址的最低有效字节被保存在指令中,使其缩短一个字节(对于节省空间很重要),并在执行期间减少一个内存获取(对于速度很重要)。
如果操作数求值为零页地址且指令支持这种模式(并非所有指令都支持),汇编程序将自动选择零页寻址模式。
LDA $00 ;Load accumulator from $00
ASL ANSWER ;Shift labelled location ANSWER left
零页,X寄存器(Zero Page,X)
使用零页,X寄存器
寻址时,指令将8位零页地址和X寄存器中加载的值进行累加运算,得到的数据就是直接寻址的地址。例如,如果X寄存器中加载的数据为$0F
,则指令LDA $80,X
首先进行$80 + $0F => $8F
的运算。然后累加器将从$008F
这个地址开始加载。
注意:
如果基址和寄存器的总和超过$FF
,最终计算得到的地址计会抛掉最高位。例如:我们将上面例子中X寄存器中的数据改为$FF
,计算则变为$80 + $FF => $7F
(抛出最高位),累加器将从$007F
加载,而不是$017F
。
STY $10,X ;Save the Y register at location on zero page
AND TEMP,X ;Logical AND accumulator with a zero page value
零页,Y寄存器(Zero Page, Y)
使用零页,Y寄存器
寻址时,指令将8位零页地址和Y寄存器中加载的值进行累加运算,得到的数据就是直接寻址的地址。需要注意的是,这一模式只能用于LDX和STX指令。
LDX $10,Y ;Load the X register from a location on zero page
STX TEMP,Y ;Store the X register in a location on zero page
网友评论