寻址规则

寻址技术是寻找数据及其他信息的地址技术,它是软件和硬件的一个主要分界面,是计算机系统结构的一个重要组成部分。寻址技术主要研究编址方式,寻找方式,定位方式等,研究的对象有寄存器,主存,I/O设备等,其中又以主存为主要研究对象。

编址方式:
即对寄存器,主存,I/O设备等进行编址,主要内容包括编址的单位,零地址空间的个数等。
编址单位:常用的编址单位有字编址,字节编址,位编址等几种。
字编址由于机器与设备通常是以字为单位进行数据交换,这样控制起来比较简单。但在非数值应用中,信息的基本单位是字节,在处理字节时,需要专门的字节操作指令,位操作指令。
字节编址:最普遍的编址方式,但由于编址单位与字长不一致,于是又产生了数据如何在存储器中存放的问题。

零地址空间个数:
三个零地址空间,即通用寄存器,主存,I/O设备分别进行编址。
两个零地址空间,即寄存器单独编址,主存和I/O设备统一编址,将地址的高端划出给I/O设备,比如4KB。
一个零地址空间,即所有存储设备统一编址,地址低端是通用寄存器,最高端是I/O设备,中间绝大多数给主存。

I/O设备的非线性编址:
由于I/O接口上的寄存器可能有多个,这样就涉及到给它的如何寄存器的问题。
一台设备一个地址,对于I/O接口的多个寄存器,这个时候需要通过增加指令的操作码来区别操作的是哪个寄存器,增加指令复杂度。
一台设备两个地址,一个地址是数据寄存器,一个地址是状态或控制寄存器。
一台设备多个寄存器。

寻址方式:立即,寄存器,主存(直接,间接,变址),堆栈
寻址方式就是处理器根据指令中给出的地址信息来寻找物理地址的方式。
在存储器中,操作数或指令字写入或读出的方式,有地址指定方式、相联存储方式和堆栈存取方式。几乎所有的计算机,在内存中都采用地址指定方式。当采用地址指定方式时,形成操作数或指令地址的方式称为寻址方式。寻址方式分为两类,即指令寻址方式和数据寻址方式,前者比较简单,后者比较复杂。

指令寻址
顺序寻址方式
由于指令地址在内存中按顺序安排,当执行一段程序时,通常是一条指令接一条指令地顺序进行。也就是说,从存储器取出第1条指令,然后执行这条指令;接着从存储器取出第2条指令,再执行第二条指令;接着再取出第3条指令。
这种程序顺序执行的过程,称为指令的顺序寻址方式。为此,必须使用程序计数器(又称指令指针寄存器)PC来计数指令的顺序号,该顺序号就是指令在内存中的地址。

跳跃寻址方式
当程序转移执行的顺序时,指令的寻址就采取跳跃寻址方式。所谓跳跃,是指下条指令的地址码不是由程序计数器给出,而是由本条指令给出。注意,程序跳跃后,按新的指令地址开始顺序执行。因此,指令计数器的内容也必须相应改变,以便及时跟踪新的指令地址。
采用指令跳跃寻址方式,可以实现程序转移或构成循环程序,从而能缩短程序长度,或将某些程序作为公共程序引用。指令系统中的各种条件转移或无条件转移指令,就是为了实现指令的跳跃寻址而设置的。

操作数寻址
形成操作数的有效地址的方法称为操作数的寻址方式。由于大型机、小型机、微型机和单片机结构不同,从而形成了各种不同的操作数寻址方式。下面介绍一些比较典型又常用的操作数寻址方式。
隐含寻址:这种类型的指令,不是明显地给出操作数的地址。而是在指令中隐含着操作数的地址。例如,单地址的指令格式,就不明显地在地址字段中指出第2操作数的地址,而是规定累加寄存器AC作为第2操作数地址。
立即寻址:指令的地址字段指出的不是操作数的地址,而是操作数本身,这种寻址方式称为立即寻址。立即寻址方式的特点是指令执行时间很短,因为它不需要访问内存取数,从而节省了访问内存的时间。
直接寻址:直接寻址是一种基本的寻址方法,其特点是:在指令格式的地址的字段中直接指出操作数在内存的地址。由于操作数的地址直接给出而不需要经过某种变换,所以称这种寻址方式为直接寻址方式。在指令中直接给出参与运算的操作数及运算结果所存放的主存地址,即在指令中直接给出有效地址。
间接寻址:间接寻址是相对直接寻址而言的,在间接寻址的情况下,指令地址字段中的形式地址不是操作数的真正地址,而是操作数地址的指示器,或者说此形式地址单元的内容才是操作数的有效地址。
寄存器寻址:当操作数不放在内存中,而是放在CPU的通用寄存器中时,可采用寄存器寻址方式。显然,此时指令中给出的操作数地址不是内存的地址单元号,而是通用寄存器的编号。
寄存器间接寻址:寄存器间接寻址方式与寄存器寻址方式的区别在于:指令格式中的寄存器内容不是操作数,而是操作数的地址,该地址指明的操作数在内存中。
相对寻址方式:相对寻址是把程序计数器PC的内容加上指令格式中的形式地址D而形成操作数的有效地址。程序计数器的内容就是当前指令的地址。“相对”寻址,就是相对于当前的指令地址而言。采用相对寻址方式的好处是程序员无须用指令的绝对地址编程,因而所编程序可以放在内存的任何地方。
基址寻址方式:在基址寻址方式中将CPU中的基址寄存器的内容,加上变址寄存器的内容而形成操作数的有效地址。基址寻址的优点是可以扩大寻址能力,因为与形式地址相比,基址寄存器的位数可以设置得很长,从而可以在较大的存储空间中寻址。
变址寻址方式:变址寻址方式与基址寻址方式计算有效地址的方法很相似,它把CPU中某个变址寄存器的内容与偏移量D相加来形成操作数有效地址。但使用变址寻址方式的目的不在于扩大寻址空间,而在于实现程序块的规律变化。为此,必须使变址寄存器的内容实现有规律的变化(如自增1、自减1、乘比例系数)而不改变指令本身,从而使有效地址按变址寄存器的内容实现有规律的变化。
块寻址方式:块寻址方式经常用在输入输出指令中,以实现外存储器或外围设备同内存之间的数据块传送。块寻址方式在内存中还可用于数据块移动。
堆栈寻址:其实是堆栈操作。

定位方式
在用高级语言,汇编语言编写程序时,程序员采用符号指令,数据说明等来编写程序,这种源程序用符号名来表示地址,程序员实际是在一个符号名空间内编写程序。
当编译程序对源程序进行编译时,将符号元素转换成指令和数据组成的目标程序,并将符号地址转换成地址,
在早期的单任务计算机系统中,在编译时就可以确定程序在主存中的位置,因此将数据和指令直接编译成主存的物理地址,
但是现在的计算机通常是多任务多用户系统,因此编译不能确定程序在主存的位置,因此将源程序或程序段从自己的零地址开始分配地址空间,这种地址是逻辑地址(相对地址)。

把一个程序交给计算机运行,必须先把这个程序的指令和数据装入到主存的一个或几个区域中。一般情况下,程序所分配到的主存物理空间与程序本身的逻辑地址空间是不同的,因此,必须把指令和数据的逻辑地址(相对地址)转换成主存的物理地址(绝对地址),这一转换过程称为程序定位。
定位方式主要研究程序张的指令和数据的主存物理地址在什么时候确定,采用什么方式实现。

直接定位:前提是程序员在编写程序时或编译程序时就确切知道该程序在主存中的位置,这通常在早起的单任务系统情况下采用的方式。
静态定位:由专门的定位装入程序完成,并要求程序本身是可以重定位的,即程序中那些需要修改地址的指令或数据要具有某种重定位标示。静态定位要求在程序运行前,在装入主存的过程中集中一次完成地址变换,在进入主存后,就不能再移动了。
优点:不需要任何硬件,完全由软件实现;静态定位装入程序可以对多个程序段组成的程序进行连接,实现起来简单
缺点:执行期间不能在主存中移动;程序若超过了主存,需要采用覆盖技术;多个用户不能共享程序;
动态定位:必须有硬件支持,程序在装入主存时,指令和数据的地址不作任何修改,只把主存的起始地址存入与该程序相应的基址寄存器中。在程序执行时,只要地址加法器将指令中的逻辑地址(寻址方式中的有效地址)与已存放在基址寄存器中的程序起始地址(寻址方式中的基址)相加,就能形成主存的有效地址。基址寻址和变址寻址很相似,但它们的作用不同,变址寻址支持循环程序对数组进行运算,而基址寻址支持把程序的逻辑地址变换成主存的物理地址,实现程序的动态定位。动态定位的实质是把静态定位方式中用链接装入程序实现的对地址的修改,改用硬件的地址加法器和基址寄存器来实现。
动态定位的优点:
1.程序开始执行时,不一定把整个程序调入主存,而且一个程序可以被分配到多个不连续的主存空间中,从而可以使用较小的主存分配单位,提高主存利用率。
2.几个程序可以共享主存中的一个程序段,而不必存放多个副本,这是前两种定位方式无法实现的。
3.支持虚拟存储器,为用户提供一个比实际主存的物理空间大得多的逻辑地址空间。
缺点:需要硬件支持;实现存储管理复杂。



































你可能感兴趣的:(hardware)