您的位置:首页 > 其它

微机寻址方式总结

2010-08-16 09:40 351 查看
MCS51:
每一种计算机都具有多种寻址方式。寻址方式的多少是 反映指令系统优劣的主要指标之一。
MCS51单片机有7种寻址方式。
1、立即寻址
2、直接寻址
3、REG寻址
4、REG间址
5、变址寻址
6、相对寻址
7、位寻址
立即寻址:
1、 操作数包含在指令字节中。 紧跟在操作码后面,存放于ROM中 。
例:MOV A,#05H ;(74H 05H)
2、跟在指令操作码后面的数就是参加运算的数, 称该操作数为立即数。

直接寻址:
1、在指令中直接给出操作数的地址, 这种寻址方式就属于直接寻址方式。在这种方式中, 指令的操作数部分直接是操作数的地址。
例:MOV A,32H ;(E5H,32H)
2、在MCS -51 单片机指令系统中, 直接寻址方式中可以访问 2种存储器空间:
(1) RAM的低 128 个字节单元(00H~7FH)。
(2) 特殊功能寄存器。 特殊功能寄存器只能用直接寻址方式进行访问。

寄存器寻址:
"寄存器寻址"是在指令中给出存放操作数的寄存器名称(Rn、A、B、DPTR等),被寻址寄存器中的内容就是操作数。由于这种寻址是在CPU内部的访问,所以运算速度最快。
1、在该寻址方式中, 参加操作的数存放在寄存器里。
例:MOV A,R7 ;(EFH)
2、寄存器包括8个工作寄存器R0~R7, 累加器A, 寄存器B、数据指针DPTR。

寄存器间接寻址:
"寄存器间接寻址"是以指令中指定寄存器(R0、R1、DPTR)的内容作为操作数的地址,再以该地址对应单元中的内容作为操作数。为了区别于寄存器寻址,因此在寄存器间接寻址中的寄存器名称前加地址符号"@"。在寄存器间接寻址中,当访问内部RAM低128B空间、或者访问外部RAM的页内256B空间时,用当前组工作寄存器R0或R1作地址指针,而当访问外部RAM的整个64KB空间时,用DPTR作地址指针。
例如: MOV A,@R1
1、在这种寻址方式中, 寄存器的内容为操作数的地址。
例:MOV A,@ R0 ;(E6H)
2、寄存器间接寻址只能使用寄存器R0、R1 作为地址指针,寻址内部RAM区的数据; 当访问外部RAM时, 可使用R0、 R1及DPTR作为地址指针。寄存器间接寻址符号为"@"。
变址寻址:(基寄存器加变址寄存器间接寻址)
这种寻址方式用于访问程序存储器中的数据表格, 它以基址寄存器DPTR或PC的内容为基本地址, 加上变址寄存器A的内容作为操作数的地址。
例: MOVC A, @DPTR+A
MOVC A, @ PC+A

(把基寄存器(DPTR或PC)和变址寄存器(A)的内容作为无符号数相加形成16位的地址,访问程序存储器中的数据表格。)
例如:
MOVC A, @A+DPTR ; ((A+DPTR)) A
MOVC A, @A+PC ; ((A+PC))  A

相对寻址:
在MCS -51 指令系统中设有转移指令, 分为直接转移和相对转移指令, 在相对转移指令中采用相对寻址方式。
这是地址的寻址方式。以PC的内容作为基地址,与指令中给出的偏移量相加得到转移地址。
是双字节转移指令。
偏移量是带符号数,指令中给出的偏移量是一个 8 位带符号的常数, 范围是-128~+127。
例如:JC rel ; C=1跳转
当条件满足(C=1),新PC为多少?



设 PC=1000H,rel=05H(PC指向当前指令的下一条)
新PC=当前PC+rel=1002H+05H=1007H

位寻址
位寻址"是指按二进制位(bit)进行的寻址,可寻址位包括片内RAM的20H~2FH共16字节区域的128位和部分特殊功能寄存器的相关位。位寻址是直接寻址方式的一种,其特点是对8位二进制数中的某一位的地址进行操作。
可位寻址的位地址的表示形式如下:
(1)直接使用位地址形式。
例如: MOV 00H, C ;(00H)←(Cy)
其中: 00H是片内RAM中20H地址单元的第0位。
(2)字节地址加位序号的形式。
例如: MOV 20H.0, C ;(20H.0)←(Cy)
其中:20H.0是片内RAM中20H地址单元的第0位
(3)位的符号地址(位名称)的形式。对于部分特殊功能寄存器,其各位均有一个特定的名字,所以可以用它们的位名称来访问该位。
例如: ANL C, P ;(C)← (C)∧(P)
其中:P是PSW的第0位,C是PSW的第7位。
(4)字节符号地址(字节名称)加位序号的形式。对于部分特殊功能寄存器(如状态标志寄存器PSW),还可以用其字节名称加位序号形式来访问某一位。
例如: CPL PSW.6 ;(AC)← ( / PSW.6 )
其中: PSW.6表示该位是PSW的第6位。
例如:SETB C ;将专用寄存器PSW中的CY位置为1.
CLR P1.0 ;将单片机的P1.0清"0"。
SETB 3CH ;将内部RAM27H的第4位置"1"。

X86:
微机系统有七种基本的寻址方式:立即寻址方式、寄存器寻址方式、直接寻址方式、寄存器间接寻址方式、寄存器相对寻址方式、基址加变址寻址方式、相对基址加变址寻址方式等。其中,后五种寻址方式是确定内存单元有效地址的五种不同的计算方法,用它们可方便地实现对数组元素的访问。

另外,在32位微机系统中,为了扩大对存储单元的寻址能力,增加了一种新的寻址方式--32位地址的寻址方式。

1 立即寻址方式
操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,这种寻址方式也就称为立即数寻址方式。
立即数可以是8位、16位或32位,该数值紧跟在操作码之后。如果立即数为16位或32位,那么,它将按"高高低低"的原则进行存储。
立即数寻址方式通常用于对通用寄存器或内存单元赋初值。
2 寄存器寻址方式
指令所要的操作数已存储在某寄存器中,或把目标操作数存入寄存器。把在指令中指出所使用寄存器(即:寄存器的助忆符)的寻址方式称为寄存器寻址方式。
指令中可以引用的寄存器及其符号名称如下:
8位寄存器有:AH、AL、BH、BL、CH、CL、DH和DL等;
16位寄存器有:AX、BX、CX、DX、SI、DI、SP、BP和段寄存器等;
32位寄存器有:EAX、EBX、ECX、EDX、ESI、EDI、ESP和EBP等。
寄存器寻址方式是一种简单快捷的寻址方式,源和目的操作数都可以是寄存器。
由于指令所需的操作数已存储在寄存器中,或操作的结果存入寄存器,这样,在指令执行过程中,会减少读/写存储器单元的次数,所以,使用寄存器寻址方式的指令具有较快的执行速度。通常情况下,我们提倡在编写汇编语言程序时,应尽可能地使用寄存器寻址方式,但也不要把它绝对化。
3 直接寻址方式
指令所要的操作数存放在内存中,在指令中直接给出该操作数的有效地址,这种寻址方式为直接寻址方式。

在通常情况下,操作数存放在数据段中,所以,其物理地址将由数据段寄存器DS和指令中给出的有效地址直接形成,但如果使用段超越前缀,那么,操作数可存放在其它段。
4 寄存器间接寻址方式
操作数在存储器中,操作数的有效地址用SI、DI、BX和BP等四个寄存器之一来指定,称这种寻址方式为寄存器间接寻址方式。该寻址方式物理地址的计算方法如下:



在不使用段超越前缀的情况下,有下列规定:
若有效地址用SI、DI和BX等之一来指定,则其缺省的段寄存器为DS;
若有效地址用BP来指定,则其缺省的段寄存器为SS(即:堆栈段)。
5 寄存器相对寻址方式
操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)或变址寄存器(SI、DI)的内容和指令中的8位/16位偏移量之和。其有效地址的计算公式如右式所示。



在不使用段超越前缀的情况下,有下列规定:
若有效地址用SI、DI和BX等之一来指定,则其缺省的段寄存器为DS;
若有效地址用BP来指定,则其缺省的段寄存器为SS。
指令中给出的8位/16位偏移量用补码表示。在计算有效地址时,如果偏移量是8位,则进行符号扩展成16位。当所得的有效地址超过0FFFFH,则取其64K的模。
6 基址加变址寻址方式
操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)和一个变址寄存器(SI、DI)的内容之和。其有效地址的计算公式如图所示。



在不使用段超越前缀的情况下,规定:如果有效地址中含有BP,则缺省的段寄存器为SS;否则,缺省的段寄存器为DS。
7 相对基址加变址寻址方式
操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)的值、一个变址寄存器(SI、DI)的值和指令中的8位/16位偏移量之和。其有效地址的计算公式如右式所示。



在不使用段超越前缀的情况下,规定:如果有效地址中含有BP,则其缺省的段寄存器为SS;否则,其缺省的段寄存器为DS。
指令中给出的8位/16位偏移量用补码表示。在计算有效地址时,如果偏移量是8位,则进行符号扩展成16位。当所得的有效地址超过0FFFFH,则取其64K的模。
相对基址加变址寻址方式是以上7种寻址方式中最复杂的一种寻址方式,它可变形为其它类型的存储器寻址方式。表1列举出该寻址方式与其它寻址方式之间的变形关系。
表1 相对基址加变址寻址方式与其它寻址方式之间的变形关系:



8 32位地址的寻址方式
在32位微机系统中,除了支持前面的七种寻址方式外,又提供了一种更灵活、方便,但也更复杂的内存寻址方式,从而使内存地址的寻址范围得到了进一步扩大。
在用16位寄存器来访问存储单元时,只能使用基地址寄存器(BX和BP)和变址寄存器(SI和DI)来作为地址偏移量的一部分,但在用32位寄存器寻址时,不存在上述限制,所有32位寄存器(EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP)都可以是地址偏移量的一个组成部分。
当用32位地址偏移量进行寻址时,内存地址的偏移量可分为三部分:一个32位基址寄存器,一个可乘1、2、4或8的32位变址寄存器,一个8位/32位的偏移常量,并且这三部分还可进行任意组合,省去其中之一或之二。
32位基址寄存器是:EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP;
32位变址寄存器是:EAX、EBX、ECX、EDX、ESI、EDI和EBP(除ESP之外)。
由于32位寻址方式能使用所有的通用寄存器,所以,和该有效地址相组合的段寄存器也就有新的规定。具体规定如下:
1、 地址中寄存器的书写顺序决定该寄存器是基址寄存器,还是变址寄存器;
如:[EBX+EBP]中的EBX是基址寄存器,EBP是变址寄存器,而[EBP+EBX]中的EBP是基址寄存器,EBX是变址寄存器;
2、默认段寄存器的选用取决于基址寄存器;
3、基址寄存器是EBP或ESP时,默认的段寄存器是SS,否则,默认的段寄存器是DS;
4、在指令中,如果使用段前缀的方式,那么,显式段寄存器优先。
用32位地址偏移量进行寻址的有效地址计算公式归纳如图所示。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: