计算机组成原理指令系统.ppt

上传人:小飞机 文档编号:6023926 上传时间:2023-09-15 格式:PPT 页数:161 大小:4.10MB
返回 下载 相关 举报
计算机组成原理指令系统.ppt_第1页
第1页 / 共161页
计算机组成原理指令系统.ppt_第2页
第2页 / 共161页
计算机组成原理指令系统.ppt_第3页
第3页 / 共161页
计算机组成原理指令系统.ppt_第4页
第4页 / 共161页
计算机组成原理指令系统.ppt_第5页
第5页 / 共161页
点击查看更多>>
资源描述

《计算机组成原理指令系统.ppt》由会员分享,可在线阅读,更多相关《计算机组成原理指令系统.ppt(161页珍藏版)》请在三一办公上搜索。

1、指令系统,4.1 寻址方式 4.1.1 与数据有关的寻址方式 4.1.2 与转移地址有关的寻址方式,第 4 章,4.2 指令系统 4.2.1 数据传送指令 4.2.2 算术运算指令 4.2.3 逻辑指令 4.2.4 串处理指令 4.2.5 控制转移指令 4.2.6 处理器控制指令,掌握8086 CPU的寻址方式 掌握汇编语言的指令系统,教 学 要 求,指令的功能该指令能够实现何种操作。通常指令助记符就是指令功能的英文单词或其缩写形式。指令支持的寻址方式该指令中的操作数可以采用何种寻址方式。指令对标志的影响该指令执行后是否对各个标志位有影响,以及如何影响。其他方面该指令其他需要特别注意的地方,如

2、指令执行时的约定设置、必须预置的参数、隐含使用的寄存器等。,第 4.1节,寻址方式,指令基本格式,一个,一个或几个,一条指令实际上包括两种信息即操作码和地址码。操作码用来表示该指令所要完成的操作,其长度取决于指令系统中的指令条数;地址码用来描述该指令的操作对象,或者直接给出操作数或者指出操作数的存储器地址或寄存器地址(即寄存器名)。,4.1.1 指令格式,指令中提供的地址数,存储单元地址码寄存器编号,1.指令提供地址的方式 显地址方式 隐地址方式,:指令中明显指明地址。:地址隐含约定,不出现在指令中。,直接或间接给出,使用隐地址可以减少指令中的地址数,简化地址结构。,4.1.1 指令格式,指令

3、和数据的联系和区别联系:都是以二进制码的形式存储的。区别:指令的地址是由程序计数器(PC)规定的;而数据的地址是由指令规定的。在程序执行过程中,要避免修改指令,但可以修改数据。,4.1.1 指令格式,指令系统,标号:给指令所在的地址取名字。注释:说明程序,汇编程序不对它作任何处理。操作码:指计算机所要执行的操作,是一种助记符。操作数:指出在指令执行过程中所需要的操作数,即指出操作数存放于何处 CPU内部的寄存器或内存储器。该字段可以是操作数本身外,也可以是操作数地址或是地址的一部分,还可以是其它有关操作数的信息。操作数通常为是0个-两个。8086指令系统的指令大多数是双操作数指令。,指令的一般

4、格式,指令系统,8086指令系统的指令大多数是双操作数指令。,其中:源操作数:直接给出参加指令操作的操作数本 身,或指出操作数放在什么地方;目的操作数:指出参加指令操作的操作数放在何 处,并指出操作结果送至何处。指令执行前后,源操作数不变。,操作数的形式(3种)立即数:操作数以常量形式出现(指源操作数)寄存器操作数:要操作的数据存在R中。内存操作数:要操作的数据存在M中。,指令的寻址方式,操作数可能在哪?,地址的表示方法,物理地址逻辑地址:段地址:段内偏移量,就是寻找操作数所在地址的方法。,寻址方式:或者是寻找操作数有效地址(EA)的方法。,有效地址(EA)的构成,位移量:disp8位或dis

5、p16位基址寄存器:存放在BX或BP中的内容变址寄存器:存放在SI或DI中的内容,不同的组合方式不同的寻址方式,与数据有关的寻址方式(7种),1.立即寻址 指令中直接给出操作数,演示,与数据有关的寻址方式(7种),即操作数放在CPU内部寄存器 AX、BX、CX、DX、DI、SI、SP和BP中,不需要访问存储器。,2.寄存器寻址指令中给出存储操作数的寄存器号,演示1,演示2,与数据有关的寻址方式(7种),3.直接寻址有效地址EA由指令直接给出。物理地址=(DS)10HEA,演示1,演示2,与数据有关的寻址方式(7种),3.直接寻址,4.寄存器间接寻址 指令中直接给出操作数EA;EA在基址寄存器B

6、P、BX或变址寄存器SI、DI中,而操作数则在存储器中。,BX、SI、DI作间址寄存器,指示数据段中的数据;BP作间址寄存器,则指示的是堆栈段中的数据。,与数据有关的寻址方式(7种),4.寄存器间接寻址,演示1,演示2,与数据有关的寻址方式(7种),5.寄存器相对寻址,与数据有关的寻址方式(7种),5.寄存器相对寻址,演示1,演示2,与数据有关的寻址方式(7种),6.基址变址寻址,与数据有关的寻址方式(7种),6.基址变址寻址,演示1,演示2,与数据有关的寻址方式(7种),7.相对基址变址寻址,与数据有关的寻址方式(7种),7.相对基址变址寻址,演示1,演示2,第 4.2节,指令系统,4.2,

7、8086指令系统按功能可分为6大类:数据传送指令 算术运算指令 逻辑指令 程序控制指令 串处理指令 输入输出类指令 处理机控制指令,指令系统,数据传送指令,数据传送指令,一.通用数据传送指令,(1)数据传送MOV指令,指令格式:MOV DST,SRC;指令功能:将数据从源地址传送到目的地址,具有“复制”性质;DST、SRC分别为目的操作数和源操作数.,例如:MOVAX,1234H MOVAL,CL,注意,MOV指令传送功能 MOV DST,SRC,MOV也并非任意传送,立即数,段寄存器CS DS ES SS,通用寄存器AX BX CX DXBP SP SI DI,存储器,4.2.1 数据传送指

8、令,具体实现,1)数据在CPU内部寄存器之间传送 MOV AL,BL;通用寄存器之间字节传送 MOV DI,BX;通用寄存器之间字传送 MOV DS,AX;通用寄存器传送到段寄存器 MOV AX,ES;段寄存器传送到通用寄存器,2)立即数传送至CPU内部通用寄存器或存储器中 MOV DL,58;8位立即数传送到通用寄存器 MOV BP,016AH;16位立即数传送到通用寄存器 MOV BYTE PTR BX,7BH;8位立即数传送到存储器 MOV WORD PTR BX,057BH;16位立即数传送到存储器,4.2.1 数据传送指令,3)数据在CPU内部寄存器与存储器之间的传送 MOV CL,

9、BX+5;字节传送 MOV AX,SI;变址传送 MOV DS,BX+SI;基址变址传送 MOV AX,DATABPSI;相对基址变址传送 MOV DI,BX;将BX内容传送到DI所指位置 MOV BX,DATA1;将符号地址DATA1的存储器内容传送到BX中,具体实现,4.2.1 数据传送指令,常见错误,CS和IP不能作为目的操作数 MOV CS,AX(X)MOV IP,AX(X),不允许数据直接从存储器传送到存储器 如要把DS段内偏移地址为ADDR1的存储单元的内容,传送至同一段内地址为ADDR2的存储单元中去,MOV ADDR2,ADDR1 MOV AL,ADDR1 MOV ADDR2,

10、AL,(X),(V),4.2.1 数据传送指令,常见错误,立即数不允许直接送段寄存器,也不允许在两个段寄存器之间直接传送信息。MOVDS,5000H(X)MOVDS,ES(X)可以用通用寄存器(如AX)为桥梁来实现传送。MOV AX,5000H MOV DS,AX(V),4.2.1 数据传送指令,一.通用数据传送指令,指令格式:XCHG OPR1,OPR2;执行操作:OPR1 OPR2;指令功能:将一个字节或一个字的源操作数和 目的操作数相交换;,(2)交换指令XCHG,交换可在reg之间、reg与mem之间进行。可以是字节交换,也可以是字交换。段寄存器内容不能交换。,4.2.1 数据传送指令

11、,复习提问,1.说明程序功能,寻址方式,判断对错并改正(1)MOV 2000H,BX(2)MOV 2000H,IP(3)MOV SS,2000H(4)MOV DS,SI+DI(5)MOV DS,ES(6)MOV BX+DI,AX(7)MOV BL,BP(8)MOV BX,BX+DI+2000H(9)MOV BH,BP+SI(10)MOV AL,ES:2000H(11)PUSH 2000H(12)POP DS,2.现有:(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100H)=12H,(20101H)=34H,(20102H)=56H,(20103H)=78H,(212

12、00H)=2AH,(21201H)=4CH,(21202H)=0B7H,(21203H)=65H。试说明下列各指令执行后,AX寄存器的内容。,(1)MOV AX,1200H(2)MOV AX,BX(3)MOV AX,1200H(4)MOV AX,BX(5)MOV AX,1100HBX(6)MOV AX,BXSI(7)MOV AX,1100HBXSI,复习提问,3.假定:(DS)=2000H,(ES)=2100H,(SS)=1500H,(SI)=00A0H,(BX)=0100H,(BP)=0010H,数据段中变量名VAL的偏移地址值为0050H。指出下列源操作数的寻址方式?有效地址和物理地址值是

13、多少?,(1)MOV AX,00ABH(2)MOV AX,100H(3)MOV AX,BX(4)MOV AX,BP(5)MOV AX,BX+10(6)MOV AX,BXSI(7)MOV AX,BX(8)MOV AX,VAL(9)MOV AX,ES:BX(10)MOV AX,SI(11)MOV AX,VALBX(12)MOV AX,VALBPSI,堆栈:在内存中开辟的一片数据存储区(设置在堆栈段内),存储方式:是一端固定,另一端活动,即只允许在一端向该存储区存入或取出数据,数据的存取遵循“先进后出”原则。从硬件来看,堆栈由一片存储单元和一个指示器(即堆栈指针SP)组成。堆栈的固定端称栈底(BOT

14、TOM)。堆栈指针SP用于指示数据进栈和出栈时偏移地址的变化,SP所指示的最后进入数据的单元称栈顶(TOP),堆栈中所有数据的存取都在栈顶进行。,二.堆栈操作指令,4.2.1 数据传送指令,二.堆栈操作指令,4.2.1 数据传送指令,(1)压栈指令格式 PUSH,格式为:PUSH SRC;(先减后压)执行的操作:(SP)(SP)2(SP)1,(SP)(SRC)SRC可以是内部寄存器、段寄存器、存储器,二.堆栈操作指令,(2)出栈指令格式 POP,格式为:POP DST;(先弹后加)执行的操作:(DST)(SP)1,(SP)(SP)(SP)2;DST可以是内部寄存器、段寄存器(CS除外)、存储器

15、。,4.2.1 数据传送指令,(2)堆栈操作指令,1)堆栈指令必须是16位双字节数,即每进行一次PUSH操作,SP减2;每进行一次POP操作SP加2;2)目的操作数DST,与原操作数SRC都不能为立即数;3)DST不能为代码段寄存器CS;4)堆栈指令不影响标志位寄存器FR的值。,注意,例:PUSH 1234H POP CS,不能用立即寻址方式 DST不能是CS,4.2.1 数据传送指令,例:实现两个字型存储器操作数BUF1及BUF2的交换,方法1:利用寄存器,方法1:利用堆栈,MOV AX,BUF1XCHG AX,BUF2MOV BUF1,AX,PUSH BUF1 PUSH BUF2 POP

16、BUF1 POP BUF2,例:寄存器间交换,MOV AX,1234H;AX=1234H MOV BX,5678H;BX=5678H XCHG AX,BX;AX=5678H,BX=1234H XCHG AH,AL;AX=7856H,4.2.1 数据传送指令,(2)POPF指令,指令功能:与PUSHF指令执行相反的操作,将堆栈栈顶 两个单元的内容弹出至FR。指令格式:POPF 执行操作:(FR低8位)(SP);(FR高8位)(SP1);(SP)(SP2);,指令格式:PUSHF 指令功能:把标志寄存器FR的内容压栈;执行操作:(SP)(SP2);(SP)(FR低8位);(SP1)(FR高8位);

17、,PUSHF和POPF是成对出现,用于保护和修改FR,标志传送指令,三.,4.2.1 数据传送指令,进入子程序push axpush bxpush cxpushfpopfpop cxpop bxpop ax返回,子程序内容,进入子程序首先保护现场,从子程序返回前恢复现场,例:子程序应用,4.2.1 数据传送指令,指令功能:将源操作数传送至一对目标寄存器;指令格式:LDSREG,SRC;执行操作:(REG)(SRC)(DS)(SRC2);,(2)LDS指针送寄存器和DS,4.2.1 数据传送指令,四.地址传送指令,(3)LES指针送寄存器和ES,指令功能:除地址指针的段地址送ES外,其他与LDS

18、类似;指令格式:LDS REG,SRC;执行操作:(REG)SRC;(ES)(SRC2);,4.2.1 数据传送指令,例:LEA BX,BX+SI+0F62H LDS SI,10H LES DI,BX,TABLE(DS):1000H,MOV BX,TABLE;(BX)=0040HMOV BX,OFFSET TABLE;(BX)=1000HLEA BX,TABLE;(BX)=1000HLDS BX,TABLE;(BX)=0040H;(DS)=3000HLES BX,TABLE;(BX)=0040H;(ES)=3000H,注意:*不影响标志位*REG 不能是段寄存器*SRC 必须为存储器寻址方式,

19、4.2.1 数据传送指令,算术运算指令,运算的操作数允许是字节或字;可以是有符号数,也可以是无符号数。指令中有单操作数指令,也有双操作数指令。,算术运算指令,算术运算指令,1.加法指令,(1)加法指令ADD,指令格式:ADD DST,SRC;执行操作:(DST)(SRC)(DST),指令格式:ADC DST,SRC;执行操作:(DST)(SRC)(DST)CF,运算结果影响的标志位:CF、DF、PF、SF、ZF和AFADC指令主要与ADD配合,实现多精度加法运算,注意:ADD和ADC影响标志位:,1 结果为负0 否则,SF=,1 结果为00 否则,ZF=,1 和的最高有效位 有向高位的进位0

20、否则,CF=,1 同号相同,结果相异0 否则,OF=,CF 位表示 无符号数 相加的溢出。OF 位表示 带符号数 相加的溢出。,算术运算指令,1.加法指令,ADD,ADC,例:n=8bit 带符号数(-128127),无符号数(0255),带符号数和无符号数都不溢出,带符号数溢出,无符号数溢出,带符号数和无符号数都溢出,例双精度数加法计算,已知:(DX)=0002H(AX)=0F365H(BX)=0005H(CX)=8100H 指令序列 ADD AX,CX;(1)ADC DX,BX;(2),(1)执行后(AX)=7465H CF=1 OF=1 SF=0 ZF=0,(2)执行后(DX)=0008

21、H CF=0 OF=0 SF=0 ZF=0,4.2.2 算术运算指令,(3)加1指令INC,指令格式:INCOPR 执行操作:(OPR)(OPR)1,【例】INC AL INC BYTE PTR BX INC WORD PTR BX,INC,4.2.2 算术运算指令,SUB,SBB,DEC,4.2.2 算术运算指令,2.减法指令,CMP,4.2.2 算术运算指令,例x、y、z 均为双精度数,分别存放在地址为X,X+2;Y,Y+2;Z,Z+2的存储单元中,用指令序列实现:w x+y+24-z,并用W,W+2单元存放w,MOV AX,XMOV DX,X+2ADD AX,YADC DX,Y+2;x+

22、y,ADD AX,24ADC DX,0;x+y+24,SUB AX,ZSBB DX,Z+2;x+y+24-z,MOV W,AXMOV W+2,DX;结果存入W,W+2单元,3.,(1)无符号数乘法指令MUL,乘法指令,指令格式:MUL SRC 指令操作:(AX)(AL)*(SRC);字节操作数(DX,AX)(AX)*(SRC);字操作数,4.2.2 算术运算指令,乘法指令对 CF/OF 的影响:,00 乘积的高一半为零11 否则,MUL指令,CF,OF=,00 乘积的高一半是低一半的符号扩展11 否则,3.,乘法指令,CF,OF=,IMUL指令,4.2.2 算术运算指令,除法指令,4.,指令I

23、DIV格式与操作同DIV指令。,4.2.2 算术运算指令,除法指令,4.,除法错中断:当被除数远大于除数时,所得的商有可能超出它所能表达的范围。如果存放商的寄存器AL/AX不能表达,便产生溢出;8086CPU中就产生编号为0的内部中断除法错中断。发生除法溢出的情况:对DIV指令,除数为0,或在字节除时商超过8位,或者在字除时商超过16位。对IDIV指令,除数为0,或在字节除时商不在-128127范围内,或者在字除时商不在-3276832767范围内。,4.2.2 算术运算指令,5.符号扩展指令,指令功能:AL AX指令格式:CBW 若(AL)的最高有效位为0,则(AH)=00H 若(AL)的最

24、高有效位为1,则(AH)=FFH,指令功能:AX(DX,AX)指令格式:CWD 若(AX)的最高有效位为0,则(DX)=0000H 若(AX)的最高有效位为1,则(DX)=FFFFH,4.2.2 算术运算指令,5.符号扩展指令,例(AX)=0BA45H CBW;(AX)=0045H CWD;(DX)=0FFFFH;(AX)=0BA45H,符号扩展;指用一个操作数的符号位(即最高位)形成另一个操作数。后一个操作数的各位是全0(正数)或全1(负数)。符号扩展不改变数据大小,即将原操作数的符号位复制到扩展后高半部分的各个位。,数据64H(表示+100),其最高位D7为0,符号扩展后:0064H(仍表

25、示数据100)数据ff00H(表示256),其最高位D15为1,符号扩展后:ffffff00H(仍表示有符号数256),4.2.2 算术运算指令,例 x y z v 均为16位带符号数,计算(v(x*y+z 540)/x,MOV AX,X IMUL Y;X*Y(DX,AX),MOV CX,AXMOV BX,DXMOV AX,ZCWD;Z(DX,AX),ADD CX,AXADC BX,DX;X*Y+Z(BX,CX),SUB CX,540 SBB BX,0;X*Y+Z-540,MOV AX,VCWD;V(DX,AX)SUB AX,CXSBB DX,BX;V-(X*Y+Z-540),IDIV X;(

26、V-(X*Y+Z-540)/X(AX)余数(DX),逻辑操作类指令,1.逻辑运算指令,指令功能:将OPR内容按位取反并送回指令格式:NOT OPR 指令操作:(OPR)(OPR),指令功能:两个操作数按位逻辑与运算,结果送目的操作数指令格式:AND DST,SRC指令操作:(DST)(DST)(SRC)运算法则:(全1为1,有0出0)11=1,10=0,01=0,00=0。该指令可以清除目的操作数中与源操作数置0的对应位,4.2.3 逻辑操作类指令,1.逻辑运算指令,(3),指令功能:两个操作数按位逻辑或运算,结果送目的操作数指令格式:OR DST,SRC指令操作:(DST)(DST)(SRC

27、)运算法则:(全0为0,有1出1)11=1,10=1,01=1,00=0该指令可以使操作数中某些位置1,而其他位保持不变,逻辑或指令OR,指令功能:两个操作数按位异或运算,结果送目的操作数指令格式:XOR DST,SRC指令操作:(DST)(DST)(SRC)运算法则:11=0,10=1,01=1,00=0 XOR指令可以将指定位求反,4.2.3 逻辑操作类指令,1.逻辑运算指令,(5)测试指令TEST,指令功能:与AND指令的唯一区别是结果不回送目的地址指令格式:TEST OPR1,OPR2指令操作:(OPR1)(OPR2)可在不改变源操作数的情况下,测试某一位或几位的值,4.2.3 逻辑操

28、作类指令,逻辑运算指令,4.2.3 逻辑操作类指令,例:屏蔽AL的第0、1两位 AND AL,0FCH,*OR 0 0 1 0 0 0 0 0*1*,*0 1 XOR 0 0 0 0 0 0 1 1*1 0,*AND 1 1 1 1 1 1 0 0*0 0,*AND 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0*,例:置AL的第5位为1 OR AL,20H,例:使AL的第0、1位变反 XOR AL,3,例:测试某些位是0是1 TEST AL,1 JZ EVEN,4.2.3 逻辑操作类指令,逻辑运算指令用途,AND指令:用于把某位清0(与0相与,也可称为屏蔽某位);某位保持不变(与

29、1相与)的场合。OR指令:用于把某位置1(与1相或)、某位保持不变(与0相或)的场合。NOT指令:可用于把操作数的每一位均变反的场合。XOR指令:用于把某位变反(与1相异或)、某位保持不变(与0相异或)的场合。TEST指令:可用于只测试其值而不改变操作数的场合。,例1设从键盘接收的一个十进制数的ASCII码在AL中,要求把它转换成非压缩BCD码的形式(数字0-9)。,AND AL,0FH;清0高4位,低4位不变,例2把AL中的非压缩BCD码转换成十进制数的ASCII码形式。,OR AL,30H;AL中的高4位变成0011B,低4位不变,4.2.3 逻辑操作类指令,例3 按位加运算。MOV AL

30、,45H;(AL)=45HXOR AL,31H;(AL)=74H,0100 0101(45H),(XOR)0011 0001(31H),0111 0100(74H),4.2.3 逻辑操作类指令,例4设某并行打印机的状态端口是379H,其D7位是忙闲位,若D70表示忙,为1表示闲,测试该打印机当前状态,若为忙继续测试,否则顺序执行下一条指令。,MOV DX,379HWT:IN AL,DX TEST AL,80H JZ WT,4.2.3 逻辑操作类指令,2.移位指令,4.3.3 逻辑操作类指令,带进位循环左移,循环右移,循环左移,CF中总是最后移进的位,当CNT1时,移位使符号位改变则置OF=1,

31、否则清0,不影响ZF、SF、PF,例1(AX)=0012H,(BX)=0034H,把它们装配成(AX)=1234H,例2(BX)=84F0H(1)(BX)为无符号数,求(BX)/2,MOV CL,8ROL AX,CLADD AX,BX,(2)(BX)为带符号数,求(BX)2,(3)(BX)为带符号数,求(BX)/4,SHR BX,1;(BX)=4278H,SAL BX,1;(BX)=09E0H,OF=1,MOV CL,2 SAR BX,CL;(BX)=0E13CH,4.2.3 逻辑操作类指令,程序控制类指令,程序控制类指令,1.无条件转移指令JMP,根据转移的距离,JMP指令可分为下列两类:段

32、内转移:在同一代码段内进行,又称近(Near)转移,只要修改IP的值即可实现。段间转移:可在不同代码段之间进行,又称远(Far)转移,需要同时修改CS和IP的值。,根据目标地址的指定方式,JMP指令又可分为直接转移和间接转移。直接转移:是指转移的目标地址直接出现在指令中,在程序执行前就已确定。间接转移:指转移的目标地址是寄存器或内存操作数的值,只有执行到该条指令时才能确定。,程序控制类指令,1.无条件转移指令JMP,指令格式:JMP 地址标号指令功能:无条件转移到DST所指向的地址,段内直接短跳转格式:JMP SHORT OPR操作:(IP)(IP)+8位位移量(符号扩展到16位)说明:其中8

33、位位移量是由目标地址OPR确定的。注意:转移格式只允许在-128到+127字节的范围内转移。,段内直接近转移格式:JMP NEAR PTR OPR操作:(IP)(IP)+16位位移量说明:它和段内直接短跳转一样,也采用相对寻址方式。注意:这种方式的位移量为16位,故它可转移到段内的任一个位置。,JMP label;段内转移、相对寻址;IPIP位移量 JMP r16/m16;段内转移、间接寻址;IPr16/m16 JMP far ptr label;段间转移、直接寻址;IP偏移地址,CS段地址 JMP far ptr mem;段间转移,间接寻址;IPmem,CSmem2,演示,演示,1.无条件转

34、移指令JMP,演示,演示,演示,4.2.4 程序控制类指令,4.2.4 程序控制类指令,2.条件转移指令,条件转移指令的通用汇编格式:JCC LABEL 功能:如果条件为真,则转向标号处,否则顺序执行下一 条指令。说明:其中cc为条件,LABEL是要转向的标号。在808680286中,该地址应在与当前IP值的 128127范围之内,即只能使用与转移地址有 关的寻址方式的段内短转移格式,其位移量占用 一个字节。,(2)有符号数的条件转移指令,(3)无符号数的条件转移指令,例1比较无符号数大小,将较大的数存放AX寄存器。CMPAX,BX;(AX)(BX)JNBNEXT;若AX=BX,转移到NEXT

35、XCHG AX,BX;若AX=BX,转移到NEXTXCHG AX,BX;若AXBX,交换NEXT:,4.2.4 程序控制类指令,3.,循环控制指令,(1)LOOP 循环指令,指令格式:LOOP 标号指令功能:(CX)1CX,若(CX)0,则转向标号处执行循环体,否则顺序执行下一条指令。,循环指令可以控制程序的循环。它们的特点是:循环入口地址(指令中的标号)只能在当前IP值的 128127范围之内。用CX作为循环次数计数器。不影响标志。,4.2.4 程序控制类指令,3.,循环控制指令,(2)LOOPE/LOOPZ相等或为零时循环指令,指令格式:LOOPZ(LOOPE)OPR指令功能:(CX)1C

36、X,若(CX)0 and ZF1,则转向标号处执行循环体,否则顺序执行下一条指令。,(3)LOOPNE/LOOPNZ不相等或不为零时循环指令,指令格式:LOOPNZ(LOOPE)OPR指令功能:(CX)1CX,若(CX)0 and ZF0,则转向标号处执行循环体,否则顺序执行下一条指令,4.2.4 程序控制类指令,3.,循环控制指令,例 用累加的方法实现MN,并把结果保存到 RESULT单元。,MOV AX,0;清0累加器 MOV BX,M CMP BX,0 JZTERM;被乘数为0转 MOV CX,N JCXZ TERM;乘数为0转 L1:ADD AX,BX LOOP L1 TERM:MOV

37、 RESULT,AX;保存结果,4.2.4 程序控制类指令,过程调用指令CALL必须同返回指令RET成对使用。过程定义的形式如下:过程名PROC near/far过程体RET 过程名ENDP,过程调用与返回指令,4.,段内调用:子程序与调用指令在同一个段内 包括:段内直接近调用 段内间接近调用段间调用:子程序与调用指令在不同段内 包括:段间直接远调用 段间间接远调用,4.2.4 程序控制类指令,过程调用与返回指令,4.,4.2.4 程序控制类指令,过程调用与返回指令,4.,二、段间调用,执行操作:保存断点(IP和CS入栈):(SP)(SP)-2;(SP)+1,(SP)(CS)(SP)(SP)-

38、2;(SP)+1,(SP)(IP)重新设置IP值:段间直接远调用(IP)偏移地址;(CS)段地址 段间间接远调用:(IP)(EA);(CS)(EA+2),段间直接远调用 指令格式:CALL FAR PTR 过程名段间间接远调用:指令格式:CALL DWORD PTR 过程名,4.2.4 程序控制类指令,过程调用与返回指令,(2),段内近返回指令格式:RET执行操作:(IP)(SP)+1,(SP)(SP)(SP)+2,RET返回指令,段间远返回 指令格式:RET 执行操作:(IP)(SP)+1,(SP);(SP)(SP)+2(CS)(SP)+1,(SP);(SP)(SP)+2,4.,4.2.4

39、程序控制类指令,中断指令,5.,(1)软中断指令,指令格式:INT N执行操作:(SP)(SP)2;(SP)+1,(SP)(PSW)(SP)(SP)2;(SP)+1,(SP)(CS)(SP)(SP)2;(SP)+1,(SP)(IP)(IP)(N*4);(CS)(N*4+2),(2)中断返回指令,指令格式:IRET执行操作:(IP)(SP)+1,(SP);(SP)(SP)+2(CS)(SP)+1,(SP);(SP)(SP)+2(PSW)(SP)+1,(SP);(SP)(SP)+2,4.2.4 程序控制类指令,0923:0000 MOV SP,10H0923:0003 M0V AX,1234H09

40、23:0006 MOV BX,3673H0923:0009 PUSH AX(1)0923:000A CALL SUBR(2)0923:000D POP CX0923:000E MOV AH,020923:000F MOV DL,35H0923:0012 INT 21H0923:0013 INT 3H0923:0015 SUBR:POP AX0923:0016 POP CX(3)0923:0017 SUB CX,BX0923:0018 PUSH CX0923:001A PUSH AX(4)0923:001B RET(5),写出标号指令执行后AX,BX,IP,SP的值,数据串操作类指令,4.2.5

41、 数据串操作类指令,“串”是指一组连续存取的数,所占用的M单元一定是连续一片M区域.数据传送类指令每次只能传送一个数据,若要传送大批数据就需要重复编程,这样就浪费了大量的时间和空间。利用串操作指令可以方便地处理字符串或数据块。,4.2.5 数据串操作类指令,一、串指令的特点1指令格式 串指令可以显式地带有操作数,也可以使用隐含格式,经常使用隐含格式。例如串传送指令MOVS,可以有以下几种格式:显式:MOVS DST,SRC隐式:MOVSB;字节传送 MOVSW;字传送 MOVSD;双字传送若指令的最后一个字母是B,则实现字节传送;若是W,则实现字传送;若是D,则实现双字传送。操作数时应先建立地

42、址指针。,一、串指令的特点2操作数串指令可以处理寄存器操作数和存储器操作数。若为R操作数则只能放在累加器中,对于字节操作数应放在AL中,字操作数放在AX中。对于M操作数应先建立地址指针:若为源操作数,DS:SI,允许使用段超越前缀。若为目标操作数,ES:DI,不允许使用段超越前缀3地址指针的修改串指令执行后系统自动修改地址指针SI、DI。若为字节型操作其修改量为1,若为字型操作其修改量为2,若为双字型操作其修改量为4。,4.2.5 数据串操作类指令,4方向标志 DF决定地址指针的增减方向。若DF0,则地址指针增量;若DF1,则地址指针减量。可以用CLD和STD指令复位 和置位DF。,一、串指令

43、的特点,5重复前缀串指令前可以加重复前缀REPEREPZ、REP或REPNEREPNZ,使后跟的串指令重复执行。重复次数应事先初始化在计数器CX中。,4.2.5 数据串操作类指令,4.2.5 数据串操作类指令,1.串传送指令 MOVS,MOVS(Move String):串传送指令格式:MOVS DST,SRC MOVSB MOVSW指令功能:ES:DI DS:SI;将DS:SI所指源串的1个元素复制到ES:DI所指的内存单元SI和DI增加或减少1/2。若DF=0,则增加,否则减少。对标志位的影响:无。,演示,演示,4.2.5 数据串操作类指令,2.串比较指令 CMPS,CMPS(Compar

44、e Strings):串比较 指令格式:CMPS SRC,DST CMPSB CMPSW指令功能:DS:SI ES:DI;将DS:SI所指源串的1个元素与ES:DI所指目的串的1个元素进行比较,不传送结果,只根据比较结果设置标志位。然后,SI和DI增加或减少1/2/4。,4.2.5 数据串操作类指令,3.串扫描指令 SCAS,SCAS(Scan String):串扫描指令格式:SCAS DST SCASB SCASW 指令功能:(先将AL/AX/关键字),AL/AXES:DI;将AL/AX与ES:DI所指目的串进行比较,不传送结果,只根据比较结果设置标志位。然后,DI增加或减少1/2。,4.2

45、.5 数据串操作类指令,4.重复前缀,无条件重复前缀 REP 当CX 0重复执行后面的串指令,每执行1次,CX=CX 1;若(CX)0,则结束重复(相等/为零时)重复前缀REPEREPZ 当CX 0且ZF=1时,重复执行后面的串指令;每执行1次,CX=CX 1,若(CX)0(计数到)或ZF0(不相等),则结束重复。,4.2.5 数据串操作类指令,4.重复前缀,(不等/不为0时)重复前缀 REPNEREPNZ 当CX 0且ZF=0时,重复执行后面的串指令;每执行1次,CX=CX 1,若(CX)0(计数到)或ZF1(相等),则结束重复。说明:若CX初值为0,则不执行任何操作,而且标志位不变。,演示

46、,4.2.5 数据串操作类指令,串指令的用途串指令主要用于处理连续的内存单元,与重复前缀配合使用更有效。MOVS用于将一个内存块的数据复制到另一块;CMPS用于比较两个内存区的数据;SCAS可以在一个内存区中扫描与给定值首次 匹配或不匹配的元素;,4.2.5 数据串操作类指令,例1 已知:在某50个字节的字符串中查找是否有$字符,若有,将该字符的地址送入BX;否则将BX清0,字符串的偏移地址为0100H。,CLD MOV CX,50 MOV DI,0100H MOV AL,$,AND CX,0FFH,REPNE SCASB,JZ ZER,MOV BX,DI JMP STOPSTOP:HLT,D

47、EC DI,ZER:MOV BX,0,例2 检验100个字节被传送的数据是否与源串完全相同。若相同将BX清0,若不同BX指向源串中第一个不相同字节的地址,并将该字节的内容保留在AL中。假设源串的偏移地址为2400H,目标串的偏移地址为0100H。,MOV BX,SI MOV AL,SI JMP STOP,CLDMOV CX,100MOV SI,2400HMOV DI,0100H,AND CX,0FFH,DEC SI,EQQ:MOV BX,0STOP:HLT,JZ EQQ,REPE CMPSB,输入输出指令,4.2.6 输入输出指令,【预备知识】,I/O接口包含多个存放数据、状态和控制信息的寄存

48、器,分别以端口地址标识。数据的输入/输出是通过I/O端口实现的。80 x86系统通过I/O指令实现对I/O端口的读写。,2.接口与端口的关系,数据信息状态信息控制信息,1.外部设备的信号,指令格式:IN 累加器,PORT功 能:把外设端口(PORT)的内容传送给累加器。,4.26 输入输出指令,四种形式:,1输入指令 IN,4.2.6 输入输出指令,端口地址PORT 是一个8位的立即数,其范围为0-255;可以传送的数据为8位、16位或32位,相应的累加器 选择AL、AX或EAX;若端口号在0-255之间,端口号直接写在指令中;此为直接端口寻址方式若端口号大于255,端口号通过DX寄存器间接寻

49、址,即端口号应先放入DX中。此为间接端口寻址方式。输入指令不影响标志位。,【例1】(1)IN AL,21H;AL(21H端口)(2)IN AX,21H;AX(21H,22H端口)(3)MOV DX,3F8H IN AL,DX;AL(3F8H端口),4.2.6 输入输出指令,指令格式:OUT PORT,累加器功 能:把累加器的内容传送给外设端口。,4.2.6 输入输出指令,2输出指令 OUT,四种形式:,累加器、端口号的选择,标志位的影响同IN指令。,【例2】对80H 端口下字节数据作取反操作。,4.2.6 输入输出指令,IN AL,80H NOT AL OUT 80H,AL,若端口地址改为80

50、0H,程序作何修改?,MOV DX,800H,DX,DX,I/O端口与存储器统一编址把内存的一部分地址分配给I/O端口,一个8位端口占用一个内存单元地址;不设置专门的I/O指令;,I/O端口独立编址内存储器和I/O端口各自有自己独立的地址空间;访问I/O端口需要专门的I/O指令(如8086 CPU),4.2.6 输入输出指令,3.I/O端口编址方式,优点:使用方便,降低CPU电路的复杂性;,缺点:减少了内存可用范围;难以区分访问内存和I/O的指令,降低了程序的可读性和可维护性;,8086用于寻址外设端口的地址线为16条,无需分段,端口最多为21664K个,端口号为0000H FFFFH;PC系

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号