
上海工程技术大学微机原理与接口技术yp第3章8086的指令系统.ppt
122页单击此处编辑母版标题样式,,单击此处编辑母版文本样式,,第二级,,第三级,,第四级,,第五级,,,*,,城市轨道交通学院,,,,,,,,城市轨道交通学院,单击此处编辑母版标题样式,,单击此处编辑母版文本样式,,第二级,,第三级,,第四级,,第五级,,2007/01,信息学院计算机系统研究所,*,1,第,3,章,8086,的指令系统,2,几个概念,,8086,的寻址方式,,8086,指令集,,主要内容,3,CPU,内部,14,个,16,位寄存器,8086CPU,内部寄存器,问,4,一、几个概念,指令,:,是指使计算机执行某种操作的命令指令系统,:是指处理器所能,成的所有指令的集合,------,指令集,,每种计算机都有组它的指令系统机器指令,:,用二进制编码(代码各种组合)形式表示一条指令称为机器指令通常指令以二进制编码的形式,存放,在存储器中,,CPU,可以,直接识别,机器指令符号指令,:,用符号表示的指令称为符号指令5,指令的组成:,任意一条指令都由,操作码,和,操作数,构成,操作码,规定了计算机执行,,什么样操作,操作数,它指明了操作的对象和,,操作对象的地址,6,一条指令要解决的,两个问题,:,,,要指出进行什么操作,——,操作码;,,要指出操作数和操作结果放在何处,——,寻址方式。
因此:,7,,,,,组成,操作数,操作码,CPU,指令,[,标号,:],指令助记符,,[,操作数,[,,操作数,] ] [;,注释,],,寻找,操作数或操作数地址,的方式,指明了操作的,对象,和,,操作,对象的地址,规定了计算机执行,,什么样操作,任意一条指令都由,操作码,和,操作数,构成,格式,寻址方式,?,8,如数据传输,指令,,格式,,:,MOV,目的操作数,,,源操作数,(助记符),操作码部分,操作数,可见,,指令中,的操作数有源操作数和目的操作数之分,如:,MOV AX 1234H,9,二、,,8086,的寻址方式,,主要内容,:,,8086,的寻址方式说明,,寻址方式介绍,,立即数寻址;,寄存器,寻址;,直接,寻址;,,寄存器间接寻址;基址,/,变址寻址;,,基址+变址寻址;,I/O,端口寻址,,10,8086,的寻址方式说明,寻址方式:,是寻找,操作数或操作数地址,的方式存放位置:,8086,指令中的操作数有,三种,可能的存放位置① 操作数在指令中, 即指令的操作数部分就是操作数本身, 这种操作数叫,立即操作数,如:,MOV AX,,,1234H,,,11,②,操作数包含在,CPU,的某个内部寄存器中,,这种操作数叫,寄存器操作数,,这时指令的操作数部分是,CPU,内部寄存器的一个编码。
如:,MOV AX,,,BX,,,12,③,操作数在内存的数据区中,这种操作数叫,存储器操作数,, 这时指令的操作数部分包含此操作数所在的内存地址如:,MOV AX,,,[1234H],,,,此外, 操作数在端口中如:,IN AL,,,20,,,,13,,,逻辑地址,:,8086CPU,中,内存中任何存储单元的实际地址都由两部分组成:段基址和段内偏移地址,用段基址:段内偏移地址来表示有效地址,EA,,:,在,存储器寻址,时,指令的操作数部分给出的地址是,段内偏移地址,段内偏移量由几个基本部分组合而成, 所以也称为,有效地址,EA,★,★,14,,,,,组成,有效地址,EA,的基本部分包括,:,基址,寄存器内容、,变址,寄存器内容、位移量等其中,基址、变址寄存器中通常为某局部存储区的起点有效地址,EA,的,计算公式,如下:,,EA,=,[,基址寄存器,BX,、,BP,],+,[变址寄存器,SI,、,DI,],,,+,位移量,,,有效偏,,移地址,15,立即寻址,,操作数就在指令中提供,——,立即数,寻址方式,即操作数直接包含在指令中,它紧跟在操作码的后面,与操作码一起放在,代码段区域,中。
寻址方式介绍,,立即数总是和操作码一起被,取入,CPU,的指令队列,,在指令执行时,不再需要访问存储器16,立即寻址,,MOV AX,,,34EAH,,;将,34EAH,送,AX,,,AH,中为,,,34H,,,AL,中为,EAH,,MOV BL,,,20,,;将十进制数,20,送入,BL,寄存器,AX,17,,立即数可以是,8,位、,16,位操作数若是,16,位,低位字节存放在相邻两个字节存储单元的低地址单元中立即数可以用二进制数、八进制数、十进制数以及十六进制数来表示如:,,,MOV AL, 10,; 十进制数(D),MOV AL, 00100101B,; 二进制数(B),MOV AL, 0AH,; 十六进制(H),,18,寄存器寻址,,操作数在,CPU,内部,寄存器,中,——,寄存器寻址方式,如:,,,MOV BP,,,SP,;,其过程如图所示,:,,,,寄存器寻址 图示,SP,BP,,,19,,寄存器可以是,AX,、,BX,、,CX,、,DX,、,SI,、,DI,、,SP,、,BP,(,通用寄存器,)寄存器可用来存放,源,操作数,也可用来存放,目的,操作数寄存器寻址方式是,CPU,内部的操作,不需要使用访问总线周期,因此指令的执行速度比较快。
MOV AX,,,1234H,;,AX,的内容为,1234H,,MOV AL,,,AH,;,AH,的内容,12H,送,AL,如,20,直接寻址,,,操作数在内存单元中,指令中,[ ],给出被访问单元的,逻辑偏移地址,,,即,有效地址,(EA),,,再转换为物理地址,选中内存单元,读出操作数,——,直接寻址,,,如:,MOV AX,,[,3E4CH,],,,,EA,21,MOV AX,,[,3E4CH,];,段基址,(DS) × 10H +,3E4CH(,偏移地址,EA,),源,操作数,物理地址:,段基址,(DS) × 10H +,1234H,段基址,(ES) × 10H +,1234H,MOV [1234H],,,BL,;,,MOV,ES:[,1234H],,,BL,,目的,操作数,物理地址:,;,目的,操作数,物理地址:,在对内存进行寻址时,需计算物理地址物理地址= 段基址,× 10H,+,偏移地址,有效地址,(EA),,22,,在,默认,方式下,操作数存放在数据段(,DS,) 如果要对除,DS,段之外的其他段(,CS,、,ES,、,SS,)中的数据寻址,应在指令中增加,前缀,,指出段寄存器名,这就是,段跨越,。
23,MOV AX,,,[1070H],,,假设(,DS,),=3000H,,问存放,源,操作数的物理地址及其,AX,的内容物理地址,=段基址,(DS) × 10H + (EA),,,=,30000H+1070H=31070H,,指令的执行情况如图,指令的执行,结果,是:,(AX),=,2520H,, 即内存,31070H,,单元的内容传送到寄存器,AX,中,.,练习:,24,寄存器间接寻址,,,操作数在,内存,单元中,操作数的有效偏移地址(,EA,)不是直接给出的,,EA,在指定的寄存器中,即,EA[,寄存器,],如:,MOV SI,,,61A8H,,;,被访问内存单元逻辑,,偏移地址,61A8H,,送,SI,MOV DX,,[,SI,],;,SI,寄存器给出被访问,,内存单元逻辑偏移地址,,图解,25,,2000H,61A8H,物理地址,=(DS) ×10H,,+(SI),,若,(DS),,=2000H,×10H,,,DH,DL,DS,SI,,,,,,,,,,,261A8H,34H,12H,12H,34H,261A9H,26,BX,、,SI,、,DI,以,DS,作为默认段寄存器,,BP,、,SP,以,SS,作为默认段寄存器,BP,、,BX,为基址寄存器,,,SI,、,DI,为变址寻址寄存器,EA,可放在寄存器,BX,、,SI,、,DI,、,BP,、,SP,中。
默认下,可用段寄存器,DS,,,SS,27,逻辑地址的隐式用法:,,,DS,:,BX,;,SI,;,DI,,SS,:,BP,;,SP,操作数的物理地址计算公式有以下几个:,,物理地址,= (DS) ×10H+(BX),,,物理地址,= (DS) ×10H,,+(DI),,,物理地址,= (DS) ×10H,,+(SI),,,物理地址,= (SS) ×10H,,+(BP),,,物理地址,= (SS) ×10H,,+(SP),,,若指令中指定了跨越前缀(,段跨越,), 则可以从指定的段中获得操作数28,基址,/,变址寻址(相对寻址),,,操作数在,内存,单元中,在寄存器间接寻址给出的偏移量,(EA),基础上,加一个,相对位移量,,位移量是,带,符号的,16,位十六进制数当使用,BX,或,BP,时--基址寻址,,当使用,SI,或,DI,时--变址寻址,29,,如:,MOV CX,,,36H,[,BX,],EA=,36H+(,BX,),段基址,(,DS,),× 10H,+,36H+(BX),源操作数的,物理地址:,再如:,MOV,-,20,[,BP,],,,,AL,EA= -14,H+(,BP,),目的操作数,物理地址:,段基址,(,SS,) × 10H -14,H+(BP),30,基址+变址寻址,,,操作数在内存单元中,,EA,由三部分组成:基址寄存器,BX,或,BP,的内容+变址寄存器的内容+位移量,。
如:,MOV AX,,,8AH,[,BX,][,SI,],;,,,EA,=,8AH,+,(BX)+(SI),,,物理地址为(,DS,),X10H+ 8AH,+,(BX)+(SI),31,,在基址,加,变址寻址方式中,基址寄存器、变址寄存器的使用规定以及段寄存器的默认规定与,基址,/,变址,寻址方式相同,在寻址方式中, 当基址寄存器和变址寄存器的默认段寄存器,不同时,,一般由,基址寄存器,来决定默认用哪一个段寄存器作为段基址若在指令中规定了,段跨越,,则可以用其他寄存器作为段基址32,,物理地址,=(DS) ×10H+(BX)+(SI)+,位移量,,或 物理地址,= (,SS,) ×,,10H +(,BP,)+(,DI,)+,位移量,,,,如:,MOV AX, 20H ES:,[,BX][DI,],,则 物理地址,=(ES) × 10H +(BX)+(DI)+20H,逻辑地址的隐式用法:,段跨越写法:,33,I/O,端口寻址,8086,采用独立编址,因此,寻址通过,I/O,指令,,,见,I/O,指令34,三、,,8086,的指令集,8086,指令系统 按功能分,6,类:,数据传送类,,算术运算类,,位操作类,(逻辑运算与移位指令),,串操作类,,程序控制类,,处理机控制类,常用的符号,累加器,ax,al,,寄存器,r: ax,bx,cx,dx,si,di,sp,bp,….,,段寄存器,seg,:,ds,es,ss,cs,,内存,mem,:,,[nn], [bx],[si],[di],[bp],,[bx/bp+count], [si/di+count],,[bx+si/di+count], [bp+si/di+count],,立即数,im,,36,8086,指令集,-,数据,传送指令,通用数据传送指令,,累加器专用,(I/O),传送指令,,目标地址传送指令,,标志寄存器传送指令,,数据传送指令,37,数据传送类指令,,目标,指令的共同特点是:,1,、除,POP,和,SAHF,指令外,这类指令的操作结果不会影响,FR,寄存器中的标志。
2,、指令中有两个操作数,目的操作数和源操作数,其执行过程为:,,目的操作数 源操作数,,,当指令中仅列出一个操作数时,另一操作数为隐含39,传送指令(,MOV,),,,,指令格式:,MOV,目的操作数,源操作数,,8086,指令集,,-,数据传送指令,-,通用传送指令,40,,MOV,的数据传送方向示意图,不包括,IP,41,使用中需要注意的是:,,①,MOV,指令,不能,在,两个存贮器单元之间,进行数据直接传送②,MOV,指令,不能,在,两个段寄存器之间,进行数据直接传送③,立即数,不能直接传送给段寄存器④目的操作数,不能,为,立即数、,CS,⑤源操作数和目的操作数,数据类型,相同42,(2),堆栈操作指令,,进栈指令,PUSH,,,出栈指令,POP,,指令格式:,,,PUSH,源操作数,,,POP,目的操作数,,,源操作数可以是通用寄存器、段寄存器和存储器目的操作数可以是通用寄存器、段寄存器(,CS,除外),,或存储器43,,操作过程,:,,,PUSH,进栈指令使,SP-2→SP,,然后将,16,位的,源操作数,压入堆栈,先,高位,后低位POP,出栈指令的执行过程与,PUSH,相反。
它从当前栈顶,弹出,16,位操作数,到目的操作数,同时,SP+2→SP,,使,SP,指向新的栈顶44,说明:,①,堆栈操作总是,以字为单位进行,②,PUSH,和,POP,指令不影响标志位③ 允许,PUSH CS,,但不允许,POP CS,④ 堆栈的,“,后进先出,”,指令格式为:,,XCHG,目的操作数 ,源操作数,,XCHG R, OPRD,,OPRD: R, MEM,,,操作数不能为立即数;,,,源和目的不能同时为存储单元;,,,段寄存器不能作为操作数3)XCHG,交换指令,,46,8086,指令集,,-,数据传送指令,-,累加器专用传送指令,(1),输入输出指令,,输入指令格式:,,,,,IN,AL,,,n,,IN,AX,,,n,,IN,AL,,,DX,,IN,AX,,,DX,,输出指令格式:,,,,,OUT,n,,,AL,,OUT,n,,,AX,,OUT,DX,,,,AL,,OUT,DX,,,,AX,n,表示,8,位端口地址(,00H~FFH,),47,,在计算机中, 输入/输出操作是由,CPU,利用输入、 输出指令并通过累加器,AL,或,AX,进行的输入指令完成由输入端口到,CPU,的信息传送,输出指令完成从,CPU,到输出端口的信息传送。
,,指令功能,:,在,AL,或,AX,寄存器与,I/O,端口之间,传送,数据说明:,48,由指令直接提供端口号,如:,,IN AL,,,50H,;将,50H,端口的字节读入,AL,,IN AX,,,70H,;分别将,70H/71H,端口的,,内容读入,AL,、,AH,,OUT 44H,,,AL,;将,AL,中的内容输出到,44H,端口,,OUT 80H,,,AX,;将,AL,、,AH,中的内容分别输出,,到,80H,、,81H,两端口,,例子,49,端口号由,DX,间接给出如:,,IN AL,,,DX,;从,DX,所指的端口中读取,,IN AX,,,DX,;从,DX,和,DX+1,所指出的两个端口中读取,,OUT DX,,,AL,;将,AL,中的字节输出到,DX,所指的端口中,,OUT DX,,,AX,;将,AL,中的字节输出到,DX,所指的端口中,,,将,AH,中的字节输出到,DX+1,所指端口中的,例子,50,IN AL, 21H,返回,51,OUT 43H, AL,返回,指令格式为:,XLAT,,,功能,[bx,+,al],-,>al,,,例:查表求,n,的平方n:[0-9],,1,、将,0,-,9,的平方表建立在偏移地址为,2000H,的内存中,如图。
2,、,查表,,,3,),XLAT,换码指令,完成求,5,的平方指令序列为:,,MOV BX , 2000H ;,指向平方表的首地址,,MOV AL , 5,;将,5,换码成,5,的平方值,,XLAT,;查表,平方值在,AL,中,,3,、目标地址传送指令,,,1,),LEA,有效地址传送到寄存器,,2,),LDS,装入一个新的物理地址,,3,),LES,装入一个新的物理地址,,,4,、标志寄存器传送指令,,,1,),LAHF AH,送,FR,寄存器的低,8,位,,2,),SAHF FR,寄存器的低,8,位送,AH,,3,),PUSHF FR,寄存器推入堆栈,,4,),POPF,从栈顶中弹出存入,FR,寄存器,,56,数据传送类指令,,目标,指令中的数据类型,,无符号数,,,带符号数,,,ASCII,码,,,BCD,数(压缩,BCD,和非压缩,BCD,),,58,8086,指令系统,,-,算术运算指令,,算术运算指令主要涉及两种类型的数据,,无符号数,,8,位无符号数的范围为,0,~,255,,16,位无符号数的范围为,0,~,65 535,,有符号数,,,8,位有符号数的范围为,-128,~,+127,,16,位有符号数的范围为,-32 768,~,+32 767,所有算术运算指令,均影响状态标志,,(,PF,,,SF,,,ZF,,,CF,,,OF,),59,算术运算类指令表。
60,,(1),算术加法指令,ADD,,,指令格式,:,ADD,目的操作数, 源操作数,,,指令功能,:将源操作数与目的操作数相加,,,结果存放于,目的操作数,即,目的操作数,+,源操作数,→,目的操作数,8086,指令系统,,–,算术运算指令,-,加法指令,61,不带进位的加法指令,如:,,,ADD AL,,,50H,;,AL,和,50H,相加,,,结果放在,AL,中,,,ADD DI,,,SI,;,DI,和,SI,的内容,,相加,结果在,DI,中,ADD [BX+DI],,,AX,;,BX+DI,和,BX+DI+1,,2,个单元和,AX,相加,结果在,BX+DI,和,BX+DI+1,所指单元,,,ADD AX,,,[BX+2000H],;,BX+2000H,和,BX+2001H,,,所指单元内容和,AX,的内容相加,结果在,AX,中62,,(2),带进位算术加法指令,ADC,,,指令格式:,ADC,目的操作数,,,源操作数,,指令功能:将源操作数与目的操作数以及进位标志位,CF,的值相加,并将结果存放于目的操作数,即:,目的操作数,+,源操作数,+CF→,目的操作数,8086,指令系统,,–,算术运算指令,-,加法指令,63,如:,,ADC AX,,,SI,;,AX,和,SI,中的内容以及,,,CF,的值相加,结果在,AX,,ADC DX,,,[SI],;,SI,和,SI+1,所指的单元,,的内容和,DX,的内容以及,CF,,,的值相加,结果在,DX,,64,例:实现,32,位加法,,,,,MOV AX,,,0F271H,;加数的低,16,位,,,ADD AX,,,5698H,;与被加数的低,16,位相,,加,并影响,CF,,MOV DX,,,5B68H,;加数的高,16,位,,,ADC AX,,,0AC6DH,;与被加数的高,16,位相,,和,CF,相加,,,65,,(3),加,1,指令,INC,,,,指令格式,:,INC,目的,操作数,,,指令功能,:将指定目的操作数内容加,1,,INC,指令不影响进位标志,CF,。
8086,指令系统,,–,算术运算指令,-,加法指令,66,如:,,INC AX,;将,AX,中的内容加,1,,INC BL,;将,BL,中的内容加,1,,INC BYTE PTR [BX],,,;将,BX,所指单元的内容加,1,具体指令形式:,,,INC mem,;,mem←mem+1,,INC reg,;,reg←reg+1,操作数是内存寻址,需使用伪指令,(,4,),DAA,对压缩,BCD,数加法操作的结果进行校正,,指令功能:对,AL,寄存器的内容进行十进制调整,,,(,5,),,AAA,对非压缩,BCD,数加法操作的结果进行校正,,指令功能:对,AL,寄存器的内容进行十进制调整,,,8086,指令系统,,–,算术运算指令,-,加法指令,68,,,,,减法指令有算术减法,SUB,,,带借位算术减法指令,SBB,,,减,1,指令,DEC,,,比较,CMP,等指令,,求补,NEG,,,,8086,指令系统,,–,算术运算指令,-,减法指令,69,MOV AL,,,86H,,SUB AL,,,54H,;,(AL)=32H,,,(1),指令格式,:,SUB,目的操作数, 源操作数,8086,指令系统,,–,算术运算指令-算术减法指令,70,SUB BX,,,CX,;将,BX,中的内容减去,CX,中的,,内容,结果在,BX,中,,SUB [BP+2],,,CL,;将,BP+2,所指堆栈单元中的,,值减去,CL,中的值,结果放,,在,BP+2,所指的堆栈单元中,,SUB AL,,,20,;,AL,中的数减去,20,,,,结果在,AL,中,,SUB SI,,,5010H,;,SI,中的数减去,5010H,,,,结果在,SI,中,71,,,如:,,DEC AX,;将,AX,的内容减,1,,再送回,AX,中,,DEC BL,;将,BL,的内容减,1,,结果送回,BL,中,,DEC BYTE PTR,,[DI+2],,,;将,DI+2,所指单元的内容减,1,,结,,果送回此单元,,(2),减,1,指令,DEC,,,,指令格式,:,DEC,目的,操作数,,,指令功能,:将指定目的操作数内容减,1,。
8086,指令系统,,–,算术运算指令-算术减法指令,72,,(3),比较指令,CMP,指令格式:,CMP,目的操作数,,,源操作数,,指令功能:将目的操作数减去源操作数与,SUB,不同的是,,结果不予保存,仅影响标志位,CMP AX,,,2000H,;将,AX,的内容和,,,2000H,相比较,,,结果影响标志位,,CMP AL,,,50H,;将,AL,中的数和,50H,比较,,,结果影响标志位,8086,指令系统,,–,算术运算指令-算术减法指令,73,比较指令通常用于比较两个操作数的大小由受影响的标志位状态来判断两个操作数比较的结果不论是无符号数比较还是有符号数比较,若在比较指令后,,ZF,=,1,, 则两者相等,否则不相等若两者不相等,则可在比较两个数之后,利用其他标志位的状态来确定两者中哪个大74,,如果是两个,无符号数,比较, 则可根据进位标志,,,CF,的状态来判断:,,若,CF,=,1,,则,目的操作数,<,源操作数,;若,CF,=,0,,则,目的操作数,>,源操作数,如果是两个有符号数比较,则要根据,SF,和,OF,两个标志的关系来判断:,,若,SF,、,OF,为,0,,则,目的操作数,>=,源操作数,;,,若,SF,为,1,、,OF,为,0,,则,目的操作数,<,源操作数,。
在程序中,比较指令常用于条件转移之前,条件转移指令根据,CMP,操作之后的状态标志决定程序转移或不转移,75,,乘法指令包括无符号数乘法、 带符号数乘法两种无符号数乘法指令,MUL,指令格式,:,MUL,源操作数,,,指令功能,: 完成两个无符号操作数的相乘 要求被乘数放在,AL,或,AX,累加器中,用于字节运算和字运算, 另一乘数可通过指令中的源操作数(除,立即数方式,以外的寻址方式)获得8086,指令系统,,–,算术运算指令,-,算术乘法指令,76,,,说明:,,,8,位,×8,位=,16,位,,16,位,×16,位=,32,位;,,被乘数必须放,AX,或,AL,中,指令中隐含;,,,16,位运算结果放,AX,中,,32,位运算结果放,DX,和,,,AX,中;,,乘法指令的执行结果会使标志位发生变化 只有进位标志,CF,、溢出标志,OF,有意义,其它标志位无定义77,无符号数的乘法指令 例,,,MUL BL,;,AL,中无符号数与,BL,中无,,符号数相乘,结果在,AX,中,,MUL BX,;,AX,和,BX,中的无符号数,,相乘,结果在,DX,和,AX,中,指令规定的,DIV,无符号数除法,,,指令功能:完成两个操作数相除,,,,DIV OPRD,,AX/OPRD,AL:,商,,AH:,余数,,,DXAX/OPRD AX:,商,,DX:,余数,,IDIV,带符号数除法,,,指令功能:完成两个操作数相除,,,另外还有:,CBW,带符号数字节扩展,,CWD,带符号数字扩展,,AAD,非压缩,BCD,数除法校正,,,8086,指令系统,,–,算术运算指令,-,算术除法指令,79,(1),逻辑运算指令,AND,目的操作数,源操作数;,,OR,目的操作数,源操作数,,NOT,目的操作数,,XOR,目的操作数,源操作数,,TEST(,测试,),8086,指令系统,,–,位操作指令,逻辑运算指令,,逻辑移位指令,,,,AND,可以使指定位为,0,,OR,可以使指定位为,1,,XOR,可以使指定位为非,81,比如:,,AND AL,,,11H,;,AL,中内容和,11H,相与,结果在,,,AL,;,,OR AX,,,00F0H,;,AX,和,00F0H,相或,结果在,,,AX,,XOR AX,,,AX,;,AX,内容本身进行异或,,,结果,AX,清零,,,NOT AL,;,AL,中内容求反码,结果,AL,中,对某位进行屏蔽(,0,)或保留(,1,),对某位进行置(,1,)或保留(,0,),对某位求反(,1,)或保留(,0,),82,8086,指令系统,,–,位操作指令,,,测试指令,TEST,,,指令格式,:,TEST,目的操作数,,源操作数,,,指令功能,:,将,8,位、,16,位寄存器或存储器中的内容和源操作数,“,与,”,,。
83,说明,目的操作数不能为立即数,,TEST,指令和,AND,指令的运算规则相同,但它,不产生,运算结果,仅影响标志位,,,常用于对某位是,“,1,”,或,“,0,”,的检测如:判断,AX,寄存器中,D1,位是否为,“,1,”,TEST AX,,,0002H,,,执行后,检测,ZF,标志,若为,0,,则,D1,位为,1,2,、逻辑移位指令,,1,),SHL,逻辑左移,,指令功能:将,8,位、,16,位寄存器或存储器内容左移,移空的位补,0,,SHL OPRD, 1,,OR,,SHL OPRD,CL,,,2,),SAL,算术左移,,,,指令功能:将,8,位、,16,位寄存器或存储器内容左移,移空的位补,0,,,,举例:扩展,BCD,码,,BCD,码,,2,、逻辑移位指令,3,),SHR,逻辑右移,,,,指令功能:将,8,位、,16,位寄存器或存储器内容右移,移空的位补,0,,,4,),SAR,算术右移,,,指令功能:将,8,位、,16,位寄存器或存储器内容右移,移空的位由最高位补充举例:,BCD,码,扩展,BCD,码,,,5,),ROL,不带进位循环左移,,指令功能:将,8,位、,16,位寄存器或存储器内容左移,移空的位由移出位补充。
6,),ROR,不带进位循环右移,,指令功能:将,8,位、,16,位寄存器或存储器内容右移,移空的位由移出位补充7,),RCL,带进位循环左移,,指令功能:将,8,位、,16,位寄存器或存储器内容左移,移空的位由,CF,位补充8,),RCR,带进位循环右移,,,指令功能:将,8,位、,16,位寄存器或存储器内容右移,移空的位由,CF,位补充举例:倒序程序,,四、串处理指令,源操作数指针,DS,:,SI,,,,目的操作数指针,ES,:,DI,,每操作一次,SI,DI,修改一次,方向由,DF,控制,,重复操作的退出,,cx,控制,,条件控制,(ZF,标志,),四、串处理指令,1,、串传送指令,,MOVSB / MOVSW,,2,、串比较指令,CMPSB/COMPSW,,3,、串搜索指令,,SCASB/SCASW,,4,、串装入指令,LODSB/LODSW,,5,、串存储指令,STOSB/STOSB,,6,、指令前缀,,,REP,、,REPZ/REPE,、,REPNZ/REPNE,,,控制转移类指令,控制转移类指令,用于实现分支、循环、过程等程序结构,是仅次于传送,指令的最常用指令,,控制转移类指令通过改变,IP,(和,CS,),值,实现程序执行顺序的改变,91,8086,指令系统,,–,控制转移指令,控制转移指令中包括,5,类指令,即,,无条件转移和条件转移指令,,循环控制指令,,子程序调用和返回指令,,中断指令和中断返回指令,,处理器控制指令,控制转移类指令用来控制程序执行的顺序, 通过控制转移指令可实现各种结构化程序设计,如分支结构程序、循环结构程序等。
一、无条件转移指令,使程序转到指定的目标地址处,从目标地址处开始执行指令,,label,:要转移到的,目标地址(目的地址、转移地址),,JMP,指令分成,4,种类型:,,⑴ 段内转移、直接寻址,,⑵ 段内转移、间接寻址,,⑶ 段间转移、直接寻址,,⑷ 段间转移、间接寻址,JMP label,,;程序转向,label,标号指定的地址,目标地址的寻址方式,直接寻址方式,,转移地址直接在指令的机器代码中,,间接寻址方式,,转移地址在寄存器或主存单元中,用标号表达,用寄存器或存储器操作数表达,目标地址的范围:段内,段内转移,——,近转移(,near,),,在当前代码段,64KB,范围内转移(,±32KB,范围),,不需要更改,CS,段地址,,只要改变,IP,偏移地址,,段内转移,——,短转移(,short,),,转移范围可以用一个字节表达,在段内-,128,~+,127,范围的转移,,代码段,代码段,,目标地址的范围:段间,段间转移,——,远转移(,far,),,从当前代码段跳转到另一个代码段,可以在,1MB,范围,,需要,更改,CS,段地址和,IP,偏移地址,,目标地址必须用一个,32,位数表达,叫做,32,位远指针,,它就是逻辑地址,代码段,代码段,,,,实际编程时,汇编程序会根据目标地址的距离,,自动处理,成短转移、近转移或远转移,,,程序员可用操作符,short,、,near ptr,或,far ptr,强制,段内转移、直接寻址,JMP label,;,IP←IP+,位移量,,位移量是紧接着,JMP,指令后的那条指令的偏移地址,到目标指令的偏移地址的地址位移,,当向地址增大方向转移时,位移量为正;向地址减小方向转移时,位移量为负,,,jmp,again,,;转移到,again,处继续执行,,,……,,again:,,dec cx,,;标号,again,的指令,,,……,,,jmp,output,,;转向,output,,,……,,output:,,mov result,al,,;标号,output,的指令,实际为相对寻址,段内间接转移,,无条件转移指令的格式:,,,JMP REG16/MEM16 ; (IP)+DISP(16,位,),IP,,,实例,,,JMP SI,,JMP [BX],,JMP WORD PTR [BP][DI],段内转移、间接寻址,JMP r16/m16,;,IP←r16/m16,,将一个,16,位寄存器或主存字单元内容送入,IP,寄存器,作为新的指令指针,但不修改,CS,寄存器的内容,,jmp ax,;,IP←AX,,jmp word ptr [2000h],,;,IP←[2000h],,段间直接转移,,无条件转移指令的格式:,,,JMP FAR PTR LABEl,,,标号是一个远标号,,,该标号在另一个代码段内,段间转移、直接寻址,JMP far ptr label,,,;,IP←label,的偏移地址,,;,CS←label,的段地址,,将标号所在段的段地址作为新的,CS,值,标号在该段内的偏移地址作为新的,IP,值,,,程序跳转到新的代码段执行,,jmp far ptr otherseg,,,;远转移到代码段,2,的,otherseg,段间转移、间接寻址,JMP far ptr mem,,,;,IP←[mem],,,CS←[mem+2],,用一个双字存储单元表示要跳转的目标地址。
这个目标地址存放在主存中连续的两个字单元中的,低位字送,IP,寄存器,高位字送,CS,寄存器,,mov word ptr [bx],0,,mov word ptr [bx+2],1500h,,JMP far ptr [bx],;转移到,1500h:0,实例,CODE SEGMENT,,……,,MOV AX,1,,MOV BX,2,,ADD BX,AX,,,JMP LOOP1,,ADD BX,4,,ADD BX,5,,……,,LOOP1:,,……,,CODE ENDS,,程序中每条指令的寻址是由,CS,,,,和,IP,决定的,让程序转移到另一个位置需要,,修改,IP,(段内转移,/NEAR,)或,,,CS:IP(,段间转移,/FAR),,,如段内转移(,-128-+127,)则称,,为短转移,用,SHORT,来表示实例,MOV AX,0,,JMP NEXT,,MOV BX,0,,MOV CX,0,,NEXT:,,MOV AH,4CH,,INT 21H,MOV AX,0,,NEXT:,,MOV BX,0,,MOV CX,0,,JMP NEXT,,MOV AH,4CH,,INT 21H,说明:,,,目标地址的计算以当前,IP,的值为中心,前移或者后移,称为,相对转移,。
,以新的值完全代替当前的,IP,值,称为,绝对转移,,,在,86,系列中,所有的,段内直接转移都是相对转移,,所有的,段内间接转移,和,段间间接转移都是绝对转移,2,、条件转移指令,1,),,单条件转移指令,,①,,JC ;CF,标志为,1,,则转移,,②,,JNC ;CF,标志为,0,,则转移,,③,,JE/JZ ;ZF,标志为,1,,则转移,,④,,JNE/JNZ ;ZF,标志为,0,,则转移,,⑤,,JS ;SF,标志为,1,,则转移,,⑥,,JNS ;SF,标志为,0,,则转移,,⑦,,JO ;OF,标志为,1,,则转移,,⑧,,JNO ;OF,标志为,0,,则转移,,⑨,,JP/JPE ;PF,标志为,1,,则转移,,⑩,,JNP/JPO ;PF,标志为,0,,则转移,,,105,类别,指令名称,指令格式,,,,,,,条件转移,进位位为,1,转移,JC,目标标号,,进位位为,0,转移,JNC,目标标号,,等于,/,结果为,0,转移,JE/JZ,目标标号,,不等于,/,结果不为,0,转移,JNE/JNZ,目标标号,,大于,/,不小于也不等于转移,JG/JNLE,目标标号,,大于或等于,/,不小于转移,JGE/JNL,目标标号,,小于,/,不大于也不等于转移,JL/JNGE,目标标号,106,类别,指令名称,指令格式,,,,,,,条件转移,小于或等于,/,不大于转移,JLE/JNG,目标标号,,溢出转移,JO,目标标号,,不溢出转移,JNO,目标标号,,奇偶位为,0/,奇偶性为奇转移,JNP/JPO,目标标号,,奇偶位为,1/,奇偶性为偶转移,JP/JPE,目标标号,,符号标志位为,0,转移,JNS,目标标号,,符号标志位为,1,转移,JS,目标标号,107,类别,指令名称,指令格式,,,,,,循环控制,循环,LOOP,目标标号,,等于,/,结果为,0,循环,LOOPE/LOOPZ,目标标号,,不等于,/,结果不为,0,循环,LOOPNE/LOOPNZ,目标标号,,CX,内容为,0,转移,JCXZ,目标标号,,,,,中断,中断,INT,中断类型,,溢出时中断,INTO,,中断返回,IRET,108,,2),条件转移指令,,,条件转移指令以,某些标志位的状态或有关标志位的逻辑运算结果作为依据,,以此决定是否转移。
这些标志位通常由条件转移指令的上一条指令所设置条件转移指令将根据这些标志位的状态,判断是否满足对应的测试条件若满足条件,则转移到指令指定的地方,否则继续执行条件转移指令之后的指令执行条件转移指令不影响标志位109,,,,单条件转移指令,,,(1),指令格式:,JZ,操作数,,或,JE,操作数,,指令功能:转移条件:,ZF,=,1,,,,ZF,标志位为,1,,则转移,,,(2),指令格式:,JNZ/,JNE,操作数,,指令功能:,ZF,标志位为,0,,则转移,110,,,,,3).,指令格式:,JC,操作数,,,指令功能:转移条件:,CF,=,1,,即,,CF,标志位为,1,,则转移4) .,指令格式:,JNC,操作数,,指令功能:,CF,标志位为,0,,则转移,,111,,循环控制,LOOP,指令,,,指令格式:,,标号:,LOOP,目标地址,,指令功能:将,CX,的内容减,1,,,CX,若不为,0,,则继续循,,环,为,0,,则退出循环如:,,,MOV CX,,,0100H,;设置循环次数,,,KKK: MOV AX, 0B10H,,LOOP KKK,;,CX,减,1,,如不为,0,则循环,112,,LOOP,指令控制流程图,113,,子程序调用和返回指令,,,,,子程序调用及返回指令是程序设计中常用的指令。
在执行程序的过程中,它们可实现对某一个具有独立功能子程序的多次调用操作指令集提供了,CALL,子程序调用和,RET,返回指令114,,(1),子程序调用指令,,,指令格式,:,CALL,目的地址,,子程序调用指令可实现段间的子程序调用为了保证调用之后正确地返回,,CALL,指令需要把,CALL,指令的下一条指令所在的内存地址,(,称为断点,),压入堆栈进行保护,当子程序执行,RET,指令时,会将堆栈顶的内容弹出,放到,IP,和,/,或,CS,寄存器中115,例:,,CALL 1000H,;段内调用地址在指令中给出--直接寻址,,CALL AX,;段内间接调用地址由,AX,给出 --间接寻址,116,,对于段内的,直接,调用指令,其指令中的目的地址为一个,16,位目的地址的相对位移量CALL,指令的操作可完成,(SP)←(SP)-2,,并将,IP,压入堆栈,然后修改指令寄存器,IP,的内容,即,(IP)←(IP)+,相对位移量对于段内的间接调用指令,指令中所指定的,16,位通用寄存器或存储单元的内容为目的地址的位移量CALL,指令的操作可完成,(SP)←(SP)-2,,将,IP,压入堆栈,然后取出目的地址位移量送入指令寄存器,IP,。
117,,(2),返回指令,RET,,,指令格式:,RET,,,,子程序完成其功能操作之后,,RET,指令使其返回调用程序,,RET,指令为子程序的最后一条指令,RET,指令所完成的操作是从堆栈中弹出返回地址,送入指令寄存器,IP,和段寄存器,CS,功能:返回高一层的程序特点:可带参数,,,RET n,;,n,为,0,~,FFFFH,范围中的偶数118,,,子程序调用和返回指令用在人们事先安排好的程序中, 控制程序的执行顺序而在实际的系统运行过程中或在执行程序过程中常有各种随机的、不可预知的情况出现,要求计算机也能够对其实施控制处理,,,这种控制称为中断控制8086,指令系统,–,控制转移指令,-,中断指令和中断返回指令,,119,,中断,:当程序运行期间遇到某些特殊情况时,计算暂时停止现行程序的执行,转而执行一组专门的例行程序来进行处理,称~中断服务子程序:,转而执行的这组程序称为中断服务子程序,,两类中断,:内部中断和外部中断,,引发中断的情况有:,内部中断如,除法运算中的除以零所产生的溢出,程序设置的中断指令;外部中断主要来自输入,/,输出设备与,CPU,之间的通信中止等120,软件中断指令,:,INT n,,中断返回指令,:,IRET,中断类型号,n,为,,1,,为单步中断,,CPU,测试标志寄,,存器中的单步标志,IF,为,1,自动产生,2,,为非屏蔽中断,由,CPU,的外部,,管脚,NMI,上有中断引入,产生一个,,类型为,2,的中断,3,,断点中断,调试时可设置一个,,调试断点。
121,CPU,在响应了中断之后,断点的处理同子程序调用基本相同中断控制处理不仅要保存返回地址,还要保存有关的状态信息 保存方法是将指令寄存器,IP,、段寄存器,CS,、标志寄存器,FR,的内容压入堆栈, 进行保护中断结束之后,将,IP,、,CS,、,FR,弹出堆栈,继续执行被中断的程序122,完,。






![河南新冠肺炎文件-豫建科[2020]63号+豫建科〔2019〕282号](http://img.jinchutou.com/static_www/Images/s.gif)





