前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >计算机组成原理 指令

计算机组成原理 指令

原创
作者头像
onenewcode
发布2024-01-20 20:54:09
2631
发布2024-01-20 20:54:09
举报
文章被收录于专栏:计算机组成原理

指令

指令格式和分类

指令格式

相关概念

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

按长度分类

单字长指令: 指令长度=机器字长

半字长指令、双字长指令

按操作类型分类

数据传送类

数据传送目的

  • LOAD 作用:把存储器中的数据放到寄存器中
  • STORE 作用: 把寄存器中的数据放到存储器中 运算类 算术逻辑操作
  • 算术:加、减、乘、除、增1、减1、求补、浮点运算、十进制运算
  • 逻辑: 与、或、非、异或、位操作、位测试、位清除、位求反 移位操作 算术移位、逻辑移位、循环移位 (带进位和不带进位) 程序控制类 转移操作
  • 无条件转移 :JMP
  • 条件转移: - JZ:结果为0 - JO:结果溢出 - JC:结果有进位 - 调用和返回CALL和RETURN - 陷阱(Trap) 输入输出操作 CPU寄存器与IO端口之间的数据传送 (端口即IO接口中的寄存器)寻址方式

指令寻址

指令寻址

找到下一条欲执行指令的指令地址

顺序寻址: (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执行:

  • 取指令访存1次
  • 执行指令访存0次
  • 不考虑存放结果
  • 共访存1次 优点: 指令执行阶段不访问主存,指令执行时间最短 缺点: A的位数限制了立即数的范围 直接寻址 形式地址A就是操作数的真实地址,即EA1=A ||寻址方式|EA1| |--------|--------|--------| |OP|看情况|A|

CPU执行:

  • 取指令访存1次
  • 执行指令访存1次
  • 不考虑存放结果
  • 共访存2次 优点:简单,指令执行阶段仅仅访问一次主存,不需要设计专门计算操作数的地址 缺点: A的位数限制了寻址的范围,而且操作数的地址不容易更改 间接寻址 指令的地址字段给出的形式地址不是操作数的真正地址,而是操作数有效地址所在的存储单元的地址,也就是操作数地址的地址,即EA1=(A) ||寻址方式|EA1| |--------|--------|--------| |OP|看情况|A|

CPU执行:

  • 取指令访存1次
  • 执行指令访存2次
  • 不考虑存放结果
  • 共访存3次 优点: 可以扩大寻址范围,便于编制程序 缺点:指令在执行阶段要多次访存,多次访存的寻址需根据存储字的做高位确定 寄存器寻址 在指令字中直接给出操作数所在的寄存器编号,即EA =Ri其操作数在由Ri所指的寄存器内。 ||寻址方式|EA1| |--------|--------|--------| |OP|看情况|A|

CPU执行:

  • 取指令访存1次
  • 执行指令访存o次
  • 不考虑存放结果
  • 共访存1次 优点:指令在执行阶段不访问主存,只访问寄存器,指令字短且执行速度快 缺点: 寄存器价格昂贵,计算机中寄存器个数有限 寄存器间接寻址 寄存器Ri中给出的不是一个操作数,而是操作数所在主存单元的地址,即EA=(Ri)。 ||寻址方式|EA1| |--------|--------|--------| |OP|看情况|A|

CPU执行:

  • 取指令访存1次
  • 执行指令访存1次
  • 不考虑存放结果
  • 共访存2次 优点: 比一般的间接寻址快很多 缺点: 寄存器价格昂贵,而且在执行阶段需要访问主存 变址寻址 有效地址EA等于指令字中的形式地址A与变址寄存器IX的内容相加之和, 即EA=(IX)+A,其中IX为变址寄存器(专用),也可用通用寄存器作为变址寄存器 ||寻址方式|EA1| |--------|--------|--------| |OP|看情况|A|

CPU执行:

  • 取指令访存1次
  • 执行指令访存1次
  • 不考虑存放结果
  • 共访存2次 优点:可以扩大寻址范围;在数组处理方面,可以设A为数组的首地址,不断改变IX,所以十分适合编制循环程序 缺点:寄存器价格昂贵,逻辑比较复杂 相对寻址 把程序计数器PC的内容加上指令格式中的形式地址A而形成操作数的有效地址,即EA=(PC)+A,其中A是相对于当前指令地址的位移量,可正可负,补码表示。 ||寻址方式|EA1| |--------|--------|--------| |OP|看情况|A|

CPU执行:

  • 取指令访存1次
  • 执行指令访存1次
  • 不考虑存放结果
  • 共访存2次 优点: 操作数的地址不是固定的,随着PC的变化而变化,并且与指令地址之间总是相差一个固定值,因此便于程序浮动,广泛用于转移指令 缺点: 寄存器价格昂贵,逻辑比较复杂 堆栈寻址 存储区中被读/写单元的地址是用一个特定的寄存器给出的,该寄存器称为堆栈指针 (SP) ||寻址方式|EA1| |--------|--------|--------| |OP|看情况|A|

完成一次加法: 记栈顶单元Msp

(Msp)-->ACC   数据移入累加寄存器ACC

(SP)+1-->SP   栈指针加一

(Msp)-->X   数据移入通用寄存器

(SP)+1-->SP   栈指针加一

(ACC)+(X)-->T

(SP)-1=>SP(Y)-->Msp   回到栈顶

CPU执行:

  • 取指令访存1次
  • 软堆栈执行指令访存
  • 不考虑存放结果 偏移寻址 变址寻址 基址寻址 相对寻址

总结

寻址方式

有效地址

访存次数(不考虑存放结果)

隐含寻址

程序指定

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指令

各种指令执行时间

相差较大

绝大多数在一个周期内完成

各种指令使用频度

相差很大

都比较常用

通用寄存器数量

较少

采用优化的编译程序,生的目标代码程序成的代码较为高效

目标代码

难以用优化编译生成高效

控制方式

绝大多数为微程序控制

绝大多数为组合逻辑控制

指令流水线

可以通过一定方式实现

必须实现

我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 指令
    • 指令格式和分类
      • 指令格式
      • 按地址码分类
      • 按操作码分类
      • 按长度分类
      • 按操作类型分类
      • 指令寻址
      • 数据寻址
      • 总结
    • 指令集
    • 我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档