微机原理第3章8086指令系统.ppt

上传人:小飞机 文档编号:6284485 上传时间:2023-10-13 格式:PPT 页数:177 大小:1.18MB
返回 下载 相关 举报
微机原理第3章8086指令系统.ppt_第1页
第1页 / 共177页
微机原理第3章8086指令系统.ppt_第2页
第2页 / 共177页
微机原理第3章8086指令系统.ppt_第3页
第3页 / 共177页
微机原理第3章8086指令系统.ppt_第4页
第4页 / 共177页
微机原理第3章8086指令系统.ppt_第5页
第5页 / 共177页
点击查看更多>>
资源描述

《微机原理第3章8086指令系统.ppt》由会员分享,可在线阅读,更多相关《微机原理第3章8086指令系统.ppt(177页珍藏版)》请在三一办公上搜索。

1、 指令的基本概念和指令所包含的 基本内容。8086指令的格式及编码方式。8086指令的寻址方式及寻址过程。8086指令系统的分类、功能及操 作过程,每条指令的格式及用法。,内存单元的地址和内容简介:,内存由许多存储单元组成,每个内存单元可存放一组二进数。在微机中规定每个内存单元可存放8位二进制数,即一个内存单元存放一个字节的内容,为了区分各个不同的内存单元,就给每个存储单元编上不同的号码,即内存地址。CPU要访问某个单元时,先要通过地址总线送出该单元的地址号。,3.1 基本数据类型,尽管存储器是按字节编址的,但实际操作中,一个操作数可以是字节、字、双字节、十字节等各种形式。1.字节:计算机的基

2、本处理单位,一个字节由8位二进制位组成 2.字:通常微机的字长有8位、16位、32位、64位,故其字数据的存放所占内存单元的个数也不一样 3.双字:即2个字 4.四字:好4个字的长度,地址,存放内容二进制表示,十六进制表示,00000H,11000010,11000010,00001H,C2H,18H,00010010,00008H,12H,00110100,00001H,34H,01110000,FFFFFH,70H,内存单元的地址和内容示意图,3.2 指令概述,一、指令(Instruction):,指令通常以二进制代码的形式提供给计算机,这种指令称为机器指令。,指示计算机执行什么操作的命令

3、。,二、指令系统(Instruction System):,三、程序(Program):,完成某个特定任务而编制的一系列指令的有序集合。,程序的执行一般是按指令的先后次序一条一条执行,但遇到转移类指令时则可能改变指令的执行次序。,计算机所能执行的全部指令。,四、指令包含的基本内容,1.做什么操作,由指令的操作码字段规定。,2.操作数的来源,操作数来自于什么地方。由指令的操作数字段规定。,操作数的来源可以是:,3.操作结果的去向,操作的结果将存放在何处。,4.下一条指令的位置,指示下一条指令是顺序执行还是转移执行。,五、指令的种类,六、指令的表示方法,1.二进制代码表示机器语言指令,2.助记符表

4、示汇编语言指令,例:10001000 11011000,例:MOV BL,AL,MOV表示“传送”助记符,BL(寄存器)表示结果存放的位置,AL(寄存器)表示数据的来源。,助记符表示的指令便于书写、理解和记忆,但最终必须将助记符指令“翻译”成机器指令才能被识别和执行。这个过程叫“汇编”。,3.3 8086 CPU的寻址方式,地址:数据和指令存放的位置。,数据存放的位置可以是寄存器、存储器或I/O端口,指令存放的位置只能是存储器中的代码段。,寻址方式:寻找指令地址和操作数地址的方式。,寻址过程:形成指令地址和操作数地址的过程。,结果,2.立即数寻址,操作数作为立即数就在指令中给出。,例:MOV

5、AX,1234H,操作:把立即数1234H送寄存器AX中。,机器码:B8 34 12(低字节在地址小的单元),AH,AL,AX,.,B8,34,12,.,代码段(存储器中),操作码(B8),操作数(1234H)立即数,一条指令,指令执行后,AX=1234H(原有的内容被新的内容替换)。,MOV AX,1234H,3.寄存器寻址,操作数在某个寄存器中。,例:INC BL,操作:使BL中内容加1后送回,若BL=00H,则执行后BL=01H,BL=FFH,则执行后BL=00H(自动溢出),01,4.存储器寻址,操作数在存储器中的一个或几个单元中。,在这种寻址方式下,要找到该操作数,关键是必须找到该操

6、作数所在单元的地址。,由于8086采用存储器段组织结构,内存单元的地址由段起始地址(基地址)和该单元与段起始地址之间的距离(以字节数计)两部分共同决定。,段起始地址(基地址):某个段寄存器的内容(又称段基值)乘以16得到。,段内偏移量:该单元与段起始地址之间的距离(字节数)。又称有效地址EA。,待寻址的内存单元,(CS,DS,ES,SS)16 段基地址,内存单元物理地址,8086规定,在执行某种操作时,采用的段寄存器有一个预先的约定。故指令中一般只需给出有关EA的信息,则CPU将能够根据该次操作自动选用段寄存器,并与EA一起形成物理地址。存储器寻址的实质就是如何形成有效地址EA。,(1)直接寻

7、址方式,指令中以偏移量方式直接给出操作数的有效地址。即,EA=指令中给出的偏移量,例:MOV AX,1234H,机器码:A1 34 12,操作:把偏移量1234H作为EA,在数据段中找到相应的字单元,再将字单元的内容送AX。,本例执行完后,AX=3050H,EA=1234H,设DS=3000H,DS16,=30000H,=3000H16,MOV AX,1234H,b.段基值乘以16,相当于段基值(二进制表示)左移4位,或段基值(十六进制表示)在末尾添一个0H。,注:,(2)间接寻址方式,以间接的方式得到有效地址EA,有几个专用的寄存器可用于间接寻址:BX,BP,SI,DI。,a.基址寻址方式,

8、以BX作为基址寻址寄存器,操作数在数据段中。,以BP作为基址寻址寄存器,操作数在堆栈段中。,EA=BX或BP的内容+8位或16位位移量,例:MOV AX,BX,机器码:8B 04,操作:以BX的内容作为有效地址EA,在数据段中找到对应的字单元,再将该字单元的内容送AX中。,EA=BX(位移量为0),设DS=2000H,BX=1000H,本例执行后 AX=50A0H,DS=2000H,这种寻址方式的优点就在于可以随时修改BX寄存器的内容,而指向不同的存储单元。故BX又称为基址指针寄存器。,例:MOV AL,DATABP,这里DATA是以符号表示的位移量。,EA=BP+位移量DATA,操作:以EA

9、作为有效地址,在堆栈段中去 寻址字节单元,再将该字节单元内容送AL。,b.变址寻址方式,以SI,DI寄存器作为间接寻址寄存器,操作数在数据段中。,EA=SI或DI内容+8位或16位位移量,例:ADD AX,SI,EA=SI,操作:以EA作为有效地址,在数据段中找到某个操作数,再将该操作数与AX的内容相加,结果存放在AX中。,c.基址变址寻址方式,既有基址寄存器(BX或BP),又有变址寄存器参与(SI或DI)寻址,操作数在基址寄存器所规定的段中。,EA=BX或BP+SI或DI+8位或16位位移量,例:MOV AX,0260H BX SI,EA=BX+SI+0260H,操作数在数据段中,MOV A

10、X,INF BP+DI,EA=BP+DI+位移量INF,操作数在堆栈段中,*以上两种基址+变址的格式都是合法的。,(3)串操作指令寻址,这类指令规定:,源串操作数在数据段,且有效地址EA=SI,目的串操作数在附加段,且有效地址EA=DI,指令执行后,自动修改SI,DI的值,使之指向新的单元。,8086的段约定,8086在执行某种操作时,预先规定了采用的段寄存器和段,即有基本的段约定。如果要改变默认的段约定,则需要在指令中明 确指出来。,8086/8088的段约定,5.I/O端口寻址方式,(1)直接端口寻址,操作数在某个8位或16位端口中。,b.端口输出,OUT port,AL,a.端口输入,I

11、N AL,port,port=端口地址(8位,0255),例:IN AL,80H,操作:从端口地址为80H的端口输入一字节送AL。,(2)间接端口寻址,可以把端口地址送入DX,然后进行端口寻址:,输入:IN AL,DX 输出:OUT DX,AL,注:若用AX代替AL,则表示16位数据的端口。,端口地址大于255时,必须将端口地址送入DX,即采用间接寻址端口方式。,6.转移类指令的寻址方式,前面所述的各种寻址方式实际上是数据寻址方式,关键是如何找到操作数。,转移类指令寻址方式属于程序存储器寻址,关键是要找到下一条待执行指令的地址。,(1)转移范围,段内转移:转移范围在同一个段以内,段间转移:从一

12、个代码段转移至另一个代码段,(2)转移条件,无条件转移,有条件转移(转移范围仅为128+127),(3)转移方式,直接转移(转移目标直接在指令中给出),间接转移(转移目标预先放入某个寄存器或存储器中),寻址方式小结:,固定寻址:操作数固定在某个寄存器中,寄存器寻址:操作数在某个寄存器中,立即数寻址:操作数就是操作码后跟的立即数,存储器寻址,直接寻址,间接寻址,串操作寻址,基址寻址,变址寻址,基址+变址寻址,I/O端口寻址,直接端口寻址,间接端口寻址,转移类指令寻址,基址变址寻址,基址变址寻址(Based Index Addressing)中的操作数的有效地址是一个基址寄存器(如BX、BP)和一

13、个变址寄存器(如SI、DI)的内容之和,两个寄存器均由指令指出。操作数的段地址分配和前面所述相同,即使用默认段基址或使用段超越前缀来指定段基址。,相对基址变址寻址,课堂练习与思考:,1.请指出下列每条指令源操作数的寻址方式。,(1)MOV AX,BX(2)MOV CH,3AH(3)MOV BX,2000H(4)MOV DX,BX(5)MOV CX,BP+2(6)MOV AX,3BX DI(7)MOV AL,ES:SI(8)MOV BX,DS:BP,;寄存器寻址,操作数在BX中;立即数寻址,操作数为3AH;直接寻址,EA=2000H,数在数据段;基址寻址(寄存器间接寻址),EA=BX,数在数据段

14、;基址寻址,EA=BP+2,数在堆栈段;相对基址变址寻址,EA=BX+DI+3,数在数据段;含段超越的变址寻址,EA=SI,数在附加段;含段超越的基址寻址,EA=BP,数在数据段,课堂练习与思考:,2.MOV AX,BX+SI+0080H,即将BX与SI中的内容与0080H相加作有效地址。3.设BX=0123H DI=1000H DS=3200H,默认DS作为操作数对应的段寄存器(假定没使用段前缀),试指出下列指令的寻址方式,并写出其操作数的有效地址和物理地址。(1)MOV AX,1A38H(2)MOV AX,BX(3)MOV AX,BX+1A38H(4)MOV AX,BX+DI(5)MOV

15、AX,BX+DI+1A38H,课堂练习与思考:,解:(1)直接寻址 有效地址=1A38H,物理地址=32000H+1A38H=33A38H(2)寄存器间接寻址 有效地址=0123H,物理地址=32000H+0123H=32123H(3)寄存器相对基址寻址 有效地址=0123H+1A38H=1B5BH,物理地址=32000H+1B5B=33B5BH(4)基址变址寻址 有效地址=0123H+1000H=1123H,物理地址=32000H+1123H=33123H(5)相对基址变址寻址 有效地址=0123H+1000H+1A38H=2B5BH,物理地址=32000H+2B5BH=34B5BH,3.4

16、 8086指令系统,8086指令按功能分为六大类。,mem 存储器操作数 port 输入输出端口,可用 数字或表达式表示 opr 表示操作数 存储单元的内容 ac 累加器操作数(AX或AL)reg 寄存器 src 源操作数 segreg 段寄存器 dist 目的操作数 count 移位次数,可以是 1或CL data 立即数 S_ins 串操作指令 disp 8位或16位位移量,本节中要用到的一些符号所表示的含义:,一、数据传送指令,数据传送指令能够完成下列操作数的传送任务。,立即数,存储器,段寄存器CS,DS,ES,SS,通用寄存器组AX,BX,CX,DXBP,SP,SI,DI,(CS不能作

17、目的),1.通用数据传送指令,(1)MOV d,s,功能:将源操作数s复制到目标操作数d,源保持不变,目标被源代替。,注:d,s不能同时为存储器,错误指令:MOV BX,SI,d不能为立即数,错误指令:MOV 1234H,AX,d,s必须同时为字节型或字型,错误指令:MOV AX,BL,指令后的分号“;”以后为注释部分,对指令的执行没有任何影响,主要是便于阅读或解释指令的功能。,例:MOV AX,0;AX0,AX清0,执行后,AX=0,MOV SI,BP;SIBP,BP内容送SI,执行后,SI=BP,BP不变,MOV AL,BUFFERS;BUFFERS内存单元内容送入AL,这里,BUFFER

18、S代表符号地址,从该地址单元中取出内容送AL寄存器。,相当于直接寻址方式。,MOV AX,DATA SI+BX,EA=SI+BX+DATA,在数据段中寻找字单元,取出该字单元的内容送入AX。,设DS=3000H,SI=200H,BX=1000H,DATA的偏移量为100H,则,EA=SI+BX+DATA=200H+1000H+100H=1300H,物理地址=DS16+EA=30000H+1300H=31300H,即从31300H和31301H两单元中取出内容送AX。,MOV AX,DATA SI+BX,(2)PUSH s;SP2 SP,源操作数压入堆栈保存,POP d;SP所指堆栈的内容送目

19、标,SP+2 SP,例:PUSH BX;把BX内容压入堆栈,设 SS=2000H,SP=0040H,BX=2340H,则执行后,2340H被保存到堆栈,同时SP=003EH,BX内容不变,注:s和d只能为16位寄存器或存储器,(3)XCHG d,s;交换源和目标操作数,注:d=通用寄存器,s=通用寄存器或存储器,例:XCHG AX,SI+400H,(4)XLAT;查表转换,注:a.表首相对于段起始地址的偏移量预先送入BX中;,b.待查找的表内某单元相对于表首的偏移量送入AL中;,c.以EA=BX+AL在表中(数据段)查找,将查得的数据再送回AL中。,例:设表首的偏移地址为2000H,要查找表内

20、第4号单元(从0号算起)的内容并送回AL,则程序段如下:,MOV BX,2000HMOV AL,04HXLAT,设表中内容如下页图所示,则执行后,AL=09H,09,2.目标地址传送指令,对于任一个存储器操作数,由段地址和偏移地址确定了它们在存储器中的位置。目标地址传送指令就用于获得存储器操作数的段地址或偏移地址。,(1)LEA d,s,例:LEA BX,COUNTER;取COUNTER地址偏移量BX,(2)LDS d,s,功能:装入地址指针,段地址DS,偏移地址d,这条指令往往改变了段寄存器DS的内容,使得DS指向了另外一个数据段。,例:LDS SI,BASE,设执行前,DS=1000H,S

21、I=0000H,BASE偏移地址为0004H,10004H10007H单元内容依次为00H,30H,00H,20H,则,执行后,DS=2000H,SI=3000H,00,30,00,20,0004H,SI=3000H,原DS所指向的数据段,新DS所指向的数据段,1000H1610000HDS,BASE,30,00,2000,SI,DS,2000H1620000HDS,(3)LES d,s,功能:装入地址指针,段地址 ES,偏移地址d,3.标志位传送指令,(1)LAHF,功能:将标志寄存器低8位装入AH寄存器,(2)SAHF,功能:把AH的内容送入标志寄存器的低8位。,(2)PUSHF,功能:S

22、P-2 SP,同时将标志寄存器压栈至当前SP所指内容(2字节)。,(4)POPF,功能:将当前SP所指内容(2字节)弹出至标志寄存器,同时SP+2SP。,4.I/O数据传送指令,功能:从指定端口输入数据至累加器acc(AL或AX),port=0255,(1)IN acc,port,(2)IN acc,DX,功能:从DX指示的端口输入数据至累加器acc,DX=065535,(3)OUT port,acc,功能:将累加器的数据输出至指定端口。,(4)OUT DX,acc,功能:将累加器的数据输出到DX所指示的端口。,注:16位端口地址必须送入DX中。,若采用AX,则表示16位数据传送(输入/输出)

23、,(4)换码指令XLAT,功能:该指令通过AL和BX寄存器进行表格查找,将8位数装入AL中。它完成的操作为:AL BX+AL,XLAT指令常用于查表操作,即BX寄存器含有表格的起始地址,而AL中的值是作进入表格中的偏移量,查出表格中的内容送入AL中。,二、算术运算指令,算术运算指令的操作数可以是无符号数,也可以是有符号数。,算术运算指令一般影响标志位,而数据传送指令一般不影响标志位。,1.加法指令,(1)ADD d,s,功能:将s与d相加,结果在d中。根据操作结果设置标志位。,例:ADD BX+106BH,1234H,设DS=2000H,BX=1200H,EA=1200H+106BH=226B

24、H,物理地址:2000H16+226BH=2226BH,又设原来(2226BH)=90H,(2226CH)=30H,则指令执行后:3090H+1234H=42C4H,即(2226BH)=C4H,(2226CH)=42H,又 42C4H=0100,0010,1100,0100B,(2)ADC d,s,功能:将s与d再与进位CF相加,结果留在d中,ADC指令主要用于多字节相加。,注:若是立即数,且最高位为数码AF,则必须在前面添加一个0,以避免混淆。,(3)INC opr,功能:将opr加1后送回opr。,注:INC指令不影响进位标志CF。,该指令经常用于修改地址指针寄存器(BX,BP,SI,DI

25、),使之指向下一个单元。,2.减法指令,(1)SUB d,s,功能:dsd,同时影响标志位。,(2)SBB d,s,功能:dsCFd,同时影响标志位。,(3)DEC opr,功能:opr1opr,该指令与INC相反操作,也不影响进位标志CF。,(4)NEG d,功能:对d进行求补运算后送回(按位求反再加1)。,例:MOV AL,7FH,NEG AL,结果:AL=7F按位求反+1=80H+1=81H,(5)比较指令 CMP d,s,功能:作一次减法运算ds,但不回送结果,只根据结果设置标志位。,比较指令往往用于判断两数是否相等,或两数大小关系。若相等,则零标志ZF=1。,3.乘法指令,乘法指令在

26、指令中只出现一个操作数s(乘数),另一个操作数固定在累加器(AX或AL)中。,(1)MUL s,功能:无符号数乘法指令,a.8位乘法,被乘数=AL,乘数=s,积(16位)=AH:AL中,即在AX中,AH为高8位,AL为低8位。,b.16位乘法,被乘数=AX,乘数=s,积(32位)=DX:AX,DX为高16位,AX为低16位。,例:MUL BX,若执行前 AX=0012H,BX=0066H,则执行后 DX=0000H,AX=072CH,(2)IMUL s,功能:有符号数乘法指令,8086规定,有符号数一般采用补码表示。故有符号数作乘法运算时,必须先把它们转变为原码数相乘,积也为原码数,再将原码数

27、转变为补码数。这个工作由CPU自动完成。,例:MOV AL,88H;88H为 120的补码,MOV BL,2,IMUL BL,结果:AX=FF10H;FF10H为240的补码,若直接用MUL BL指令,则AX=0110H,4.除法指令,(1)DIV s,功能:无符号数相除,a.字节除,被除数=AX,除数=s(s0),结果:商=AL,余数=AH,b.字除,被除数=DX:AX,除数=s(s0),结果:商=AX,余数=DX,注:如果除数太小,使得商超出了一个字节或字所能表示的范围,则会产生“被0除”错误。,例:MOV AX,800HMOV BL,2DIV BL,结果错误,“被0除”,(2)IDIV

28、s,功能:带符号数除法,采用的固定寄存器与DIV相同。,(3)CBW和CWD,CBW:字节除法的符号扩展指令,功能:若AL为正数(D7=0)则 AH=00H,AL为负数(D7=1)则 AH=FFH,CWD:字除法的符号扩展指令,功能:若AX为正数(D15=0)则 DX=0000H,AX为负数(D15=1)则 DX=FFFFH,CBW和CWD一般用于带符号数除法指令之前。,5.十进制调整指令,运算器按二进制规律进行运算,如果参与运算的是BCD码数,则需要对结果进行调整。,(1)AAA,功能:对未组合型BCD码加法的结果进行校正(调整)。,校正(调整)方法:,若AL中低4位数值 9 或 AF=1,

29、则:,a.AL+6 AL,且 AL 高4位清0,b.AH+1 AH,否则不作调整。,(2)DAA,功能:对组合型BCD码加法的结果进行校正(调整)。,DAA同时对AL中低4位和高4位进行调整。,(3)AAS,功能:对未组合型BCD的减法结果进行调整。,功能:对组合型BCD的减法结果进行调整。,(4)DAS,最后结果 AL=00110110B(代表36),CF=0,(5)AAM,功能:对未组合型BCD的乘法结果进行调整。,AH,AL中表示未组合型BCD码72。,(6)AAD,功能:对未组合型BCD码(在AX中)进行除法前的校正。,调整后,AH=00000000,AAD相当于将两个未组合型BCD码

30、数合并为一个二进制数。,三、逻辑运算和移位循环指令,逻辑指令在底层软件中提供了对二进制位的控制。可以对位进行置位、清0或取反。常用于控制系统的I/O设备。,1.逻辑运算指令,(1)AND d,s,功能:s 和 d 按位相“与”,结果在 d 中。,AND指令通常用于使某些位清0,而另一些位保持不变。,例:AND BX,0F0FH,若BX=5555H,则执行后 BX=0505H,(2)OR d,s,功能:s 和 d 按位相“或”,结果送 d。,OR 操作经常用于将某些位置位,其它位不变。,(3)XOR d,s,功能:s 和 d 按位相“异或”,结果送 d。,XOR 操作经常用于将某些位取反,其它位

31、不变。,(4)NOT d,功能:将 d 按位求反后送回。,(5)TEST d,s,功能:s 和 d 按位相“与”,但不送结果,只根据结果设置标志位。,TEST 指令通常用于测试某些位是为0还是为1。,2.移位指令和循环移位指令,(1)算术移位,a.算术左移,左移 1 次:SAL d,1,左移多次:SAL d,CL(CL中为移位次数),例:MOV BL,10001001B,SAL BL,1,结果:CF=1,BL=00010010B,注:移位多次时,移位次数必须预先置入CL中。,右移 1 次:SAR d,1,右移多次:SAR d,CL,b.算术右移,(2)逻辑移位,a.逻辑左移 SHL与SAL等价

32、。,(3)循环左移,不带进位循环左移 ROL d,1ROL d,CL,b.带进位循环左移 RCL d,1RCL d,CL,(4)循环右移,a.不带进位循环右移 ROR d,1ROR d,CL,b.带进位循环右移 RCR d,1RCR d,CL,例:设32位数在DX:AX中,实现32位数整个左移1次。,SALAX,1,RCLDX,1,四、串操作指令,1.串的概念,串是连续存放在内存中的字节块或字块。每个串有一个起始地址和长度。,2.方向标志,方向标志DF选择串操作期间寄存器 DI,SI 的自增(DF=0)或自减(DF=1)操作。,3.串所在的段,规定:(1)源串在数据段,用SI作地址指针,(2)

33、目的串在附加段,用DI作地址指针,如果源串与目的串实质上在一个段中,则要令ES=DS。,4.串操作指令,(1)MOVS d,s,或写成 MOVSB(字节串传送)MOVSW(字串传送),重复前缀(REP)可以加到串数据传送指令上。REP前缀使得每次执行串指令后CX减1。CX减1以后,重复执行串指令,直到CX值为0时,指令才终止。,REP 无条件重复直至CX1CX=0,REPE/REPZ 当ZF=1且CX1CX0 则重复,REPNE/REPNZ 当ZF=0且CX1CX0 则重复,(2)串比较 CMPS d,s,CMPSB(字节串比较),CMPSW(字串比较),功能:作一次减法:DS:SI ES:D

34、I 但不送结果,同时自动修改SI,DI 串比较指令常常与有条件重复前缀配合。,(3)串搜索 SCAS d,SCASB(字节串搜索),SCASW(字串搜索),功能:做一次减法 AL ES:DI(字节)AX ES:DI(字)同时自动修改DI,但不回送结果,只 根据结果置有关标志位 串搜索指令也常与有条件重复前缀相配合。,(4)装载串 LODS s,LODSB(字节串),LODSW(字串),功能:DS:SI AL或AX 同时自动修改SI,(5)存储串 STOS d,STOSB(字节串),STOSW(字串),功能:AL或AX ES:DI 同时自动修改DI,例1.设源串在1000H:2000H开始的10

35、0个字节单元中,要求将源串送到3000H:1020H开始的目的串中。,MOV AX,1000H MOV DS,AX;置源数据段寄存器 MOV SI,2000H;置源串指针初值 MOV AX,3000H MOVES,AX;置目的附加段寄存器 MOVDI,1020H;置目的串指针初值 CLD;DF=0,使SI,DI自增 MOVCX,64H;置重复次数100D REP MOVSB;重复串传送,直到CX=0,初始化,例2.比较两个串,发现有不同的字符时则停止比较。,CLD MOV CX,100 MOV SI,2500HMOVDI,1400HREPE CMPSB;串比较,直到ZF=0或CX=0才停止。,

36、结果:若ZF=0,则两个串不相等;若ZF=1,则两个串相等。,五、程序控制指令,程序控制指令用来控制程序的走向,其实质是设法改变当前的CS和IP值,以使CPU转移到一个新的地址处执行程序。,A:Above 高于,B:Below 低于,C:Carry 进位,E:Equal 等于,G:Greater 大于,L:Less 小于,N:Not 无,O:Over 溢出,S:Sign 符号,PE:Parity Even 奇偶性偶,PO:Parity Odd 奇偶性奇,8086提供了四种控制转移指令:无条件转移指令,条件转移指令,循环控制指令和中断指令。除中断指令外,其它转移类指令都不影响状态标志。注意指令中

37、条件缩写字母的含意分别是:,1.无条件转移指令,(1)JMP 目标 a.段内直接转移 格式 JMP 目标标号 特点:仅仅改变IP值,而CS值不变。,例:JMP ADDI 这里ADDI为转移目标的标号。,指令中的位移量=标号偏移地址-当前IP值,操作码,转移指令JMP有三种编码格式,例:设标号偏移地址=1000H,执行完JMP指令后的当前IP值为0009H,则,位移量=1000H0009H=0FF7H,编码格式 E9 F7 0F(代表JMP 1000H),b.段内间接转移,格式:JMP BX,以BX的内容作为转移目标的偏移地址。,CS值不变,IP值改变。,c.段间直接转移,格式:JMP FAR_

38、ADDR,功能:转移到另一个代码段的目标FAR_ADDR处执行。即以另一个段的基地址CS,标号的偏移地址IP。,当前CS=2100H,JMP 0C 02 00 65,转移目标的偏移地址,转移目标的段地址,16 21000H,代码段1,16 65000H,新CS=6500H,代码段2,转移至此,当前IP=1500H,新IP=020CH,d.段间间接转移,格式:JMP BX+位移量,功能:以有效地址EA=BX+位移量作为开始地址,从前2个单元中取出内容IP,后2个单元中取出内容CS,以转移到新的地址执行程序。,例:JMP BX+ADDR3 设DS=2000H,BX=1400H,ADDR3=020A

39、H,则执行过程如下:,20000H,3000,4000,IP,CS,00 30 00 40,EA=1400H+020AH,执行跳转指令后,转移至4000H:3000H处执行程序。,数据段,(2)CALL 目标(过程名),CALL指令完成调用子程序的功能。,CALL指令完成的操作:,将程序的返回地址(CALL的下一条指令地址)压入堆栈中保存。,将目标的偏移地址IP。若为远调用则再将目标的段地址CS。,转移至新的目标(子程序),如果是近调用,则堆栈中只保存返回地址的偏移地址;若是远调用,则还必须保存返回地址的段地址。,在子程序中(过程),最后一条指令必须是返回指令RET,它将堆栈中保存的返回地址自

40、动弹出至CS和IP。,(3)RET n,返回指令。n为弹出值,它使SP值在正常返回之后的基础上再加上n(n为偶数)。这是为了丢弃原已压栈的一些参数。,2.条件转移指令,条件转移指令共有18条,这些指令根据状态标志决定是否转移,转移的目标范围在-128+127之间。,条件转移指令的执行流程,(1)无符号数条件转移指令,设执行了指令CMP AX,BX,其中AX,BX中均为无符号数(设AX=A,BX=B),则采用以下指令进行转移:,(2)有符号数条件转移指令,设执行了指令CMP AX,BX,其中AX,BX中均为有符号数(设AX=A,BX=B),则采用以下指令进行转移:,(3)单状态标志转移指令,3.

41、循环控制指令,以CX寄存器作为计数指针,每循环一次,CX减1,当CX减至0时,停止循环。,(1)LOOP 目标标号,功能:CX1 CX,若CX0则转移至目标,否则顺序执行下一条指令。循环前CX必须赋初值(循环次数),(2)LOOPE/LOOPZ 目标标号,功能:CX1CX,若CX0且ZF=1则转移至目标,否则停止循环(CX=0或ZF=0)。,(3)LOOPNE/LOOPNZ 目标标号,功能:CX1CX,若CX0且ZF=0则转移至目标,否则停止循环(CX=0或ZF=1)。,(4)JCXZ 目标标号,功能:若CX=0则转移至目标地址,否则顺序执行下一条指令。,4.中断指令,(1)中断入口地址表,8

42、086系统允许有256种中断类型(0255),各种类型的中断在中断入口地址表中占4个字节,前2个字节用于存放中断入口地址的偏移地址,后2个字节用来存放中断入口地址的段基址。,(2)中断的响应过程,a.标志寄存器FR压栈;,b.使IF=0,TF=0;,c.将当前程序断点的基址和偏移地址入栈保护(以便能够正确返回);,d.将中断类型号4,得到中断入口地址在中断入口地址表的位置,从该位置起连续的4个单元中获得中断入口地址置入CS,IP;,e.CPU转向中断服务程序执行相关程序。,(3)中断指令,a.INT n,功能:执行软件中断,中断类型号为n,n=0255。,b.INTO,功能:等价于INT 4,当运算结果产生溢出(OF=1)时,产生溢出中断。,c.IRET,功能:中断返回。执行的操作:,从堆栈中弹出断点地址送CS和IP;,恢复标志寄存器的内容;,CPU回到被打断的地址处继续执行主程序。,六、处理器控制指令,1.标志位操作指令,(2)CLD;使DF=0(用于串操作之中)STD;使DF=1,(3)CLI;使IF=0(禁止可屏蔽中断)STI;使IF=1(允许可屏蔽中断),2.同步控制指令,(5)NOP 空操作指令,CPU执行此指令时,不做任何具体的操作,但它消耗3个时钟周期的时间,它常用于程序运行中的短延时需求等。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号