第二章:指令系统
1 指令系统结构的分类
CPU中用来存放操作数的存储单元主要有三种:堆栈、累加器、通用寄存器组。据此,指令系统(Instruction Set Architecture)可分为三种:
- $\color[RGB]{40,120,181}{堆栈型结构}$:堆栈栈顶和次栈顶中的数据,运算后写入栈顶。两个操作数都是隐式的。优点:指令字比较短,程序占用的空间小;缺点:不能随机地访问堆栈,难以生成有效的代码,而且对栈顶的访问是个瓶颈。
- $\color[RGB]{40,120,181}{累加器型结构}$:一个操作数是隐式的,即累加器;另一个是显示给出的。优点:指令字比较短,程序占用的空间小;缺点:只有一个中间结果暂存在累加器中,需要频繁访问存储器。
早期计算机大多采用堆栈型结构或累加器型结构
- $\color[RGB]{40,120,181}{通用寄存器型结构}$:所有操作数都是显示给出的。优点:1.寄存器的访问比存储器快得多 2. 编译器能够更加容易、有效地分配寄存器 。根据操作数显式给出的来源不同,又可以分为两类:
- $\color[RGB]{248,172,140}{寄存器-存储器型结构(RM结构)}:$一个操作数来自寄存器,另一个来自存储器。
- $\color[RGB]{248,172,140}{寄存器-寄存器型结构(RR结构)}:$两个操作数都来自寄存器。
**显式给出:**用指令字中的操作数字段给出
**隐式给出:**用事先约定好的单元
2. 寻址方式
寻址方式(Addressing Mode)是指指令系统中产生所要访问的数据地址的方法。寻址方式可以指明指令中的操作数是一个立即数、一个寄存器操作数或者是一个存储器操作数
2.1 寻址方式举例
- 寄存器寻址
- 立即数寻址
- 偏移寻址
等等
2.2 字节对齐
计算机中信息的单位可分为字节(8bit)、半字(16bit)、单字(32bit)、双字(64bit)。计算机中采用按字节编址,各类信息都是用改信息的首字节地址来寻址的。
信息存储的整数边界
此外还需要对它们的存储方式进行限制,如果允许它们任意存储,就可能出现一个信息跨存储字边界而存储与两个存储单元的情况,而在这种情况下,读取该信息就需要花费两个存储周期,为了避免出现这个问题,就要求宽度不超过主存宽度的信息必须存放在一个存储字内,信息在主存中存放的起始地址必须是该信息宽度(字节数)的整数倍,从而避免了跨边界,保证了访问速度。
对于一个32位机器(主存宽度为32位),要求: