相关概念
Ad(Address) 形式地址
AC(Accumulation register)累加寄存器
ALU(Arithmetic logic unit)算术逻辑单元
MQ(Multiplier-Quotient Register)乘商寄存器
DR(Data Register) 数据寄存器
AR(Address Register) 地址寄存器(MAR)
IR(Instruction Register) 指令寄存器
BR(Buffer Register) 缓冲寄存器(MBR)
ID(Instruction Decoder) 指令译码器
PC(ProgramCounter) 程序计数器
OP(Operate Code): 操作码 指令中用于指出操作性质的字段。
指令系统
每种计算机系统均有一组指令提供给用户使用
指令
般由操作码和地址码两部分构成,其中操作码在前,地址码在后,地址码的个数可变
|操作码OP| 地址码|
操作码是指明指令操作性质的命令码,它提供指令的操作控制信息,不可缺少
操作数地址码用来描述该指令的操作对象及其所在位置
|OP|4|A2|A3(结果)|A4(下地址)|
指令含义:$ (A_1) OP (A_2) ->A_3,A_4=$下一条将要执行指令的地址
指令执行
00000000 | 000001 | 000010 | 000011 | 000100 |
---|---|---|---|---|
OP | $A_1$ | $A_2$ | $A_3$(结果) | $A_4$(下地址) |
一条指令的执行 (假设每个地址都是主存地址)
取指令访存1次 (假设指令字长=存储字长)
取两个操作数访存2次
存回结果访存1次
共访存4次
取指
PC(程序计数器)=0 指向第一条指令的位置,PC存放了当前欲执行指令的位置。
MAR(地址寄存器)=0 PC把地址0交给了地址寄存器MAR
MDR(数据寄存器)=000001 0000001000 MAR根据地址在0的存储单元中取出指令,交给了数据寄存器MDR
IR(指令寄存器)=000001 0000001000 MDR将指令交给了指令寄存器IR
分析
OP(IR)=000001 获取指令操作码
PC=PC+1 地址为0的存储单元中的指令执行结束,程序计数器PC自动+1
执行
MAR=Ad(IR)=0000001000 获取数据地址
MDR=X 从MAR获取真实数据的值
ACC=MDR=x MDR将数据放入累加器ACC中
取指
PC=1
MAR=1
MDR=000100 0000001001
IR=000100 0000001001
分析
OP(IR)=000100
PC=PC+1
执行
MAR=Ad(IR)=0000001001
MDR=a
MO=MDR=a 从MDR读取数据放入乘商寄存器MO
X=ACC=x 把ACC中的值放入通用寄存器X
ACC=ax
四地址指令
|OP|$A_1$|$A_2$|$A_3$(结果)|$A_4$(下地址)|
指令含义: $(A_1)OP (A_2) ->A_3,A_4=$,下一条将要执行指令的地址,完成一条指令访存4次
三地址指令
|OP|$A_1$|$A_2$|$A_3$(结果)|
指令含义 : $(A_1)OP (A_2) ->A_3$完成一条指令访存4次。区别在于地址码位数不同
二地址指令
|OP|$A_1$|$A_2$|
指令含义: $(A_1)OP (A_2)->A_1$完成一条指令访存4次
一地址指令
指令含义 : $(A_1)OP (A_2)->A_1$,完成一条指令访存3次。
$(ACC) OP (A_1)->ACC$,约定目的地址为ACC,完成一条指令访存2次
零地址指令
1) 不需要操作数的指令,如空操作指令、停机指令、关中断指令等
2) 零地址的运算类指令仅用在堆栈计算机中。
通常参与运算的两个操作数隐含地从栈顶和次栈顶弹出,送到运算器进行运算,运算结果再隐含地压入堆栈
定长指令字结构
指令字长固定的指令
变长指令字结构
指令字长不固定的指令
列题
假设指令字长为16位:前4位为基本操作码字段OP
4位基本操作码若全部用于三地址指令,则有16条
但至少须将1111留作扩展操作码之用,即三地址指令为15条
111111留作扩展操作码之用,二地址指令为15条
111111111111留作扩展操作码之用,一地址指令为15条
零地址指令为16条
列题
设指令字长固定为16位,试设计一套指令系统满足:
a有15条三地址指令
b有12条二地址指令
c有62条一地址指令
d有32条零地址指令
设地址长度为n,上一层留出m种状态,下一层可扩展出$m*2^n$种状态
有15条三地址指令 | 0000-1110 | $A_1$ | $A_2$ | $A_3$ |
有12条二地址指令 | 1111 | 0000-1011 | $A_2$ | $A_3$ |
有62条一地址指令 | 1111 | 1100-1111 | 0000-1101 | $A_3 |
有32条零地址指令 | 1111 | 1100-1111 | 1110-1111 | 0000-1111 |
单字长指令: 指令长度=机器字长
半字长指令、双字长指令
数据传送类
数据传送目的
指令寻址
找到下一条欲执行指令的指令地址
顺序寻址: (PC)+1
PC 当前地址 ---> 地址+1
000010 | 000011 | 000100 | |
---|---|---|---|
OP | $A_1$ | $A_2$ | $A_3$(结果) |
跳跃寻址: (PC)+A
00000000 | 000010 | 000011 | 000100 |
---|---|---|---|
OP | $A_1$ | $A_2$ | $A_3$(结果) |
数据寻址
找到本条指令的操作数地址
寻址特征
表明某种数据寻址方式
寻址方式 | EA | |||
---|---|---|---|---|
操作码(OP) | 寻址特征 | 形式地址(A) | ||
寻址方式 | EA1 | 寻址方式 | EA2 | |
操作码(OP) | 寻址特征 | 形式地址(A1) | 寻址特征 | 形式地址(A2) |
隐含寻址
不是显式的给出操作数的地址,而是在指令中隐含着操作数的地址
寻址方式 | EA1 | |
---|---|---|
OP | A |
优点:指令执行阶段不访问主存,指令执行时间最短
缺点: A的位数限制了立即数的范围
立即数寻址
形式地址A就是操作数本身,又称为立即数,一般采用补码形式
寻址方式 | EA1 | |
---|---|---|
OP | A |
CPU执行:
CPU执行:
CPU执行:
CPU执行:
CPU执行:
CPU执行:
CPU执行:
完成一次加法: 记栈顶单元Msp
(Msp)-->ACC 数据移入累加寄存器ACC
(SP)+1-->SP 栈指针加一
(Msp)-->X 数据移入通用寄存器
(SP)+1-->SP 栈指针加一
(ACC)+(X)-->T
(SP)-1=>SP(Y)-->Msp 回到栈顶
CPU执行:
寻址方式 | 有效地址 | 访存次数(不考虑存放结果) |
---|---|---|
隐含寻址 | 程序指定 | 2 |
立即数寻址 | A是操作数 | 1 |
直接寻址 | EA=A | 2 |
一次间接寻址 | EA=(A) | 3 |
寄存器寻址 | EA=Ri | 1 |
寄存器间接一次寻址 | EA=(Ri) | 2 |
相对寻址(爱情转移) | EA=(PC)+A | 2 |
基址寻址(K歌之王) | EA=(BR)+A | 2 |
变址寻址(十年) | EA=(IX)+A | 2 |
堆栈寻址 | 根据情况决定 | 硬堆栈不访存/软堆栈访存 |
<table><capital>RISC和CISC的特点</capital><tr><th>CISC</th><th>RISC</th></tr><tr><td>指令就是程序</td><td>指令是一个动作</td></tr><tr><td>X86架构</td><td >ARM架构</td><!-- <td rowspan=2 colspan=2>单元格也可以从两个方向合并</td><td rowspan=2 width="10%">百分比和像素是可以混用的具体服从哪个取决于哪个大</td> --></tr><tr><td>指令使用不均匀</td><td>只保留基本指令</td></tr><tr><td colspan=2 align="center">实例: 设计一副扑克牌</td></tr></tr><tr><td>52张扑克牌就要有52个电路设计,但是这种设计是比较通用的。</td><td>13张不同的数字(A~K)4和花色设计17种电路,然后多条指令组合</td></tr></table>
RISC和CISC的对比
类别 | CISC | RISC |
---|---|---|
指令系统 | 复杂,庞大 | 简单,精简 |
指令数目 | 一般大于200条 | 一般小于100条 |
指令字长 | 不固定 | 定长 |
可访存指令 | 不加限制 | 只有Load/Store指令 |
各种指令执行时间 | 相差较大 | 绝大多数在一个周期内完成 |
各种指令使用频度 | 相差很大 | 都比较常用 |
通用寄存器数量 | 较少 | 采用优化的编译程序,生的目标代码程序成的代码较为高效 |
目标代码 | 难以用优化编译生成高效 | |
控制方式 | 绝大多数为微程序控制 | 绝大多数为组合逻辑控制 |
指令流水线 | 可以通过一定方式实现 | 必须实现 |
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。