一、补充知识:MIPS指令系统
1.1 指令集体系结构
指令集体系结构(Instruction Set Architecture, ISA)是软件和硬件之间接口的一个完整定义。以下是关于指令集体系结构的详细理解:
- 定义与功能:
ISA定义了一台计算机可以执行的所有指令的集合。
每条指令规定了计算机执行什么操作,所处理的操作数存放的地址空间以及操作数类型。
- 规定内容:
ISA规定的内容包括数据类型及格式、指令格式、寻址方式和可访问地址空间的大小。
它还规定了程序可访问的寄存器个数、位数和编号,控制寄存器的定义,I/O空间的编制方式。
中断结构、机器工作状态的定义和切换、输入输出结构和数据传送方式,以及存储保护方式等也属于ISA的规定范畴。
- 软件与硬件的接口:
指令集体系结构是软件和硬件之间的桥梁,它使得软件能够知道如何与硬件进行交互。
通过ISA,软件能够感知到硬件的特性和功能,从而编写出能够高效利用硬件资源的程序。
- 分类:
- 根据其设计理念、指令集的复杂性和架构特点,ISA可以分为几种主要类型。
- 例如,复杂指令集计算机(CISC)拥有大量的指令,这些指令可以执行复杂的高级语言操作,如循环、条件分支等。
- 而精简指令集计算机(RISC)则通过减少指令数量和复杂度来提高指令执行的速度和效率。
- 具体实例:
- 以Pentium II计算机的指令系统为例,其指令系统具有一定典型性。
- Pentium II的指令前缀可能包括用于保证在多处理机环境下以互斥方式共享主存储器的LOCK部分、用于指出在指令中使用哪一个段寄存器的Segment Override、用于指出指令中操作数长度的Operand Size Override等。
- 指令格式中,操作码用于指明操作功能,ModR/M字段和SIB字段用于给出寻址信息。
- 总结:
- 指令集体系结构是计算机设计中至关重要的一个组成部分,它决定了计算机能够执行的操作类型和方式。
- 通过理解ISA,我们可以更好地了解计算机的工作原理,并编写出更加高效、稳定的程序。
1.2 硬件设计四原则
1.3 MIPS指令集概述
1.4 指令的实现
加减指令
内存数据访问指令
l -load s-store w-word b- byte h-halfword
加立即数指令
条件判断指令
逻辑运算指令
第二个字母:l – left r–right
第三个字母:l – logical a – Arithmetic
逻辑右移,左移,都是补0
算术右移,看符号位补1或补0
循环结构
宏指令和指令的关系宏指令、指令(通常指机器指令)之间的关系可以清晰地从以下几个方面进行归纳:
- 定义与属性:
- 宏指令:由若干条机器指令组成的软件指令,它属于软件范畴。宏指令在编译时被处理,通过简单的替换机制,将宏指令展开为实际的代码。宏指令可以包含常见的控制结构、函数调用以及常量定义等,使程序编写更简洁和易读。
- 指令(机器指令):计算机执行某种操作的命令,是计算机运行的最小功能单位。指令又称为机器指令,每一条指令可完成一个独立的算术运算或逻辑运算操作。机器指令介于微指令与宏指令之间。
- 作用与用途:
- 宏指令:主要用于简化程序编写,提高代码的可维护性和可复用性。开发者可以通过定义自己的宏指令,根据具体的需求和应用场景,灵活地定制和优化程序。
- 指令(机器指令):直接由计算机的中央处理器(CPU)执行,控制计算机的基本操作。指令系统是计算机硬件和软件的接口,决定了计算机的功能和性能。
- 关系:
- 宏指令是由多条机器指令组成的,是机器指令的高级抽象。宏指令的编写和使用依赖于具体的指令系统(即机器指令的集合)。
- 指令系统(包括机器指令)是设计计算机的起始点和基本依据,它决定了计算机能够执行的操作和运算,是计算机硬件和软件之间的桥梁。
总结来说,宏指令和指令(机器指令)在计算机系统中各自扮演着不同的角色。宏指令是软件层面的概念,用于简化编程和提高代码效率;而指令(机器指令)则是硬件层面的概念,是计算机执行操作的基本单位。两者相互依赖,共同构成了计算机系统的基础。
比较指令
过程调用
二、指令系统概述
三、指令格式
- OP——操作码
- AC——地址码
3.1 指令字长度
3.2 指令地址码
3.3 指令操作码
四、寻址方式
4.1 指令寻址
4.1.1 顺序寻址
4.1.2 跳跃寻址
4.2 操作数寻址
- D——形式地址
- E/EA——有效地址(既可以是内存也可以是寄存器编号)
- S——实际操作数
- Mode——寻址模式
- (EA)表示访问EA的主存单元和寄存器的内容。
4.2.1 立即寻址
- S = D
4.2.2 寄存器寻址
- EA = D
- S = (EA)
4.2.3 直接寻址
- EA = D
- S = (EA)
4.2.4 间接寻址
- EA = (D)
- S = (EA)
4.2.5 寄存器间接寻址
- EA = (D)
- S = (EA)
4.2.6 相对寻址
- EA = PC + D 注意:这里PC是已经自动加1之后的PC
- S = (EA)
4.2.7 基址/变址寻址
- EA = ® + D
- S = (EA)
4.2.8 堆栈寻址方式
4.2.9 不同寻址方式对比
五、指令类型
六、🍊指令格式设计
6.1 指令设计的注意点
指令一般由操作码和地址码两部分组成。设计指令格式前首先要确定的就是指令的编码格式,在此基础上,还要确定操作码字段和地址码字段的长度及它们的组合形式,以及各种寻址方式的编码方法。
一、 指令编码格式的设计
指令编码格式的设计就是确定指令是采用定长指令格式、变成指令格式还是采用混合编码指令格式。
- 定长指令格式:
- 优点:定长指令结构规整,有利于简化硬件,尤其利于简化指令译码部件的设计。
- 缺点:平均长度长,容易出现冗余码点,不易扩展。
- 当指令集的寻址方式和操作种类很多时,定长编码具有明显的优势。
- 变长指令格式:
- 优点:变成指令结构灵活,能充分利用指令中的每一个字,所以指令码点冗余少,该指令的平均长度短,易于扩展。
- 缺点:指令的格式不规整,不同指令的取指令时间可能不同,控制方式较为复杂。
- 混合编码指令格式:
- 混合编码指令格式是定长和变长指令的结合,它提供若干长度固定的指令字,以期达到既能减少目标代码的长度,又能减低译码复杂度的目标。
二、 操作码的设计 - 需要满足完备性。
- 有时候可以和操作码的拓展结合一下。
三、地址码的设计 - 根据提供的寻址范围来确定,地址码越长,寻址范围往往会更大。
四、寻址方式的设计 - 根据寻址方式的个数来确定Mode的位数,有多个操作数时,最好在每个操作数前面都设置一个Mode
6.2 指令格式设计的具体例子
七、CISC与RISC
八、指令系统举例
8.1 🍊MIPS指令系统(重点)
8.1.1 基本指令格式
- op(操作码):通常为0,表示这是一个R类型指令。
- rs(第一源操作数寄存器):5位,指定第一个源操作数所在的寄存器。
- rt(第二源操作数寄存器):5位,指定第二个源操作数所在的寄存器。
- rd(存放结果的目的寄存器):5位,指定存放操作结果的目的寄存器。
- shamt(位移量):5位,在某些指令中用作位移量。
- funct(功能码):6位,决定具体执行哪种操作。例如,对于add指令,其funct字段的值为32(100000)。
- MIPS将寻址方式与指令的操作码相关联,指令字中没有独立的寻址方式字段。
8.1.2 三种基本指令格式的具体指令
- sll是“Shift Left Logical”的缩写,代表逻辑左移指令。
- jr代表"Jump Register",是MIPS指令集中的一个跳转指令。
- jr指令是MIPS指令集中的一个重要跳转指令,具有无条件跳转、与函数调用密切相关等特点。
- lw指令:rt寄存器存储内存中返回的数据,rs+立即数,计算数据在内存中的地址
- st指令:rt寄存器存储需要写入内存的数据,rs+立即数,计算数据在内存中的地址
- J指令:
- J指令在MIPS汇编语言中表示最简单的跳转指令。
- 当执行J指令时,程序会无条件地跳转到指定的内存地址继续执行。
- 示例:j 1111 表示程序将跳转到地址1111处继续执行。
- JR指令:
- JR指令通常与程序调用函数有关。
- 在程序调用函数之前,需要存储函数返回起始点的地址,这个地址通常存储在MIPS的$ra寄存器中。
- JR指令通常与$ra寄存器一起使用,以在函数调用结束后返回到原来的程序执行点。
- 示例:jr r a 表示程序将跳转到 ra 表示程序将跳转到 ra表示程序将跳转到ra寄存器中存储的地址继续执行,这通常是函数调用的返回地址。
- JAL指令:
- JAL指令(也称为“Jump and Link”)同样用于跳转,但与J指令不同的是,它在跳转的同时将返回调用点的地址存储在$ra寄存器中。
- 这使得在函数调用结束后,程序能够使用JR指令和$ra寄存器返回到原来的执行点。
- 示例:JAL指令的具体使用方式与J指令类似,但会同时更新$ra寄存器的值。
总结:
- J指令用于无条件跳转。
- JR指令用于从函数返回并继续执行原来的程序。
- JAL指令用于函数调用,它跳转的同时保存返回地址,以便后续使用JR指令返回。
8.1.3 MIPS寻址方式
- R型指令只有寄存器寻址。
- I型指令的寻址方式有寄存器寻址,立即数寻址,基址寻址,相对寻址。
- J型指令只有伪直接寻址。
8.2 X86指令系统
8.3 MIPS和X86的比较