chapter2-2寻址方式 计算机体系结构教材.ppt
1
§2-2 寻址方式
寻址方式:是指令按什么方式寻找(访问)到所需的操作数或信息的。
1 寻址方式分析
2 寻址方式在指令中的指明
3 程序在主存中的定位技术
4 物理主存中信息的存储分布
2
1 寻址方式分析
大多数计算机都将主存、通用寄存器、堆栈分类编址,因此就有分别面向寄存器、堆栈和主存的寻址方式。
面向主存:主要访问内存,少量访问寄存器
面向通用寄存器:多数在寄存器,少量在内存
面向堆栈:主要在堆栈,可减轻编译负担
3
寻址方式(又称编址方式)指的是确定本条指令的操作数或操作数地址,或确定下一条要执行指令的指令地址的方法。
不同的计算机系统,使用数目和功能不同的寻址方式,其实现的复杂程度和运行性能各不相同。有的计算机寻址方式较少,而有些计算机采用多种寻址方式。通常需要在指令中为每一个操作数专设一个地址字段,用来表示数据的来源或去向的地址。在指令中给出的操作数的地址被称为形式地址,使用形式地址信息并按一定的规则计算出来的一个数值才是数据(或指令)的实际地址。
可能存放操作数的存储结构:
–①CPU中的寄存器(编号)
–②主存储器
–③堆栈
–④外存储器
–⑤外设端口(接口中CPU可直接访问的寄存器)
寻址方式的种类(选讲介绍)
4
操作数出现在指令中或紧跟指令之后。
Num 即为操作数的值。
适用于操作数固定的情况,提高了指令的执行速度,当该立即数的值限定为较小值(占用位数少)时,可在第一个指令字中直接给出(定长指令字),否则可在第二个指令字中给出(变长指令字)。
立即数寻址
5
(1)寄存器直接寻址方式:操作数在指定寄存器中,指令中给出寄存器号。
直接寻址
例:RegNo.=5,使用5# 累加器,此时5# 累加器中的内容为7,可记为(R5)=7,对寄存器寻址方式,操作数就是这里的数值7。
8
(2)存储器间址方式:指令的地址码字段给出的内容既不是操作数,也不是操作数的地址,而是操作数(或指令)地址的地址。
多一次读内存储器的操作。
指令中的 Addr 可以用其他寻址方式给出,例如变址寻址,这就成为变址寻址与间接寻址的复合寻址方式。
9
操作数的地址由指定的变址寄存器(由Reg指定)的内容和指令中的地址码(Disp)相加得到存储操作操作数的主存地址。
变址寻址
例:Disp=18H,Reg=5,(R5)=5700H
则操作数地址 = 5718H
便于对数组元素进行处理,是计算机中常用的一种寻址方式。
10
操作数(或指令)的地址由程序计数器 PC 的内容(即当前执行指令的地址)和指令的地址码(位移量,可正可负)相加得到。得到操作数有效地址,或是程序转移地址。
相对寻址(偏移寻址)
例:Disp = 48H(PC) = 5600H
则实际地址 = 5648H
1).主要用于转移指令,对浮动程序很有用。
2).位移量可正可负,通常用补码表示。
11
在计算机中设置一个专用的基址寄存器,通过基址寄存器的内容和指令中的位移量相加得到操作数(或指令)的地址。
基址寻址
例:Disp= 18H,[BS]= 5700H
则操作数地址=5718H
主要用于为程序或数据分配存储区,对多道程序或浮动程序很有用,解决了程序在存储器中的定位和扩大寻址空间等问题。
12
堆栈是内存储器中一块按 “后进先出” 原则进行读写的存储区,并通过一个专用的寄存器(称为堆栈指针SP)给出堆栈的栈顶(和次栈顶)地址完成数据的读写操作,故不必在指令中用操作数地址字段给出堆栈地址。通常在读写操作的前后伴随有计算机自动(不是用户通过指令)修改 SP 内容的动作,以确保按正确的 “后进先出” 原则读写堆栈区。
例如:(SP)- 1 SP和 AR,即SP的内容减 1 存回 SP,并送内存地址寄存器,接下来才可以把数据写到堆栈中。完成一次读堆栈操作后,要接着执行(SP)+ 1 SP 的一次自动修改 SP 内容的操作。
堆栈寻址
需要注意的是,指令长度可能是一个字,也可能是两个字或多个字,要看操作数地址字段的位数要求,由具体的情况决定。
13
寻址方式使用情况统计结果
例1:在VAX指令集机器上运行gcc、Spice和Tex基准程序,各种寻址方式的分布如下图:
立即值寻址方式和偏移寻址方式的使用频率十分高。
14
各种偏移量字段大小的使用情况
例2:在某R-R机器上运行SPECint92和SPECfp92进行测试,结果分布如下:
15
各种偏移量字段大小的使用情况(续)
程序所使用的偏移量大小分布十分广泛;
较小的偏移量和较大的偏移量均占有相当大的比例;
将偏移量字段的大小设置为12~16位。这种长度可以支持上述75%~99%基于偏移寻址方式的数据访问中偏移量大小