第4章 指令系统
- 格式:doc
- 大小:84.50 KB
- 文档页数:12
第4章指令系统本章主要介绍计算机指令系统的基本概念、指令格式及寻址方式,讨论指令系统的设计理论。
在这基础上介绍指令的分类及指令系统举例,其中重点介绍8086体系结构的寻址方式及其8086指令系统。
一、指令系统的基本概念1、指令系统及计算机语言计算机程序是由一条条机器指令组成的。
机器指令是计算机唯一能够识别的语言。
一条机器指令所提供的信息主要包括:告诉机器应该做什么操作,从何处取操作数,把数据运算的结果送往何处以及从何处取出下一条将要执行的指令等内容。
一台计算机中实现各种功能的机器指令的集合称为该机器的指令系统。
计算机语言从早期的由二进制0、1表示的机器语言,发展出了用助记符表示的低级语言(汇编语言),进而发展出方便人类记忆、编程的高级语言(C语言)。
高级语言编写的程序,便于人们书写和识别,但是计算机硬件不能直接识别,需要由相应高级语言的编译程序把它翻译成相应的机器语言。
汇编语言编写的程序,需要由相应汇编语言的汇编程序把它翻译成机器语言。
2、计算机中指令的存储及执行在计算机内部存储及处理的信息分为数据信息和控制信息两大类。
数据信息是计算机处理的对象。
控制信息主要是由构成程序的机器指令组成。
在计算机中,指令是以二进制代码的形式表示的。
通过把利用机器的指令系统中的各种指令所编写的、控制机器运行的程序存放在存储器中的方式,使计算机能够连续不断地执行相应程序,这就是存储程序概念。
计算机中程序执行的一般过程:计算机在开机启动后,到主存中找到需要执行的程序中的第一条机器指令,把其从主存读取到指令寄存器中;通过对所需要执行的相应机器指令进行译码,控制机器硬件电路进行不同的动作,完成不同的功能。
机器在执行完一条指令后,根据程序的需求,再取出下一条应该执行的指令继续执行。
以此方式,循环往复,直到一段程序执行完,则完成了相应的一个任务。
二、指令格式1、指令格式及指令字长度指令格式一般由操作码字段和地址码字段两部分组成。
操作码字段表示指令的功能及操作特征,地址码字段通常指定参与操作的操作数地址或直接给出操作数。
指令字长度是指一条指令中包含的二进制代码的位数。
机器字长是指CPU能同时并行处理的用二进制表示的数据位数,计算机的运算精度由机器字长所决定。
通常把指令字长度小于或等于机器字长的指令称作短指令,把指令字长度大于机器字长的指令称作长指令。
短指令的设计可以节省指令的存储空间,减少读取指令所需的访存次数,提高执行每条指令的速度。
长指令设计可以使一条指令包含较强的功能,便于进行程序设计,访问长指令会降低程序的执行速度。
2、操作码结构的设计操作码的位数决定着指令系统中完成不同操作指令的数量。
(4位操作码可以设计有16条不同操作的指令。
)3、地址码结构的设计①四地址指令OP为操作码,表示加、减、乘、除、传送、移位等操作性质;A1 为第一操作数地址,也可称作源操作数地址;A2 为第二操作数地址,也可称作源操作数地址;A3 为存放结果的地址;A4 为下一条将要执行指令的地址。
PC(IP)指出。
③二地址指令(A1)OP(A2)A1它表示把A1中的操作数与A2中的操作数按照OP操作性质进行相应的操作,把运算结果送入地址A1中。
A1为目的地址,A2为源地址。
OP(A1)A1 它表示把A1中的操作数按照OP操作性质进行相应的操作,把运算结果仍送入地址A1中。
双操作数指令:(REG)OP(A1)REG它表示把REG中的操作数与A1中的操作数按照OP操作性质进行相应的操作,把运算结果送入地址REG中。
⑤零地址指令没有地址码,只有操作码(1)指令不需要操作数,只发出一定的命令指挥机器完成相应的操作。
(停机指令、空指令) (2) 指令所需要的操作数是隐含指定的。
(入栈及出栈指令)结论:在设计指令系统时,应考虑尽可能地缩短指令长度,这样才可能减少程序占用的空间,同时也相应减少访存的次数,提高程序的总体运行速度。
通常可以采用下述几种方法来缩短指令长度:(1)把运算结果放在目的操作数地址中。
这样可以缩减一个地址长度。
(2)用CPU中的寄存器隐含存放一个操作数。
(3)不用完整、较长的主存地址,把主存较长地址码的全部或部分存放在寄存器中,在地址码字段只给出较短的寄存器地址编码。
这样可以极大地缩短地址码的长度。
4、指令助记符与机器指令代码对机器指令中用二进制编码表示的操作码和地址码采用相应的若干个英文字母表示,通常称为指令助记符。
三、寻址方式寻找所要处理的指令或操作数地址的各种方式。
1、指令寻址方式①顺序寻址方式②跳转寻址方式PC不仅需要有自动加1的功能,还应具有接收转移地址的功能。
2、操作数寻址方式①隐含寻址指令中的操作数或操作数地址隐含存放在特定的寄存器或主存单元中,不在指令的地址码字段给出,而是按指令设计时的约定存放。
②立即寻址指令的地址码字段给出的不是操作数地址,而是操作数本身。
③寄存器寻址指令中所要处理的操作数存放在寄存器中。
④直接寻址寻找存储器操作数地址的一种基本方法。
指令中的地址码字段直接给出了操作数所在主存单元的有效地址EA。
⑤间接寻址指令的地址码字段给出的地址不是存放操作数的有效地址,而是存放操作数有效地址的主存单元地址(操作数地址的地址)。
⑥寄存器间接寻址指令的地址码部分给出寄存器编号,在给定的寄存器中存放操作数所在主存单元的地址,按此地址去访问操作数。
⑦变址寻址⑧基址寻址基址寻址方式的设置主要是面向系统,解决多道程序在主存中的定位以及扩大寻址空间等问题。
变址寻址方式的设置主要是面向用户,使用户可以方便地对字符串、数组及向量等成批数据进行访问,解决程序的循环控制等问题。
⑨相对寻址⑩堆栈寻址3、8086寻址方式示例在8086指令系统中,寻址方式主要有与数据相关的寻址方式、与转移地址相关的寻址方式以及与I/O端口相关的寻址方式三类。
⑪8086中央处理器(CPU)及主存储器8086CPU是16位的处理器,数据通路宽度为16位,支持1MB主存空间的访问,并提供64K 个外设端口地址。
①8086的CPU结构总线接口部件BIU:完成CPU对主存或外设之间的信息访问工作。
执行部件EU:负责对BIU指令队列中应该执行的指令进行译码,控制执行该指令。
②8086的寄存器结构14个16位寄存器通用寄存器(8个)AX 累加器BX 基址寄存器CX 计数器DX 数据寄存器SP 堆栈指针寄存器BP 基址指针寄存器SI 源变址寄存器DI 目的变址寄存器段寄存器(4个)CS 代码段DS 数据段ES 附加段SS 堆栈段指令指针寄存器IP(指向下一条即将执行的指令首地址的偏移地址)CS:IP 20位主存物理地址标志寄存器(FR)FR的内容称程序状态字(PSW)9个标志位(6个状态标志3个控制标志)CF、PF、AF、ZF、SF、OF 记录程序运行时的状态信息,由CPU根据指令执行的结果自动设置。
TF:陷阱标志单步标志或跟踪标志,用于程序的调试IF:中断标志DF:方向标志③8086的主存储器结构主存每个单元的物理地址是唯一的,但其逻辑地址可以不同。
逻辑地址的表示段基值:偏移量(2)与数据相关的寻址方式以汇编语言的数据传送指令为例介绍各种与数据相关的寻址方式MOV DST,SRCDST表示目的操作数地址SRC表示源操作数地址①立即寻址MOV AX,1326HMOV AL,12H②寄存器寻址MOV AL,BHMOV AX,BX③直接寻址MOV AX,V AR 用符号地址表示MOV AX,DS:[1200H]④寄存器间接寻址MOV AX,[BX]MOV AX,SS:[BP]⑤变址寻址MOV AX,V AR[SI]MOV AX,1200H[SI]例:一维数组ARRAY1顺序存放在主存的数据段中,假设ARRAY1数组的首地址位于数据段偏移2300H处,(DS)=2000H,数组的每个元素占两个字节。
使用指令:MOV AX,ARRAY1[BX] 可以把ARRAY1数组中的元素取出传送到通用寄存器AX中。
⑥基址变址寻址MOV AX,V AR[BX][SI]MOV [BP][DI],AX例:具有10行、10列的二维数组ARRAY2按照第一行(0~9个元素)、第二行(0~9个元素)…的顺序连续存放在主存的数据段中,假设ARRAY2数组的首地址位于数据段偏移3400H处,(DS)=2000H,数组的每个元素占两个字节。
如果需要把数组的第1行第6个元素ARRAY2(1,6)传送到通用寄存器AX中时,则可以把BX设置成20(14H)(1×20),把SI设置成12(0CH)(6×2),使用下述指令即可完成所需数据的传送:MOV AX,ARRAY2[BX][SI] ARRAY2(1,6)传送到AX中⑦与串操作相关的寻址方式源串DS:[SI] 允许存放在其他段目的串ES:[DI] 只能存放在附加段(3)与转移地址相关的寻址方式①段内直接寻址JMP JMPLAB②段间直接寻址JMP FAR PTR JMPLAB③段内间接寻址JMP BXJMP WORD PTR [BX]④段间间接寻址JMP DWORD PTR [BX](4)I/O端口寻址方式①直接I/O端口寻址方式IN AX,26H②间接I/O端口寻址方式MOV DX,378HOUT DX,AL注:前256个(0~FFH)端口地址可以直接在指令中给出,其余的端口地址要放到DX中。
四、指令的分类及指令系统1、指令种类数据传送类指令算术运算类指令逻辑运算类指令程序控制类指令串处理类指令输入/输出类指令系统控制类指令2、8086指令系统类型1、传送类指令(1)数据传送指令MOVPUSHPOPXCHG(2)专用累加器传送指令INOUTXLAT(3)标志位传送指令LAHFSAHFPUSHFPOPF(4)地址传送指令LEALDSLES2、算术运算类指令(1)加法运算指令ADD ADC INC(2)减法运算指令SUB SBB DEC NEG CMP(3)乘法运算指令MUL IMUL(4)除法运算指令DIV IDIV(5)类型转换指令CBW CWD(6)十进制调整指令DAA DAS AAA AAS AAM AAD3、逻辑运算类指令(1)逻辑运算指令AND OR NOT XOR(2)测试指令TEST(3)移位指令SHL SHR SAL SARROL ROR RCL RCR4、控制转移类指令(1)无条件转移指令JMP(2)条件转移指令JO JNO JS JNS JZ JNZ JP JC …比较两个无符号数JA JB JAE JBE比较两个带符号数JG JL(3)CX寄存器的值测试转移指令JCXZ(4)循环控制指令LOOP LOOPZ LOOPNZ(5)子程序的调用与返回指令CALL RET(6)中断子程序的调用与返回指令INT INTO IRET5、串处理指令(1)串处理指令MOVSCMPSSCASLODSSTOS(2)与串处理指令配合使用的重复前缀指令REPREPEREPNE6、处理器控制类指令(1)标志位处理指令CLCSTCCMCCLDSTDCLISTI(2)空操作指令NOP(3)处理机控制指令HLTWAITESCLOCK3、8086指令系统详解①传送类指令(1)MOV 数据传送指令指令的执行不影响标志位注:DST不能为立即数SRC为立即数时,DST不能是段寄存器(立即数不能直接传送到段寄存器中)SRC和DST不能同时为主存单元地址,也不能同时为段寄存器例1:把立即数2010H送段寄存器DS中。