1、第5章 指令系统5.1.1指令的格式 机器指令是计算机硬件能够识别并直接执行的操作命令。指令是由操作码和地址码两部分组成。操作码用来说明指令操作的性质及功能。地址码用来描述该指令的操作对象,由它给出操作数地址或给出操作数,以及操作结果存放地址。5.1.1指令的格式根据指令中所含地址码的个数,指令分为零地址指令、单地址指令、双地址指令、三地址指令和多地址指令。(1)零地址指令:只有操作码没有地址码的指令。这种指令要么是无需操作数,例如空操作指令、停机指令等,要么是操作数的存储位置为默认的。(2)单地址指令:只有一个地址码的指令。这种指令要么是指需要一个数据的指令,或者是双操作数的指令,另一个操作
2、数隐含了。(3)二地址指令:含有两个地址码的指令。(4)三地址指令:含有三个地址码的指令。通常这类指令是运算类指令,包含两个运算的操作数的地址和运算结果的地址码。(5)多地址指令:在某些计算机中设计了3个以上地址码的指令,用于某些特殊的需要,比如矩阵运算等。5.1.1指令的格式 一般地址码较少的指令,占用空间小,执行速度快,所以结构简单的计算机指令系统中,零地址、单地址和两地址指令较多采用。而两地址、三地址及多地址指令在功能较强的计算机中采用。指令格式中,会设定源地址码和目的地址码。源地址码是指操作数的地址,目的地址码是运算结果的地址。例如IBM-PC指令系统中的二地址指令中,目的地址码在前,
3、源地址码在后。5.1.2寻址方式寻址方式 指令中的地址码部分指明了指令的操作数或者操作数的地址。操作数或者操作数地址的指定方式称为寻址方式。计算机指令系统中常用的寻址方式有以下几类:5.1.2寻址方式寻址方式(1)立即寻址 在指令中直接给出操作数本身。操作数作为指令的一部分,在读取指令的时候就把数据读取了出来,这个操作数又称为立即数。这种方式不需要再根据地址寻找操作数,所以指令的执行速度较快。例如,IBM-PC指令系统中MOV AX,1234H,表示把16位立即数1234H传送到AX 寄存器,指令执行结果,AX=1234H。5.1.2寻址方式寻址方式(2)寄存器寻址方式 指令的地址码指定操作数
4、所在的寄存器,这种方式称为寄存器直接寻址。寄存器数量少,只需少量的编码就可以表示寄存器,所以可以减少整个指令的长度。另外寄存器中的操作数已经在CPU中,因此指令的执行速度较快。例如,IBM-PC指令系统中,若已知AX=1234H,BX=5678H。指令MOV AX,BX,表示把16位寄存器BX中的数值传送到AX 寄存器。指令执行结果,AX=5678H。教材第124页5.1.2寻址方式寻址方式(3)直接寻址方式 指令中的地址码给出的是操作数所在的单元的实际地址,又称为有效地址。根据指令中的有效地址只需访问内存一次便获得操作数。这种寻址方式简单、直观,便于硬件实现。但是随着存储空间的不断增大,地址
5、码会越来越长,会增加指令的长度。例如,IBM-PC指令系统中,若已知AX=1234H,BX=5678H,内存数据段单元(2000H)=11H,(2001H)=22H。指令MOV AX,2000H,表示从数据段2000H单元中取16位数值传送到AX 寄存器。因为2000H单元只有8位数值,所以到相邻的高地址单元2001H单元取8位数值作为高8位。指令执行结果,AX=2211H。5.1.2寻址方式寻址方式(4)寄存器间接寻址方式 指令中的地址码给出寄存器,寄存器中存放操作数的有效地址。因为只需给出寄存器号,所以指令的长度较短,但是因为要根据寄存器中的有效地址访问内存才能得到操作数,指令的执行时间比
6、寄存器寻址方式长。例如,IBM-PC指令系统中,若已知AX=1234H,BX=2000H,内存数据段单元(2000H)=11H,(2001H)=22H。指令MOV AX,BX,表示以BX中的值为地址,去访问内存2000H单元,再从该单元取16位数值传送到AX 寄存器。因为2000H单元只有8位数值,所以到相邻的高地址单元2001H单元取8位数值作为高8位。指令执行结果,AX=2211H。5.1.2寻址方式寻址方式(5)存储器间接寻址方式 指令的地址码部分给出的是存放操作数地址的存储单元地址。存储器间接寻址方式至少要访问两次内存才能取出操作数,因此指令执行速度减慢。例如,欧姆龙的指令系统中,用表
7、示存储器间接寻址。指令MOV#10 D0,表示将立即数10传送到D0存储区。MOV#FFFF D0,表示将立即数传送到D10存储区,指令中的D0不是最终目的地,而是将D0区内的10表示目的地址。5.1.2寻址方式寻址方式(6)相对寻址方式 指令的地址码中给定一个偏移量,将程序计数器PC中的值加上这个偏移量,得到操作数的有效地址。这种寻址方式下,被访问的操作数的地址是不固定的,但是该地址相对于程序的位置却是固定的,所以不管程序装入到内存的什么地方,都可以正确读取操作数。这样可以实现“与地址无关的程序设计”。例如,IBM-PC指令系统中,若已知PC=1234H。执行指令JMP+5,这是转移指令,表
8、示程序跳转到新指令执行。新指令的地址由PC的值加偏移量5计算得到,所以程序会跳转到1239H单元,执行1239H单元的指令。5.1.2寻址方式寻址方式(7)基址和变址寻址方式 指令地址码中给出基址或变址寄存器和一个形式地址,操作数的有效地址由寄存器中的值和形式地址相加得到。采用基址寄存器时称为基址寻址,采用变址寄存器时称为变址寻址。例如,IBM-PC指令系统中,SI是变址寄存器。若已知AX=1234H,SI=2000H,内存数据段单元(2000H)=11H,(2001H)=22H,(2002H)=33H,(2003H)=44H。指令MOV AX,SI+2,表示以BX中的值加上指令中的偏移量2,
9、得到有效地址去访问内存2002H单元,再从该单元取16位数值传送到AX 寄存器。因为2002H单元只有8位数值,所以到相邻的高地址单元2003H单元取8位数值作为高8位。指令执行结果,AX=4433H。5.1.2寻址方式寻址方式(8)隐含寻址方式 指令中不指出操作数地址,而是在操作码中隐含着操作数的地址。例如,IBM-PC指令系统中的CBW指令,指令中不需要指定操作数,系统默认操作数为AL。该指令功能是将AX的低8位寄存器AL的值扩展到AX寄存器中。若已知AX=1234H,指令CBW执行之后,AX=0034H,将低8位的最高位符号位扩展到整个AX寄存器中。5.1.2寻址方式寻址方式 一台计算机
10、的指令系统寻址方式多种多样,给程序员编程带来方便,但也使得计算机控制器的实现具有一定的复杂性。对于一台计算机而言,可能采用上述的一些寻址方式,或者这些基本寻址方式的组合或稍加变化5.1.3指令类型(1)数据传送指令 这类指令完成数据在主存和CPU寄存器之间进行传输。(2)算术运算类指令 对数据进行算术操作,包括加法、减法、乘法、除法等算术运算。有些性能较强的机器还具有浮点运算指令等。(3)逻辑运算类指令 对数据进行逻辑操作,包括逻辑与、或、非、异或等运算。这些逻辑运算对数据进行位运算,位和位之间没有进位传递关系。有些机器还有位操作指令,如位测试、位清除等。5.1.3指令类型(4)移位操作类指令
11、 移位操作是对数据进行相邻数据位之间的传递操作,分为算术移位、逻辑移位和循环移位三种,每种移位操作又分为左移和右移。算术移位,要考虑符号位。算术左移或右移一位,分别实现乘以2或除以2的算术运算。逻辑移位是将移位数据看作是没有数值含义的二进制代码,移位后的空位补0。循环移位按是否与进位标志位一起循环,分为小循环(自身循环)和大循环(带进位一起循环)两种。(5)程序控制类指令 这类指令用于控制程序执行的顺序和方向,主要包括条件转移指令、无条件转移指令、循环指令、子程序调用和返回指令、中断指令等。5.1.3指令类型(6)输入输出操作指令 这类指令完成主机和外围设备之间的信息传送。有的计算机有专门的输入输出指令,有的则把外设接口看作是特殊的存储器单元,用传送类指令实现访问。(7)串操作指令 串操作指令是针对主存中连续存放的一系列字或字节,完成串传送、串比较、串查找等功能。串可以由非数值数据(如字符串)构成,可以方便地完成字符串处理。(8)处理器控制指令 直接控制CPU以实现某种功能的指令,如空操作指令、停机指令等。5.1.3指令类型 以上的指令种类,一台计算机指令系统中并不是全部具备,例如有的计算机没有串处理指令。