精华内容
下载资源
问答
  • 2020-04-27 00:08:49

    一、指令系统的发展
    1、引
    (1)、冯氏结构
    ①、存储程序
    ②、程序控制
    (2)、计算机指令是由一系列机器指令组成的
    ①、指令是计算机执行某种操作的命令
    ②、每个指令的执行过程靠硬件实现
    (3)、指令是软件和硬件的分界面
    ①、硬件人员采用各种手段实现它
    ②、软件设计人员则利用它编制系统软件和应用软件
    2、指令系统
    (1)、指令系统是一台计算机中所有机器指令的集合
    ①、它是表征一台计算机性能的重要因素
    ②、影响计算机的硬件结构、软件系统,机器的适用范围
    (2)、计算机指令系统的发展经历了从简单到复杂的演变过程
    3、系列计算机
    (1)、指基本指令系统相同、基本体系结构相同的一系列计算机
    (2)、同一系列的各机种有共同的指令集
    (3)、指令集向下兼容
    (4)、解决软件兼容的问题
    (5)、MIPS系列、ARM系列、x86系列
    4、复杂指令系统计算机CISC
    (1)、单条指令功能简单,整个指令系统数量庞大
    (2)、使计算机研制开发周期变长,正确性难以保证,调试维护困难,而且大量使用频率很低的复杂指令造成了硬件资源的浪费
    5、精简指令系统计算机RISC出现原因
    ①、2/8规则
    ②、为了降低控制器设计难度

    二、指令格式
    1、指令
    (1)、指令字:表示一条指令的二进制串,简称指令
    (2)、指令内容
    ①、做什么操作
    ②、如果需要操作数,从哪里取
    ③、结果送往哪里
    ④、下一条指令从哪里取
    2、指令格式:
    在这里插入图片描述
    (1)、操作码
    操作码指出指令进行什么操作,操作码字段的位数决定了计算机指令系统的规模
    (2)、地址码
    用来描述指令的操作对象
    ①、三地址指令:指令中包括两个操作数地址码和一个结果地址码,操作结束后,原操作数不改变
    在这里插入图片描述
    ②、二地址指令:指令中包括两个操作数的地址码,运算结果保存到一个操作数的地址码中,并覆盖原数据
    在这里插入图片描述
    ③、一地址指令:这种指令可能是单操作数运算,如"+1",操作结果保存到原操作数地址中,
    也可能是二元运算,另一个操作数是隐含的
    ④、零地址指令:可能无需操作数,如空操作指令、停机指令
    也可能操作数是默认的(隐含的)
    (3)、操作数位置类型
    ①、SS
    从内存某单元取数,结果存放至内存另一单元,需要多次访问内存
    ②、RR
    从寄存器取数,结果存放至另一寄存器。不需要访问内存,速度快
    ③、RS
    既要访问内存,又要访问寄存器
    (4)、指令字长度
    一个指令包含二进制的位数,与机器字长有关,分为单字长、半字长、双字长
    ①、多字长指令
    一条指令长度不固定,取指时多次访存,降低了速度,存储空间大
    ②、分类
    根据ISA中所有指令长度是否相等:
    等长指令:所有指令长度相等,结构简单,控制线路简单
    变长指令:指令字长度随功能而异,结构灵活,控制较复杂
    (5)、指令助记符
    操作码用二进制表示,为了方便,用几个字母表示一条指令,这种缩写码叫做指令助记符
    (6)、操作数类型
    地址数据、数值数据、字符数据、逻辑数据

    三、寻址方式
    引:
    存储器既存放指令,也存放数据,操作数或指令字写入或读出的方式有:
    地址指定方式、相联存储方式、堆栈存取方式
    几乎所有计算机在内存中都采用地址指定方式,当采用地址指定方式时,形成操作数或指令地址的方式称为寻址方式
    1、指令寻址方式
    (1)、顺序寻址方式
    ①、指令地址在内存中按序排放,执行程序时,通常是一条指令接一条指令的顺序执行,这种执行方式称为指令的顺序寻址方式
    ②、必须使用程序计数器PC来计数指令的顺序号,该顺序号就是指令在内存中的地址
    (2)、跳跃寻址方式
    当程序转移执行的顺序时,指令的寻址就采用跳跃寻址方式,所谓跳跃,就是下条指令的地址码不是由PC给出,而是直接由本条指令给出
    ①、可以实现程序转移或构成循环程序,从而能缩短程序的长度
    ②、将某些程序作为公共程序引用
    ③、指令系统中的各种条件转移或无条件转移指令,就是为了实现指令的跳跃寻址而设置的
    2、操作数寻址方式
    (1)、目的:为了形成操作数的有效地址
    (2)、指令中地址码由形式地址(偏移量)和寻址方式特征位等组合而成
    如一种单地址指令:
    在这里插入图片描述
    (3)、操作数存放位置
    ①、操作数包含在指令中
    ②、操作数包含在CPU某一个内部寄存器中
    ③、操作数包含在主存储器中
    ④、操作数包含在I/O设备的端口中
    (4)、操作数基本寻址方式
    ①、隐含寻址
    指令不明显给出而是隐含操作数的地址,如单地址的指令格式,没有在地址字段中指明第二操作数地址,而是规定累加寄存器AC作为 第二操作数地址,AC对于单地址指令格式来说是隐含地址
    ②、立即寻址
    指令的地址字段指出的不是操作数的地址,而是操作数本身
    特点:
    操作码和操作数被同时取出,提高了指令的执行速度
    操作数是指令的一部分,不能被修改
    操作数的大小受到指令字长的限制,寻址方式灵活性差
    ③、直接寻址
    在指令的地址字段中给出操作数在内存的地址A
    EA=A
    ④、间接寻址
    操作数的有效地址在主存储器中,从而使得间接寻址要比直接寻址灵活得多
    至少需要两次访问主存储器才能取出操作数
    EA=(A)
    ⑤、寄存器寻址
    操作数不在存储器中,而是在CPU内某一通用寄存器中,在指令的地址码部分给出CPU内某一通用寄存器的编号
    优点:指令在执行时从寄存器中取操作数比访问主存要快得多
    EA=R
    ⑥、寄存器间接寻址
    寄存器中存放的不是操作数,而是操作数的存储器地址,在指令的地址码部分给出通用寄存器的编号
    EA=®
    ⑦、偏移寻址
    偏移寻址是直接寻址和寄存器间接寻址方式的结合,要求指令中有两个地址段,一个地址段中的形式地址A直接被使用,另一个地址段指某个专用寄存器(一般是隐含的)
    EA=A+®
    常用三种偏移寻址:
    相对寻址:隐含的专用寄存器是程序计数器PC
    EA=A+(PC)
    地址是相对当前指令地址而言的,形式地址A可正可负,是一种指令寻址方式
    基址寻址:隐含的专用寄存器是基址寄存器
    形式地址A通常是一个偏移量,通常是无符号整数
    优点:可以扩大寻址能力,同形式地址相比,基址寄存器的位数可以设置的很长,从而可以在较大的存储空间中寻址
    变址寻址:隐含的专用寄存器是变址寄存器
    目的:实现程序块的规律性变化
    如:有一个字符串存储在以X为首地址的连续主存单元中,只需要将首地址X作为指令中的形式地址A,而在变址寄存器中指出字符的 序号,便可以访问字符串的任一字符
    ⑧、段寻址
    在Intel 8086/8088微机中,ALU16位运算,但其内存容量可到1M,地址有20位。将整个1M空间存储器以64k为单位划分成若干段,在形成20位物理地址时,段寄存器中的16位数会自动左移4位,然后与16位偏移量相加
    ⑨、堆栈寻址
    堆栈分为寄存器堆栈和存储器堆栈,都需要一个隐式或显式的堆栈寄存器来指明栈顶的地址

    四、典型指令
    1、指令分类
    一个较完善的指令系统应当包括以下几类指令:
    ①、数据处理
    ②、数据存储
    ③、数据传送
    ④、程序控制
    (1)、数据传送指令
    主要用来实现主存和寄存器之间、寄存器和寄存器之间的数据传送
    ①、一般传送指令:MOV
    ②、数据交换指令:XCHG
    ③、堆栈操作指令:PUSH、POP
    (2)、算术运算指令
    用于定点或浮点算术运算
    ADD、ADC、INC、SUB、DEC、IMUL、IDIV、CMP
    (3)、逻辑运算指令
    包括逻辑运算和移位等指令
    NOT、AND、OR、XOR、TEST
    (4)、程序控制指令
    用于控制程序的执行方向,并使程序具有测试、分析与判断的能力
    ①、无条件转移:JMP
    ②、条件转移:JC、JZ、JN、JP、JV
    ③、转子程序:CALL
    ④、子程序返回:RET
    ⑤、中断返回:IRET
    (5)、输入输出指令
    实现外部设备和CPU之间、外围设备与外围设备之间的信息传送,不是所有机器都有输入输出指令
    IN AX,n
    OUT n,AX
    (6)、字符串处理指令
    可对大量字符串进行处理,包括字符串传送、转换、替换等
    (7)、特权指令
    具有特殊权限的指令。这类指令只用于操作系统或其他系统软件,一般不直接提供给用户使用。在多用户、多任务的计算机系统中必不可少。主要用于系统资源的分配和管理
    (8)、其他指令
    状态寄存器置位/复位指令、测试指令、暂停指令、空操作指令

    五、RISC特点
    ①、选取使用频率最高的一些简单指令,指令条数少
    ②、指令长度固定,指令格式简单,大部分运算指令为三地址指令
    ③、只有存数/取数指令可以访问存储器,其余指令操作都在寄存器之间进行
    ④、简单的寻址方式
    ⑤、设置大量寄存器
    ⑥、每一个机器周期完成一条机器指令

    更多相关内容
  • 指令系统之指令格式

    千次阅读 2020-08-13 09:51:10
    一、指令格式 什么是指令? 指令其实就是机器语言0和1组成的语句,指令可以操控硬件来实现某种基本功能。多个指令组成的系统就叫指令系统。 指令系统一般和硬件设计耦合比较高,硬件一般跟随指令来设计,所以...

    一、指令格式

     

    • 什么是指令?

    指令其实就是机器语言0和1组成的语句,指令可以操控硬件来实现某种基本功能。多个指令组成的系统就叫指令系统。

    指令系统一般和硬件设计耦合比较高,硬件一般跟随指令来设计,所以不同的硬件,同一套指令系统是不能兼容的(同一个厂商制作的硬件可能会支持)。

    • 指令格式

    一条指令就是机器语言的一个语句,它是一组有意义的二进制代码。

    一条指令通常由操作码地址码来组成:

    指令格式
    图 1 指令格式

    上图表示的只是一个抽象的概念,并没有指出其中具体的内容。下面举个实际的例子:

    图 2 指令格式
    图 2 指令格式

    图2是A1与A2操作后将结果放在A3中,A4是下一条指令的地址,以便当前指令执行完后继续执行下一条指令。简化后就是:A1 (OP) A2 -> A3, A4=.....

    • 地址指令

    上面说的指令格式其实就叫四地址指令,因为有四个地址。一个地址就是一个二进制串。

    OP是整条指令需要完成的功能,后面四个是主存中取的地址。假设这条四地址指令为OP(00000000) A1( 000001) A2( 000010) A3(占位,存放结果位) A4( 000100)

    设OP=00000000 代表“+”法操作,A1=000001,A2=000010, A3=000001 + 000010 = 000011,A4=000100,那么执行的过程如下图:

    图 3 指令执行过程
    图 3 指令执行过程

    指令对应主存中的内容为了识别方便,采用了16进制表示。

    假设指令字长为32位,操作码占8位,4个地址码字段各占6(32-8=24,24/4=6)位。设存储字长为32位,即4Bit。那么A1可直接表示2^6 = 64个不同位置。一条指令的执行(假设每个地址都是主存地址):

    1. 取指令 访问1次 (假设指令字长=存储字长,为了一次就可以取完)
    2. 取2个操作数 访存2次
    3. 存回结果 访存1次

    共计4次

     

    二、指令寻址方式

     

    上面介绍了四地址指令,那么可不可以省点地址呢?上面的情况是指令和地址存放在一起,如果我们把指令归为一类,操作地址归为一类,是不是就可以不需要下一个指令地址呢?

    图 4 程序计数器
    图 4 程序计数器

     

    有了程序计数器单元的加入,我们的指令变得精简和容易了。指令的下一条地址可以根据地址位顺位移动即可,方便查找;我们也不需要每次重复的单独给出指令地址空间,来存放下一条指令了。经过这样优化以后,就变成了“三地址指令”格式了。

    寻址范围

    上面说指令格式时说过,设指令字长及存储字长均为32位,操作码占8位。

    图 5 四地址指令
    图 5 四地址指令

    4个地址码字段各占6位(32-8=24,24/4=6),指令操作数直接寻址范围为2^6=64,完成一条指令需要访存4次。

    图 6 三地址指令
    图 6 三地址指令

    因为有了“程序计数器”,可以省略下一个指令地址存放空间。3个地址各占8位(32-8 = 24,24/3 =8),指令操作数直接寻址范围为2^8=256,完成一条指令需要访存次数还是4次(取指令,取A1,取A2,结果存回A3)

    图 7 二地址指令
    图 7 二地址指令

    二地址指令是A1既可以当操作数也可以当结果,是比较常见的一种格式。由于又少了一位地址,2个地址各占12位(32-8=24,24/2=12),指令操作数的直接寻址范围为2^12=4096,完成一次指令需要访存4次。

    图 8 一地址指令
    图 8 一地址指令

    一地址指令有2种情况,

    第一种:比如加1、减1、取反、求补等,完成一次指令需要访存3次;

    第二种:自身与ACC(寄存器)操作,完成一次指令需要访存2次(寄存器不是主存,所以不算访存次数)。

    这个时候除了操作码,所有的地址都能用于寻址了,1个地址占24位,指令操作数的直接寻址范围为2^24=16777216。

    图 9 零地址指令
    图 9 零地址指令

     

    三、指令的设计

    以上的5种指令设计就是地址码的设计,在减少地址的情况下并没有改变地址的长度,这种指令集的结构叫定长指令字结构(指令长度固定)。如果随着地址码的减少,我们改变了指令字的长度,就叫做变长指令字结构(指令长度不等)。

    定长指令字和变长指令字结构看的是整条指令的长度。操作码也有定长操作码(n位->2^n条指令)和扩展操作码(操作码长度可变)。我们需要关注的是操作码而不是整条二进制的数量变化。

    扩展操作码(不定长操作码)是变长操作码最常见的一种,扩展操作码是需要设计的。

    图 10 扩展操作码
    图 10 扩展操作码

    举例:

    指令字节长度为16位:前4位为基本操作码字段OP,另有3个4位长的地址字段A1、A2和A3。4位基本操作码若全部用于三地址指令,则有2^4=16条指令范围组合。但是至少需要留出一位做为扩展操作码使用,即三地址指令为15条,依次类推,见图10。

    操作码的长度在变化,如果把1111在三地址指令中被占用了,在二地址指令中就没法区分是操作码还是操作数地址码了。所以在每个高地址指令中留出一位用于低地址指令中使用,4变8,8变12……即是前面留出的一位用做操作码,读取到这一位就知道是操作码,那么就继续往后寻址,这样就实现了扩展操作码了。那么我们想一想,能不能上层多留几位来作为下层的前缀操作码呢?

    在设计扩展操作码指令格式时,必须注意以下两点:

    1. 不允许短码是长码的前缀,即短操作码不能与长操作码的前面部分的代码相同。
    2. 各指令的操作码一定不能重复。

    通常情况下,对使用率较高的指令,分配较短的操作码,对使用频率较低的指令,分配较长的操作码,从而尽可能减少指令译码和分析的时间。具体可以参考哈夫曼编码,这里就不再详细叙述了。

    对于留多位是可以的,只是需要注意以上2点。这里有个公式:设地址长度为n,上一层留出m种状态,下一层可扩展出m*2^n种状态。

    图 11 不定长操作码设计
    图 11 不定长操作码设计

     

    四、总结

    操作码是指出指令中该指令应该执行什么性质的操作和具有何种功能。

    操作码是识别指令、了解指令功能与区分操作数地址内容的组成和使用方法等的关键信息。例如,指出是算术运算,还是减运算;是程序转移,还是返回操作。

    操作码分类

    定长操作码:在指令字的最高位部分分配固定的若干位(定长)表示操作码。

    优点:简化计算机硬件设计,提高指令译码和识别速度;

    缺点:指令数量增加时会占用更多固定位,留给表示操作数的地址位数受限。

    扩展操作码(不定长操作码):全部指令的操作码字段的位数不固定,且分散放在指令字的不同位置上。

    优点: 对应定长操作码的缺点,在指令字长有限的前提下仍保持比较丰富的指令条种类;

    缺点:增加了指令译码和分析的难度,使控制器的设计复杂化。

    展开全文
  • RISC-V 指令格式和6种基本整数指令

    万次阅读 多人点赞 2021-09-07 09:22:41
    指令格式是指令使用二进制编码表示的结构形式,一般一条指令分为操作码和地 址码两部分: 一、操作码 操作码表示指令的属性功能和执行的指令类型。操作数对应的二进制位数决定了计算机能够实现的最大指令数目。例如...

    指令格式是指令使用二进制编码表示的结构形式,一般一条指令分为操作码和地址码两部分:

    在这里插入图片描述

    一、操作码

    操作码表示指令的属性功能和执行的指令类型。操作数对应的二进制位数决定了计算机能够实现的最大指令数目。例如,操作码是 7 位的二进制码,计算机能够实现的最大指令数目是 128(2^7)。操作码根据二进制位数是否具有可变性将其细分为固定长度和可变长度两种。

    • 固定长度操作码就是保持二进制位数不变,所有指令的操作码长度都等于某一固定值,并且它们必须在一个字段中。它的优点主要有:规整的指令格式,简化的底层硬件设计,非常短的指令译码时间,提高了计算机系统的整体性能。但是指令的编码效率低,具有很大的信息的冗余度,使代码的总长度大大增加,可扩展性差。RISC- V 采用的方案就是固定长度操作码。

    • 可变长度操作码,也被称作扩展操作码,它是对相关操作码的扩展,可以对操作码的二进制长度进行改变和重新设置,并且可同时存在于多个字段中。可变长度的操作码通常会将特定的字段作为对应的操作码,而剩余的指令部分,会使用扩展的方式对应到地址码。

    二、地址码

    地址码的功能是不同于操作码的,地址码的主要功能是用来表明指令操作的对象,获得被操作对象的地址、操作数的存储地址以及寄存设备地址等。地址码的结构比操作码要更复杂的多,主要包括存储源操作数的地址、存储结果的目的操作数地址、以及将要跳转链接的下一条指令的地址。下一条指令的地址一般都是隐式存在的,必须通过计算分析才能够得到。根据一条指令中操作数地址数量,将地址码划分成以下几种类型。

    1、零地址码

    零地址码的指令,仅仅只有一个操作码而没有地址码,其指令格式如下图所示,op代表操作码。零地址码指令无须先设置对应的操作数,这有可能是事先已经设置好了操作数。例如空操作、停机等指令。

    在这里插入图片描述

    2、一地址码

    一地址码的指令,只有一个存储操作数的地址,也是最终处理结果的保存地址, 它也被称作单操作数指令。其指令格式如下图所示,op 代表操作码,rs1 代表操作数地址。例如自增运算,在处理完该地址的操作数之后,将最终处理结果存回原来的地址中。

    在这里插入图片描述

    3、二地址码

    二地址码的指令,也被称作双操作数指令,是当前阶段计算机系统中应用最广泛的。其指令格式如下图所示,op 是操作码,rs1 表示源操作数地址和最终处理结果的存储目的地址,rs2 表示另外一个源操作数地址。

    在这里插入图片描述

    4、三地址码

    三地址码的指令,具有三个地址存放操作数。指令格式如下图所示,op 代表操作码,rs1 代表源操作数地址,rs2 代表另外一个源操作数地址,rd 代表目的操作数地址即存放处理结果的地址。

    在这里插入图片描述

    三、RISC-V六种基本指令格式

    RISC-V 指令格式是一个典型的三操作数,7 位操作码的指令格式。RISC-V 指令集具有六种基本指令格式(R/I/S/B/U/J),如下图所示:

    在这里插入图片描述

    • 其中 opcode 表示 7 位指令操作码,其作用是区分不同的指令;
    • funct3 表示 3 位 的功能码,funct7 表示 7 位的功能码,它们可以辅助区分不同种类的指令;
    • rs1 和 rs2表示两个 5 位的源寄存器;
    • rd 是 5 位的目的寄存器,指令运算的结果就存储 rd 中;
    • imm 代表不同长度的立即数,可直接作为操作数使用。

    6 种基本指令格式具体介绍如下:

    1、R-typed

    R-typed 指令是最常用的运算指令,具有三个寄存器地址,每个都用 5bit 的数表示。指令的操作由 7 位的 opcode、7 位的 funct7 以及 3 位的 funct3 共同决定的。R-typed 是不包含立即数的所有整数计算指令,一般表示寄存器-寄存器操作的指令。

    2、I-typed

    I-typed 具有两个寄存器地址和一个立即数,其中一个是源寄存器 rs1,一个是目的寄存器 rd,指令的高 12 位是立即数。指令的操作仅由 7 位的 opcode 和 3 位的funct3两者决定。值得注意的是,在执行运算时需要先把 12 位立即数扩展到 32 位之后再进行运算。I-typed 指令相当于将 R-typed 指令格式中的一个操作数改为立即数。一般表示短立即数和访存 load 操作的指令。

    3、S-typed

    S-typed 的指令功能由 7 位 opcode 和 3 位 funct3 决定,指令中包含两个源寄存器和指令的imm[31:25]和 imm[11:7]构成的一个12位的立即数,在执行指令运算时需要把12 位立即数扩展到 32 位,然后再进行运算,S-typed 一般表示访存 store 操作指令,如存储字(sw)、半字(sh)、字节(sb)等指令。

    4、B-typed

    B-typed 的指令操作由 7 位 opcode 和 3 位 funct3 决定,指令中具有两个源寄存器和一个 12 位的立即数,该立即数构成是指令的第32位是 imm[12]、第7位是imm[11]、25 到 30 是 imm[10:5]、8 到 11 位是 imm[4:1],同样的,在执行运算时需要把12 位立即数扩展到 32 位,然后再进行运算。B-typed 一般表示条件跳转操作指令,如相等(beq)、不相等(bne)、大于等于(bge)以及小于(blt)等跳转指令。

    5、U-typed

    U-typed 的指令操作仅由 7 位 opcode 决定,指令中包括一个目的寄存器 rd 和高20 位表示的 20 位立即数。U-typed 一般表示长立即数操作指令,例如 lui 指令,将立即数左移 12 位,并将低 12 位置零,结果写回目的寄存器中。

    6、J-typed

    J-typed 的指令操作由 7 位 opcode 决定,与 U-typed 一样只有一个目的寄存器 rd和一个 20 位的立即数,但是 20 位的立即数组成不同,即指令的 31 位是 imm[20]、 12 到 19 位是 imm[19:12]、20 位是 imm[11]、21 到 30 位是 imm[10:1],J-typed 一般表示无条件跳转指令,如 jal 指令。

    从基本指令格式可知,RISC-V 是具有高性能低功耗的更简洁的指令集架构设计。

    • 首先,RISC-V 指令仅有以上 6 种基本指令格式,并且每个指令长度都是 32 位的,不像 X86-32 和 ARM-32 那样具有很多指令格式,这大大缩短了指令的解码时间。
    • 第二,RISC-V 指令格式具有三个寄存器地址,不像 X86 那样使源操作数和目的操作数共享一个地址,它无须多使用一条 move 指令来完成存储目的寄存器的值。
    • 第三,对于所有的 RISC-V 指令,其读写的寄存器标识符需要存放在同一位置,这使得指令在执行解码操作前,就能提前访问寄存器的值。
    • 第四,指令格式中的立即数总是符号扩展的,并且指令的最高位是符号位,因此可以在解码前执行立即数的符号扩展操作。

    这说明RISC-V 是优秀的、简洁的指令集架构,因此,RISC-V 指令集架构将会不断地发展,逐渐成为最主流的指令集架构。

    四、6种基本整数指令集

    RISC-V 基本整数指令集是每个专用指令集所必须具有的,其主要是为了保证基本的功能要求和所有的程序正常运行,以 32 位为例具体介绍如下:

    1. 算数运算指令

    RISC-V 的 32 位基础整数指令集(RV32I)具有 7 条算数运算指令,分别是 ADDI、 SLTI、SLTIU、ADD、SUB、SLT 和 SLTU。它们的指令格式如下图所示:
    在这里插入图片描述
    算数运算指令使用两种类型的指令格式,一种是寄存器-立即数操作的 I-typed 指令格式,一种是寄存器-寄存器操作的 R-typed 指令格式。对于算数运算指令的两种指令格式,都具有目标寄存器 rd。R-typed 是 add、sub、slt 和 sltu,I-typed 是 addi、slti和 sltiu

    • addi的功能是将立即数和 rs1 相加并写入 rd 中;
    • add是将 rs1 和 rs2 相 加并写入 rd 中;
    • sub是 rs1 减去 rs2 并写入 rd 中;
    • slt 和 sltu是有符号和无符号的比较指令,即 rs1 小于 rs2 则置 1,否者置 0;
    • slti 和 sltiu的功能是 rs1 小于立即数则置 1,否者置 0。
    2. 移位指令

    RV32I 具有 6 条移位指令,分别是 SLLI、SRLI、SRAI、SLL、SRL 和 SRA,其指令格式如下图所示,其中 shamt 代表偏移量也就是移位量。
    在这里插入图片描述
    移位指令也是使用 R-typed 和 I-typed 两种指令格式,R-typed 的是 sll、srl 和 sra, I-typed 的是 slli、srli 和 srai

    • slli的功能是立即数逻辑左移,rs1 左移 shamt 位,空位填 0 并写入 rd 中;
    • srli是立即数逻辑右移,rs1 右移 shamt 位,空位填 0 并写入rd 中;
    • srai立即数算数右移,rs1 右移 shamt 位,空位填 rs1 的最高位并写入 rd 中;
    • sll 是逻辑左移,rs1 左移 rs2 位,空位填 0 并写入 rd 中;
    • srl是逻辑右移,rs1 右移 rs2位,空位填 0 并写入 rd 中;
    • sra是算数右移,rs1 右移 rs2 位,空位填 rs1 的最高位并写入 rd 中。
    3. 逻辑操作指令

    RV32I 具有 6 条逻辑操作指令,分别是 XORI、ORI、ANDI、XOR、OR 和 AND,其指令格式如下图所示:
    在这里插入图片描述
    逻辑操作指令也是使用 R-typed 和 I-typed 指令格式,R-typed 为 xor、or 和 and, I-typed 为 xori、ori 和 andi

    • xori是立即数异或,rs1 和立即数按位异或并写入 rd中;
    • ori是 rs1 和立即数按位取或并写入 rd 中;
    • andi是 rs1 和立即数位与并写入 rd 中;
    • xor异或,rs1 和 rs2 按位异或并写入 rd 中;
    • or是 rs1 和 rs2 按位取或并写入 rd 中;
    • and是 rs1 和 rs2 位与并写入 rd 中。
    4. 加载和存储指令

    RV32I 具有 8 条加载和存储指令,分别是 LB、LH、LW、LBU、LHU、SB、SH 和 SW,其指令格式如下图所示:
    在这里插入图片描述
    RV32I 是一个加载-存储结构,只有加载-存储类指令可以访问存储器,在寄存器
    和存储器之间进行数据传输。加载类指令使用的是 I-typed 指令格式,存储类指令使
    用的是 S-typed 指令格式

    • lb 是字节加载,读取一个字节写入 rd 中;
    • lh 是半字加载,读取两个字节写入 rd 中;
    • lw 是字加载,读取四个字节写入 rd 中;
    • lbu 是无符号字节加载,读取一个字节写入 rd 中;
    • lhu 是无符号半字加载,读取两个字节写入 rd中;
    • sb 是存字节,把 rs2 的低位一字节存入地址 rs1+立即数中;
    • sh 是存半字,把 rs2的低位两字节存入地址 rs1+立即数中;
    • sw 是存字,把 rs2 的低位四字节存入地址 rs1+立即数中。
    5. 控制转移指令

    RV32I 具有 8 条控制转移指令,分别是 BEQ、BNE、BLT、BGE、BLTU、BGEU、 JAL 和 JALR,其指令格式如下图所示:
    在这里插入图片描述
    控制转移指令分为条件分支跳转和无条件跳转链接两类指令,条件分支跳转使用
    的是 B-typed 格式,无条件跳转中 jalr 和 jal 使用的分别是 I-typed 格式和 J-typed 格

    • beq 是相等条件分支,rs1 和 rs2 的值相等时,把 pc 的值设置成当前值+偏移值;
    • bne 是不等条件分支,rs1 和 rs2 的值不等时,把 pc 的值设置成当前值+偏移值;
    • blt 是小于条件分支,rs1 小于 rs2 的值时,把 pc 的值设置成当前值+偏移值;
    • bge是大于等于条件分支,rs1 大于等于 rs2 的值时,把 pc 的值设置成当前值+偏移值;
    • bltu 是无符号小于条件分支;
    • bgeu 是无符号大于等于条件分支;
    • jal 是跳转并链接,把 pc 设置成当前值+偏移值,然后将 pc+4 当做下一条指令的地址存入 rd 中;
    • jalr 跳转并链接,把 pc 设置成 rs1+偏移值,然后将 pc+4 写入 rd 中。
    6. CSR 操作指令

    RV32I 具有 6 条 CSR 操作指令,分别是 CSRRW、CSRRWI、CSRRS、CSRRSI、 CSRRC 和 CSRRCI。CSR 操作指令的指令格式如下图所示,其中 csr 表示 CSR 寄存器的地址,zimm 表示零扩展立即数。
    在这里插入图片描述
    CSR 操作指令都是使用 I-typed 指令格式

    • csrrw 是读后写控制状态寄存器,先将 csr 的值记为 t,把 rs1 的值写入 csr,再将 t 写入 rd 中;
    • csrrwi 是立即数读后写控制状态寄存器,将 csr 的值写入 rd 中,再将立即数写入 csr 中;
    • csrrs 是读后置位控制状态寄存器,先将 csr 的值记为 t,让 t 和 rs1 取或并写入 csr,再将 t 写入 rd 中;
    • csrrsi 是立即数读后置位控制状态寄存器,先将 csr 的值记为 t,把 t 和立即数 zimm 取或并写入 csr,再将 t 写入 rd 中;
    • csrrc 是读后清除控制状态寄存器,先将 csr 的值记 为 t,把 t 和 rs1 位与并写入 csr,再将 t 写入 rd 中;
    • csrrci 是立即数读后清除控制状态寄存器,csr 的值记为 t,把 t 和立即数 zimm 位与并写入 csr,再将 t 写入 rd 中。
    展开全文
  • 指令系统——指令格式(详解)

    万次阅读 多人点赞 2020-06-08 20:52:34
    三、指令格式 一条指令就是机器语言的一个语句,它是一组有意义的二进制代码。 一条指令通常要包括操作码字段和地址码字段两部分: A1这个地址里面的值 与 A2这个地址里面的值 执行OP操作后,将结果存到A3这个地址...

    一、总览

    在这里插入图片描述

    二、指令的定义

    指令(又称机器指令):
    是指示计算机执行某种操作的命令,是计算机运行的最小功能单位
    一台计算机的所有指令的集合构成该机的指令系统,也称为指令集
    注:一台计算机只能执行自己指令系统中的指令,不能执行其他系统的指令。
    在这里插入图片描述

    三、指令格式

    一条指令就是机器语言的一个语句,它是一组有意义的二进制代码
    一条指令通常要包括操作码字段地址码字段两部分:
    在这里插入图片描述
    A1这个地址里面的值 与 A2这个地址里面的值 执行OP操作后,将结果存到A3这个地址中

    四、指令格式-地址码

    在这里插入图片描述
    在这里插入图片描述
    指令含义:(A1)OP(A2)——>A3,A4=下一条将要执行指令的地址
    设指令字长为32位,操作码占8位,4个地址码字段各占6位
    设存储字长为32位,即4B

    • Ai可直接表示2^6=64个不同的位置
    • 一条指令的执行(假设每个地址都是主存地址):
      取指令访存1次(假设指令字长=存储字长)
      取两个操作数访存2次
      存回结果访存1次
      共访存4次
      在这里插入图片描述

    设指令字长及存储字长均为32位,操作码占8位:

    定长指令字结构:指令长度固定 指令字长=存储字长
    变长指令字结构:指令长度不等 按字节的倍数变化

    定长操作码:n位——>2^n条指令
    扩展操作码:操作码长度可变
    在这里插入图片描述
    指令含义:(A1)OP(A2)→A3,A4=下一条将要执行指令的地址
    4个地址码字段各占6位,指令操作数直接寻址范围为2^6=64;完成一条指令需要访存4次在这里插入图片描述
    指令含义:(A1)OP(A2)→A3
    3个地址码字段各占8位,指令操作数直接寻址范围为2^8=256;完成一条指令需要访存4次
    在这里插入图片描述
    指令含义:(A1)OP(A2)→A1
    2个地址码字段各占12位,指令操作数直接寻址范围为2^12=4K;完成一条指令需要访存4次
    在这里插入图片描述
    指令含义:

    1. OP(A1)→A1,如加1、减1、取反、求补等,完成一条指令需要访存3次
    2. (ACC)OP(A1)→ACC,隐含约定的目的地址为ACC完成一条指令需要访存2次,1个地址码字段占24位,指令操作数直接寻址范围为2^24=16M
      注:ACC为累加器
      在这里插入图片描述
      指令含义:
      1.不需要操作数,如空操作、停机、关中断等指令
      2.堆栈计算机,两个操作数隐含存放在栈顶和次栈顶,计算结果压回栈顶

    小结:
    当用一些硬件资源代替指令字中的地址码字段后

    1. 可扩大指令的寻址范围
    2. 可缩短指令字长
    3. 可减少访存次数

    五、扩展操作码

    在设计扩展操作码指令格式时,必须注意以下两点:
    1)不允许短码是长码的前缀,即短操作码不能与长操作码的前面部分的代码相同。
    2)各指令的操作码一定不能重复。
    通常情况下,对使用频率较高的指令,分配较短的操作码;对使用频率较低的指令,分配较长的操作码,从而尽可能减少指令译码和分析的时间。也还有其他扩展操作码设计方法。
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    六、指令操作码

    操作码指出指令中该指令应该执行什么性质的操作和具有何种功能。
    操作码是识别指令、了解指令功能与区分操作数地址内容的组成和使用方法等的关键信息。例如,指出是算术加运算,还是减运算;是程序转移,还是返回操作。
    操作码分类:

    1. 定长操作码:在指令字的最高位部分分配固定的若干位(定长)表示操作码。
    • 一般n位操作码字段的指令系统最大能够表示2”条指令。
    • 优:定长操作码对于简化计算机硬件设计,提高指令译码和识别速度很有利;
    • 缺:指令数量增加时会占用更多固定位,留给表示操作数地址的位数受限。
    1. 扩展操作码(不定长操作码):全部指令的操作码字段的位数不固定,且分散地放在指令字的不同位置上。
    • 最常见的变长操作码方法是扩展操作码,使操作码的长度随地址码的减少而增加,不同地址数的指令可以具有不同长度的操作码,从而在满足需要的前提下,有效地缩短指令字长。
    • 优:在指令字长有限的前提下仍保持比较丰富的指令种类;
    • 缺:增加了指令译码和分析的难度,使控制器的设计复杂化。

    七、操作类型

    在这里插入图片描述

    八、总结

    在这里插入图片描述

    展开全文
  • MIPS指令表示之指令格式

    千次阅读 2021-05-13 18:59:44
    一、指令格式 1、R格式中各字段数值的含义 例:add $8,$9,$10 想要把它表示位字的形式,则根据字段的划分,每个字段的值分别如下: opcode=0 (参见附录) funct=32(参见附录) rd=8(目的) rs=9(首操作数...
  • 程序员考试指令格式例题分析一

    千次阅读 2021-07-25 03:21:25
    1.指令格式例题分析一条指令的内容,应该包括该指令的操作运算种类和指定参加运算的操作数放在什 么地方,有时还应该给出下条指令的地址,保证程序可以连续运行下去。【例1-112】指令字长应该如何决定?指令应该包括...
  • 汇编(一)——ARM指令格式

    千次阅读 2022-03-24 22:14:08
    ARM指令格式 ARM采用的是32位架构 ARM约定: Byte(字节):8 bits Halfword(半字):16bits (2 bytes) Word(字):32 bits (4 byte) 大部分ARM core提供: ARM指令集(32-bits) Thumb 指令集(T变种)(16-bit) ARM...
  • 指令格式举例

    千次阅读 2020-04-22 11:29:17
    RX格式是二地址格式的寄存器-存储器型指令。 一个操作数在寄存器当中,另外一个操作数在存储区当中,其有效地址由变址(X)和基址(B)寻址方式求得。 可以完成(R1)OP M[(X)+(B)+ D] --> R1的操作。 RS...
  • 计算机组成原理4.1指令格式

    千次阅读 2021-05-10 17:44:05
    4.1.1指令的基本概念和指令的基本格式 操作码:指明CPU进行什么操作。 地址码:知指明CPU对谁进行操作。 PC:程序计数器,每执行一条指令会+1指向下一条指令指令的概念和基本格式:是指一台计算机执行某种操作的...
  • 指令格式

    千次阅读 2020-09-12 17:29:10
    计算机原理 6.12 微指令格式 1、微指令设计原则 有利于缩短微指令字长度 有利于减少控制存储器容量 有利于提高微程序执行速度 有利于对微指令进行修改 有利于提高程序设计的灵活性 2、微指令格式(直接表示法) &...
  • 计算机组成原理——指令格式设计

    千次阅读 2021-07-06 11:00:16
    将OP的第16条没用上的指令1111作为扩展标识,那么加上扩展的A1,指令编码的全集为:1111-000000 —— 1111-111111,一共是2^6=64条,一地址指令用去34条,还剩30条。 对于零地址指令,再讲A2作为扩展位。那么通过和...
  • 指令格式和寻址方式

    千次阅读 2020-03-09 13:48:56
    指令格式: 单词–>指令 单词表–>指令集 指令系统 解释:一台计算机所有机器指令集合 指令系统设定的基本要求: ·完整性 ·有效性 ·规整性 ·兼容性 复杂指令计算机:CSIC 特点: 1.指令系统复杂; 2....
  • 计算机组成原理之指令格式的分析

    千次阅读 2021-04-18 15:49:43
    记录一道例题
  • 指令系统 —— 指令格式

    千次阅读 2019-07-30 11:08:25
    一、指令的定义 指令是指示计算机执行某种操作的命令,是计算机运行的最小功能单位。一台计算机的所有指令的集合构成该机的指令系统,也称指令集。 指令的长度是指一条指令中所包含的二进制代码的位数,因为主存一般...
  • 指令系统——扩展操作码指令格式

    千次阅读 2021-05-14 21:37:36
    文章目录扩展操作码扩展操作码举例设计扩展操作码需注意:设计扩展操作码例题:指令操作码操作码分类:定长操作码:扩展操作码(不定...定长指令字结构+可变长操作码 → 扩展操作码指令格式(即不同地址数的指令使用不同
  • RISC-V 指令格式

    千次阅读 多人点赞 2020-03-11 00:37:18
    计算机指令即:汇编指令代码 计算机指令是能够被计算机识别并执行的二进制代码,它规定了计算机能完成的某种操作; 计算机指令通常由两部分操作:操作码和操作数(地址码)。 操作码 操作数(地址码) ...
  • 计算机的指令格式

    千次阅读 2020-04-02 09:20:42
    首先介绍一下 指令格式。 我们必须了解什么是指令? 汇编语言的程序是不能直接执行的 必须转换为机器指令才能执行。所以指令就相当于软硬件的交界面。而指令系统是一台计算机的所有指令的集合构成该机的指令系统,也...
  • 指令格式之操作码地址码

    万次阅读 多人点赞 2020-04-14 06:24:21
    指令格式之操作码地址码 一、指令格式 指令:操作码字段 地址码字段 指令字(简称指令):表示一条指令的机器字。 指令格式:是指令自用二进制代码表示的结构形式,由操作码字段和地址码字段组成。 操作码字段:表征...
  • 指令格式 又称机器指令,是指计算机执行某种操作的命令,是计算机运行的最小功能单位 一台计算机的所有指令的集合构成指令集 一台计算机只能执行自己指令系统的指令,不能执行其他系统的指令 指令格式——地址...
  • 8086指令格式

    千次阅读 2019-10-16 19:47:18
    8086指令格式 1.组成 8086的指令使用的是1-6Byte(s)的变长指令。由3个部分组成: 操作码(1 Byte) 操作数(寻址方式+寄存器/内存地址)(1-5 Byte(s)) 举几个例子,下图是1Byte-6Bytes不同长度指令的划分: ...
  • 文章目录一:指令和指令格式二:指令的分类(1)按操作数地址码的数目不同分类A:零地址指令B:一地址指令C:三地址指令D:四地址指令(2)按操作码长度分类(3)按操作类型分类 一:指令和指令格式 指令(机器指令...
  • 计算机组成原理——指令格式

    万次阅读 多人点赞 2019-06-01 02:24:00
    计算机是通过执行指令来处理各种数据的。为了指出数据的来源、操作结果的去向及所执行的操作,一条指令必须包含下列信息: (1)操作码(OP),具体说明了操作的性质及功能 (2)第一操作数的地址A1A_{1}A1​ (3)第二...
  • 计算机组成原理:4.1 指令格式

    千次阅读 2020-06-10 17:31:32
    4.1 指令格式 思维导图 基本概念 指令: 是指示计算机执行某种操作的命令,计算机运行的最小功能单位 一条指令通常包括操作码字段和地址码字段两部分 指令系统(指令集): 一台计算机的所有指令的集合 指令系统...
  • 指令格式

    千次阅读 2017-12-22 15:09:08
    指令格式包括操作码和地址码,操作数的地址,操作结果的存储地址和下一条指令的地址。
  • RV32I 六种指令格式

    千次阅读 2020-06-18 17:09:17
    RV32I 有六种基本指令格式,分别是:用于寄存器-寄存器操作的R 类型指 令,用于短立即数和访存load 操作的I 型指令,用于访存store 操作的S 型指 令,用于条件跳转操作的B 类型指令,用于长立即数的U 型指令和用于无...
  • 指令格式设计

    千次阅读 2019-10-12 13:02:18
    问应采用什么样的指令格式?指令字长最少应为多少位?执行一条指令最多要访问多少次主存? 解: 根据题目条件,指令格式如下: OP=6位 (寻址方式)X1=X2=X3=3位,共9位 (源操作数)A1=A2=11位,(目的操作数)...
  • 例如,送往控制器去的字是指令,而送往运算器去的字就是一个数。 在计算机中作为一个整体被存取、传送、处理的二进制数字符串叫做一个字或单元,每个字中二进制位数的长度,称为字长。一个字由若干个字节组成,不同...
  • 组成原理——指令格式(地址码)

    千次阅读 2020-06-15 10:50:27
    指令格式: 解释:操作码:OP 第一操作数地址A1 第二操作数地址A2 结果地址A3 功能描述: (A1)OP (A2)→A3 ;(PC)+1→PC 解释: A1内的数据和A2内的数据进行某种操作(OP)把操作结果放到A3这个地址单元中 注:A1...
  • 指令格式 操作码 寻址特征 形式地址A 形式地址:指令字中的地址 有效地址:操作数的真实地址 指令字长=存储字长=机器字长 1.立即寻址 形式地址A就是操作数 指令执行阶段不访存,A的位数限制了立即数的范...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 567,974
精华内容 227,189
关键字:

指令格式