胡老师第十周讲义

# 指令系统

4.1指令系统的发展和性能要求

4.1.1指令系统及其发展

image-20211102144832888

基本上是由简单到复杂再精简的过程

arm指令系统使用在手机上面,功效更低,但是能耗更小

x86指令系统使用的pc机上面,功效比较高,但是能耗比较高

mips是濒临倒闭的指令系统

4.1.2指令系统性能的要求

完备性:

用指令系统编写各种程序时,指令系统直接提供的指令足够使用,而不必用软件来实现。

有效性:

利用该指令系统所编写的程序能够在计算机上高
效率运行,主要表现在程序占据存储空间小、执行速度快。

规整性:

规整性包括指令系统的对称性、匀齐性、指令格式和数据格式的一致性 。

兼容性:

系列机各机种之间具有相同的基本结构和共同的基本指令集,低档机上运行的软件可以在高档机上运行,即做到“向下兼容” 。

4.2指令格式

4.2.1指令格式

举一个例子:image-20211102151205933

使用的操作指令如下所示

image-20211102151247199

所以我们可以得出一个结论:指令是由 操作码+地址码 构成的

指令格式指用机器字表示的指令的结构形式,由两部分
组成,即进行何种操作和从存储器的那个单元取数;前者称
为操作码,后者称为地址码。所以指令的一般格式为

image-20211102151351621

4.2.2指令字长度

指令字长度:一个指令字中包含二进制代码的位数
机器字长度:计算机能直接处理二进制数据的位数,他决定了计算机运算精度

于是衍生出了以下概念

单字长指令:指令字长等于机器字长度的指令。

半字长指令:指令字长等于半个机器字长度的指令。

双字长指令:指令字长等于两个机器字长度的指令。

多字长指令:指令字长等于几个机器字长度的指令。

使用多字长指令,目的在于提供足够的地址位来解决访问
内存任何单元的寻址问题。其主要缺点是必须两次或多次访问
内存才能取出一整条指令,降低了的运算速度,又占用了更多
的存储空间。

4.2.3操作码

操作码是而二进制码,和指令之间是强制的一一对应关系,是指令的身份证

一般来说n位操作码就有2n 条指令

image-20211102152925060

操作码的举例

按操作码是否固定:

  • 定长操作码
  • 变长操作码

4.2.4指令助记符

为了便于指令的书写和阅读,并且为了便于存储,所以采用二到三个字母缩写表示指令,我们称为指令助记符

image-20211127095810765

4.2.5地址码

根据一条指令中有几个操作数地址,可将该指令称为几操作数指令或几地址指令。

4.2.5.1三地址指令

举一个简单的例子,一个加法的操作需要三个地址指令,被操作数,操作数,操作结果三个数image-20211102153332271

这个过程

image-20211102153920473

4.2.5.2二地址指令

image-20211102155226670

指令莱尔位数

地址码可以是内存的地址,也可以是寄存器的地址。

于是通过操作数的物理位置,可以把指令分为三种类型
  1. SS类型:(存储器-存储器类型),操作数都放在内存里。(计算机内不允许)
  2. RR类型:(寄存器-寄存器类型),操作数都在寄存器里面,执行效率比较高,
  3. RS类型:(寄存器-存储器类型),

4.2.5.3一地址指令

单操作数指令,通常可以使用的有累加操作指令。,指令字的地址码啊字段所指明的数为操作数,操作结果又放回累加寄存器中

image-20211102155451975

4.2.5.4零地址指令

停机指令,没有没有地址码。

4.3操作数类型

4.3.1一般的数据类型

以奔腾32位x86架构处理器为例:

4.3.2Pentium数据类型

处理器里面的数据结构有:

image-20211102155652930

int,double,string,char

4.4指令和数据的寻址方式

4.4.1指令寻址

顺序寻址

在内存中一条接着一条执行指令

如何让CPU明白什么是顺序执行:使用程序计数器(指令指针寄存器IP)每执行一条指令其值加1,指向下一条欲执行的指令地址。

跳跃寻址

所谓跳跃,是指下条指令的地址不是由程序计
数器PC加1产生,而是将本条指令给出的目标地址装入PC作为
下条指令的地址。

当程序执行循环指令或是转移指令是,

4.4.2操作数寻址

image-20211104080511598

形式地址是指令字中的地址,有效地址是操作数的内存地址,寻址过程就是通过寻址特征把操作数的形式拆吹吹,变换为有效地址的过程。

立即数寻址

image-20211104080735732

直接内存寻址

在指令格式的形式地址A中直接指出C座数的有效地址EA。由于操作数地址直接给呕出而不需要变换。image-20211104081038713

间接内存寻址

可以扩大寻址范围,但是效率很低,基本上已经被淘汰了。

间接寻址的情况下,指令地址字段的形式地址A不是操作数的有效地址EA, A单元的内容才是操作数的有效地址EA。

按推荐使用的方式:寄存器寻址

当操作数不放在内存中,而是放在CPU的通用寄存器中时, 可采用寄存器寻址的方式,此时指令中给出的操作数地址不是内存的地址单元号,而是通用寄存器的编号。image-20211104081454037

寄存器的间接寻址方式

寄存器爱间接寻址方式与寄存器寻址的方式区别在于:指令中的操作数地址只是处的寄存器中的内容不是操作数,而是操作数的有效地址EA。

image-20211104081614564

以上的四种寻址方式是十分基础的寻址方式。所有的指令系统都是支持的。

指令表达

add R0 R3

寻址方式 寻址标记位 简单举例
立即寻址 # mov R0 , #10H
直接内存寻址 mov R0 , 10H
寄存器寻址 Ri mov R0 , R1
寄存器间接寻址 @ mov R0 , @R1

汇编指令:

mov R0 , #0 0->R0

mov R1, #100 100->R1

next add R0, R1 R0+R1->R0

sub R1, #1 R1 -1

JNZ next 循环回去

现在有十个数相加,把他们相加以后的地址放在3000H

image-20211104084826005

可用使用9次加法,但是不够优雅,更加优雅的做法:

R0 部分累加和, R! : 计数值, R2 :地址值

mov R0 ,#0

mov R1 ,#9

mov R2 #2000H

偏移寻址

需要对地址进行运算,把寄存器的地址加上一个偏移量,这个偏移量一般就是指令中的形式地址。

4.4.3基址位寻址方式

基质寻址的方式可以扩大寻址范围。基址寄存器的寄存器位数可以设置为32位甚至是40位左右。形式地址:16位, 基址寄存器:40位,那么有效的寻址位数是40位。image-20211104092549399

在程序的执行
过程中BR内容不变,由操作系统指定,形式地址A可变。

4.4.4变址寻址器

变址寄存器和基址寄存器的计算有效地址的方法十分相像。

image-20211104092814064

IX:在执行一条指令,IX会自动的加一,所以在处理例如,字符串,数组等连续内存块来存储数据的数据结构的时候,具有很好的效果。

变址寻址器和基址寻址器的区别是A和IX, BR是否可以由用户改变

4.4.5堆栈寻址方式

串联堆栈:

一些计算机的CPU中有一组专门的寄存器,有16个或者更
多,其中每一个寄存器能保存一个字的数据,由专用的寄存器
组构成堆栈的存储空间,我们称为串联堆栈

存储器堆栈

sp是一个CPU的一个专用的寄存器,在存储器空间里面寻要一个堆栈指示器SP,他是CPU中一个专用的寄存器。堆栈指示器SP 指定的存储器单元就是堆栈的栈顶。栈底永远在高地址

堆栈存储器的特点

  1. 栈寄存器的操作指令只有两个,一个是pop,一个是push。

  2. 堆栈入栈是先入再减那么出栈就是先加再出,二者是镜像对称的。

  3. 堆栈是由高地址到底地址延伸的空间,是反向生长段。所以先入的栈底地址,是高地址。

  4. 堆栈的栈顶一般使用堆栈指针SP表示。入栈和出栈的操作

  5. 如果指针从高往低移动的时候移到了较低的位置,那么可能会移到其他数据的数据区域。这就叫做缓存溢出。

  6. 堆栈的长度可以由程序员来确定

  7. 堆栈的数目可以由程序员来决定

  8. 堆栈的主要存储的是代码段的返回地址

  9. 可以使用存储寻址的任意指令来对堆栈中得到数据进行寻址。

    image-20211111081251911

    ​ 一般来说,代码段和数据段都是正向生长段,因为代码在编译时候就能过确定大小。但是堆栈段不同,因为对战的数据代码空间大小不确定,只能是先分配一个比较大的地址,然后在往小了分配地址。

变长操作码的指令

image-20211111083250961

4.4.6指令格式

二地址指令的结构

image-20211111084941338

指令格式的举例

image-20211111084629104

  1. 这个指令有多长(单字长还是双字长)
  2. 这个指令是几地址码
  3. 这个指令是RR指令还是RS型指令
如何判断一个指令是否正确
  1. 先取出来一个指令,

  2. 翻译成二进制

  3. 根据格式取前若干位,对照操作指令

    image-20211111092559976

最后尊称而错误的原因:

4.5典型指令

典型的指令方式

image-20211111092835129

4.5.1复杂指令计算机

经典代表:X86奔腾计算机

复杂指令系统的代表是X86,广泛的应用于微型
计算机,其特点是性能好,但是能耗和成本高。
例如奔腾机有191条指令,9种寻址方式。
但是通过对复杂指令系统计算机(CISC)的测试表
明,最常使用的一些最简单最基本的指令,只占指令
总数的20%,并且这些指令在程序中出现的频率达到
80%以上。

4.5.2经典指令系统

典型代表:ARM手机架构

  1. 选取使用频率最高的一些简单指令,减少指令系统
    的指令条数。
  2. 指令长度固定,指令格式种类少,寻址方式少。
  3. 只有取数/存数指令访问存储器。其余的指令的操
    作都在寄存器间进行。
  4. CPU内部的通用寄存器个数多。

4.5.3MIPS指令格式

MIPS架构由斯坦福大学开发,是一种有高度扩展性的
流水RISC处理器。 2002年,中国科学院计算所开始研发龙
芯处理器,采用MIPS架构

MIPS R4000处理器:指令字长32位,通用寄存器32个

image-20211111093334226

Function的作用:操作码有些不够用,OP来确定一大类的指令,Function来确定其他的指令。

MIPS指令举例

image-20211111093606548

MIPS里面的偏移寻址:LW $s1,100($s2)

  • 100加一个括号相当于是在画面的范围里面加了一个偏移量

  • $s1 在RS里面就是 18

posted @ 2021-11-27 10:01  zzuli_DYS  阅读(76)  评论(0)    收藏  举报