逻辑移位及串操作.ppt
第三章 指令系统,三峡大学,陈慈发07176394358,,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,ALBH,BLCH,CLDH,DL,AX,BXCX,DXSI,DIBP,SP,例如:ANDAX,BXANDCL,SIANDBXDI-10H,WORD PTR 80HANDCH,ALANDBX,1ANDBYTE PTR 20H,20HANDAL,30HANDBYTE PTR DI,12H,OFCF0,其它标志位受影响d、s必须具有相同的字长 AND AX,BLd、s不能为段寄存器 AND DS,2000Hd不能是立即数 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,ALBH,BLCH,CLDH,DL,AX,BXCX,DXSI,DIBP,SP,例如:ORAX,BXORCL,SIORBXDI-10H,WORD PTR 80HORCH,ALORBX,1ORBYTE PTR 20H,20HORAL,30HORBYTE PTR DI,12H,OFCF0,其它标志位受影响d、s必须具有相同的字长 OR AX,BLd、s不能为段寄存器 OR DS,2000Hd不能是立即数 OR 10H,AX,【例】将AL的0,1两位置1。OR AL,03H,【例】将AH的高4位置1。OR AH,0F0H,【例】将BX的低4位置1。OR BX,000FH,3、逻辑“异或”指令 OR 格式:OR d,s 功能:(d)(d)(s)说明:将目的操作数d与源操作数s按位相“异或”结果送回d中,常用于使某些位取反,内 存,立即数,AH,ALBH,BLCH,CLDH,DL,AX,BXCX,DXSI,DIBP,SP,例如:XORAX,BXXORCL,SIXORBXDI-10H,WORD PTR 80HXORCH,ALXORBX,1XORBYTE PTR 20H,20HXORAL,30HXORBYTE PTR DI,12H,OFCF0,其它标志位受影响d、s必须具有相同的字长 XOR AX,BLd、s不能为段寄存器 XOR DS,2000Hd不能是立即数 XOR 10H,AX,【例】对AL的0,1两位取反。XOR AL,03H,【例】对CL的1,2,3,4,5位取反,其它位不变。XOR CL,3EH,【例】置DX为0。XOR DX,DX,例如:NOTAXNOTDHNOTSINOTBYTE PTR SI,不影响标志位d不能是段寄存器、立即数 NOT DS NOT 10H,5、测试指令 TEST 格式:TEST d,s 功能:(d)(s)说明:将目的操作数d与源操作数s按位相“与”,只影响标志位不回送结果,常用于测试某些位是0或1,内 存,立即数,AH,ALBH,BLCH,CLDH,DL,AX,BXCX,DXSI,DIBP,SP,例如:TESTAX,BXTESTCL,SITESTBXDI-10H,WORD PTR 80HTESTCH,ALTESTBX,1TESTBYTE PTR 20H,20HTESTAL,30HTESTBYTE PTR DI,12H,OFCF0,其它标志位受影响d、s必须具有相同的字长 TEST AX,BLd、s不能为段寄存器 TEST DS,2000Hd不能是立即数 TEST 10H,AX,【例】测试AL的最高位是0/1?TEST AL,80HJZ XXX;是0则跳转(JNZ XXX;是1则跳转),【例】测试DX的低4位是0/1?TEST DX,000FHJZ 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,例如:SHLAX,1MOVCL,4SHLDH,CL,逻辑左移1位相当于无符号数乘以2!,BX乘以2:SHLBX,1,BX乘以3:MOVAX,BXSHLBX,1ADDBX,AX,BX乘以4:MOVCL,2SHLBX,CL,BX乘以5:MOVAX,BXMOVCL,2SHLBX,CLADDBX,AX,BX乘以6:SHLBX,1MOVAX,BXSHLBX,1ADDBX,AX,BX乘以7:MOVAX,BXMOVCL,3SHLBX,CLSUBBX,AX,BX乘以8:MOVCL,3SHLBX,CLSUBBX,AX,BX乘以9:MOVAX,BXMOVCL,3SHLBX,CLADDBX,AX,BX乘以10:MOVAX,BXMOVCL,3SHLBX,CLSHLAX,1ADDBX,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 功能:同逻辑左移完全相同,例如:SALAX,1MOVCL,4SALDH,CL,9、算术右移指令 SAR(Arithmetic)格式:SAR d,count 功能:算术右移 说明:将操作数d的内容右移,左边不变,右边移入CF中,例如:SARDI,1MOVCL,3SARBP,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或减28086共有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 CMPSW REPNZ SCASB,串操作指令(5条),14、串传送指令 MOVSB/MOVSW(MOVe String of Byte/Word)格式:MOVSB/MOVSW 功能:将源串指针SI所指单元的一个数据(字节或字)传送到目的串指针DI所指单元中,指针作相应变化,(1)ES:DI DS:SI(2)MOVSB(字节操作):(SI)(SI)1,(DI)(DI)1 MOVSW(字操作):(SI)(SI)2,(DI)(DI)2(3)方向标志:DF=0 时地址“”,DF=1时地址“”(4)使用重复前缀REP相配合,一次完成数据串的传送操作,程序段如下:LDS SI,源串首地址 LES DI,目的串首地址 MOV CX,串长度 CLD REP MOVSB;将数据段中的整串数据传送到附加段中,执行REP MOVS之前,应先做好如下准备:(1)源串首地址(末地址)SI,置好DS的值(2)目的串首地址(末地址)DI,置好ES的值(3)串长度 CX(4)设置方向标志(CLD使DF=0,STD使DF=1),15、串比较指令 CMPSB/CMPSW(CoMPare String of Byte/Word)格式:CMPSB/CMPSW 功能:将源串指针SI所指单元的一个数据(字节或字)与目的串指针DI所指单元的一个数据(字节或字)相减,但结果不回送,只影响标志位,指针作相应变化,(1)DS:SI ES:DI,不保存结果,影响标志位同CMP指令(2)CMPSB(字节操作):(SI)(SI)1,(DI)(DI)1 CMPSW(字操作):(SI)(SI)2,(DI)(DI)2(3)方向标志:DF=0 时地址“”,DF=1时地址“”(4)使用重复前缀REPZ/REPE、REPNZ/REPNE相配合,16、串搜索指令 SCASB/SCASW(SCAn String of Byte/Word)格式:SCASB/SCASW 功能:将累加器(AL或AX)内容与目的串指针DI所指单元的一个数据(字节或字)相减,但结果不回送,只影响标志位,指针作相应变化,(1)AL(AX)ES:DI,不保存结果,影响标志位(2)SCASB(字节操作):(SI)(SI)1,(DI)(DI)1 SCASW(字操作):(SI)(SI)2,(DI)(DI)2(3)方向标志:DF=0 时地址“”,DF=1时地址“”(4)使用重复前缀REPZ/REPE、REPNZ/REPNE相配合,搜索数据串中与AL/AX相同/(不相同)的数据,17、串写入指令 STOSB/STOSW(STOre data to String of Byte/Word)格式:STOSB/STOSW 功能:累加器(AL或AX)内容传送到目的串指针DI所指单元中,指针作相应变化,(1)ES:DI AL(AX),不影响标志位(2)STOSB(字节操作):(SI)(SI)1,(DI)(DI)1 STOSW(字操作):(SI)(SI)2,(DI)(DI)2(3)方向标志:DF=0 时地址“”,DF=1时地址“”(4)使用重复前缀REP相配合,用AL/AX填充(初始化)数据串中所有数据,18、串读出指令 LODSB/LODSW(LOaD data from String of Byte/Word)格式:LODSB/LODSW 功能:将源串指针SI所指单元的一个数据(字节或字)传送到累加器(AL或AX)中,指针作相应变化,(1)AL(AX)DS:SI,不影响标志位(2)LODSB(字节操作):(SI)(SI)1,(DI)(DI)1 LODSW(字操作):(SI)(SI)2,(DI)(DI)2(3)方向标志:DF=0 时地址“”,DF=1时地址“”(4)使用重复前缀REP相配合,但一般不与REP联用,从数据串取数到AL/AX中,课后作业,3.21,3.213.32,3.34,3.35,3.37,3.39,