计组:七、指令系统

目录

  • 7.1 机器指令
    • 7.1.1 指令的一般格式
    • 7.1.2 指令字长
  • 7.2 操作数类型和操作类型
    • 7.2.1操作数类型
    • 7.2.2 数据在存储器中的存储方式
    • 7.2.3 操作类型
  • 7.3 寻址方式
    • 7.3.1 指令寻址
    • 7.3.2 数据寻址
  • 7.4 RISC and CISC


7.1 机器指令

  • 机器语言:由一条条语句构成,每条语句能准确表达某种语义;如命令机器做某种操作、指出操作数的位置。
    机器指令:构成机器语言的 每一条语句
    指令系统:全部机器指令的集合。因此指令系统反映了机器的功能

  • 软件 <-------- 指令系统 --------> 硬件

  • 计算机设计者任务:如何确定的计算机的指令系统(有什么功能);如何使用硬件来实现机器指令的功能。
    计算机使用者的任务:依据其提供的指令系统,使用汇编语言来编制各种而程序;一句指令系统所描述的机器功能,可以知道计算机内部寄存器、存储器的结构、计算机能支持的数据类型等。

7.1.1 指令的一般格式

  • 指令是由操作码寻址特征地址码组成。
    | 操作码字段 | 寻址特征字段 | 地址码字段 | --------------> 指令

  • 操作码

    • 用来指明该指令所要完成的操作,如加法、减法、移位、转移等。

    • 操作码的位数反映了机器的操作种类,即允许存在多少条不同的操作码。

    • 操作码的长度固定的指令系统:将操作码集中放在一个字段内;
      操作码长度固定的优点:便于硬件设计,指令译码时间短;
      适用于字长较长的机器;RISC也是固定操作码指令系统。

    • 操作码长度不固定的指令系统:操作码分散在不同的指令字段中,操作码长度可变;
      这种格式可以有效压缩操作码的平均长度;
      扩展操作码技术:操作码的长度随地址数的减少而增加。

    • 设计操作码不固定的指令系统时,应将使用频率高的指令占用短的操作码;使用频率低的指令占用长的操作码。这样缩短指令译码时间

  • 寻址特征

    • 指出该指令以何种方式寻找操作数的有效地址;
    • 它的位数决定于寻址方式的种类
  • 地址码

    • 用来指出该条指令的操作数地址下一条指令地址
      这里的地址可以是主存地址,也可以是某个寄存器、IO设备的地址。
    • 程序计数器PC:既能存放当前欲执行的指令地址,又有计数功能;后续指令的地址隐含其中。
    • 有四地址、三地址、两地址、零地址指令,因为有的指令在执行时,会用一些硬件资源( 如PC,ACC )来承担指令字中需要用的地址码;还可以用硬件来代替一个地址的部分字段,如基址、变址寻址。
    • 有的指令(零地址指令)在整个指令字中不需要地址码,如空操作( NOP)、停机操作( HLT )、子程序返回( RET )、中断返回( IRET )等等。其操作数的地址隐含在堆栈指针 SP中

7.1.2 指令字长

  • 决定指令字长的因素
    1、操作码的长度
    2、操作数地址的长度
    3、操作数地址的个数
  • 现代机器的指令系统通常采用位数不同的指令,如单字长指令、多字长指令。
    控制此类指令系统的电路较复杂,而且多字长指令要多次访存才能取出一条完整的指令,使CPU的运行速度下降。
    因此,为了提速和节约存储空间,一般将常用的指令设置成单字长 / 短字长指令

7.2 操作数类型和操作类型

7.2.1操作数类型

  • 机器中常见的操作数类型有:地址、数字、字符、逻辑数据
    1、地址:一般是操作数的地址,看作无符号整数;
    2、数字:一般是定点数、浮点数、十进制数。
    3、字符:文本 / 字符串
    4、逻辑数据:进行逻辑运算

7.2.2 数据在存储器中的存储方式

  • 寄存器的位数可反映机器字长
    机器字长一般取字节的1、2、4、8倍;便于处理。
    机器字长:CPU一次能处理的数据的位数,就是寄存器的位数;
    MAR 的位数反映了存储单元的个数,MDR 的位数反映了存储字长
  • 要求多字节的数据在存储器中存放要满足边界对准。可以通过向数据与数据之间添加一个或者多个空白字节来实现边界对准。
    在数据不对准边界的计算机中,数据可能存储在多个存储单元中,此时需要多次访存才能取得这个数据。

7.2.3 操作类型

  • 1、数据传送

    • 包括寄存器与寄存器之间,存储器与存储器之间,存储器与寄存器之间;
    • LOAD: 对存储器读
      SRTORE: 对存储器写
      置1
      清0
      POP:出栈
      PUSH:进栈
      (一般来说,栈顶是低地址,栈底是高地址,所以栈的数据扩展方向是往低地址方向的)
  • 2、算术逻辑操作

    • 算术运算:加、减、乘、除、加1、减1、取负数(求补);
      低档机一般只支持最基本的二进制加减、比较、求补;
      高档机一般还支持浮点运算和十进制运算。
    • 逻辑运算
      与、或、非、异或等等。
  • 3、移位
    移位的时间远远短于乘除运算的时间。
    移位操作常用来代替简单乘法和除法操作。

    • a. 算术移位:有符号数的移位,当右移时,增添位需要与符号位一致。
      b. 逻辑移位:无符号数的移位,一端丢弃,一端添0。
      c. 循环移位
  • 4、转移
    一般来说,计算机是按顺序执行每一条指令的;通过转移指令来改变这种顺序

    • a. 无条件转移
      直接把程序转移到下一条需要执行指令的地址。例如 JMP X,将指令地址无条件转移至 X。

    • b. 条件转移
      根据当前指令执行的结果来决定是否需要转移。条件满足,则转移指令;条件不满足,则按顺序执行
      一般机器都会提供一些 条件码,这些条件码是某些操作的结果。如

      零标志位( Z ),结果为0时,Z = 1;
      负标志位( N ),结果为负时,N = 1;
      溢出标志位( V ),结果有溢出时,V = 1;
      进位标志位( C ),结果有进位时,C = 1;
      奇偶标志位( P ),结果为偶数,P = 1。

      实例:
      BRO X ----------> 若指令执行的结果溢出时,V=1,则指令跳转到 X。
      BRC Y -----------> 若指令执行结果最高位有进位时,C=1,则指令跳转至 Y。

    • c. 调用与返回:

    • 在写 code 时,有些特定功能的程序段会被反复使用;为了避免重复编写,可将这个程序段设定为 独立子程序,每次需要执行该程序段,只需要一句子程序调用指令。
      计算机中有一些通用的子程序,如申请资源、读写文件、控制外设等。
      调用指令( CALL )一般与返回指令 ( RETURN )配合使用。
      CALL 用于 将当前的程序位置转移到子程序的入口。
      RETURN用于子程序执行完后重新返回到原程序的断点。
      每个 CALL 都对应一个 RETURN。
      子程序可以调用子程序,允许嵌套、递归。
      CALL 子程序后 RETURN 的返回地址一般存放在 寄存器 OR 子程序的入口地址 OR 栈顶。

    • d. 陷阱与陷阱指令
      陷阱其实是一次意外事故的中断。
      当计算机运行出现意外故障,计算机会发出陷阱信号,暂停当前程序的执行,转入故障处理程序进行相应的故障处理。
      计算机的陷阱指令一般不提供给用户直接使用,而是作为隐指令(指令系统中不提供的指令),当出现意外故障时,由 CPU 自动产生并执行。

  • 5、输入输出
    对于 IO 单独编址的计算机而言,通常设有输入输出指令,用于外设寄存器于CPU寄存器的数据交换。

  • 6、其它指令
    如等待指令、停机指令、空操作指令……
    在一些多用户、多任务的计算机系统中,还设有特权指令,只能由操作系统和其他系统软件来使用。
    大型机中还设有向量指令,可对整个向量或矩阵进行求和、求积运算。

7.3 寻址方式

  • 寻址方式:1、本条指令的的数据地址;2、下一条要执行的指令地址。确定这两个地址的方法。
  • 寻址方式包括 指令寻址方式数据寻址方式

7.3.1 指令寻址

  • 分为顺序寻址和跳跃寻址。
    顺序寻址:通过程序计数器PC 加1,来自动形成下一条指令的地址;
    跳跃寻址:通过上面所说的转移类指令来实现。

7.3.2 数据寻址

数据寻址方式 的种类很多。
为了区分它们,在指令字中必须设一字段来指明属于哪一种寻址方式
形式地址:指令的地址码字段一般都不代表操作数的真实地址,所以把它成为形式地址。记作 A。
有效地址:操作数的真实地址,记作 EA。
,-
计组:七、指令系统_第1张图片

,-
在接下来的分析中,假定指令字长,存储字长、机器字长均相同;
指令字长:一条指令的长度;
存储字长:MDR的位数;
机器字长:CPU一次能处理的数据位数,为寄存器的长度。

  • 1、立即寻址
    操作数本身就在指令字内;即形式地址 A是操作数本身,称它为立即数,以补码形式存放;
    ‘ # ’ 是立即数寻址的特征标记。
    ,-

    ,-

    立即寻址的优点是:只要取出指令,便可立即获得操作数,此种指令在执行阶段不必再访问存储器缺点是:形式地址A 的位数限制了立即数的寻址范围

  • 2、直接寻址
    指令字中的形式地址 A 就是操作数的真实地址 EA。
    ,-

    ,-
    直接寻址的优点是:寻找操作数简单,不需要专门去计算操作数的地址,指令执行阶段只访存 一次缺点是:形式地址 A 的位数限制了操作数的寻址范围。

  • 隐含寻址
    指令字中不明显的给出操作数的地址,操作数的地址隐含在操作码或某个寄存器中;
    例如一地址格式的加法指令只给出了一个操作数的地址,另一个操作数隐含在累加器ACC 中。得出的结果再放入累加器 ACC。
    ,-

    ,-
    隐含寻址的优点是有利于缩短指令字长。

  • 4、间接寻址
    指令字中的形式地址 A 不直接给出操作数的有效地址 EA,而是指出操作数有效地址EA所在的存储单元地址。就是A是EA的地址,EA = ( A )。
    通过多次访存来实现。
    可以是一次间接寻址,也可以是多次间接寻址
    多次间接寻址时,需要设置标志位来判断是中继间接地址还是EA
    一次间址的寻址范围是一个存储字长的地址所表示的寻址范围。多次间址由于要从存储字长中取出一位作为标志位来判断是间址还是EA,所以它的寻址范围比一次间址的寻址范围小一位。
    ,-

    ,-

    间接寻址的优点是:
    比直接寻址更大的寻址范围
    使用间接寻址可以很方便的完成子程序的返回
    ,-

    ,-

    上图两次调用子程序,只要在调用前将返回地址存入子程序最末条指令的形式地址A的存储单元内,便可准确返回到原程序断点。
    间接寻址的缺点是:在指令的执行阶段需要访存两次以上,使指令的执行时间延长

  • 5、寄存器寻址
    地址码字段给出的是寄存器编号,A = R i ,EA = R i
    ,-

    ,-

    在指令执行阶段无须访存,提高了执行速度。寄存器编号的位数很少,所以此类指令都不长,节约存储空间。

  • 6、寄存器间接寻址
    ,-

    ,-

    R i 中存放的是操作数的有效地址EA,即 EA = ( R i

  • 7、基址寻址
    基址寻址需要设有基址寄存器BR,操作数的有效地址 EA 等于指令字中的形式地址 A 与基址寄存器中的内容(基地址)相加。即 EA = A + (BR)。
    基址寄存器里面存放的是基地址。A 是偏移地址。指令执行阶段 BR的内容不能改变,A 的内容可以改变
    基址寄存器可以是隐式专用基址寄存器,无需用户指定;
    也可以是显式的通用寄存器,需要用户在一组通用寄存器中明确指出哪个寄存器用作基址寄存器。
    ,-

    ,-

基址寻址可以扩大操作数的寻址范围基址寻址的范围决定于基址寄存器的位数,因为基址寄存器的位数可以大于形式地址A 的位数;例如,可以将主存分为若干段,每段首地址存于基址寄存器中,而段内的位移量由指令字中形式地址 A 指出。
基址寻址在多道程序中十分有用,用户不必考虑自己的程序存于主存的那一块区域,交给 OS / 管理程序 根据主存的使用情况,赋予基址寄存器一个初始值(就是上面说的基地址),便能够将用户程序安置于主存的某一空间区域。
此外在程序执行过程中,用户是不知道自己的程序存储再主存的哪个空间,用户也不能修改基址寄存器的内容,以确保系统的安全运行。主要用于为程序或数据分配存储空间

  • 8、变址寻址
    与基址寻址相似,其有效地址 EA 等于指令中的形式地址 A 与变址寄存器 IX中的内容相加之和。即 EA = A + ( IX )
    指令执行阶段,IX 的内容是偏移量,是可变的;A 的内容是基准量,是不可变的。
    只要变址寄存器 IX的位数足够,便可以扩大操作数的寻址范围。
    常用于处理数组,编写循环程序
    ,-

    ,-

    • 变址寻址基址寻址区别
      1、基址寻址主要用于为程序或数据分配存储空间 & 多道程序,所以基址寄存器 BR 的内容通常由操作系统或管理程序来确定,在程序执行过程中是不可变的,而指令字中的 A是可变的。
      2、变址寻址中,变址寄存器 IX 的内容由用户设定,在程序执行过程中,IX 的值是可变的,而指令字 A 的值是不可变的。
    • 变址寻址可以和其它寻址方式合用,如变址寻址和基址寻址合用。
      EA = A +( IX )+( BR )
  • 9、相对寻址
    相对寻址的有效地址是将程序计数器PC的内容(即当前指令的地址)与指令字中的形式地址 A 相加而成。 即 EA = ( PC )+ A
    ,-

    ,-
    相对寻址常用于转移类指令,转移后的目标地址与当前指令有一段距离,称为相对位移量。改为一辆由指令字中的形式地址A给出。位移量A可正可负,以补码表示。
    相对寻址的最大特点就是转移地址不固定,随 PC 的变化而变化;无论程序在主存的哪段区域,都可以正确运行,这对于编写浮动程序特别有利。

    • 取出一条指令后,PC 就会自动指向下一条待取的指令。
  • 10、堆栈寻址
    要求计算机中设有堆栈。堆栈可以是软堆栈,也可以是硬堆栈
    软堆栈:利用主存的一部分空间;堆栈指针 SP指向栈顶地址,SP 里面存放的内容是栈顶地址;一般操作数只能从栈顶位置开始存取,算是一种隐含寻址。一般栈顶在低地址,栈底在高地址,堆栈空间的扩展是向低地址方向进行的。
    硬堆栈:利用寄存器组;

7.4 RISC and CISC

  • RISC:精简指令系统计算机:如arm系列的芯片;
    CISC:复杂指令系统计算机:如 X86,X86-64系列。
  • 80 - 20定律:典型程序中 80% 的语句仅仅使用了处理机中 20% 的指令。
    RISC技术就是利用这常用的 20% 的简单指令,重新组合那些不常用的 80% 的指令。
  • RISC 采用流水线技术,大部分指令在一个时钟周期内完成。
  • RISC 与 CISC 的比较
    1、RISC的指令长度固定,CISC的指令长度不固定
    2、RISC 采用组合逻辑控制,CISC 采用微程序控制
    3、RISC 只能通过 LOAD / STORE 指令访存,CISC可以通过各种指令访存;
    4、RISC 可以采用优化编译技术,CISC 不可以;
  • 现在的发展趋势是 RISC 和 CISC 相互融合

你可能感兴趣的:(计组:七、指令系统)