资源预览内容
第1页 / 共36页
第2页 / 共36页
第3页 / 共36页
第4页 / 共36页
第5页 / 共36页
第6页 / 共36页
第7页 / 共36页
第8页 / 共36页
第9页 / 共36页
第10页 / 共36页
亲,该文档总共36页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第三章 指令系统,三峡大学,陈慈发 07176394358,13972597617 chcf0415126.com,1,2,8086CPU的指令格式,8086CPU的指令系统,3,8086CPU的寻址方式,指令系统,指令分类,数据传送指令 算术运算指令 逻辑运算与移位指令 串操作指令 控制转移指令 处理机控制指令,逻辑运算指令(5条),实现与、或、非、异或、测试等逻辑运算 操作数的搭配关系同算术运算 除逻辑“非”指令不影响标志外,其他逻辑运算指令均影响标志SF、ZF和PF,而OF和CF一定被置0,AF不确定,1、逻辑“与”指令 AND 格式:AND d,s 功能: (d) (d) (s) 说明:将目的操作数d与源操作数s按位相“与”结果送回d中,常用于使某些位清0,内 存,立即数,AH,AL BH,BL CH,CL DH,DL,AX,BX CX,DX SI,DI BP,SP,例如: AND AX,BX AND CL,SI AND BXDI-10H,WORD PTR 80H AND CH,AL AND BX,1 AND BYTE PTR 20H,20H AND AL,30H AND BYTE PTR DI,12H,OFCF0,其它标志位受影响 d、s必须具有相同的字长 AND AX, BL d、s不能为段寄存器 AND DS, 2000H d不能是立即数 AND 10H, AX,【例】屏蔽AL的0,1两位。 AND AL,0FCH,【例】将AH的高4位清0。 AND AH,0FH,【例】将BX的低4位清0。 AND BX,0FFF0H,2、逻辑“或”指令 OR 格式:OR d,s 功能: (d) (d) (s) 说明:将目的操作数d与源操作数s按位相“或”结果送回d中,常用于使某些位置位(置1),内 存,立即数,AH,AL BH,BL CH,CL DH,DL,AX,BX CX,DX SI,DI BP,SP,例如: OR AX,BX OR CL,SI OR BXDI-10H,WORD PTR 80H OR CH,AL OR BX,1 OR BYTE PTR 20H,20H OR AL,30H OR BYTE PTR DI,12H,OFCF0,其它标志位受影响 d、s必须具有相同的字长 OR AX, BL d、s不能为段寄存器 OR DS, 2000H d不能是立即数 OR 10H, AX,【例】将AL的0,1两位置1。 OR AL,03H,【例】将AH的高4位置1。 OR AH,0F0H,【例】将BX的低4位置1。 OR BX,000FH,3、逻辑“异或”指令 XOR 格式:XOR d,s 功能: (d) (d) (s) 说明:将目的操作数d与源操作数s按位相“异或”结果送回d中,常用于使某些位取反,内 存,立即数,AH,AL BH,BL CH,CL DH,DL,AX,BX CX,DX SI,DI BP,SP,例如: XOR AX,BX XOR CL,SI XOR BXDI-10H,WORD PTR 80H XOR CH,AL XOR BX,1 XOR BYTE PTR 20H,20H XOR AL,30H XOR BYTE PTR DI,12H,OFCF0,其它标志位受影响 d、s必须具有相同的字长 XOR AX, BL d、s不能为段寄存器 XOR DS, 2000H d不能是立即数 XOR 10H, AX,【例】对AL的0,1两位取反。 XOR AL,03H,【例】对CL的1,2,3,4,5位取反,其它位不变。 XOR CL,3EH,【例】置DX为0。 XOR DX,DX,例如: NOT AX NOT DH NOT SI NOT BYTE PTR SI,不影响标志位 d不能是段寄存器、立即数 NOT DS NOT 10H,5、测试指令 TEST 格式:TEST d,s 功能:(d) (s) 说明:将目的操作数d与源操作数s按位相“与”,只影响标志位不回送结果,常用于测试某些位是0或1,内 存,立即数,AH,AL BH,BL CH,CL DH,DL,AX,BX CX,DX SI,DI BP,SP,例如: TEST AX,BX TEST CL,SI TEST BXDI-10H,WORD PTR 80H TEST CH,AL TEST BX,1 TEST BYTE PTR 20H,20H TEST AL,30H TEST BYTE PTR DI,12H,OFCF0,其它标志位受影响 d、s必须具有相同的字长 TEST AX, BL d、s不能为段寄存器 TEST DS, 2000H d不能是立即数 TEST 10H, AX,【例】测试AL的最高位是0/1? TEST AL,80H JZ XXX ;是0则跳转 (JNZ XXX ;是1则跳转),【例】测试DX的低4位是0/1? TEST DX,000FH JZ XXX ;是0则跳转 (JNZ XXX ;是1则跳转),【例】测试BH的奇(偶)数位是0/1? TEST BH,0AAH(55H) JZ XXX ;是0则跳转 (JNZ XXX ;是1则跳转),移位运算指令(8条),对8位或16位的通用寄存器或存储器内容进行移位,移位次数可以为1255 若移位次数为1则可直接写在指令中,若次数为2255则不能直接写在指令中,必须先将次数放在寄存器CL中,指令中只能写CL,移位结束后CL的值不变 影响标志OF、SF、ZF、PF、CF,但AF不确定。当移位次数为1时,若移位结果使最高位符号位发生变化,则溢出标志OF1,否则OF0;当移位次数超过1时,OF无效,6、逻辑左移指令 SHL(SHift Left) 格式:SHL d,count 功能:逻辑左移 说明:将目的操作数d左移count位,右边补0,左边入CF,例如: SHL AX,1 MOV CL,4 SHL DH,CL,逻辑左移1位相当于无符号数乘以2!,BX乘以2: SHL BX,1,BX乘以3: MOV AX,BX SHL BX,1 ADD BX,AX,BX乘以4: MOV CL,2 SHL BX,CL,BX乘以5: MOV AX,BX MOV CL,2 SHL BX,CL ADD BX,AX,BX乘以6: SHL BX,1 MOV AX,BX SHL BX,1 ADD BX,AX,BX乘以7: MOV AX,BX MOV CL,3 SHL BX,CL SUB BX,AX,BX乘以8: MOV CL,3 SHL BX,CL,BX乘以9: MOV AX,BX MOV CL,3 SHL BX,CL ADD BX,AX,BX乘以10: MOV AX,BX MOV CL,3 SHL BX,CL SHL AX,1 ADD BX,AX,7、逻辑右移指令 SHR(SHift Right) 格式:SHR d,count 功能:逻辑右移 说明:将目的操作数d右移count位,左边补0,右边入CF,例如: SHR SI,1 MOV CL,3 SHR BYTE PTR BX,CL,逻辑右移1位相当于无符号数除以2!,8、算术左移指令 SAL(Arithmetic) 格式:SAL d,count 功能:同逻辑左移完全相同,例如: SAL AX,1 MOV CL,4 SAL DH,CL,9、算术右移指令 SAR(Arithmetic) 格式:SAR d,count 功能:算术右移 说明:将操作数d的内容右移,左边不变,右边移入CF中,例如: SAR DI,1 MOV CL,3 SAR BP,CL,算术右移1位相当于有符号数除以2!,10、循环左移指令 ROL(ROtate/ROund Left) 格式:ROL d,count 功能:循环左移 说明:将操作数d的内容左移,最高位循环移入最低位,同时移入CF,例如: ROL DI,1 MOV CL,3 ROL BYTE PTR SI,CL,11、循环右移指令 ROR(ROtate/ROund Right) 格式:ROR d,count 功能:循环右移 说明:将操作数d的内容右移,最低位循环移入最高位,同时移入CF,例如: ROR SI,1 MOV CL,4 ROR BYTE PTR DI,CL,12、带进位循环左移指令 RCL(ROtate/ROund Carry Left) 格式:RCL d,count 功能:带进位循环左移 说明:将操作数d的内容左移,最高位循环移入CF,而CF循环移入最低位,例如: RCL BH,1 MOV CL,2 RCL DX,CL,13、带进位循环右移指令 RCR(ROtate/ROund Carry Right) 格式:RCR d,count 功能:带进位循环右移 说明:将操作数d的内容左移,最低位循环移入CF,而CF循环移入最高位,例如: RCR BX,1 MOV CL,4 RCR WORD PTRDI,CL,串操作指令(5条),数据串是存储器中一块字节或字的存储区域,其长度可以是1字节64K字节 串操作就是对数据串中每个元素所进行的操作,这种操作通常是组合操作,能完成几条指令的功能 用作源操作数的串称为源串,源串默认放在数据段中(段地址在DS中),但可以段超越到其他段,源串的偏移地址指针必须放在SI中 用作目的操作数的串称为目的串,目的串必须放在附加段中(段地址在ES中),目的串的偏移地址指针必须放在DI中 串的长度(字节数或字数)必须放在CX中,串操作可以按字节操作(助记符末尾字母加B),也可以按字操作(助记符末尾字母加W)。按字节操作时,地址指针加或减1,按字操作时,地址指针加或减2 若方向标志DF0,则按增址操作,地址指针加1或加2;若方向标志DF1,则按减址操作,地址指针减1或减2 8086共有5种基本的串操作指令,有的指令涉及到2个串,而有的只涉及到1个串 有些串操作是在数据串与寄存器之间进行,则规定寄存器只能用累加器,字节操作时用AL,字操作时用AX 串操作指令每次只处理一个元素的数据,为了能重复执行最多达64KB的串操作,8086还提供了3种重复前缀指令,使用这些指令可以使串操作指令重复执行由寄存器CX指定的次数 除串比较和串搜索指令影响全部6个状态标志外,其它指令均不影响标志位,重复前缀(3个),(1)重复 REP(REPeat) 格式:REP 串操作指令 功能:使串操作指令重复执行CX指定的次数 说明:若CX0则重复执行串指令,并置CXCX1,直到CX0为止。REP指令主要用于串传送和串写入指令前,例如: REP MOVSB REP MOVSW REP STOSW,(2)相等则重复 REPE/REPZ(REPeat when Equal/Zero) 格式:REPE/REPZ 串操作指令 功能:若串操作指令执行结果相等,且CX指定次数未到,则重复执行串操作指令,直到结果不相等,或CX指定次数已到则停止 说明:若ZF1且CX1CX0则重复执行串指令,直到ZF0或CX1CX0为止。REPE指令主要用于串比较和串搜索指令前,例如: REPE CMPSB REPZ SCASW,(3)不相等则重复 REPNE/REPNZ(REPeat when Not Equal/Zero) 格式:REPNE/REPNZ 串操作指令 功能:若串操作指令执行结果不相等,且CX指定次数未到,则重复执行串操作指令,直到结果相等,或CX指定次数已到则停止 说明:若ZF0且CX1CX0则重复执行串指令,直到ZF1或CX1CX0为止。REPNE指令主要用于串比较和串搜索指令前,例如: REPNE
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号