微型计算机原理第4章.ppt
《微型计算机原理第4章.ppt》由会员分享,可在线阅读,更多相关《微型计算机原理第4章.ppt(305页珍藏版)》请在三一办公上搜索。
1、第4章 80 x86指令系统,4.1 8086/8088指令系统 4.2 80 x86/Pentium指令系统,4.1 8086/8088指令系统,4.1.1 8086/8088指令格式 用汇编语言编写的汇编语言程序输入计算机后,必须由“汇编程序”将它翻译成由机器指令(指令码)组成的机器语言程序,才能由计算机识别并执行。因此汇编语言程序需由汇编程序翻译成可执行的机器语言程序,一般来说,这一过程不必由人来干预。我们这里只介绍一下基本原理,以便在必要时也可以手工完成类似的工作。,8086/8088指令系统的指令类型较多,功能很强。各种指令由于功能不同,需要指令码提供的信息也不同。为了满足不同功能的
2、要求又要尽量减少指令所占的空间,8086/8088指令系统采用了一种灵活的、由16个字节组成的变字长的指令格式,包括操作码、寻址方式以及操作数三个部分,如图4.1所示。通常指令的第一字节为操作码字节(OPCODE),规定指令的操作类型;第二字节为寻址方式字节(MOD),规定操作数的寻址方式;接着以后的36字节依据指令的不同而取舍,可变字长的指令主要体现在这里,一般由它指出存储器操作数地址的位移量或立即数。,图4.1 8086/8088不同字长的指令码格式,操作码/寻址方式字节格式如下:,第一字节中,指示操作数类型:W=0为字节,W=1为字;D指示操作数的传送方向:D=0表示寄存器操作数为源操作
3、数,D=1表示寄存器操作数为目的操作数。第二字节指出所用的两个操作数存放的位置,以及存储器中操作数偏移地址的计算方法。其中:,REG字段规定一个寄存器操作数,它作为源操作数还是目的操作数已由第一字节中的D位规定。由REG字段选择寄存器的具体规定如表4.1所示。,表4.1 REG字段编码表,MOD字段用来区分另一个操作数在寄存器中(寄存器寻址)还是在存储器中(存储器寻址),在存储器寻址的情况下,还用来指出该字节后面有无位移量,有多少位位移量。MOD字段的编码如表4.2所示。,表4.2 MOD字段编码表,R/M字段受MOD字段控制。MOD=11为寄存器方式,R/M字段将指出第二操作数所在的寄存器编
4、号;MOD=00,01,10为存储器方式,R/M则指出如何计算存储器中操作数的偏移地址。MOD与R/M字段组合的寻址方式见表4.3。,表4.3 MOD与R/M字段组合的寻址方式,例4.1 MOV AH,BX+DI+50H 代码格式:,OPCODE D W MOD REG R/M disp8,指令码为:8A6150H,例 4.2 ADD dispBXDI,DX;disp=2345H 代码格式:,OPCODE D W MOD REG R/M dispHi disp-Hi,指令码为:01914523H,4.1.2 8086/8088指令系统的寻址方式 1操作数的种类,1)数据操作数 这类操作数是与数
5、据有关的操作数,即指令中操作的对象是数据。数据操作数又可分为:(1)立即数操作数。指令中要操作的数据包含在指令中。(2)寄存器操作数。指令中要操作的数据存放在指定的寄存器中。(3)存储器操作数。指令中要操作的数据存放在指定的存储单元中。(4)I/O操作数。指令中要操作的数据来自或送到I/O端口。,2)地址操作数 这类操作数是与程序转移地址有关的操作数,即指令中操作的对象不是数据,而是要转移的目标地址。它也可以分为立即数操作数、寄存器操作数和存储器操作数,即要转移的目标地址包含在指令中,或存放在寄存器中,或存放在存储单元之中。对于数据操作数,有的指令有两个操作数:一个称为源操作数,在操作过程中其
6、值不改变;另一个称为目的操作数,操作后一般被操作结果代替。有的指令只有一个操作数,或没有(或隐含)操作数。对于地址操作数,指令只有一个目的操作数,它是一个供程序转移的目标地址。,2寻址方式 所谓寻址方式,就是指指令中给出的寻找操作数(包括数据操作数和地址操作数)的方法。根据操作数的种类,8086/8088指令系统的寻址方式分为两大类:数据寻址方式和地址寻址方式。1)数据寻址方式 数据寻址方式可分为立即数寻址方式、寄存器寻址方式、存储器寻址方式和I/O端口寻址方式四种类型。,(1)立即数寻址方式(Immediate Addressing)。立即数寻址方式所提供的操作数直接包含在指令中,紧跟在操作
7、码之后,它作为指令的一部分,这种操作数称为立即数。立即数可以是位的,也可以是16位的。如果是16位数,则高位字节存放在高地址存储单元中,低位字节存放在低地址存储单元中。例如:MOV BL,80HMOV AX,1090H则指令执行情况如图4.2所示。执行结果为:(BL)=80H,(AX)=1090H。,图4.2 立即数寻址方式指令的执行情况,(2)寄存器寻址方式(Register Addressing)。寄存器寻址方式的操作数存放在指令规定的寄存器中,寄存器的名字在指令中指出。对于16位操作数,寄存器可以是AX、BX、CX、DX、SI、DI、SP或BP。对于位操作数,寄存器可以是AH、AL、BH
8、、BL、CH、CL、DH或DL。例如:MOV CL,DLMOV AX,BX如果(DL)=50H,(BX)=1234H,则指令执行情况如图4.3所示。执行结果为:(CL)=50H,(AX)=1234H。,图4.3 寄存器寻址方式的指令执行情况,由于寄存器寻址方式的操作数就在CPU内部的寄存器中,不需要访问存储器来取得操作数,因而可以取得较高的运行速度。,(3)存储器寻址方式(Memory Addressing)。存储器寻址方式的操作数存放在存储单元中。在第3章中已经知道,操作数在存储器中的物理地址是由段地址左移4位与操作数在段内的偏移地址相加得到的。段地址在实模式和保护模式下可从不同途径取得。本
9、节要讨论的问题是指令中是如何给出存储器操作数在段内的偏移地址的。偏移地址又称为有效地址(Effective Address,EA),所以存储器寻址方式即为求得有效地址(EA)的不同途径。,有效地址可以由以下三种地址分量组成:位移量(Displacement):它是存放在指令中的一个8位或16位的数,但它不是立即数,而是一个地址。基址(Base Address):它是存放在基址寄存器BX或BP中的内容。变址(Index Addess):它是存放在变址寄存器SI或DI中的内容。对于某条具体指令,这三个地址分量可有不同的组合。如果存在两个或两个以上的分量,那么就需要进行加法运算,求出操作数的有效地址
10、(EA),进而求出物理地址(PA)。正是因为这三种地址分量有不同的组合,才使得对存储器操作数的寻址产生了若干种不同的方式。,直接寻址方式(Direct Addressing)。直接寻址方式的操作数有效地址只包含位移量一种分量,即在指令的操作码后面直接给出有效地址。对这种寻址方式有:EA=位移量。例如:MOV AL,1064H 如果(DS)=2000H,则指令执行情况如图4.4所示。执行结果为:(AL)=45H。,图4.4 直接寻址方式的指令执行情况,注意这种直接寻址方式与前面介绍的立即数寻址方式的不同。从指令的表示形式来看,在直接寻址方式中,对于表示有效地址的16位数,必须加上方括号。从指令的
11、功能上来看,本例指令的功能不是将立即数1064H 传送到累加器AL,而是将一个有效地址是1064H的存储单元的内容传送到AL。设此时数据段寄存器(DS)=2000H,则该存储单元的物理地址为:PA=2000H10H+1064H=20000H+1064H=21064H,如果没有特殊指明,直接寻址方式的操作数一般在存储器的数据段中,即隐含的段寄存器是DS。但是8086/8088也允许段超越,此时需要在指令中特别标明,方法是在有关操作数的前面写上操作数所在段的段寄存器名,再加上冒号。例如,若以上指令中源操作数不在数据段而在附加数据段中,则指令应写为如下形式:MOV AL,ES:1064H 在汇编语言
12、指令中,可以用符号地址来表示位移量。例如:MOV AL,value 或MOV AL,value此时value为存储单元的符号地址。,寄存器间接寻址方式(Register Indirect Addressing)。寄存器间接寻址方式的操作数有效地址只包含基址寄存器(BX)的内容或变址寄存器(SI、DI)的内容一种分量。因此,操作数的有效地址在某个寄存器中,而操作数本身则在存储器中的数据段内。这与寄存器寻址方式操作数就在寄存器中是不同的。寄存器间接寻址方式的有效地址表示为:,书写指令时,用做间址的寄存器必须加上方括弧,以免与一般的寄存器寻址方式混淆。例如:MOV AX,SIMOV BX,AL 如果
13、(DS)=3000H,(SI)=2000H,(BX)=1000H,(AL)=64H,则上述两条指令的执行情况如图4.5所示。执行结果为:(AX)=4050H,(31000H)=64H。,图4.5 寄存器间接寻址方式的指令执行情况,同样,寄存器间接寻址方式也允许段超越。例如:MOV ES:DI,AX,寄存器相对寻址方式(Register Relative Addressing)。寄存器相对寻址方式的操作数有效地址EA是一个基址寄存器或变址寄存器的内容和指令中给定的8位或16位位移量相加之和,所以有效地址由两种分量组成。可用做寄存器相对寻址方式的寄存器有基址寄存器BX、BP和变址寄存器SI、DI。
14、即,上述位移量可以看成是一个存放于寄存器中的基值的一个相对值,故称为寄存器相对寻址方式。在一般情况下,若指令中指定的寄存器是BX、SI、DI,则操作数默认为存放在数据段中;若指令中指定的寄存器是BP,则操作数默认为存放在堆栈段中。同样,寄存器相对寻址方式也允许段超越。位移量既可以是一个8位或16位的立即数,也可以是符号地址。例如:MOV SI+10H,AX MOV CX,BX+COUNT,如果(DS)=3000H,(SI)=2000H,(BX)=1000H,COUNT=1050H,(AX)=4050H,则指令执行情况如图4.6所示。执行结果为:(32010H)=4050H,(CX)=4030H
15、。,图4.6 寄存器相对寻址方式的指令执行情况,该寻址方式的操作数在汇编语言指令中书写时可以是下述形式之一:MOV AL,BP+TABLEMOV AL,BP+TABLEMOV AL,TABLEBP 其实以上三条指令代表的是同一功能的指令。其中TABLE为8位或16位位移量。,基址变址寻址方式(Based Indexed Addressing)。基址变址寻址方式的操作数有效地址是一个基址寄存器(BX或BP)和一个变址寄存器(SI或DI)的内容之和,所以有效地址由两种分量组成。即,在一般情况下,由基址寄存器决定操作数在哪个段中。若用BX的内容作为基地址,则操作数在数据段中;若用BP的内容作为基地址
16、,则操作数在堆栈段中。基址变址寻址方式同样也允许段超越。例如:MOV BX+DI,AX MOV AH,BPSI,设当前(DS)=3000H,(SS)=4000H,(BX)=1000H,(DI)=1100H,(AX)=0050H,(BP)=2000H,(SI)=1200H,则指令的执行情况如图4.7所示。执行结果为:(32100H)=0050H,(AH)=56H。,图4.7 基址变址寻址方式的指令执行情况,该寻址方式的操作数在汇编语言指令中书写时可以是下列形式之一:MOV AX,BP+SI MOV AX,BPSI,基址变址相对寻址方式(Based Indexed Relative Address
17、ing)。基址变址相对寻址方式的操作数有效地址是一个基址寄存器内容、一个变址寄存器内容与指令中指定的一个8位或16位位移量之和,所以有效地址由三个分量组成。即,同样,当基址寄存器为BX时,操作数在数据段中;基址寄存器为BP时,操作数在堆栈段中。基址变址相对寻址方式同样也允许段超越。例如:MOV AH,BX+DI+1234HMOV BP+SI+DATA,CX 若(DS)=4000H,(SS)=5000H,(BX)=1000H,(DI)=1500H,(BP)=2000H,(SI)=1050H,(CX)=2050H,DATA=10H,则指令执行情况如图4.8所示。执行结果为:(AH)=64H,(53
18、060H)=2050H。,基址变址相对寻址方式也可以表示成以下几种不同的形式:MOV AX,BX+SI+COUNTMOV AX,BXSI+COUNTMOV AX,BX+SICOUNT MOV AX,BXSICOUNT MOV AX,COUNTBXSI,图4.8 基址变址相对寻址方式的指令执行情况,(4)I/O端口寻址方式。I/O端口寻址有以下两种寻址方式:端口直接寻址方式。对这种寻址方式,端口地址用8位立即数(0255)表示。例如:IN AL,21H 此指令表示从地址为21H的端口中读取数据送到AL中。假设21H端口提供的数据为7FH,则指令执行情况如图4.9所示。执行结果为:将21H端口提供
19、的数据7FH输入到8位寄存器AL中。,端口间接寻址方式。当I/O端口地址大于FFH时,必须事先将端口地址存放在DX寄存器中。例如:MOV DX,120H OUT DX,AX 前一条指令将端口地址120H送到DX寄存器,后一条指令将AX中的内容输出到地址由DX寄存器内容所指定的端口中。指令执行情况如图4.10所示。执行结果为:将AX寄存器的内容输出到120H端口。,图4.9 端口直接寻址的指令执行情况,图4.10 端口间接寻址的指令执行情况,2)地址寻址方式 在8086/8088指令系统中,有一组指令被用来控制程序的执行顺序。程序的执行顺序是由CS和IP的内容所决定的。通常情况下,当BIU完成一
20、次取指周期后,就自动改变IP的内容以指向下一条指令的地址,使程序按预先存放在程序存储器中的指令的次序,由低地址到高地址顺序执行。如需要改变程序的执行顺序,当转移到所要求的指令地址再顺序执行时,可以安排一条程序转移指令,并按指令的要求修改IP内容或同时修改IP和CS的内容,从而将程序转移到指令所指定的转移地址。地址寻址方式就是找出程序转移的地址。转移地址可以在段内(称为段内转移),也可以跨段(称段间转移)。寻求转移地址的方法称为地址寻址方式,它有如下四种方式。,(1)段内直接寻址方式。段内直接寻址方式也称为相对寻址方式。转移的地址是当前的IP内容和指令规定的下一条指令到目标地址之间的8位或16位
21、相对位移量之和,相对位移量可正可负。当位移量是8位时,称为短转移,转移范围为128+127;位移量是16位时,称为近转移,转移范围为32768+32767。这种寻址方式适用于无条件转移或条件转移类指令。但条件转移里只有8位位移量的短转移。,段内直接寻址转移指令的格式可以表示为:JMP NEAR PTR PROGIAJMP SHORT QUEST 其中,PROGIA和QUEST均为转向的目标地址,在机器指令中,用位移量来表示。在汇编语言中,如果位移量为16位,则在目标地址前加操作符NEAR PTR;如果位移量为位,则在目标地址前加操作符SHORT。但是,如果目标地址的标号已经定义(即标号先定义后
22、引用),那么,即使在标号前没有写运算符SHORT,汇编程序也能自动生成一个2字节的短转移指令。这种情况属于隐含的短转移。,(2)段内间接寻址方式。该寻址方式的程序转移地址存放在寄存器或存储单元中。存储器可用各种数据寻址方式表示。指令的操作是用指定的寄存器或存储器中的值取代当前IP的内容,以实现程序的段内转移。这种寻址方式以及以下的两种段间寻址方式都不能用于条件转移指令。也就是说,条件转移指令只能使用段内直接寻址的位位移量。,段内间接寻址转移指令的格式可以表示为:JMP BXJMP WORD PTR BP+TABLE 其中WORD PTR为操作符,用以指出其后的寻址方式所取得的目标地址是一个字的
23、有效地址。,(3)段间直接寻址方式。这种寻址方式是在指令中直接给出16位的段地址和16位的偏移地址用来更新当前的CS和IP的内容。指令的格式可以表示为:JMP LABEL_NAME JMP FAR PTR NEXTROUTINT其中,LABEL_NAME是一个在另外的代码段内已定义的远标号。指令的操作是用标号的偏移地址取代指令指针寄存器IP的内容,同时用标号所在段的段地址取代当前代码段寄存器CS的内容,结果使程序转移到另一代码段内指定的标号处。第二条指令利用运算符将标号NEXTROUTINT的属性定义为FAR。,(4)段间间接寻址方式。这种寻址方式是由指令中给出的存储器寻址方式求出存放转移地址
24、的四个连续存储单元的地址。指令的操作是将存储器的前两个单元的内容送给IP,后两个单元的内容送给CS,以实现到另一个段的转移。以下是两条段间间接转移指令的例子:JMP VAR_DOUBLEWORDJMP DWORD PTRBPDI上面第一条指令中,VAR_DOUBLEWORD应是一个已定义为32位的存储器变量;第二条指令中,利用运算符PTR将存储器操作数的类型定义为DWORD(双字)。,4.1.3 8086/8088指令系统 8086/8088的指令系统大致可分成以下六种类型:数据传送指令 算术运算指令 位操作指令 串操作指令 程序控制指令 处理器控制指令,1数据传送指令 数据传送指令是程序中使
25、用最频繁的指令。这是因为不论程序针对何种具体的实际问题,往往都需要将原始数据、中间结果、最终结果以及其他各种信息在CPU的寄存器和存储器或I/O端口之间多次传送。数据传送指令按其功能的不同,可以分为通用数据传送指令、输入输出指令、目标地址传送指令和标志传送指令等四组。,1)通用数据传送指令 通用数据传送指令有以下四种。(1)数据传送指令MOV(MOVement)。指令格式及操作:MOV dst,src;(dst)(src)指令格式中的dst表示目的操作数,src表示源操作数(下同)。指令实现的操作是将源操作数送给目的操作数。这种传送实际上是进行数据的“复制”,源操作数本身不变。,这种双操作数指
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微型计算机 原理

链接地址:https://www.31ppt.com/p-6572703.html