计算机组成原理 第四章 指令系统
第四章 指令系统
操作码:指明了“做什么”
地址码:指明了“对谁动手”
有的指令不需要地址码(停机)

指令格式

零地址指令


一地址指令





二地址指令
四次访存

三地址指令
四次访存

四地址指令

\[\begin{align}
&n位地址码的直接寻址范围=2^n\\
&若指令总长度固定不变,则地址码数量越多,寻址能力越弱
\end{align}
\]
指令按指令长度分类



定长操作码指令格式

可变长操作码指令格式


指令按操作类型分类



总结

扩展操作码指令格式
在设计扩展操作码指令格式时需注意:
(1)不允许短码是长码的前缀,即短操作码不能与长操作码的前面部分的代码相同

三地址指令前缀不能为1111
(2)各指令的操作码一定不能重复

扩展操作码示例

\[\begin{align}
&设地址长度为n,上一层留出m种状态,下一层可扩展出m*2^n种状态\\
\end{align}
\]

优缺点

指令寻址
下一条欲执行指令的地址(始终由程序计数器PC给出)
顺序寻址
定长指令寻址
按字编址

按字节编址

变长指令寻址

跳跃寻址
由转移指令指出(JMP)

总结

数据寻址



增加寻址特征

直接寻址
指令字中的形式地址A就是操作数的真实地址EA,即EA=A

一次指令的执行访存2次:
(1)取指令访存1次
(2)执行指令访存1次

间接寻址
指令的地址字段给出的形式地址不是操作数的真正地址,而是操作数有效地址所在的存储单元的地址,也就是操作数地址的地址,EA=(A)



寄存器寻址
\[\begin{align}
&在指令字中直接给出操作数所在的寄存器编号,即EA=R_i,其操作数在由R_i所指的寄存器内\\
\end{align}
\]



寄存器间接寻址
\[\begin{align}
&寄存器R_i中给出的不是一个操作数,而是操作数所在主存单元的地址,即EA=(R_i)\\
\end{align}
\]



隐含地址
不是显示的给出操作数的地址,而是在指令中隐含着操作数的地址

立即寻址
形式地址A就是操作数本身,又称立即数,一般采用补码形式
#表示立即寻址的特征

总结

偏移寻址
\[\begin{align}
&偏移寻址=\begin{cases}&基址寻址,EA=(BR)+A\\&变址寻址,EA=(IX)+A\\&相对寻址,EA=(PC)+A\\\end{cases}\\
&区别在于偏移的“起点”不一样\\
&BR-base\space address\space register\\
&EA-effective\space address\\
\end{align}
\]

基址寻址
将CPU中基址寄存器(BR)的内容加上指令格式中的形式地址A,而形成操作数的有效地址,即EA=(BR)+A


根据通用寄存器总数判断要用几个bit指明寄存器
基址寻址的作用

当程序从0地址开始存储,可以使用直接寻址
但通常程序在内存非0地址起始,直接寻址就无法奏效
可以采用基址寻址


采用基址寻址无需修改指令中的地址

变址寻址



基址寻址中,BR保持不变作为基地址,A作为偏移量
变址寻址的作用

当实现循环时采用直接寻址需使用十条加法指令
使用变址寻址更为合适

基址寻址变址寻址复合寻址

IX-Index Register

先使用基址寻址将指令位置定位到100的基地址
再使用变址寄存器实现循环的偏移量增加
相对寻址


相对寻址的作用


总结

硬件如何实现数的“比较”(扩展)


无条件转移指令JMP2不会管PSW的各种标志位,直接跳转到2

PSW也被称为标志寄存器
堆栈寻址


硬堆栈与软堆栈

总结

CISC&RISC
CISC


RISC


对比

#Carrawayang written
浙公网安备 33010602011771号