§2 寻址方式 寻址方式:是指令按什么方式寻找(访问)到所需的操作数或信息的。 寻找操作数及其地址的技术称为寻址技术 编址方式 寻址方式分析 §2 寻址方式 寻址方式:是指令按什么方式寻找(访问)到所需的操作数或信息的。 寻找操作数及其地址的技术称为寻址技术 编址方式 寻址方式分析 逻辑地址与主存物理地址 定位方式
编址方式 对各种存储设备进行编码的方法。 主要内容:编址单位、零地址空间个数、并行存储器的编址、输入输出设备的编址 编址单位 常用的编址单位:字编址、字节编址、位编址、块编址等 编址单位与访问字长 一般:字节编址,字访问 部分机器位编址,字访问 辅助存储器块编址,位访问
编址方式 字节编址字访问的优点 字节编址字访问的问题: 有利于符号处理 地址信息浪费 存储器空间浪费 读写逻辑复杂 对于32位机器,浪费2位地址(最低2位地址) 对于64位机器,浪费3位地址 存储器空间浪费 读写逻辑复杂 大端(Big Endin)与小端(Little Endian)问题
存储器空间浪费
读写逻辑复杂,增加1个align操作
大端(Big Endin)与小端(Little Endian)问题
CPU Endianness Little-endian Big-endian Big-endian /little-endian x86 (Intel, AMD, …) DEC Alpha Big-endian SUN SPARC RS/6000 UNIX Motorola m68000 Big-endian /little-endian HP-PA NT little-endian MIPS NT little-endian PowerPC NT little-endian HP-PA UNIX big-endian MIPS UNIX big-endian PowerPC non-NT big-endian
Endianness also applicable to some files Adobe Photoshop --Big Endian BMP (Windows and OS/2 Bitmaps) --Little Endian DXF (AutoCad) –Variable GIF --Little Endian IMG (GEM Raster) --Big Endian JPEG --Big Endian FLI (Autodesk Animator) --Little Endian MacPaint --Big Endian PCX (PC Paintbrush) --Little Endian PostScript --Not Applicable (text!) QTM (Quicktime Movies) --Little Endian (on Macs) Microsoft RIFF (.WAV &.AVI) –Both Microsoft RTF (Rich Text Format) --Little Endian SGI (Silicon Graphics) --Big Endian Sun Raster --Big Endian TGA (Targa) --Little Endian TIFF --Both, Endian identifier encoded into file WPG (WordPerfect Graphics Metafile) --Big Endian (on PCs) XWD (X Window Dump) --Both, Endian identifier encoded into file
零地址空间个数 并行存储器的编址技术 三个零地址空间:通用寄存器、主存储器、输入输出设备独立编址 两个零地址空间:主存储器与输入输出设备统一编址 一个零地址空间:最低端是通用寄存器,最高端是输入输出设备,中间为主存储器 隐含编址方式:堆栈、Cache等 并行存储器的编址技术 高位交叉编址:主要用来扩大存储器容量。 低位交叉编址:主要是提高存储器速度。
输入输出设备的编址 一台设备一个地址:通过指令来区分地址,地址内部区分地址。 一台设备两个地址:数据寄存器、状态或控制寄存器。 多个编址寄存器共用同一个地址的方法: 依靠地址内部来区分,适用于被编址的寄存器的长度比较短 “下跟法”隐含编址方式,必须按顺序读写寄存器。 一台设备多个地址:增加编程的困难
寻址方式分析 面向主存:主要访问内存,少量访问寄存器 面向通用寄存器:多数在寄存器,少量在内存 面向堆栈:主要在堆栈,可减轻编译负担
寻址方式的种类 寄存器寻址 立即寻址 直接寻址 间接寻址 相对寻址 ADD R4,R3 R4<-R4+R3 ADD R1,(2000) R1<-R1+M[2000] 间接寻址 ADD R4,(R1) R4<-R4+M[R1] 相对寻址 ADD R4,100(R1) R4<-R4+M[100+R1]
寻址方式的种类(续) 变址寻址 寄存器间接寻址 自增自减寻址 比例寻址 ADD R3,(R1+R2) R3<-R3+M[R1+R2] ADD R1,@(R3) R1<-R1+M[M[R3]] 自增自减寻址 ADD R1,(R2)+ R1<-R1+M[R2] R2<-R2+d 比例寻址 ADD R1,100(R2)[R3] R1<-R1+M[100+R2+R3*d]
寄存器寻址 主要优点:指令字长短,指令执行速度快,支持向量和矩阵等运算 主要缺点:不利于优化编译,现场切换困难,硬件复杂
堆栈寻址方式 主要优点:支持高级语言,有利与编译程序,节省存储空间,支持程序的嵌套和递归调用,支持中断处理 主要缺点:运算速度比较低,栈顶部分设计成一个高速的寄存器堆
间接寻址方式与变址寻址方式的比较 目的相同:都是为了解决操作数地址的修改 原则上,一种处理机中只需设置间址寻址方式与变址寻址方式中的任何一种即可,有些处理机两种寻址方式都设置 如何选取间址寻址方式与变址寻址方式? 例:一个由N个元素组成的数组,已经存放在起始地址为AS的主存连续单元中,现要把它搬到起始地址为AD的主存连续单元中。不必考虑可能出现的存储单元重叠问题。为了编程简单,采用一般的两地址指令编写程序。
用间接寻址方式编写程序 START: MOVE ASR, ASI ;保存源起始地址 MOVE ADR, ADI ;保存目标起始地址 MOVE NUM, CNT ;保存数据的个数 LOOP: MOVE @ASI,@ADI;传送一个数据 INC ASI ;源数组的地址增量 INC ADI ;目标数组地址增量 DEC CNT ;个数减1 BGT LOOP ;测试数据传送完? HALT ;停机 ASR: AS ;源数组的起始地址 ADR: AD ;目标数组的起始地址 NUM: N ;需要传送的数据个数 ASI: 0 ;当前正在传送的源;数组地址 ADI: 0 ;当前正在传送的目标;数组地址 CNT: 0 ;剩余数据的个数
用变址寻址方式编写程序 START: MOVE AS, X ;取源数组起始地址 MOVE NUM, CNT ;保存数据个数 LOOP: MOVE (X),AD-AS(X);传送一个数据 INC X ;增量变址寄存器 DEC CNT ;个数减1 BGT LOOP ;测试数据传送完成 HALT ;停机 NUM: N ;传送的数据个数 CNT: 0 ;剩余数据的个数
主要优缺点比较 采用变址寻址方式编写的程序简单、易读。 对于程序员,两种寻址方式的主要差别是: 实现的难易程度:间址寻址方式容易实现 间址寻址:间接地址在主存中,没有偏移量 变址寻址:基地址在变址寄存器中, 有偏移量 实现的难易程度:间址寻址方式容易实现 指令的执行速度:间址寻址方式慢 对数组运算的支持:变址寻址方式比较好 自动变址:在访问间接地址时,地址自动增减 前变址与后变址:变址与间址混合时 前变址寻址方式:EA=((X)+A) 后变址寻址方式:EA=(X)+(A)
寻址方式在指令中的指明方式 操作码占用位 地址码设置寻址方式字段 DJS200中:操作码中2位表示 VAX-11的4位 寻址灵活、操作码短,需专门的寻址方式位字段
使用概率分析法分析寻址方式 例1:在VAX指令集机器上运行gcc、Spice和Tex基准程序,各种寻址方式的分布如下图: 0% 70% 60% 50% 40% 30% 20% 10% 6% 1% 16% 24% 3% 11% 43% 17% 39% 32% 55% Tex Spice gcc 存储器间 接寻址 变址 寻址 寄存器间 立即 偏移
寻址方式参数大小选择 可见:偏移量字段为12-16位时,能表示75%-99%的访问频率,字段长应设置为12-16位。 例2:在某R-R机器上运行SPECint92和SPECfp92进行测试,结果分布如下: 0 2 4 6 8 10 12 14 16 SPECint92 SPECfp92 0% 5% 10% 15% 20% 25% 30% 占偏移寻址方式百分比 Log2(偏移量大小) 可见:偏移量字段为12-16位时,能表示75%-99%的访问频率,字段长应设置为12-16位。 结论:根据寻址方式的频率分布,确定满足大多数要求的寻址范围,与操作码长度组合决定寻址长度。
逻辑地址与主存物理地址 逻辑地址:程序员编写程序时使用的地址。 物理地址:程序在主存中的实际地址。 一般来讲,逻辑地址的空间大于物理地址的空间。 如逻辑地址为32位,即232=4GB 物理地址只有256MB 映射实际上是压缩。
定位方式 程序的主存物理地址在什么时间确定?采用什么方式来实现? 程序需要定位的主要原因: 程序的独立性 程序的模块化设计 数据结构在程序运行过程中,其大小往往是变化 有些程序本身很大,大于分配给它的主存物理空间
主要的定位方式 直接定位方式:在程序装入主存储器之前,程序中的指令和数据的主存物理就已经确定了的称为直接定位方式。 静态定位:在程序装入主存储器的过程中随即进行地址变换,确定指令和数据的主存物理地址的称为静态定位方式。 动态定位:在程序执行过程中,当访问到相应的指令或数据时才进行地址变换,确定指令和数据的主存物理地址的称为动态定位方式。