指令格式

一条指令包括两种信息:

  • 操作码(operation code):用来表示指令所要完成的操作(如加、减、乘、除、数据传送等),其长度取决于指令系统中指令的条数。
  • 地址码:用来描述指令的操作对象。或者直接给出操作数、或者指出操作数的存储地址或寄存器地址(即寄存器名)。

image-20210622115114384

按照操作操作数来源来分,可分为RS指令(操作数来自寄存器和存储器)、RR指令(操作数来自寄存器和寄存器)

指令操作码的扩展技术

指令操作码的长度决定了指令系统中完成不同操作的指令条数。

如果某机器的操作码长度为K位,则它最多只能有2^K条不同的指令。

指令操作码通常有两种编码格式(操作码的长度是否固定):固定格式、可变格式。

15/15/15扩展法:机器字长位16位,用15/15/15扩展法可以设计一个具有15条三地址指令、15条双地址指令、15条单地址指令和16条零地址指令的指令系统。

15条三地址指令的基本操作码为0000-1110,剩下一个1111用于把操作码扩展到A1;15条二地址指令基本操作码为1111 0000-1111 1110,剩下一个1111 1111用于把操作码扩展到A2;15条一地址指令基本操作码为1111 1111 0000-1111 1111 1110,剩下一个1111 1111 1111用于把操作码扩展到A1;16条零地址指令的操作码范围为1111 1111 1111 0000-1111 1111 1111 1111。image-20210622115533823

霍夫曼编码的操作码:根据程序中指令出现频率高低而赋以不同长度的操作码。

指令长度与数据字长的关系

字长:计算机能直接处理的二进制数据的位数

地址码长度决定了指令直接寻址能力,若为n位,则给出的n位直接地址寻址2^n字节。

扩大寻址能力的方法增加机器字长来增加地址码的长度,地址扩展技术(基地址加位移量的方法来增加地址码)

寻址方式

寻址方式(或编址方式):确定本条指令的数据地址下一条要执行的指令地址的方法。

1、直接寻址:指令的地址码部分给出操作数在存储器中的地址

image-20210701232511908

2、寄存器寻址:指令地址码部分给出某一通用寄存器(GR)地址,而且所需的操作数在该寄存器中。

3、基址寻址:操作数的地址由基址寄存器的内容和指令的地址码A(disp,位移量)相加得到。用途:定位和扩大存储空间。

基址寄存器(BR):专用的基址寄存器,或由指令指定一个通用寄存器为基址寄存器。其值由系统程序通过特权指令设定,一般用户指令不能修改,可确保系统安全。

image-20210701232924664

4、变址寻址:地址部分给出的地址A和变址寄存器X的内容相加的和作为操作数地址。用途:变址操作,循环执行程序的方法对数组进行运算。

image-20210701233339140

5、间接寻址(间址):地址码所取出的内容操作数或指令的地址。两种方式:寄存器间接寻址(一次间址一次访存),存储器间接寻址(一次间址两次访存)。

image-20210701233803186

以转移指令Jump为例,来说明在直接寻址和间接寻址方式下如何确定下一条要执行的指令的地址。

image-20210701233943118

6、相对寻址:把程序计数器PC的内容(即当前执行指令的地址)与指令的地址码部分给出的位移量(disp)之作为操作数的地址或转移地址

主要用于转移指令,执行本条指令后,将转移到(PC)+disp,(PC)为程序计数器的内容。

特点:转移地址不固定,随着PC值变化,并总与PC相差固定值disp;位移量disp可正可负,通常用补码表示。

7、立即数寻址:操作数由指令的地址码部分直接给出

特点:取指时,操作码和一个操作数同时被取出,不必再次访问存储器,提高了指令的执行速度。这种方式只能适用于操作数固定的情况,通常用于给某一寄存器或存储器单元赋初值提供常数等。

8、堆栈寻址:堆栈操作指令,详见指令类型->堆栈操作指令

指令类型

1 算术逻辑运算指令

算术运算:定点数运算,相当于高级语言中对整数(integer)的处理。

根据算术运算的结果置状态位(满足条件置1,否则置0):
Z(结果为0)、N(结果为负)、V(结果溢出)、C(产生进位或借位)

结果状态位和控制状态位共用组成程序状态字PSW。

逻辑运算:与、或、非(求反)、异或(按位加)等。

2 移位操作指令

算术移位、逻辑移位、循环移位:

image-20210701235111784

移位指令来实现乘除法运算可取得较高的速度:

  • 算术左移或右移n位:对带符号数据乘以(<<)2n或整除(>>)以2n的运算。
  • 逻辑左移或右移n位:对无符号数据乘以(<<)2n或整除(>>)以2n的运算。

3 浮点运算指令

高级语言中的实数(real)经常是先转换成浮点数的形式而后再进行处理。

没有设置浮点运算指令——子程序实现(速度低)。

4 十进制运算指令

人机交互时,输入输出的数据都是以十进制形式表示的。

不具有十进制运算指令的计算机:十进制->二进制——运算;二进制->十进制——输出。

输入输出数据频繁的计算机系统中设置十进制运算指令能提高数据处理的速度。

5 字符串处理指令

一种非数值处理指令。传送、比较、查询、转换。

6 数据传送指令

实现寄存器与寄存器,寄存器与存储器单元,存储器单元与存储器单元之间的数据传送(读、写)。

源地址中的数据保持不变,实际上是数据复制

7 转移类指令

  • 无条件转移
  • 条件转移
  • 过程调用与返回
  • 陷阱(trap)

8 堆栈及堆栈操作指令

堆栈(stack)是由若干个连续存储单元组成的先进后出(FILO)存储区。

栈底固定不变,栈顶随入栈和出栈不断变化,任何堆栈操作只能在栈顶进行。

堆栈指针(SP):为了表示栈顶的位置,有一个寄存器或存储器单元用于指出栈顶的地址

作用

  • 提供操作数保存运算结果的主要存储区
  • 暂存中断和子程序调用现场数据及返回地址
  • 子程序调用时参数的传递

堆栈从高地址向低地址扩展,即栈顶地址小于等于栈底地址。

  • 压栈指令PUSH OPR (SP)-2 -> SP, OPR -> SP
  • 弹出指令POP OPR ((SP)) -> OPR, (SP)+2 -> SP

9 输入输出(I/O)指令

OP REG A

  • OP:操作码,表示I/O指令
  • REG:寄存器名,用于指定与外部设备交换数据的寄存器
  • A:外部设备中的寄存器地址或设备码,其长度一般为8~16位,可以表示256~64K个设备寄存器(输入数据寄存器/输出数据寄存器/控制寄存器)。

输入指令完成从A地址所指定的外部设备寄存器中读入一个数据到REG寄存器中;输出指令REG寄存器中的数据送到A地址所指定的外部设备寄存器中。I/O指令还可用来发送和接收控制命令回答信号,用以控制外部设备的工作。

外部设备与存储器统一编址的计算机,任何访问存储器的指令均可访问外部设备,不再专设I/O指令。

10 特权指令

特权指令:某些指令使用不当会破坏系统或其他用户信息,只能用于操作系统或其他系统软件,而不提供给用户使用。(管态与用户态)

统一管理所有的外部设备,输入输出指令也作为特权指令,不允许用户直接使用。需输入输出时,可通过系统调用,由操作系统来完成。

其他指令

  1. 向量指令:对向量或矩阵数据运算的指令
  2. 多处理机指令:用于多处理机的指令
  3. 控制指令包括:等待指令、停机指令、空操作指令、开中断、关中断、置条件码指令等。
    1. 停机指令:当用户程序执行完毕时,可安排一条停机指令,此时机器不再继续执行程序、
    2. 空操作指令:除了将程序计数器增量外,不进行其他操作。

CISC & RISC

精简指令系统计算机(RISC) :ARM、MIPS、IBM

  • 通过简化指令使计算机的结构更加简单合理,从而提高运算速度。
  • 优先选取使用频率最高的一些简单指令,以及一些很有用但不复杂的指令,避免复杂指令
  • 指令长度固定指令格式种类少寻址方式种类少。指令之间各字段的划分比较一致,各字段的功能也比较规整。
  • 只有取数/存数指令(load/store)访问存储器,其余指令的操作都在寄存器之间进行。
  • CPU中通用寄存器数量相当多。算术逻辑运算指令的操作数都在通用寄存器中存取。
  • 大部分指令在一个或小于一个机器周期内完成
  • 硬布线控制逻辑为主,不用或少用微码控制。
  • 特别重视编译优化工作,以减少程序执行时间。

复杂指令系统计算机(CISC) : Intel 80x86

  • 增加硬件实现的复杂性
  • 增加了研制时间和成本以及设计失误的可能性
  • 很难实现流水线操作
  • 降低了机器的速度。

计算机执行程序所需要的时间

计算机执行程序所需要的时间P可用 P=I×CPI×T 表示。

  • I:高级语言程序编译后在机器上运行的指令数 (CISC优势)
  • CPI:执行每条指令所需的平均周期数 (RISC优势)
  • T:每个机器周期的时间 (RISC优势)

SPARC

SPARC指令字长32位,有3种指令格式,6种指令类型。

image-20210702002504705

  • OP、OP2、OP3为操作码,Opf为浮点操作码。
  • rs1、rs2为通用寄存器地址,一般用作源操作数寄存器地址。
  • rd为目的寄存器地址。通常用来保存运算结果或从存储器中取来的数据。
  • Simm13是13位扩展符号的立即数。
  • i用来选择第二个操作数。

指令类型

  • 算术运算/逻辑运算/移位运算指令:31条
    (rs1)OP(rs2)->rd (i=0)
    (rs1)OP Simm13->rd (i=1)
  • LOAD/STORE指令:22条
    LOAD把存储器中的数据送rd中;STORE把rd中的内容送存储器中。i=0时,E = (rs1)+(rs2) ;i=1时,E = (rs1)+Simm13
  • 控制指令(控制转移类指令:指令改变PC值):5条
    • 条件转移(Branch) :根据指令中的Cond字段(条件码)决定程序是否转移,相对寻址
    • 转移并连接(JMPL): 寄存器间址,并将PC保存在以rd为地址的寄存器中,以备程序返回时用。
    • 调用(CALL): 相对寻址
    • 陷阱(trap) :寄存器间址
    • 从trap程序返回(RETT) :寄存器间址
  • 读/写专用寄存器指令:8条
    • SPARC有四个专用寄存器(PSR,Y,WIM,TBR),其中PSR称为程序状态寄存器。
    • 几乎所有机器都设置PSR寄存器(有的计算机称为程序状态字PSW)。
    • PSR的内容反映并控制计算机的运行状态,比较重要,所以读/写PSR(RDPSR,WRPSR)指令一般为特权指令
  • 浮点运算指令
  • 协处理器指令

有一些指令没有设置,但很容易用一条其他指令来替代,这是因为SPARC约定R0的内容恒为零,而且立即数可以作为一个操作数处理。

image-20210702002924689

计算机的语言

机器语言(二进制代码,烦琐、单调、难于看懂)→汇编语言(助记符,功能有限、编程繁重费时、依赖处理器)→高级语言