zoukankan      html  css  js  c++  java
  • 计算机组成原理_指令系统

    1. 指令格式

    计算机唯一能识别的语言是机器语言,而机器语言是由一条条语句所构成的,人们习惯把每一条机器语言的语句称为机器指令,把全部机器指令的集合称为机器的指令系统

    一条指令通常由操作码和地址码组成。

    操作码 地址码
    OP A

    (1)操作码

    操作码(OP)用来指明该指令所要完成的操作,比如加法、减法、移位等。

    (2)地址码

    地址码(A)用来指出该指令所需的操作数的地址、结果的地址以及下一条指令的地址。

    根据指令中操作数地址码数目的不同,可以将指令分为四种格式。

    ① 零地址指令

    操作码
    OP

    ​ 零地址指令在指令中无地址码,如

    ​ ● 空操作NOP、停机HLT等不需要操作数的指令

    ​ ● 子程序返回RET、中断返回IRET等操作数地址隐含在堆栈中的指令。

    ② 一地址指令

    操作码 地址码
    OP A1

    ​ 一地址指令的地址码只有一个,如

    ​ ● 自增、求反等只需要一个操作数的指令

    ​ ● 另一个操作数地址隐含在ACC中的指令。

    ③ 二地址指令

    操作码 目的操作数 源操作数
    OP A1 A2

    ​ 二地址指令的地址码有两个,实现(A1)OP(A2) -> A1的操作,将两个操作数进行运算的结果存放到A1中。

    ④ 三地址指令

    操作码 第一操作数 第二操作数 运算结果
    OP A1 A2 A3

    ​ 三地址指令有三个地址,实现(A1)OP(A2) -> A3的操作,将两个操作数进行运算的结果存放到A3中。

    ⑤ 四地址指令

    操作码 第一操作数 第二操作数 运算结果 下一条指令的地址
    OP A1 A2 A3 A4

    ​ 此指令实现(A1)OP(A2) -> A3的操作,并指出了下一条指令的地址。

    2. 寻址方式

    寻址方式是指确定本条指令的数据地址以及下一条将要执行的指令地址的方法,可以分为指令寻址和数据寻址两大类。

    (1)指令寻址

    指令寻址可分为两种:顺序寻址和跳跃寻址。

    • 顺序寻址:由程序计数器PC加1,自动形成下一条指令的地址。
    • 跳跃寻址:通过转移类指令实现。当前指令通过修改PC的值,实现指令的跳跃。

    (2)数据寻址

    数据寻址方法较多,在指令中必须设一字段来指明属于哪一种寻址方式。指令的地址字段通常都不代表操作数的真实地址,把它称为形式地址,记作A。操作数的真实地址称为有效地址,记作EA,它是由寻址方式和形式地址共同确定的。

    • 立即寻址

      特点是操作数本身设在指令内,即形式地址A不是操作数的地址,而是操作数本身,又称之为立即数。

      优点:指令在执行阶段不访问主存,执行时间最短。

      缺点:A的位数限制了立即数的范围。

    • 直接寻址

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

      优点:寻址简单,在指令执行阶段只访问主存一次。

      缺点:A的位数限制了操作数的寻址范围。

    • 隐含寻址

      指令中不给出操作数地址,其地址隐含在某个操作码或寄存器中,比如一地址的加法指令,另一个操作数地址隐含在累加器ACC中。

      优点:有利于缩短指令字长。

      缺点:需要增加存储操作数或隐含地址的硬件。

    • 间接寻址

      指令中的形式地址不直接指出操作数的地址,而是指出操作数有效地址所在的存储单元地址,也就是操作数地址的地址,即EA=(A)

      优点:可以扩大寻址范围,便于编制程序(比如子程序返回和查表)

      缺点:在执行阶段需要多次访存,访问速度较慢。

    • 寄存器寻址

      在指令中,直接给出了操作数所在的寄存器编号,即EA=Ri,其操作数在Ri中。

      优点:不访问主存,只访问寄存器,减少了执行时间,执行速度快。

      缺点:计算机中寄存器个数有限。

    • 寄存器间接寻址

      在寄存器Ri中给出的不是操作数,而是操作数所在存储单元的地址,即EA=(Ri)

      特点:比一般间接寻址块,但仍需要访问一次主存。

    • 相对寻址

      有效地址是将PC中的内容(即当前指令的地址)与指令中的形式地址A相加而成,即EA=(PC)+A

      优点:操作数的地址不是固定的,随PC的变化而变化,因此无论在主存的哪段区域,都可正确运行,便于编写浮动程序。相对寻址广泛用于转移指令中。

    • 基址寻址

      操作数的有效地址等于形式地址A加上基址寄存器BR中的内容(称为基地址),即EA=(BR)+A

      基址寻址主要用于为程序或数据分配存储空间,基址寄存器的内容通常由操作系统或管理程序确定,在程序的执行过程中其值时不可变的,而形式地址A是可变的。总结:(BR)不可变,A可变。

      优点:可以扩大操作数的寻址范围,因为基址寄存器位数大于A的位数。

    • 变址寻址

      变址寻址和基址寻址很像,其操作数的有效地址等于形式地址A加上变址寄存器IX中的内容,即EA=(IX)+A

      变址寄存器的内容是由用户设定的,在程序执行过程中其值可以变,而指令中A是不变的。变址寻址主要用于处理数组问题,在数组处理过程中,可设定A为数组首地址,不断改变IX的内容,便可以找到数组中任一数据,特别适合编写循环程序。总结:(IX)可变,A不可变。

    寻址方式总结:

    寻址方式 有效地址 访存次数 用途及特点
    立即寻址 A是操作数 0 给寄存器赋初值
    直接寻址 EA=A 1 A的位数限制了操作数的寻址范围
    隐含寻址 程序指定 0 缩短指令字长
    间接寻址 EA=(A) 2 扩大寻址范围,便于完成子程序返回
    寄存器寻址 EA=Ri 0 执行速度快
    寄存器间接寻址 EA=(Ri) 1 扩大寻址范围
    相对寻址 EA=(PC)+A 1 用于转移指令和程序浮动
    基址寻址 EA=(BR)+A 1 用于为程序或数据分配存储空间
    变址寻址 EA=(IX)+A 1 用于处理数组问题
  • 相关阅读:
    程序的机器级表示(一)
    virtual memory(1)
    Python定义参数数量可变的method的问题
    存储器结构层次(四)
    CAShapeLayer
    cell
    远程服务器推送
    keyboad
    search搜索
    Cocoopod
  • 原文地址:https://www.cnblogs.com/tianyi-comeon/p/12996751.html
Copyright © 2011-2022 走看看