目录
CPU所能完成的操作是由其执行的指令决定的,这些指令成为机器指令。CPU能执行的所有机器指令的集合成为该CPU的指令系统。指令系统是计算机硬件与软件之间的接口。
指令格式:
指令是指挥计算机完成各种操作的基本指令。一般来说,一条指令包括两个基本组成部分:操作码和地址码。基本格式如下:
操作码字段OP | 操作数地址码字段Addr |
操作码说明指令的功能及操作性质。
地址码用来指出指令的操作对象,它指出操作数或操作数的地址及指令执行结果的地址。
操作码用二进制编码来表示,该字段越长,所能表示的指令就越多。若操作码的长度为n,则可表示的指令为条。
1>,三地址指令格式
OP(操作码) | A1(源操作数1) | A2(源操作数2) | A3(目的操作数的地址) |
A1中的数据和A2中的数据进行某种操作OP,把操作结果放在A3这个地址单元中。
指令实现的操作是:(A1)OP(A2)—> (A3)
2>,二地址指令格式
OP | A1 | A2 |
指令实现的操作是:(A1)OP(A2)—> (A1)
3>,一地址指令格式
OP | A |
在一地址指令格式中,只给出一个操作数的地址。
若操作针对一个操作数的指令,其操作为:OP(A)=(A)
若操作针对两个操作数的一地址指令,通常另一个操作数是隐含的(另一个操作数在累加器AC中),其操作为:(AC)OP(A)—> (AC)
4>,零地址指令格式
OP |
零地址指令只有操作码,不含任何操作数地址。
分两种情况:一种是无操作数的控制操作,如空操作指令NOP、停机指令HLT等;另一种是隐含有操作数,在指令中不体现。
寻址方式:
就是如何对指令中的地址字段进行解释,以获得操作数的方法或获得程序转移地址的方法,操作数的位置可能在指令中、寄存器中、存储器中或I/O端口中。
常用的寻址方式有立即寻址,直接寻址,寄存器寻址,寄存器间接寻址,间接寻址,基址寻址,变址寻址。
1>,立即寻址
操作数就包含在指令中。取出指令即可取出操作数。
指令(操作数)
2>,直接寻址
操作数存放在内存单元中,指令中直接给出操作数所在存储单元的地址。
指令(操作数的地址)——>操作数
3>,寄存器寻址
操作数存放在某一寄存器中,指令中给出存放操作数的寄存器名
指令(寄存器名)——>寄存器(操作数)
4>,寄存器间接寻址
操作数存放在内存单元中,操作数所在存储单元的地址存放在某个寄存器中。
指令(寄存器)——>寄存器(操作数的地址)——>操作数
5>,间接寻址
操作数存放在内存单元中,指令中给出操作数地址的地址。
指令(操作数地址的地址)——>操作数地址——>操作数
6>,基址寻址
操作数存放在内存单元中。指令中操作数地址码给出基址寄存器和一个偏移量(可正可负),操作数的有效地址为基址寄存器的内容加上偏移量。
指令(基址寄存器,偏移量)——>(基址寄存器+偏移量)操作数地址——>操作数
7>,变址寻址
操作数存放在内存单元中。操作数的有效地址等于变址寄存器的内容加上偏移量。
指令(变址寄存器,偏移量)——>(变址寄存器+偏移量)操作数地址——>操作数
指令种类:
1>,数据传送类指令
这类指令将数据从一个地方传送到另一个地方,主要包括如下指令。
(1)数据传送指令。这类指令中一般有两个操作数地址:源操作数地址和目的操作数地址:传送方式一般包括:
①将立即数传送到寄存器。
②将立即数传送到存储单元。
③将一个寄存器的内容传送到另一个寄存器。
④将寄存器的内容传送到存储单元。
⑤将数据从一个存储单元传送到另一个存储单元。
⑥将数据由存储单元传送到寄存器。
(2)数据交换指令。主要包括:
①寄存器与寄存器之间的数据交换。
②存储器单元与寄存器之间的数据交换。
③存储器单元与存储器单元之间的数据交换。
(3)堆栈操作指令。主要包括压入堆栈指令和弹出堆栈指令。
2>,输入/输出(I/O)类指令
这类指令用于实现主机与外设间的信息传送,包括数据的输入/输出、主机向外设发出控制命令以及输入外设的状态。通常有3种方法来实现输入/输出。
3>,算术运算类指令
这类指令支持CPU实现加、减、乘、除等算术运算。主要包括加法、减法、乘法、除法、求补、加1、减1和比较等指令。
4>,逻辑运算指令
这类指令支持CPU实现各种逻辑运算。一般的CPU都会设置逻辑运算指令,主要包括与、或、异或、取反等指令。
5>,移位操作指令
根据移位的方向,当操作数的各位顺序向左移动一位称为左移,同样,当操作数的各位顺序向右移动一位称为右移。移位指令一般可分为算术移位、逻辑移位和循环移位3种类型。
算术移位:左移补0,右移补符号位;算术移位指令对带符号操作数进行移位。
逻辑移位:左移和右移都补0;逻辑移位指令对无符号操作数进行移位。
循环移位:
6>,程序控制类指令
程序控制类指令用于改变指令执行的顺序和控制流的方向,主要包括以下几种。
(1)跳转指令。跳转指令又可分为无条件跳转指令和条件跳转指令。无条件跳转指令直接使程序的控制流转移到指定的目标,而条件跳转指令则需先判断指令中规定的跳转条件是否满足,当满足规定的条件时,则使程序的控制流转移到指定的目标;否则不跳转。
(2)子程序调用和返回指令。在程序设计时,通常把完成某种独立功能、多次重复使用的代码段定义为一个子程序。编程时,根据需要可调用子程序完成相应的功能。子程序调用指令使控制流从一个程序段跳转到另一个程序段。子程序执行结束后,必须返回到调用它的程序段,因此子程序返回指令根据所记录的返回地址将控制流转回调用它的程序段。
(3)陷阱指令。陷阱是一种意外事件所引起的中断。通常陷阱指令是隐含的,不提供给用户使用。当意外事件引发中断后,由CPU自动执行。但也有些指令系统提供了用户可以使用的陷阱指令,使用户可以用它进行系统调用,从而可以利用操作系统提供的各项功能。
7>,串操作类指令
现代计算机经常需要处理大量的字符串信息。因此,一般都会设置字符串操作指令。常见的串操作指令包括串传送指令、串比较指令、串搜索指令、串替换指令、串转换指令和串抽取指令等。
8>,处理机控制类指令
这类指令用于对CPU实施控制。例如,对PSW中的标志实现置位或清零、停机指令、开中断指令、关中断指令、空操作指令等。
9>,数据转换类指令
有的指令系统中还会设置数据转换指令。例如,将十进制数转换为二进制数、二进制数转换为十进制数、定点数转换为浮点数、浮点数转换为定点数等指令。