资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第三章,一、数据传送指令,二、算术运算指令,三、规律运算与移位指令,四、把握转移指令,五、字符串处理指令,六、处理器把握指令,3.3,8086的指令系统,实质,转变IP(或IP和CS)的值,以转变指令的执行挨次。,全部转移指令不会影响标志位。,类型,无条件转移和过程调用指令,条件转移指令,循环把握指令,中断指令自学,四、把握转移指令,无条件转移和过程调用指令,JMP,CALL,RET,无条件转移,过程调用,过程返回,条件转移,JZ/JE,(10,条,),JA/JNBE,(8,条,),直接标志转移,间接标志转移,条件循环控制,LOOP,LOOPE/LOOPZ,LOOPNE/LOOPNZ,JCXZ,CX0,则循环,CX0,和,ZF=1,则循环,CX0,和,ZF=0,则循环,CX=0,则转移,中 断,INT,INTO,IRET,中断,溢出中断,中断返回,把握,转移条件 转向位置 简洁应用,格式:JMP 目的,功能:无条件转移到目的地址,分类:,依据转移的距离和寻址方式的不同分为4类。,段内直接转移,段内间接转移,段间直接转移,段间间接转移,1,、,无条件转移指令,段内直接转移,特点:直接给出转移地址,例如:JMP 0100H ;IP0100H,JMP SHORT NEXT;NEXT为标号,符号地址,JMP NEXT,段内间接转移,特点:以存放器或内存单元给出转移地址,例如:JMP BX ;IP BX,JMP WORD PTR BX;IP 字内存单元的内容,段间直接,转移,特点:转向另一代码段的标号处,格式:,JMP,FAR,PTR,标号,实质:,IP,远标号的偏移地址,CS,远标号的段地址,段间间接,转移,特点:转向双字内存单元所给定的地址,格式:,JMP,DWORD,PTR BX,实质:,IP,低字内容,CS,高字内容,无条件转移指令 JMP,简洁应用:一般目的地址承受标号直接给出。,例如:,JMP ABC,ABC:MOV AL,BL,例:BX=0100H,DS=2023H,CS=0200H,(20230H)=1234H,(20232H)=5678H,标号PROC的地址为:3000H:0300H。求以下转移指令的转向位置即执行后CS和IP值。,JMP 0700H,JMP BX,JMP WORD PTR BX,JMP DWORD PTR BX,JMP FAR PTR PROC,;,IP=0700H,CS=0200H,;,IP=0100H,CS=0200H,;,IP=1234H,CS=0200H,;,IP=1234H,CS=5678H,;,IP=0300H,CS=3000H,过程(也称子程序),可供其它程序调用的公用程序;能完成特定功能而又常常用到的独立的程序模块。,特点,过程调用时,IP(或IP和CS)的内容入栈。从过程返回时,栈顶的内容被弹出到IP(或IP和CS)。,一次定义,屡次调用;,两条相关指令:,过程调用指令 CALL,过程返回指令 RET,2,、过程调用及返回指令,CALL,过程调用指令,段内直接调用,例:,CALL NEAR,目标地址,段内间接调用,例:,CALL WORD PTR SI,段间直接调用,例:,CALL FAR,目标地址,段间间接调用,例:,CALL DWORD PTR SI,应用时:,CALL,过程名,与,JMP,的不同:,CPU,会自动保存断点,RET 过程返回指令,格式:RET,功能:与CALL指令相对应,通常作为一个子程序的最终一条指令,执行时从栈中弹出返回地址,即:栈顶的内容被弹出到IP(或IP和CS),用以返回到调用这个子程序的断点处。,格式:条件操作符JXX 标号,功能:条件成立则程序转至标号处执行;常用于比较指令或算术规律运算指令之后,以状态标志作为判别测试条件。,应用:实现程序的条件分支。,条件转移指令共有18条,可以为两类:,直接标志转移指令,间接标志转移指令,3,、条件转移指令,直接标志转移指令,特点:依据单个状态标志位的值准备是否转移。,JC ;CF=1,即有进位或借位则转移,JNC ;CF=0,没有进位或借位则转移,JZ/JE ;结果为零(ZF=1),则转移,JNZ/JNE;结果不为零(ZF=0),则转移,JS ;SF=1,即,符号位为负则转移,JNS ;SF=0,符号位为正则转移,JO、JNO、JP/JPE、JNP/JPO,例,1,:,ADD AL,BL,JC,NEXT,MOV AH,0,JMP,EXIT,NEXT:MOV AH,1,EXIT:,功能,:,AL+BL,,有进位则,AH,置,1,;否则,,AH,清,0,例2:,BUF DB 100 DUP(?),MOV BX,OFFSET BUF,MOV CL,64H,LP:MOV BYTE PTRBX,0,INC BX,DEC CL,JNZ LP,功能:将BUF单元开头的100个存储单元全部清0。,间接标志转移指令,特点:常放在CMP之后,用来推断两个数的大小。,推断无符号数的大小,JA ;高于则转移,JAE;高于等于则转移,JB ;低于则转移,JBE;低于等于则转移,推断有符号数的大小,JG ;大于则转移,JGE;大于等于则转移,JL ;小于则转移,JLE;小于等于则转移,例,1,:,CMP AL,,,60,JB,FAIL,CMP AL,,,85,JAE,GOOD,MOV AL,,,P,JMP,PRINT,FAIL,:,MOV AL,,,F,JMP,PRINT,GOOD,:,MOV AL,,,G,PRINT,:,程序功能:,推断AL的内容,假设,AL60,AL=F,60AL85,AL=P,AL85,AL=G,详见:P111 例3-89,例,2,:,TABLE,DB 01H,80H,0F5H,32H,86H,DB 74H,49H,0AFH,25H,40H,PLUS,DB 0,NEGT,DB 0,ZERO,DB 0,MOV CX,10,MOV BX,0,AGAIN,:,CMP,TABLEBX,0,JGE,GRET_EQ,INC NEGT,(,转右上,),JMP,NEXT,GRET_EQ,:,JG,P_INC,INC ZERO,JMP,NEXT,P_INC,:,INC PLUS,NEXT,:,INC BX,DEC CX,JNZ,AGAIN,功能:,分别统计正数、负数和零的个数。,详见:,P112,例,3-91,特点:,一组增加型的条件转移指令,把握程序段的重复执行,用在循环程序中以确定是否要连续循环。,循环次数通常置于CX中。,循环把握指令均不影响标志。,共有4条。,4、循环把握指令,LOOP循环指令,格式:LOOP label,功能:CX-1CX;,推断假设CX0,则转至label处执行;,否则退出循环,执行LOOP后面的指令。,LOOP指令与下面的指令段等价:,DEC CX,JNZ label,例:,OLDDB1,2,3,4,5,NEWDB 5 DUP0,MOVCX,5,MOVBX,00H,NEXT:MOVAL,OLDBX,ADDAL,5,MOVNEWBX,AL,INCBX,LOOPNEXT,功能:将内存中的5个数据分别加5后,存入新的内存单元。,LOOPE/LOOPZ 相等或结果为零时循环,功能:CX-1CX;假设CX0且ZF=1则转移;,LOOPNE/LOOPNZ 不相等或结果不为零循环,功能:CX-1CX;假设CX0且ZF=0则转移;,JCXZ 假设CX为0跳转,功能:推断假设CX0则转移;,留意:JCXZ指令不对CX的内容进展自动减1操作,一、数据传送指令,二、算术运算指令,三、规律运算与移位指令,四、把握转移指令,五、字符串处理指令自学,六、处理器把握指令,3.3,8086的指令系统,特点:对存储器中一串数据进展处理的指令,相关概念,字符串:一系列存放在存储器中的字或字节数据,不管它们是不是ASCII码。字符串长度可达64K字节。,字符串元素:组成字符串的字节或字。每种字符串指令对字符串元素只进展同一种操作。,字符串操作指令:对字符串进展的传送、比较、扫描、存储及装入等5种操作。,五、字符串处理指令,字符串操作指令的类型和格式,P96,表,3-8,指令名称,字节,/,字操作,字节操作,字操作,字符串传送,字符串比较,字符串扫描,字符串装入,字符串存储,MOVS,目的串,源串,CMPS,目的串,源串,SCAS,目的串,LODS,源串,STOS,目的串,MOVS,B,CMPS,B,SCAS,B,LODS,B,STOS,B,MOVS,W,CMPS,W,SCAS,W,LODS,W,STOS,W,说明:,每种指令都有3种格式。有两种方法说明是字节操作还是字操作。,一、用指令中的源串和目的串名(即操作数)说明是字节还是字;,二、在指令助记符后加B说明是字节,加W说明是字操作。,隐含商定,源串:地址为DS:SI;允许用段超越前缀修改段地址。,目的串:地址为ES:DI;不允许使用段超越前缀修改ES。假设要在同一段内进展串运算,必需使DS和ES指向同一段。,指针:每执行一次字符串指令,指针SI和DI会自动修改,以指向下一个待操作单元。,DF标志:把握字符串处理的方向。,DF=0为递增方向。每执行一次串操作:字节串操作时,SI、DI分别增1;字串操作时,SI和DI分别增2;,DF=1为递减方向。字节串操作时指针减1;字串操作时减指针2。,STD使DF置1,CLD将DF清0。,串长度:要处理的字符串长度(字节或字数)放在CX中。,重复前缀:,功能:在根本指令前加重复前缀,可加快串运算指令的执行速度。每重复执行一次,地址指针SI和DI按方向标志自动修改,CX的值自动减1。,类型与格式:,REP:无条件重复,常与(MOVS)连用,连续传送字符串。直到传送完毕,即CX0为止。,REPE/REPZ:相等/结果为零则重复,常与(CMPS)连用,连续比较字符串。当两个字符串对应字符相等(ZF=1)和CX0时,则重复进展比较,直到ZF=0或CX=0为止。,REPNE/REPNZ:不相等/结果非零则重复,常与(SCAS)连用,当结果非0(ZF=0)和CX0时,重复进展扫描,直到ZF=1或CX=0为止。,1、MOVS 字符串传送指令,格式:MOVS 目的串,源串,功能:SI作指针的源串中的一个字节或字DI作指针的目的串;自动修改指针SI和DI。,应用:,解决MOV不能直接在存储单元间进展数据传送的问题。,假设使用重复前缀,还可利用一条指令传送一批数据。,例:要求把数据段中以SRC_MESS为偏移地址的一串字符“HELLO!”,传送到附加段中以NEW_LOC开头的单元中,主要程序段:,LEA SI,SRC_MESS ;SI指向源串偏移地址,LEA DI,NEW_LOC ;DI指向目的串偏移地址,MOV CX,6 ;CX作串长度计数器,CLD ;清方向标志,地址增量,REP MOVSB ;重复传送串中各字节,CX=0,其中“REP MOVSB”指令可用以下几条指令代替:,AGAIN:MOVS NEW_LOC,SRC_MESS,DEC CX,JNZ AGAIN,2、CMPS 字符串比较指令,格式:CMPS 目的串,源串,功能:SI作指针的源串减去DI作指针的目的串数据,结果反映在标志位上;原值不变;源串和目的串指针自动修改,指向下一对待比较的串。,加重复前缀:,REPE/REPZ CMPS;直至CX=0(比完了)或ZF=0(两串不相等)时停顿操作。,REPNE/REPNZ CMPS;直至CX=0(比完了)或ZF=1(两串相等)时停顿比较。,例:比较两个字符串,一个是程序中设定的口令串PASSWORD,另一个是从键盘输入的字符串IN_WORD,假设输入串与口令串一样,程序将开头执行。否则,程序驱动PC机的扬声器发声,警告用户口令不符,拒绝往下执行。(P98 例3-76),这可以用CMPS指令来实现,有关程序段如下:,DATA SEGMENT;数据段,PASSW
展开阅读全文