4 计算机指令

指令格式

指令(又称机器指令):
是指示计算机执行某种操作的命令,是计算机运行的最小功能单位。
一台计算机的所有指令的集合构成该机的指令系统,也称为指令集

指令分为操作码和地址码两部分字段

根据地址码个数

1、零地址指令
不需要操作数,如空操作、停机、关中断等指令
堆栈计算机,两个操作数隐含存放在栈顶和次栈顶,计算结果压回栈顶
指令含义:OP(Ai)→A1,完成一条指令需要3次访存:取指—>读A1—>写A1

2、一地址指令
只需要单操作数,如++、--、取反、求补
需要两个操作数,但是其中一个操作数隐含在某个寄存器中(如ACC)
指令含义:(ACC)OP(A¡)→ACC,完成一条指令需要2次访存:取指—>读A1

3、二地址指令
通常需要两个操作数的算术运算、逻辑运算相关指令
指令含义:(AI)OP(A2)→A1,完成一条指令需要访存4次,取指→读A1→读A2→写A1

4、三地址指令
常用于需要两个操作数的算术运算、逻辑运算相关指令
指令含义:(A1)OP(A2)→A3,完成一条指令需要访存4次,取指→读A1→读A2→写A3

5、四地址指令
指令含义:(A1)OP(A2)->A3,A4=下一条将要执行指令的地址
完成一条指令需要访存4次,取指→读A1→读A2→写A3
正常情况下:取指令月PC+1,指向下一条指令
四地址指令:执行指令后,将PC的值修改位A4所指地址 

根据指令长度

指令字长:一条指令的总长度(可能会变)
机器字长:CPU进行一次整数运算所能处理的二进制数据的位数(通常和ALU直接相关)
存储字长:一个存储单元中的二进制代码位数(通常和MDR位数相同)
指令长度是机器字长的多少倍:半字长指令、单字长指令、双字长指令
指令字长会影响取指令所需时间。如:机器字长存储字长16bit,则取一条双字长指令需要两次访存 
定长指令字结构:指令系统中所有指令的长度都相等
变长指令字结构:指令系统中各种指令的长度不等 

根据操作码长度

定长操作码:指令系统中所有指令的操作码长度都相同
可变长操作码:指令系统中各指令的操作码长度可变

定长指令字结构+可变长操作码→扩展操作码指令格式

根据操作类型

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

扩展操作码

指令由操作码和若干个地址码组成。

定长指令字结构:指令系统中所有指令的长度都相等
变长指令字结构:指令系统中各种指令的长度不等

定长操作码:指令系统中所有指令的操作码长度都相同
可变长操作码:指令系统中各指令的操作码长度可变

定长指令字结构+可变长操作码—>扩展操作码指令格式

在设计扩展操作码指令格式时,必须注意以下两点:
1)不允迕短码是长码的前缀,即短操作码不能与长操作码的前面部分的代码相同
2)各指令的操作码一定不能重复。

通常情况下,对使用频率较高的指令,分配较短的操作码;对使用频率较低的指令,分配较长的操作码,从而尽可能减少指令译码和分析的时间。

指令和数据寻址

指令寻址

如何确定下一条指令的存放地址

顺序执行:(PC)+“1”—>PC,这个1取决于指令长度

跳跃寻址:由转移指令指出,修改PC的值

数据寻址

目的:确定本条指令的地址码指明的真实地址

立即寻址

形式地址A就是操作数本身,又称为立即数,一般采用补码形式,#表示立即数寻址特征
一条指令的执行:
取指令 访存1次,执行指令 访存0次,暂不考虑存结果,共访存1次
优点:指令执行阶段不访问主存,指令执行时间最短
缺点:A的位数限制了立即数的范围。如A的位数为n,且立即数采用补码时,可表示的数据范围为-2-^n-1~2^n--1-1

直接寻址

直接寻址:指令字中的形式地址A就是操作数的真实地址EA,即EA=A。
一条指令的执行:
取指令访存1次,执行指令访存1次,暂不考虑存结果,共访存2次
优点:简单,指令执行阶段仅访问一次主存,不需专门计算操作数的地址。
缺点:A的位数决定了该指令操作数的寻址范围苦研操作数的地址不易修改。

间接寻址

间接寻址:指令的地址字段给出的形式地址不是操作数的真正地址,而是操作数有效地址所在的存储单元的地址,也就是操作数地址的地址,即EA=(A)。
优点:可扩大寻址范围(有效地址EA的位数大于形式地址A的位数)。便于编制程序(用间接寻址可以方便地完成子程序返回)。
缺点:指令在执行阶段要多次访存(一次间址需两次访存,多次寻址需根据存储字的最高位确定儿次访存)

寄存器寻址

寄存器寻址:在指令字中直接给出操作数所在的寄存器编号,即EA=R,其操作数在由R所
指的寄存器内。
一条指令的执行,取指令访存一次,执行指令访存0次,暂不考虑存结果,共访存一次
优点:指令在执行阶段不访问主存,访问寄存器,指令字短且执行速度快,支持向量/矩阵运算。
缺点:寄存器价格品贵,计算机中寄存器个数有限。 

寄存器间接寻址

寄存器间接寻址:寄存器R中给出的不是一个操作数,而是操作数所在主存单元的地址,即EA=(R)。 
一条指令的执行:取指令访存1次,执行指令访存1次,暂不考虑存结果共访存2次

隐含寻址

不是明显的给出操作数的地址,而是在指令中隐含着操作数的地址
优点:有利于缩短指令字长。
缺点:需增加存储操作数或隐含地址的硬件。

基址寻址

基址寻址:以程序的起始存放地址作为“起点”
基址寻址:将CPU中基址寄存器(BR)的内容加上指令格式中的形式地址A,而形成操作数的有效地址,即EA=(BR)+A。
注:基址寄存器是面向操作系统的,其内容由操作系统或管理程序确定。在程序执行过程中,基址寄存器的内容不变(作为基地址),形式地址可变(作为偏移量)。
优点:可扩大导址范围基址寄存器的位数大于形式地址A的位数;用户不必考虑自己的程序存于主存的哪一空间区域,故有利于多道程序设计,以及可用于编制浮动程序

变址寻址

变址寻址:程序员自己决定从哪里作为“起点”
变址寻址:有效地址EA等于指令字中的形式地址A与变址寄存器X的内容相加之和,即EA= (IX)+A,其中IX可为变址寄存器(专用),也可用通用寄存器作为变址寄存器
变址寄存器是面向用户的,在程序执行过程中,注:(IX作为偏移量),变址寄存器的内容可由用户改变,形式地址A不变( 作为基地址)

优点:在数组处理过程中,可设定A为数组的首地址,不断改变变址寄存器Ix的内容,便可很容易形成数组中任一数据的地址,特别适合编制循环程序

基址&变址复合寻址
基址寻址:EA=(BR)+A
变址寻址:EA=(IX)+A
先基址后变址寻址:EA=(IX)+((BR)+A) 

相对寻址

相对寻址:以程序计数器PC所指地址作为“起点
相对寻址:把程序计数器PC的内容加上指令格式中的形式地址A而形成操作数的有效地址,
即EA=(PC)+A,其中A是相对于PC所指地址的位移量,可正可负,补码表示
优点:操作数的地址不是固定的,它随着PC值的变化而变化,并且自指令地址之间总是相差一个固定值,因此便于程序浮动。相对寻址广泛应用于转移指令

堆栈寻址

堆栈寻址:操作数存放在堆栈中,隐含使用堆栈指针(SP)作为操作数地址。
堆栈是存储器(或专用寄存器组)中一块特定的按“后进先出(LIFO)”
原则管理的存储区,该存储区中被读/写单元的地址是用一个特定的寄存器给出的,该寄存器称为堆栈指针(SP) 

总结

CISC和RISC

两种设计反向

CISC:一条指令完成一个复杂的基本功能

RISC:一条指令完成一个基本“动作”,多条指令组合完成一个复杂基本功能

80-20规律:典型程序中80%语句仅仅使用处理机种20%的指令

  • 10
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值