计组笔记_chapter4
[TOC]
总述
指令系统ISA(Instruction Set Architecture)
指令分类:
- 微指令:微程序级的命令,它属于硬件
- 宏指令:由若干条机器指令组成的软件指令,它属于软件
- 机器指令:介于微指令与宏指令之间,每条指令可完成一个独立的算术运算或逻辑运算
复杂指令系统计算机 (CISC): Complex Instruction Set Computer
精简指令系统计算机(RISC):Reduced Instruction Set Computer
4.2指令格式
指令字(简称指令)即表示一条指令的机器字
指令格式则是指令字用二进制代码表示的结构形式
指令的构成
- 操作码字段:表示指令的操作特性与功能,即指令应进行什么样的操作
- 操作数地址字段:指定参与操作的操作数的地址
操作码
操作码字段的位数一般取决于计算机指令系统的规模。例如:
如果指令系统只有8条指令,则用3位操作码就可表示
如果有32条指令,那么就需要5位操作码
定长操作码指令格式
扩展操作码指令格式:
地址码
按照一条指令中有几个操作数地址,可将该指令称为几操作数指令或几地址指令
- 三地址指令格式
- 二地址指令格式
- 一地址指令格式
- 零地址指令格式
不同地址数目指令的形式:
零地址码和一地址码
二地址码和三地址码
根据各个操作数的物理位置不同,地址码可分为3类
- 存储器-存储器(SS)型指令
- 寄存器-寄存器(RR)型指令
- 寄存器-存储器(RS)型指令
指令字长度:一个指令字中包含二进制代码的位数
机器字长:计算机能直接处理的二进制数据的位数,它决定了计算机的运算精度
机器字长度通常与寄存器的位数一致
指令分类
单字长指令:指令字长度等于机器字长度
半字长指令:指令字长度等于半个机器字长度
双字长指令:指令字长度等于两个机器字
使用多字长指令,目的在于ᨀ供更大的地址空间。主要缺点是必须两次或多次访问内存以取出一整条指令,降低了Cpu的运算速度。
等长指令字结构:各种指令字长度是相等的。这种指令字结构简单,且指令字长度是不变的。
变长指令字结构:各种指令字长度随指令功能而异。结构灵活,代码密度高,能充分利用指令长度,但指令的控制比较复杂。
指令助记符:每条指令通常用3个或4个英文缩写字母来表示
4.3指令和数据的寻址方式
在存储器中,写入或读出操作数/指令字的方式有:
- 地址指定方式
- 相联存储方式(按内容寻址方式)
- 堆栈存取方式
采用地址指定方式时,形成操作数或指令地址的方式,称为寻址方式。
寻址方式分为两类
- 指令寻址方式(简单)
- 顺序寻址方式
- 跳跃寻址方式
- 数据寻址方式(复杂)
指令寻址方式
顺序寻址
必须使用程序计数器(又称指令指针寄存器)PC来计数指令的顺序号,该顺序号就是指令在内存中的地址。PC++是指跳过当前指令,到达下一条指令。(PC加几取决于指令长度)
跳跃寻址
本条指令给出下一条指令的地址码。
一般是条件转移,无条件转移,子程序调用会用到。
操作数寻址方式
形成操作数的****有效地址的方法,称为操作数的寻址方式
一种单地址指令的结构如下所示,其中用X,I,A各字段组成该指令的操作数地址
指令中操作数字段的地址码是由形式地址A(也称偏移量)和寻址方式特征位等组合形成。
寻址过程就是把操作数的形式地址,变换为操作数的有效地址的过程
1.隐含寻址
在指令中不是显式而是隐含(默认)给出操作数的地址
2.立即寻址
指令的地址字段给出的不算操作数的地址,而是操作数本身
这种方式的特点是指令执行速度较快,取指令的同时就取到了操作数,不需要访问内存取操作数(立即数啦)
3.直接寻址
在指令的地址字段中直接给出的是操作数在内存的地址。
要按照这个地址去读取内存。
用直接寻址方式时,指令字中的形式地址A就是操作数的有效地址EA。因此通常把形式地址A又称为直接地址
途中的括号表示取地址。
4.间接寻址
在指令的地址字段中直接给出的不是操作数的直接地址,而是操作数地址的地址。
间接寻址方式是早期计算机中经常采用的方式,但由于两次访存,执行速度慢,现在已不太使用
5.寄存器寻址
在指令的地址字段中直接给出的操作数地址不是内存的地址,而是寄存器的编号。
6.寄存器间接寻址
类似于上面的间接寻址。
在指令的地址字段中直接给出的寄存器不是含有操作数的寄存器编号,而是操作数地址的地址。
7.偏移寻址
是直接寻址和寄存器间接寻址方式的结合。EA是有效地址,A是形式地址,也就是偏移量。R代表寄存器。A(偏移量)是一个有符号数。
- 相对寻址 PC,程序计数器
- 基址寻址 基址寄存器
- 变址寻址 变址寄存器
上面这三者的的不同主要是寄存器种类不同
相对寻址
- 把程序计数器PC的内容加上指令格式中的偏移量A(有符号数)而形成操作数的有效地址
- 程序计数器的内容就是当前指令的地址,“相对”寻址,就是相对于当前的指令地址而言
- 好处是程序员无须用指令的绝对地址编程,所编程序可以放在内存任何地方
基址寻址
将CPU中基址寄存器的内容加上指令格式中的偏移量A得到的操作数有效地址
可以扩大寻址能力。基址寄存器的位数可以设置得很长,从而可以在较大的存储空间中寻址。
B:基址寄存器
变址寻址
将CPU中变址寄存器的内容加上指令格式中的偏移量A得到的操作数有效地址。与基址寻址方式类似。但变址寄存器的内容自动递增或递减。
使用变址寻址方式的目的不在于扩大寻址空间,而在于实现程序块的规律性变化(自动加1减1、或加2减2)
例子
例1
机器字长16位,主存按字节编址,转移指令采用相对寻址,由两个字节组成,第一字节为操作码字段,第二字节为相对位移量字段。假定取指令时,每取一个字节PC自动加1。若Ḁ转移指令所在主存地址为2000H,相对位移量字段的内容为06H,则该转移指令成功转以后的目标地址是
A.2006H
B.2007H
C.2008H
D.2009H
Ans:C
PC中存储的是即将执行的下一条指令的地址,也就是PC自动++之后的结果,PC自动加几是看的指令的字节长度,(与机器字长无关),本题中的指令长度为2字节,所以PC自加加的是2。也就是此时PC中存放的地址是当前指令地址+2,为2002H,然后再加上06H
例2
计算机有16个通用寄存器,采用32位定长指令字,操作码字段(含寻址方式位)为8位,Store指令的源操作数和目的操作数分别采用寄存器直接寻址和基址寻址方式,若基址寄存器可使用任一通用寄存器,且偏移量用补码表示,则Store指令中偏移量的取值范围是
A -32768+32767+32768
B -32767
C -65536+65535+65536
D -65535
Ans:A
32位定长指令,-8位操作码,还剩24位,16=2^4个通用寄存器(基址寄存器),由于源操作数采用寄存器直接寻址,所以一共需要4位,目的操作数采用基址寻址,且基址寄存器==通用寄存器,所以也需要4位。此时一共用去了16位。偏移量采用补码表示,即计算16位补码能表示上下限,估算2的15次方,注意下限的绝对值比上限大1即可.
8.段寻址
段寻址看这个图就行
9.堆栈寻址
所有的操作都是针对栈顶,后进先出
寄存器堆栈
存储区域用若干个寄存器组成
CPU中有一组专门的寄存器,有16个或者更多,它们称为串联堆栈。数据的进出是通过栈顶实现的
CPU通过“进栈”指令把数据送入堆栈,而通过“出栈”指令把数据从堆栈中取出
特点:
- 入栈和出栈时,栈顶不变,数据移动
- 访问速度快
缺点:
- 寄存器的数目有限,所以堆栈大小受限
- 数据的读出是破坏性的
存储器堆栈
存储区域是主存的一部分
- 需要一个堆栈指示器来指示堆栈中栈顶的位置,它通常是CPU中一个专用的寄存器(SP:Stack Point)
- 比串联堆栈灵活
- 栈顶变化,由SP指示,而数据不动
优点:
- 堆栈可以根据需要,任何长度
- 堆栈个数可以根据需要而定
- 可以用对存储器寻址的任何一条指令来对堆栈进行寻址
震惊!8进制300-1居然=277!
在设计处理器的堆栈操作时,有2种选择:
- 堆栈指示器 SP始终指向空单元
- 进栈时,先存入数据,后修改堆栈指示器SP
- 出栈时,先修改堆栈指示器SP,然后取出数据
- 这里修改SP可以是加操作,也可以是减操作
- 堆栈指示器 SP始终指向满单元
- 进栈时,先修改堆栈指示器SP,后存入数据
- 出栈时,先取出数据,然后修改堆栈指示器SP
Pentium寻址方式
没大仔细听,有9种寻址方式
PDP/11系列机寻址方式
↑写个标题证明老师讲了(
例3
例4
动手做
基本上所有的CPU都是按字节编址的,因为是冯诺依曼体系结构,所以指令也被丢在主存里面,按字节编址指的就是对存储器按字节编址,就是说指令的长度得是8的倍数位
编址寻址的概念
4.5 典型指令
- 数据传送指令
- 算术运算指令
- 逻辑运算指令
- 程序控制指令
- 输入输出指令
- 串处理指令
- 特权指令
- 其他指令
CISC RISC计算机
CISC:复杂指令计算机的指令系统一般多达二三百条
2-8定律:20%的指令在80%的情况下被使用
复杂指令系统的特点:
RISC:RISC计算机
精简指令系统的特点
MIPS指令集被认为是RISC体系中最优雅的一种,DEC的Alpha和惠普的Precision都深受其影响。
MIPS指令格式:略
word table
complement 补充,互为补充的东西