计算机组成原理 第四章 指令系统

第四章 指令系统

操作码:指明了“做什么”

地址码:指明了“对谁动手”

有的指令不需要地址码(停机)

image-20210719164538219

指令格式

image-20210719164913952

零地址指令

image-20210719165145721

image-20210719165157304

一地址指令

image-20210719165500867

image-20210719165512030

image-20210719165525322

image-20210719165536655

image-20210719165546982

二地址指令

四次访存

image-20210719215244141

三地址指令

四次访存

image-20210719215309772

四地址指令

image-20210719215340253

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

指令按指令长度分类

image-20210719215628985

image-20210719215644429

image-20210719215658975

定长操作码指令格式

image-20210719215733185

可变长操作码指令格式

image-20210719215742279

image-20210719215810369

指令按操作类型分类

image-20210719215136560

image-20210719215152856

image-20210719215212428

总结

image-20210719215849641

扩展操作码指令格式

在设计扩展操作码指令格式时需注意:

(1)不允许短码是长码的前缀,即短操作码不能与长操作码的前面部分的代码相同

image-20210720075736535

三地址指令前缀不能为1111

image-20210720075850278

(2)各指令的操作码一定不能重复

image-20210720080003838

扩展操作码示例

image-20210720080602698

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

image-20210720080811923

优缺点

image-20210720080939403

指令寻址

下一条欲执行指令的地址(始终由程序计数器PC给出)

顺序寻址

定长指令寻址

按字编址

image-20210720082608455

按字节编址

image-20210720082751297

变长指令寻址

image-20210720082902060

跳跃寻址

由转移指令指出(JMP

image-20210720083024428

总结

image-20210720082403409

数据寻址

image-20210720083101072

image-20210720083611833

image-20210720083626464

增加寻址特征

image-20210720084605453

直接寻址

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

image-20210720084933408

一次指令的执行访存2次:

(1)取指令访存1次

(2)执行指令访存1次

image-20210720085041217

间接寻址

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

image-20210720085949875

image-20210720090125561

image-20210720090238919

寄存器寻址

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

image-20210720090525677

image-20210720090534892

image-20210720090546470

寄存器间接寻址

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

image-20210720090742765

image-20210720090752703

image-20210720090801102

隐含地址

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

image-20210720090907395

立即寻址

形式地址A就是操作数本身,又称立即数,一般采用补码形式

#表示立即寻址的特征

image-20210720091049358

总结

image-20210720091107559

偏移寻址

\[\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} \]

image-20210720091911304

基址寻址

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

image-20210720093111661

image-20210720093223503

根据通用寄存器总数判断要用几个bit指明寄存器

基址寻址的作用

image-20210720102839096

当程序从0地址开始存储,可以使用直接寻址

但通常程序在内存非0地址起始,直接寻址就无法奏效

可以采用基址寻址

image-20210720103226141

image-20210720103257285

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

image-20210720104145301

变址寻址

image-20210720110154521

image-20210720105415955

image-20210720110217176

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

变址寻址的作用

image-20210720110421096

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

使用变址寻址更为合适

image-20210720111102842

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

image-20210720105622746

IX-Index Register

image-20210720105840956

先使用基址寻址将指令位置定位到100的基地址

再使用变址寄存器实现循环的偏移量增加

相对寻址

image-20210720111139661

image-20210720111258098

相对寻址的作用

image-20210720111734831

image-20210720111552119

总结

image-20210720111652115

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

image-20210720111936473

image-20210720112027803

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

image-20210720112136118

PSW也被称为标志寄存器

堆栈寻址

image-20210720112657424

image-20210720112831093

硬堆栈与软堆栈

image-20210720113010094

总结

image-20210720112617142

CISC&RISC

CISC

image-20210720113539947

image-20210720113524873

RISC

image-20210720113613515

image-20210720113622337

对比

image-20210720113859181

posted on 2021-07-19 16:53  blueskylabor  阅读(354)  评论(0)    收藏  举报