相对寻址(Relative )
相对寻址方式主要用在转移操作指令(如BEQ、BNE等),这些指令包含带符号的8位相对偏移量(如-128127)。当条件为真时,将这个偏移量数据添加到程序计数器(PC)中。由于程序计数器在指令执行过程中每次自增量为2,所以目标指令的有效地址范围在-126+129之间。
BEQ LABEL ;(当零标志位被设置为LABEL时转移)Branch if zero flag set to LABEL
BNE *+4 ;(跳过下面2个字节的指令)Skip over the following 2 byte instruction
绝对寻址(Absolute)
使用绝对寻址的指令需要包含一个完整的16位地址来识别目标位置。
JMP $1234 ;(跳转到地址$1234)Jump to location $1234
JSR WIBBLE ;(调用名为WIBBLE的子程序)Call subroutine WIBBLE
X寄存器绝对寻址(Absolute,X)
使用X寄存器索引进行绝对寻址访问地址的方法是通过指令获取16位地址与X寄存器的中内容累加来计算得到的。例如,当前寄存器X中存储的数据值为$92
,然后运行指令STA $2000,X
后,累加器中得到的数值为$2000+$92=$2092
。
STA $3000,X ;(将X寄存器内数值和$3000累加,得到的数值范围在$3000~$30FF之间)Store accumulator between $3000 ~ $30FF
ROR CRC,X ;(将X寄存器内数据右移一位)Rotate right one bit
Y寄存器绝对寻址(Absolute,Y)
使用Y寄存器索引进行绝对寻址的方法和X寄存器相同,也是将Y寄存器内存储的数据与一个16位地址相加,从而得到需要访问的地址。
AND $4000,Y ;(对一个字节的内存数据执行逻辑与操作)Perform a logical AND with a byte of memory
STA MEM,Y ;(将累加器数据存入内存)Store accumulator in memory
间接寻址(Indirect)
JMP
是6502指令集中唯一一个支持间接寻址的指令 。这个指令中包含一个16位的地址,这个地址是我们要访问的真正目标数据16位内存地址中最低有效字节所在的地址。
例如:在地址$0120
处存储了数据$FC
,在地址0121
处存储了数据$BA
,我们运行JMP ($0120)
指令后,则会在BAFC
处执行下一条指令。
JMP ($FFFC) ;(强制上电复位)Force a power on reset
JMP (TARGET) ;(通过标记的存储区域跳转)Jump via a labelled memory area
索引间接寻址(Indexed Indirect)
索引间接寻址通常与保存在零页上的地址表一起使用。从指令中获取表的地址,并向其添加X寄存器(零页循环),以给出目标地址的最低有效字节的位置。
LDA ($40,X) ;(通过间接方式从内存中加载一字节数据)Load a byte indirectly from memory
STA (MEM,X) ;(通过间接方式将累加器数据存入内存)Store accumulator indirectly into memory
间接变址寻址(Indirect Indexed)
间接变址寻址是6502上最常用的间接模式。在指令中包含16位地址的最低有效字节的零页位置。Y寄存器被动态添加到这个值中,以生成操作的实际目标地址。
LDA ($40),Y ;(通过间接方式从内存中加载一字节数据)Load a byte indirectly from memory
STA (DST),Y ;(通过间接方式将累加器数据存入内存)Store accumulator indirectly into memory
网友评论