新闻  |   论坛  |   博客  |   在线研讨会
寻址方式描述
zhchxgh | 2009-07-10 16:47:22    阅读:1859   发布文章

寻址方式描述
程序指针相对长程寻址: BRL #$44
程序指针相对长程寻址把转移指令的范围从标准的-127/+128扩展到64k(+32767/-32768)。这样,BRL转移指令的操作数就是16位的。这种寻址方式在写重新定位代码的时候会有很大用处。 

堆栈相对寻址: LDA 7,S
堆栈相对寻址把堆栈指针作为基地址,然后加上用户提供的单字节操作数作为偏移量。S指明该模式是通过堆栈指针进行的堆栈寻址。 

当使用堆栈相对寻址寻址时,你应该记住堆栈指针将总是指向堆栈内下一个可到达的点。因此,一个为1的操作数将会取回最近一个压入堆栈的项。一个为0的操作数也许可以用来获得最近从堆栈弹出的项的一个副本,但是,当然,如果发生了一个中断,那么你会遇到麻烦,因为此时堆栈为中断程序所操纵。 

堆栈相对间接,Y变址寻址: LDA ($22,S),Y
这种寻址方式,找出指向位于别处的数据的间接地址(和零页面间接变址寻址一样)。该两字节指令以堆栈的当前位置为基准,加上第一个操作数,最后加上Y变址寄存器的内容作为偏移量。 

这种寻址方式的价值在于,假定你有一个已经压入堆栈的地址,通过用这种寻址方式你能容易地到达到数据所在的位置。

10 LDY #0 
20 LDA (1,S),Y ;获得16位地址 
30 TAX ;把它保存到X 
40 LDY #2 
50 LDA (1,S),Y ;取出第二地址 
在上面的例子中,我们用堆栈指针的当前位置作为基准地址。在第20行,我们通过(1,S)中的偏移量读取数据,然后加上偏移量Y以获得有效的地址。上述是假定我们处于16位变址和16位累加器模式中。 

区段移动: MVP 0,0
这是一种主要的新增寻址方式,为65816的两条指令所使用。 

区段正向移动和区段反向移动这两条指令可以将最大达64K的数据从内存的一个位置移动到另外一个位置。要进行一次移动,累加器要读入要拷贝的字节数,X寄存器要读入拷贝源的地址,Y寄存器则保存拷贝目的的地址。然后执行区段移动指令,数据是以每7个周期一个字节的速度移动。 

绝对长程寻址: LDA $123456
绝对长程寻址用来在65816的16位地址空间内找出任何的数据。操作数是三个字节(24位长)。该寻址方式的主要用途是可以在执行单一指令时暂不理会DBR数据存储寄存器的内容。如果使用标准的绝对寻址方式,存储段字节就会和来自DBR的地址相关联。 

绝对变址X长程寻址: LDA $123456,X
绝对变址X长程寻址以操作数为基准,加上X变址以产生一个有效的地址。这和6502的绝对变址X寻址是一样的,除了作为基准的操作数是24位宽以外。请注意,真实的存放次序是操作码,低端字节,高端字节,存储段字节,汇编程序会将这些字节按这种次序排列。 

绝对变址间接寻址 JMP ($1234,X)
绝对变址间接寻址是一个三字节指令,它以指定的操作数为基准,加上变址后获得有效的地址。6502程序员会认识下面的命令查找和执行的例子:

SEC 
SBC "0" ;累加器减去ASCII的零 
ASL ;累加器左移 
TAX ;放入X内,作为单词表的偏移量 
LDA TABLE,X ;获得命令的地址字节 
STA PTR ;保存在间接指针中 
LDA TABLE+1,X ;获得表内命令地址的高端字节 
STA PTR+1 ;保存在指针的高端字节中 
JMP(PTR) ;跳转到命令处 


TABLE .WORD RUT1,RUT2,RUT3,... 
PTR .BYTE 0,0 
使用绝对变址间接寻址寻址,上面的例子可以只用一半字节数和周期数写出来:

SEC 
SBC "0" ;累加器减去ASCII零 
ASL ;累加器左移 
TAX ;放入X内,作为单词表的偏移量 
JMP (TABLE,X) ;跳转到命令处 


TABLE .WORD RUT1,RUT2,RUT3,... 
变址间接的JMP[JMP ($1234,x)]假定操作数地址在当前程序存储段内。间接的JMP[JMP ($1234)]假定操作数地址在存储段0中。

绝对间接长程寻址: JMP [$1234]
该寻址方式会通过操作数所指向的位置形成有效地址

直接页面间接寻址: LDA ($12)
这个指令是两个字节长。操作数指向一个16位的直接页面(零页面)指针,该指针可以形成有效地址。举例来说,如果直接页面指针是 $70,那么低端字节来自$70,高端字节来自$71,存储段字节是当前数据存储段寄存器的值。

直接页面间接长程寻址: LDA [$12]
这个指令是两个字节长。操作数指向一个24位的直接页面(零页面)指针。举例来说,如果直接页面指针是$70,那么低端字节来自$70,高端字节来自$71,存储段字节来自$72,存储段字节会暂时和数据库寄存器无关。

直接页面间接长程,变址Y寻址: LDA [$77],Y
这个指令是两个字节长,允许你暂时到达内存的任何位置。操作数是一个直接页面(零页面)的指针。位于直接页面的偏移地址是三个字节长:首先是低端字节,然后是高端字节,最后是存储段字节。Y变址寄存器被加到这三字节的目的地址以获得有效地址。使用了方括号来表示该地址是完整的24位地址,而不是一个普通的16位地址。

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客