指令执行阶段不需要访问nrf24l01寄存器指令的是什么寻址方式

*******计算机*******(12)
1.隐含寻址
在指令中隐含着操作数的地址。
如单地址的指令格式,就不是明显地在地址字段中指出第二操作数的地址,而是规定累加器ACC作为第二操作数,指令格式明显指出的仅是第一操作数的地址。因此,累加器ACC对单地址指令格式来说是隐含地址。
隐含寻址的优点是有利于缩短指令字长;缺点是需增加硬件。
2.立即(数)寻址
这种类型的指针的地址字段指出的不是操作数的地址么事操作数本身,又称为立即数。数据是用补码形式存放的。
#(立即寻址特征)
A操作数本身
立即寻址的优点是指令在执行阶段不访问主存,指令执行时间短;缺点是A的位数限制了立即数的范围。
3.直接寻址
指令字的形式地址地址A就是操作数的真实地址EA,即EA=A。
直接寻址的优点是简单,指令在执行阶段仅访问一次主存,不需要专门计算操作的地址;缺点是A的位数决定了该指令操作数的寻址范围,操作数的地址不易修改。
4.间接寻址
间接寻址是相对于直接寻址而言的,指令的地址字段给出的形式地址不是操作数的真实地址,而是操作数有效地址所在的存储单元的地址,也就是操作数地址的地址,即EA=(A).
间接寻址可以是一次间接寻址,还可以是多次间接寻址。
主存第一位为1时,表示取出的仍不是操作数的地址,即多次间址;当主存第一位为0时,表示取出的是操作数的地址。
间接寻址的优点是可以扩大寻址范围(优点地址EA的位数大于形式地址A的位数),便于编制程序(用间接寻址可以方便地完成子程序返回);缺点是指令在执行阶段要多次访问。
5.寄存器寻址
在指令字中直接给出操作数所在寄存器编号,即EA=Ri,其操作数在由Ri所指的寄存器内。
寄存器寻址的优点是指令在执行阶段不访问主存,只访问寄存器,指令字段短且执行速度快,支持向量/矩阵运算;缺点是寄存器价格昂贵,计算机中寄存器个数有限。
6.寄存器间接寻址
寄存器间接寻址是指在寄存器Ri中给出的不是一个操作数,而是操作数所在主存单元的地址,即EA=(Ri)
寄存器间接寻址的特点是与一般间接寻址相比速度更快,但指令的执行阶段需要访问主存(因为操作数在主存中)。
7.相对寻址
相对寻址是把程序计数器PC的内容加上指令格式中的形式地址A而形成操作数的有效地址。即EA=(PC)+A,其中A是相对于当前地址的位移量,可正可负,补码表示。
A的位数决定操作数的寻址范围。
相对寻址的优点是操作数的地址不是固定的,它随着PC的值得变化而变化,并且与指令地址之间总是相差一个固定值,因此便于程序浮动,相对寻址广泛应用于转移指令。
对于转移指令JMPA,当CPU从存储器中取出一个字节时,会自动执行(PC)+1-&PC.若转移指令的地址为X,且占2个字节,在取出该指令后PC的值会增2,即(PC)=X+2,这样在执行完该指令后,会指定跳转到X+2+A的地址继续执行。
8.基址寻址
基址寻址是将CPU中基址寄存器(BR)的内容加上指令格式中的形式地址A,而形成操作数的有效地址,EA=(BR)+A。其中基址寄存器既可采用专用寄存器,也可以采用通用寄存器。
基址寄存器是面向操作系统的,其内容由操作系统或管理程序确定。在程序执行过程中,基址寄存器的内容不变(作为基地址),形式地址可变(作为偏移量)。当采用通用寄存器作为基址寄存器时,可由用户决定哪个寄存器作为基址寄存器,但其内容仍由操作系统确定。
基址寻址的特点是可扩大寻址范围(基址寻址的位数大于形式地址A的位数);用户不必考虑自己的程序存于主存的哪一空间区域,故有利于多道程序设计,以及可用于编制浮动程序。
9.变址寻址
有效地址EA等于指令中的形式地址A与编制寄存器IX的内容相加之和,即EA=(IX)+A,其中IX为变址寄存器(专用),也可用通用寄存器作为变址寄存器。
变址寄存器是面向用户的,在程序执行过程中,变址寄存器的内容可由用户改变(作为偏移量),形式地址A不变(作为基地址)。
变址寻址的优点是可扩大寻址范围(变址寄存器的位数大于形式地址A的位数),在数组处理过程中,可设定A为数组的首地址,不断改变变址寄存器IX的内容,便可很容易形成数组中任意数据的地址,特别适合编制循环程序。
显然,变址寻址与基址寻址的有效地址形成过程及其相似。但从本质上来讲,两者有较大区别。基址寻址主要用于为多道程序或数据分配存储空间,故基址寄存器的内容通常由操作系统和管理程序确定,在程序的执行过程中其值不可变,而指令字中的A是可变的;变址寻址主要用于处理数组问题,在变址寻址中,变址寄存器的内容是由用户设定的,在程序执行过程中,其值可变,而指令字中的A是不可变的。
10.堆栈寻址
堆栈是存储器(或专用寄存器组)中一块特定的按“先进后出(LIFO)”原则管理的存储区,该存储区中被读、写单元的地址是用特定的寄存器给出的,该寄存器称为堆栈指针(SP)。堆栈可分为硬堆栈和软堆栈两种。
寄存器堆栈又称为硬堆栈。寄存器堆栈的成本比较高,不适合做大容量的堆栈;而从主存中划出一段区域来做堆栈是最合算且最常用的方法,这种堆栈称为软堆栈。
在采用堆栈结构的计算机系统中,大部分指令表面上都表现为为无操作数指令的形式,因为操作数地址都隐含使用了SP。通常情况下,在读写堆栈中的一个单元的前后都伴有自动完成对SP内容的增量或减量操作。
A既是操作数
一次间接寻址
寄存器寻址
寄存器间接一次寻址
EA=(PC)+A
EA=(BR)+A
EA=(IX)+A
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:110304次
积分:5082
积分:5082
排名:第5326名
原创:383篇
转载:71篇
评论:31条
(73)(16)(22)(51)(54)(28)(26)(24)(47)(57)(33)(19)(2)(1)(1)1423人阅读
指令中形成操作数或操作数地址的方式称为操作数的寻址方式。一般把指令中直接给出的地址称为形式地址,从形式地址生成有效地址的各种方式称为各种不同的存储器寻址方式,每种寻址方式都有一种对形式地址进行变换处理的运算规则。
常用的操作数寻址方式有以下几种:
1.立即寻址方式
指令的地址码字段指出的不是地址,而是操作数本身,这种寻址方式称为立即寻址方式。立即寻址由于在取出指令的同时也取出了操作数,所以指令的执行速度很快。但由于操作数是指令的一部分,不便于修改,降低了程序的通用性和灵活性。因此,立即寻址方式只适合于操作数固定的场合,通常用于为主存单元和寄存器提供常数。
2.直接寻址方式
直接寻址就是在指令的地址字段中直接指出操作数在主存中的地址,即形式地址等于有效地址,如图4-5所示。这种寻址方式简单、直观,是一种最基本的寻址方式。
3.间接寻址方式
与直接寻址方式相比,间接寻址中指令地址码字段所指向的存储单元中存储的不是操作数本身,而是操作数的地址,如图4-7所示。因此,间接寻址方式需要多次访问主存储器,既增加了指令的执行时间,又要占用主存储器单元。但是,这种寻址方式也为编程人员带来了较大的灵活性,实现起来也很简便,而且,间接寻址指令可以访问较大的存储空间,从而扩大指令的寻址能力。由于地址码位数的限制,如果采用直接寻址方式,能够访问的存储空间十分有限,而间接寻址的地址码所指向的存储单元则有足够的位数,因此可以访问全部存储空间。
4.寄存器寻址方式
寄存器寻址方式就是指令中的地址码是寄存器的编号,而不是操作数地址或操作数本身。寄存器的寻址方式也可以分为直接寻址和间接寻址,两者的区别在于:前者的指令地址码给出寄存器编号,寄存器的内容就是操作数本身;而后者的指令地址码给出寄存器编号,寄存器的内容是操作数的地址,根据该地址访问主存后才能得到真正的操作数。寄存器寻址方式的优点是用寄存器来暂存操作数或其地址,无需访问主存,速度快。
5.基址寻址方式
基址寻址是将基址寄存器的内容加上指令中的形式地址而形成操作数的有效地址,其优点是可以扩大寻址能力。相对于形式地址,基址寄存器的位数可以设置得很长,从而可以在较大的存储空间中进行寻址。
6.变址寻址方式
变址寻址方式计算有效地址的方法与基址寻址方式很相似,它是将变址寄存器的内容加上指令中的形式地址而形成操作数的有效地址。使用变址寻址方式的目的不在于扩大寻址空间,而在于实现程序块的规律性变化。例如,有一个字符串存储在以AC1H为首址的连续主存单元中,只需要将首地址AC1H作为指令中的形式地址,而在变址寄存器中指出字符的序号,便可访问字符串中的任一字符。
变址寻址和基址寻址方法十分类似,但用途不同。变址寻址主要用于数组的访问,基址寻址则用于扩大寻址范围,从而在较大的存储空间中进行寻址。
7.相对寻址方式
相对寻址,是相对于当前的指令地址而言的寻址方式。相对寻址是把程序计数器PC的内容加上指令中的形式地址而形成操作数的有效地址,而程序计数器的内容就是当前指令的地址,所以相对寻址是相对于当前的指令地址而言的。此时的形式地址通常称为位移量,也就是操作数位置与当前指令位置之间的相对距离,其值可正可负,相对于当前指令地址而浮动。在相对寻址方式中,由于指令的地址和它所涉及的操作数位置相对固定,因此,操作数与指令可以放在主存的任何地方,但仍能保证程序的正确执行。
指令的寻址方式有两种,一种是顺序寻址方式,另一种是跳跃寻址方式。
1.顺序寻址方式
由于指令地址在主存中顺序排列,当执行一段程序时,通常是一条指令接着一条指令地顺序执行。从存储器取出第一条指令,然后执行这条指令;接着从存储器取出第二条指令,再执行第二条指令;……,以此类推。这种程序顺序执行的过程称为指令的顺序寻址方式。指令顺序寻址方式的执行示意如图4-3所示。为此,必须使用程序计数器PC来计数指令的顺序号,该顺序号就是指令在主存中的地址。指令逐条顺序执行,由PC+1→PC控制。
2.跳跃寻址方式
所谓指令的跳跃寻址,是指下一条指令的地址码不是由程序计数器给出,而是由本条指令直接给出。程序跳跃后,按新的指令地址开始顺序执行。因此,指令计数器的内容也必须相应改变,以便及时跟踪新的指令地址。指令跳跃寻址方式的执行示意如图4-4所示。采用指令跳跃寻址方式,可以实现程序转移或构成循环程序,从而缩短程序长度,或将某些程序作为公共程序调用。指令系统中的各种条件转移或无条件转移指令,就是为了实现指令的跳跃寻址而设置的。
计算机中的堆栈(Stack)是一组能存储和取出数据的暂时存储单元,所有信息的存入和取出均按照后进先出(LIFO)或先进后出(FILO)的原则进行。
堆栈存取方式决定了其“一端存取”的特点,数据按顺序存入堆栈称为进栈或压栈(Push),堆栈中一个单元的数据称为栈项,栈项按与进栈相反的顺序从堆栈中取出称为出栈或弹出(Pop),最后进栈的数据或最先出栈的数据称为栈顶元素。
1.寄存器堆栈
寄存器堆栈又称串联堆栈、硬堆栈。某些计算机在CPU中设置了一组专门用于堆栈的寄存器,每个寄存器可保存一个字的数据。因为这些寄存器直接设置于CPU中,所以它们是极好的暂存单元。CPU通过进栈指令(PUSH)把数据存入堆栈,通过出栈指令(POP)把数据从堆栈中取出。
寄存器堆栈如图4-14所示:⑴空栈表示栈顶无数据,即位于栈顶的寄存器中无可用的数据;⑵存入数据a,即把数据a存入栈顶,数据a可以来自主存、程序计数器PC等部件;⑶再存入数据b,数据b位于栈顶,先进入的数据a则移至下一个寄存器;⑷执行出栈操作,位于栈顶的数据b被取出,与此同时数据a移至栈顶。
从寄存器堆栈的数据进栈操作结果可见,最后进栈的数据位于栈顶,位于栈顶的数据出栈时最先被取出。在寄存器堆栈中,还必须有“栈空”和“栈满”的指示,以防在栈空时企图执行出栈、在栈满时企图执行进栈的误操作。这可以通过另外设置一个计数器来实现:每次进栈,计数器加1,计数值等于堆栈中寄存器个数时表示栈满;每次出栈,计数器减1,该计数值等于0时表示栈空。
寄存器堆栈的特点是仅有一个出入口,后进先出,且堆栈的容量固定,不需要占用主存。
2.存储器堆栈
当前计算机普遍采用的一种堆栈结构是存储器堆栈,也就是从主存中划出一块区域来作堆栈,又称软堆栈。这种堆栈的大小可变,栈底固定,栈顶浮动。由于主存的容量越来越大,存储器堆栈能够满足程序员对堆栈容量的要求,而且在需要时可建立多个存储器堆栈。
这种堆栈有三个主要优点:
(1)&堆栈能够具有程序员要求的任意长度;
&(2)只要程序员喜欢,愿意建立多少堆栈,就能建立多少堆栈;
(3)可以用对存储器寻址的任何一条指令来对堆栈中的数据进行寻址。
构成存储器堆栈的硬件有两部分,一是在主存中开辟用于堆栈的存储区,二是在CPU中设置一个专用的寄存器——堆栈指针SP(Stack Pointer)来保存栈顶地址。除了硬件之外,还必须有实现进栈、出栈操作的指令。
作为堆栈的存储区,其两端的存储单元有高、低地址之分,因此,存储器堆栈又可分为两种:从高地址开始生成堆栈和从低地址开始生成堆栈。
1)从高地址开始生成堆栈(自底向上生成堆栈)
从高地址开始生成堆栈是一种较常用的方式,这种堆栈的栈底地址大于栈顶地址,在建栈时,SP指向堆栈中地址最大的单元(栈底),每次进栈时,首先把要进栈的数据存入SP所指向的存储单元,然后把指针SP-1;出栈时,先把指针SP+1,然后从SP所指向的存储单元取出数据,如图4-15所示:
进栈操作:首先数据→Msp,然后指针(SP)-1→SP,Msp表示SP所指定的存储单元;
出栈操作:首先(SP)+1→SP,然后(Msp)读出,(Msp)表示SP所指定的存储单元的内容。
2)从低地址开始生成堆栈(自顶向下生成堆栈)
这种堆栈与从高地址开始生成堆栈正好相反,它的栈底地址小于栈顶地址,建栈时SP指向堆栈中地址最小的单元(栈底)。具体操作如下:
进栈操作:首先数据→Msp,然后指针(SP)+1→SP;
出栈操作:首先(SP)-1→SP,然后(Msp)读出。
存储器堆栈的操作方式与寄存器堆栈不同,它移动的是栈顶,而在寄存器堆栈中移动的是数据。
堆栈中对数据的操作具有后进先出的特点,因此,凡是以后进先出方式进行的信息传送都可以用堆栈很方便地实现。例如,在子程序的调用中,用堆栈存放主程序的返回地址,实现子程序的嵌套和递归调用;在程序中断处理中,用堆栈存放多级中断的相关信息,实现多级中断的嵌套。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:9009次
排名:千里之外
(1)(1)(1)(3)(2)指令寻址/寻址方式
指令的寻址方式有以下两种。顺序寻址方式由于指令地址在内存中按顺序安排,当执行一段程序时,通常是一条指令接一条指令地顺序进行。也就是说,从存储器取出第1条指令,然后执行这条指令;接着从存储器取出第2条指令,再执行第二条指令;接着再取出第3条指令。这种程序顺序执行的过程,称为指令的顺序寻址方式。为此,必须使用程序计数器(又称指令指针寄存器)PC来计数指令的顺序号,该顺序号就是指令在内存中的地址。跳跃寻址方式当程序转移执行的顺序时,指令的寻址就采取跳跃寻址方式。所谓跳跃,是指下条指令的地址码不是由程序计数器给出,而是由本条指令给出。注意,程序跳跃后,按新的指令地址开始顺序执行。因此,程序计数器的内容也必须相应改变,以便及时跟踪新的指令地址。采用指令跳跃寻址方式,可以实现程序转移或构成循环程序,从而能缩短程序长度,或将某些程序作为公共程序引用。指令系统中的各种条件转移或无条件转移指令,就是为了实现指令的跳跃寻址而设置的。
操作数寻址/寻址方式
形成操作数的有效地址的方法称为操作数的寻址方式。由于大型机、小型机、微型机和单片机结构不同,从而形成了各种不同的操作数寻址方式。下面介绍一些比较典型又常用的操作数寻址方式。隐含寻址这种类型的指令,不是明显地给出操作数的地址。而是在指令中隐含着操作数的地址。例如,单地址的指令格式,就不明显地在地址字段中指出第2操作数的地址,而是规定累加寄存器AC作为第2操作数地址。指令格式明显指出的仅是第1操作数的地址D。因此,累加寄存器AC对单地址指令格式来说是隐含地址。如:DAA ;立即寻址指令的地址字段指出的不是操作数的地址,而是操作数本身,这种寻址方式称为立即寻址。立即寻址方式的特点是指令执行时间很短,因为它不需要访问内存取数,从而节省了访问内存的时间。如:MOV AX,5678H 注意:立即数只能作为源操作数,不能作为目的操作数。直接寻址直接寻址是一种基本的寻址方法,其特点是:在指令格式的地址的字段中直接指出操作数在内存的地址。由于操作数的地址直接给出而不需要经过某种变换,所以称这种寻址方式为直接寻址方式。在指令中直接给出参与运算的操作数及运算结果所存放的主存地址,即在指令中直接给出有效地址间接寻址间接寻址是相对直接寻址而言的,在间接寻址的情况下,指令地址字段中的形式地址不是操作数的真正地址,而是操作数地址的指示器,或者说此形式地址单元的内容才是操作数的有效地址。寄存器寻址方式和寄存器间接寻址方式当操作数不放在内存中,而是放在CPU的通用寄存器中时,可采用寄存器寻址方式。显然,此时指令中给出的操作数地址不是内存的地址单元号,而是通用寄存器的编号(可以是8位也可以是16位(AX,BX,CX,DX))。指令结构中的RR型指令,就是采用寄存器寻址方式的例子。如:MOV DS,AX寄存器间接寻址方式与寄存器寻址方式的区别在于:指令格式中的寄存器内容不是操作数,而是操作数的地址,该地址指明的操作数在内存中。相对寻址方式相对寻址是把程序计数器PC的内容加上指令格式中的形式地址D而形成操作数的有效地址。程序计数器的内容就是当前指令的地址。“相对”寻址,就是相对于当前的指令地址而言。采用相对寻址方式的好处是程序员无须用指令的绝对地址编程,因而所编程序可以放在内存的任何地方。指令格式:MOVAX,[BX+1200H]操作数物理地址PA=(DS/SS)*10H+EA EA=(BX/BP/SI/DI)+(6/8)位偏移量Disp 对于BX,SI,DI寄存器来说段寄存器默认为DS,对于SP来说,段寄存器默认为SS基址寻址方式在基址寻址方式中将CPU中的基址寄存器的内容,加上变址寄存器的内容而形成操作数的有效地址。基址寻址的优点是可以扩大寻址能力,因为与形式地址相比,基址寄存器的位数可以设置得很长,从而可以在较大的存储空间中寻址。变址寻址方式变址寻址方式与基址寻址方式计算有效地址的方法很相似,它把CPU中某个变址寄存器的内容与偏移量D相加来形成操作数有效地址。但使用变址寻址方式的目的不在于扩大寻址空间,而在于实现程序块的规律变化。为此,必须使变址寄存器的内容实现有规律的变化(如自增1、自减1、乘比例系数)而不改变指令本身,从而使有效地址按变址寄存器的内容实现有规律的变化。块寻址方式块寻址方式经常用在输入输出指令中,以实现外存储器或外围设备同内存之间的数据块传送。块寻址方式在内存中还可用于数据块移动。
特点/寻址方式
1:寄存器直接寻址:你就想成:其实你已经站在你要找的"门户号(家)"面前了,直接敲门进去就OK了!例子: MOV AX,【2000H】MOV AX,2000H -->2000H为存放操作数单元号的符号地址上面两者是不等效的2:寄存器间接寻址方式:你就想成:你已经站在你要找的"门户号(家)"的"单元号",你要找到它,必须知道它在当前"单元号"几楼.假如它在6楼,那你就上到6楼就OK了!!注意,最高只有16楼,因为什么呢?那就用DEBUG的D命令看看呀,慢慢数哦,呵呵!!例子: MOV AX,【BX】计算公式: 物理地址=16d*(DS)+(BX)物理地址=16d*(DS)+(SI)物理地址=16d*(DS)+(DI)物理地址=16d*(SS)+(BP)3:寄存器相对寻址方式:你就想成:你要找的"门户号(家)"其实就在你家的楼上或者楼下,你要找到它,就 必须知道它在你楼上几楼,或者在楼下几楼!就OK了!例子: MOV AX,COUNT【SI】MOV AX,【COUNT+SI】其中 COUNT为位移量的符号地址计算公式: 物理地址=16d*(DS)+(BX)+8位位移量或+(SI) 或 16位位偏移量或+(DI)物理地址=16d*(SS)+(BP)+8位偏移量4:基址变址寻址方式:你就想成:你要找的"门户号(家)"是跟住在同一栋楼的不同"单元号",你要找到它,就必须知道它是该栋的哪个"单元号",并且住在几楼!那样你就可以找到它了 !例子: MOV AX,【BX】【DI】MOV AX,【BX+DI】计算公式: 物理地址=16d*(DS)+(BX)+(SI)或+(DI)物理地址=16d*(SS)+(BP)+(SI)或+(DI)5:相对基址变址寻址方式:你就想成:你就想成:你要找的"门户号(家)"是跟住在同一栋楼的不同"单元号",它比你高几层楼或者低几层楼,然后用的你目前的楼数+/-就可以得出你要找的住在几楼了!例子: MOV,AX,MASK【BX】【SI】MOV,AX,MASK【BX+SI】MOV,AX,【MASK+BX+SI】以上三个例子是等效的!!计算公式: 物理地址=16d*(DS)+(BX)+(SI)+8位位移量或+(DI) 或 16位位偏移量物理地址=16d*(SS)+(BP)+(SI)+8位位移量或+(DI) 或 16位位偏移量
与I/0端口有关的寻址方式/寻址方式
8086微处理器采用独立编址的I/0端口,有专门的输入指令IN和输出指令OUT,寻址方式有以下两种。直接端口寻址直接端口寻址是在指令中直接给出要访问的端口地址,一般采用2位十六进制数表示,也可以是符号,访问的端口范围0~255. 例如: IN AL,20H 表示从I/0端口地址为20H的端口中取数据送入AL寄存器中。间接端口寻址若访问的端口地址大于255时,就要用间接寻址方式。可以访问的端口范围0~65535. 例如: MOV DX,356H ;将端口地址356H送入DX寄存器 OUT DX,AL ;将AL中的内容输出到DX指定的端口
&|&相关影像
互动百科的词条(含所附图片)系由网友上传,如果涉嫌侵权,请与客服联系,我们将按照法律之相关规定及时进行处理。未经许可,禁止商业网站等复制、抓取本站内容;合理使用者,请注明来源于。
登录后使用互动百科的服务,将会得到个性化的提示和帮助,还有机会和专业认证智愿者沟通。
此词条还可添加&
编辑次数:13次
参与编辑人数:12位
最近更新时间: 22:28:02
申请可获得以下专属权利:
贡献光荣榜【图文】寄存器的使用与寻址方式_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
寄存器的使用与寻址方式
上传于|0|0|文档简介
&&汇编语言 基础知识
大小:1.42MB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢}

我要回帖

更多关于 移位寄存器指令 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信