1、授课教师:授课教师:第第 3 3 章章.3逻辑运算与移位指令逻辑运算与移位指令 8086/8088CPU的指令系统提供的指令系统提供8位位和和16位的逻辑运算与移位指令有位的逻辑运算与移位指令有3组组v逻辑运算指令逻辑运算指令 AND/OR/XOR/NOT/TESTAND/OR/XOR/NOT/TESTv移位指令移位指令 SHL/SHR/SAL/SARSHL/SHR/SAL/SARv循环移位指令循环移位指令 ROL/ROR/RCL/RCR ROL/ROR/RCL/RCR 第第 3 3 章章.3逻辑运算与移位指令逻辑运算与移位指令一、逻辑运算指令一、逻辑运算指令 8086/8088CPU的逻辑运
2、算指令有的逻辑运算指令有AND、OR、XOR、TEST、NOT 5条指令。条指令。以上以上5条除条除NOT对标志位对标志位不不产生影响;产生影响;其余均产生影响:其余均产生影响:这些指令根据各自逻辑运算的结这些指令根据各自逻辑运算的结果都将果都将影响影响SF、ZF、和、和PF,同时,同时 AF的值不确定。的值不确定。第第 3 3 章章.3逻辑运算与移位指令逻辑运算与移位指令一、逻辑运算指令一、逻辑运算指令1、与运算指令、与运算指令AND指令格式及操作指令格式及操作AND DST,SRC ;(;(DST)(DST)(SRC)注释:注释:操作数格式同操作数格式同加减法指令;加减法指令;设设CF=O
3、F=0,影响,影响SF、ZF、PF,对,对AF无定义。无定义。第第 3 3 章章.3逻辑运算与移位指令逻辑运算与移位指令 AND的指令可以屏蔽某些不关心的位(该位置的指令可以屏蔽某些不关心的位(该位置0),保留一些),保留一些有用的位。为了做到这一点,只需有用的位。为了做到这一点,只需把要屏蔽位和把要屏蔽位和“0”进行逻辑位进行逻辑位,而而将保留的位与将保留的位与“1”进行逻辑与即可。进行逻辑与即可。第第 3 3 章章.3逻辑运算与移位指令逻辑运算与移位指令2、或运算指令、或运算指令OROR DST,SRC ;(DST)(DST)V(SRC)注释:注释:操作数格式同操作数格式同加减法指令;加减
4、法指令;设设CF=OF=0,影响,影响SF、ZF、PF,对,对AF无定义。无定义。第第 3 3 章章.3逻辑运算与移位指令逻辑运算与移位指令 OR常见用途:常见用途:把某些特定的位把某些特定的位 置置1。方法:把要置。方法:把要置1的位与的位与1按按位逻辑或;不改变的位与位逻辑或;不改变的位与0按位逻辑或。按位逻辑或。第第 3 3 章章.3逻辑运算与移位指令逻辑运算与移位指令 OR与与AND的共性:的共性:如果寄存器与其自身内容进行逻辑与操作,如果寄存器与其自身内容进行逻辑与操作,或进行逻辑或操作,寄存器内容不变,但逻辑运算结果影响或进行逻辑或操作,寄存器内容不变,但逻辑运算结果影响SF、ZF
5、、PF标志位,且将标志位,且将CF清清0。利用这个特性,可以在数据传送指令之后,进行逻辑运算以影利用这个特性,可以在数据传送指令之后,进行逻辑运算以影响标志位,然后可以判断数据的正负、是否为响标志位,然后可以判断数据的正负、是否为0,以及数据的奇偶性,以及数据的奇偶性等。等。第第 3 3 章章.3逻辑运算与移位指令逻辑运算与移位指令3、异或运算指令、异或运算指令XOR指令格式及操作指令格式及操作XOR DST,SRC ;(DST)(DST)(SRC)注释:注释:操作数格式同加操作数格式同加减法指令;减法指令;设设CF=OF=0,影响影响SF、ZF、PF,对,对AF无无定义。定义。第第 3 3
6、章章.3逻辑运算与移位指令逻辑运算与移位指令 XOR常见用途一:常见用途一:寄存器某些特定的位寄存器某些特定的位“求反求反”,而使其余的位,而使其余的位不变。因此不变。因此求反求反的位与的位与1异或异或;不变的位与;不变的位与0进行进行“异或异或”。MOV AL ,0FFH ;XOR AL,55H;AL=10101010B,55H=01010101B第第 3 3 章章.3逻辑运算与移位指令逻辑运算与移位指令 XOR常见用途二:常见用途二:寄存器内容清寄存器内容清0XOR AX,AX;XOR BX,BX;在初始化时,将寄存器清;在初始化时,将寄存器清0如:如:0010 1001B=AX XOR)
7、0010 1001B=AX 0000 0000B第第 3 3 章章.3逻辑运算与移位指令逻辑运算与移位指令 XOR常见用途三常见用途三:用来测试某一操作数是否与另操作数用来测试某一操作数是否与另操作数相等,例如检查相等,例如检查AX的内容是否等于的内容是否等于0F00H,若相等则转,若相等则转MATCH去执行,否则顺序执行。程序段如下:去执行,否则顺序执行。程序段如下:XOR AX,0F00H;JZ MATCH ;JZ为跳转指令为跳转指令 表示表示AX为为0时转移时转移 :第第 3 3 章章.3逻辑运算与移位指令逻辑运算与移位指令4、测试指令、测试指令TEST指令格式及操作指令格式及操作TES
8、T DST,SRC ;(DST)&(SRC)DSTDST:可以为:可以为寄存器操作数寄存器操作数、存储器操作数存储器操作数SRCSRC:可以为:可以为寄存器操作数寄存器操作数、存储器操作数存储器操作数、立即数立即数 指令功能指令功能:目标操作数与源操作数按位目标操作数与源操作数按位“逻辑与逻辑与”运运算,结果不送回目标操作数算,结果不送回目标操作数。置。置CF=0,OF=0;对其他标志;对其他标志没有定义。没有定义。第第 3 3 章章.3逻辑运算与移位指令逻辑运算与移位指令 TEST指令用于位的测试,它与条件转移指令一起,共同完指令用于位的测试,它与条件转移指令一起,共同完成对特定位的状态的判
9、断,并实现相应程序的的转移。成对特定位的状态的判断,并实现相应程序的的转移。与与CMP有些类似,有些类似,CMP比较两个操作数,比较两个操作数,TEST比较特定的位。比较特定的位。测试方法:测试方法:要测试操作数的的某些位是否为要测试操作数的的某些位是否为0,只需要把,只需要把TEST的的源操作数设置成一个立即数,其中需要测试的位设为源操作数设置成一个立即数,其中需要测试的位设为1。第第 3 3 章章.3逻辑运算与移位指令逻辑运算与移位指令 MOV AL,40H;TEST AL,0AH ;JNZ NEST;JNZ为跳转指令为跳转指令 表示表示ZF=0时转移时转移 :NEST:.第第 3 3 章
10、章.3逻辑运算与移位指令逻辑运算与移位指令5、取反指令、取反指令 NOT指令格式及操作指令格式及操作NOT OPR ;(OPR)(OPR)OPROPR:除了立即数以外的各种寻址方式:除了立即数以外的各种寻址方式 的操作数、寄存器。的操作数、寄存器。对标志位没对标志位没有影响。有影响。指令功能指令功能:对操作数按位取反。对操作数按位取反。NOT指令是一条逻辑指令是一条逻辑“非非”指令,只有一个操作数,可以是指令,只有一个操作数,可以是8位,也可以是位,也可以是16位位的存储器或寄存器。的存储器或寄存器。第第 3 3 章章.3逻辑运算与移位指令逻辑运算与移位指令NOT AL ;NOT DXNOT
11、BYTE PTR 0002HBX NOT WORD PTR BX+SI分析指令分析指令功能功能第第 3 3 章章.3逻辑运算与移位指令逻辑运算与移位指令二、移位指令(二、移位指令(shift)8086/8088 CPU有有4条移位指令。条移位指令。算术左移指令算术左移指令SALSAL 逻辑左移指令逻辑左移指令SHLSHL 算术右移指令算术右移指令SAR SAR 逻辑右移指令逻辑右移指令SHRSHR 功能:功能:用来实现对寄存器或存储单元的用来实现对寄存器或存储单元的8位或位或16位数据位数据的移位,指令移位操作可以是的移位,指令移位操作可以是向左向左或或向右移一位向右移一位,也可以也可以是多位
12、,是多位,移多位时,规定移多位时,规定移位的次数必须放在移位的次数必须放在CL寄存器中。寄存器中。对应同对应同一条机一条机器指令器指令第第 3 3 章章.3逻辑运算与移位指令逻辑运算与移位指令1、逻辑左移指令逻辑左移指令 SHL/SHL/算术左移指令算术左移指令 SALSAL指令格式:指令格式:SHL(SAL)OPR,CNT;OPROPR:通用寄存器或:通用寄存器或存储器操作数存储器操作数CNTCNT:可为:可为1 1,或,或CLCL,CLCL中放移位的次数。中放移位的次数。指令功能:指令功能:操作数左移操作数左移1位或位或CL规定的位数,规定的位数,最低位补最低位补0,最高位进最高位进CF。
13、只影响只影响CF、OF两个标志位。两个标志位。第第 3 3 章章.3逻辑运算与移位指令逻辑运算与移位指令逻辑左移指令逻辑左移指令 SHL/SHL/算术左移指令算术左移指令 SALSALMSB LSB0CFSHL/SAL指令示意图指令示意图D15/D7D0SHL/SAL功能完全一样,因为对一个无符号数乘以功能完全一样,因为对一个无符号数乘以2和对一和对一个有符号数乘以个有符号数乘以2没有什么区别。没有什么区别。在左移位数为在左移位数为1的情况下的情况下,如果最高位与,如果最高位与CF不同,则溢不同,则溢出标志出标志OF=1,这对带符号数可以判断移位前后的符号位不,这对带符号数可以判断移位前后的符
14、号位不同;反之,如果最高位与同;反之,如果最高位与CF相同,则溢出标志相同,则溢出标志OF=0,这表,这表示移位前后符号位没有改变。示移位前后符号位没有改变。在移位次数为多次,在移位次数为多次,则则OF值不确定。值不确定。第第 3 3 章章.3逻辑运算与移位指令逻辑运算与移位指令SHL AL ;SHL CL;SHL WORD PTR BX+100,1分析指令分析指令功能功能 左移左移1位相当于乘位相当于乘2,因此可以代替某些,因此可以代替某些常数的运算,并且速度很快。常数的运算,并且速度很快。分析分析170书中例书中例3.11第第 3 3 章章.3逻辑运算与移位指令逻辑运算与移位指令2、逻辑右
15、移指令逻辑右移指令 SHRSHR指令格式:指令格式:SHR OPR,CNT;OPROPR:通用寄存器或:通用寄存器或存储器操作数存储器操作数CNTCNT:可为:可为1 1,或,或CLCL,CLCL中放移位的次数。中放移位的次数。指令功能:指令功能:操作数右移操作数右移1位或位或CL规定的位数,规定的位数,最低位进最低位进CF。最高位补最高位补0,只影响只影响CF、OF两个标志位。两个标志位。第第 3 3 章章.3逻辑运算与移位指令逻辑运算与移位指令逻辑右移指令逻辑右移指令 SHRSHRSHR指令示意图指令示意图D15/D7D0 在右移位数为在右移位数为1的情况下的情况下,移位后如果最高位与次高
16、位,移位后如果最高位与次高位不相等,则溢出标志不相等,则溢出标志OF=1,否则,否则0F=0,这表示符号位在移,这表示符号位在移位前后有没有改变。位前后有没有改变。在移位次数为多次,在移位次数为多次,则则OF值不确定。值不确定。MSB LSBCF0第第 3 3 章章.3逻辑运算与移位指令逻辑运算与移位指令SHR AL,1;SHR AX,CL;SHR BYTE PTRBX+SI;SHR WORD PTR BUFFER,CL分析指令分析指令功能功能 逻辑右移逻辑右移1位相当于位相当于无符号数无符号数除以除以2,因,因此可以代替某些常数的运算,并且采用移位此可以代替某些常数的运算,并且采用移位指令比
17、除法指令时执行速度要快得多。指令比除法指令时执行速度要快得多。第第 3 3 章章.3逻辑运算与移位指令逻辑运算与移位指令例例3.12 将一个将一个16位无符号数除以位无符号数除以512,结果仍放回原单元。该,结果仍放回原单元。该数原来存放在以数原来存放在以TDATA 为首地址的两个连续的存储单元中。为首地址的两个连续的存储单元中。分析:分析:TDATA 512=(TDATA 2)256因此用逻辑右移完成上述除法运算。编程如下:因此用逻辑右移完成上述除法运算。编程如下:MOV AX,TDATASHR AX,1XCHG AL,AH;右移;右移8位,商放位,商放AL中。中。AND AX,00FFHM
18、OV TDATA ,AXHLT第第 3 3 章章.3逻辑运算与移位指令逻辑运算与移位指令4、算术右移指令算术右移指令 SARSARSAR指令示意图指令示意图D15/D7D0MSB LSBCF第第 3 3 章章.3逻辑运算与移位指令逻辑运算与移位指令SAR AL ,1SAR AX,CLSAR WORD PTR 100SI,1SAR BYTE PTR DATASI+BX,CL算术右移算术右移1位,相当于带符号数除以位,相当于带符号数除以2MOV AX,0064HSAR AX,1第第 3 3 章章.3逻辑运算与移位指令逻辑运算与移位指令三、循环移位指令(三、循环移位指令(rotate shift)8
19、086/8088 CPU有有4条循环移位指令。条循环移位指令。不带进位标志不带进位标志CF的左循环移位指令的左循环移位指令ROL不带进位标志不带进位标志CF的右循环移位指令的右循环移位指令ROR带进位的左循环移位指令带进位的左循环移位指令RCL带进位的右循环移位指令带进位的右循环移位指令RCR 循环移位指循环移位指令的令的操作数操作数与移位指令与移位指令相同。相同。第第 3 3 章章.3逻辑运算与移位指令逻辑运算与移位指令1、循环左移指令循环左移指令ROL(rotate left)指令格式:指令格式:ROL OPR,CNT;指令功能:指令功能:操作数向左循环移操作数向左循环移1位或位或CL规定
20、的位数,规定的位数,最高位最高位移进移进CF,同时最高位移进最低位形成循环,进位标志不在,同时最高位移进最低位形成循环,进位标志不在循环回路之内。循环回路之内。只影响只影响CF、OF两个标志位。两个标志位。第第 3 3 章章MSB LSBCFROL指令操作示意图指令操作示意图 ROL指令影响指令影响CF、OF两个标志位。两个标志位。在循环移位为在循环移位为1的情况下,移位后如果最高位与的情况下,移位后如果最高位与CF不相等,则溢出标志不相等,则溢出标志OF=1,否则,否则OF=0,因此,因此OF的值的值表示符号位在移位前后有没有改变。表示符号位在移位前后有没有改变。在移位次数为多次,则在移位次
21、数为多次,则OF值不确定。值不确定。第第 3 3 章章 ROL AH ,1 ROL BX ,CL ROL WORD PTRDI,CL ROL BYTE PTR BX,1分析指令分析指令功能功能第第 3 3 章章.3逻辑运算与移位指令逻辑运算与移位指令2、循环右移指令循环右移指令ROR(rotate right)指令格式:指令格式:ROR OPR,CNT;指令功能:指令功能:操作数向右循环移操作数向右循环移1位或位或CL规定的位数,规定的位数,最低位最低位移移进进CF,同时,同时最低位移最低位移进最低位形成循环,进位标志不在进最低位形成循环,进位标志不在循环回路之内。循环回路之内。只影响只影响C
22、F、OF两个标志位。两个标志位。第第 3 3 章章.3逻辑运算与移位指令逻辑运算与移位指令2、循环右移指令循环右移指令ROR(rotate right)CFMSB LSBROR指令操作示意图指令操作示意图 ROR指令影响指令影响CF、OF两个标志位。两个标志位。在循环移位为在循环移位为1的情况下,移位后如果新的最高位与的情况下,移位后如果新的最高位与次高位不等次高位不等,则溢出标志,则溢出标志OF=1,否则,否则OF=0。在移位次数为多次,则在移位次数为多次,则OF值不确定。值不确定。第第 3 3 章章ROR BX,1ROR AX,CLROR BYTE PTR BX,1ROR WORD PTR
23、DI,CL分析指令分析指令功能功能第第 3 3 章章.3逻辑运算与移位指令逻辑运算与移位指令3、带进位、带进位循环左移指令循环左移指令RCL(rotate left through carry)指令格式:指令格式:RCL OPR,CNT;指令功能:指令功能:将目标操作数连同进位标志将目标操作数连同进位标志CF一起向左循环移一起向左循环移动一位或由动一位或由CL寄存器指定的位数。寄存器指定的位数。最高位移入进位标志最高位移入进位标志CF,而而CF移入最低位。移入最低位。MSB LSBCFRCL指令操作示意图指令操作示意图第第 3 3 章章.3逻辑运算与移位指令逻辑运算与移位指令3、带进位、带进位
24、循环左移指令循环左移指令RCL(rotate left through caary)RCL AX,1RCL AH,CLRCL WORD PTRDI,1RCL BYTE PTR SI+BP,CL分析指令分析指令功能功能 RCL指令影响指令影响CF、OF两个标志位。两个标志位。在循环移位次数为在循环移位次数为1的情况下,左移位后如果新的最的情况下,左移位后如果新的最高位与高位与CF不等不等,则溢出标志,则溢出标志OF=1,否则,否则OF=0。在移位次数为多次,则在移位次数为多次,则OF值不确定。值不确定。第第 3 3 章章.3逻辑运算与移位指令逻辑运算与移位指令4、带进位、带进位循环左移指令循环左
25、移指令RCR(rotate right through caary)指令格式:指令格式:RCR OPR,CNT;指令功能:指令功能:将目标操作数连同进位标志将目标操作数连同进位标志CF一起向右循环移一起向右循环移动一位或由动一位或由CL寄存器指定的位数。寄存器指定的位数。最低位移入进位标志最低位移入进位标志CF,而而CF移入最高位。移入最高位。RCR指令操作示意图指令操作示意图CFMSB LSB第第 3 3 章章.3逻辑运算与移位指令逻辑运算与移位指令RCR AH,1RCR DI,CLRCR BYTE PTRBX,1RCR WORD PTR SI+BX,CL分析指令分析指令功能功能第第 3 3
26、 章章.3逻辑运算与移位指令逻辑运算与移位指令4条循环移位指令条循环移位指令rotate与与 4条移位指令条移位指令shift比较比较1、循环移位指令,使得各个位的信息不丢失,只是移动到、循环移位指令,使得各个位的信息不丢失,只是移动到其他位或进位标志其他位或进位标志CF上,必要时可以恢复。上,必要时可以恢复。2、利用循环移位指令可以对任何一位进行测试。、利用循环移位指令可以对任何一位进行测试。例如:测试例如:测试AL的第的第6位是位是0还是还是1?MOV CL,2ROL AL,CLJNC ZERO;CF=0,转,转ZERO:ZERO:第第 3 3 章章.4 串操作指令串操作指令 数据串(数据
27、块)数据串(数据块):在内存区域内连续存放着若干:在内存区域内连续存放着若干个字节(或若干个字)数据(或字符的个字节(或若干个字)数据(或字符的ASCII码),码),这样的一组数据称为数据串(数据块)。这样的一组数据称为数据串(数据块)。字节串:字节串:若每个数组元素是字节型,则为字节串。若每个数组元素是字节型,则为字节串。字串:字串:若给个数组元素是字型,则称字串。若给个数组元素是字型,则称字串。90H78H56H34H12H00H00H00H00H00H90H78H56H34H12H00H00H00H00H00H第第 3 3 章章.4 串操作指令串操作指令 8086/8088 CPU有一组
28、十分有用的串操作指令,这有一组十分有用的串操作指令,这些指令的些指令的操作对象操作对象不只是单个字节或字,不只是单个字节或字,而是内存中而是内存中地址连续的地址连续的字节串或字串。字节串或字串。每次操作后能每次操作后能自动修改地自动修改地址址为下一次操作作好准备。为下一次操作作好准备。串操作指令有串操作指令有8条,其中条,其中5条为基本操作指令,条为基本操作指令,3条为条为重复前缀串操作指令。重复前缀串操作指令。第第 3 3 章章.4 串操作指令串操作指令(1)可以对)可以对字节串字节串进行操作,也可以对进行操作,也可以对字串字串进行操作。进行操作。(2)串操作指令用)串操作指令用SI寄存器寻
29、址源操作数寄存器寻址源操作数,用,用DI寻址目标操作数寻址目标操作数,源操作数的隐含段寄存器为源操作数的隐含段寄存器为DS,但,但允许但超越允许但超越;目标操作数隐含的;目标操作数隐含的段寄存器段寄存器ES,但,但不允许段超越不允许段超越。(3)每一次操作后修改地址指针是增还是减量取决于)每一次操作后修改地址指针是增还是减量取决于方向标志方向标志DF。DF=0,地址指针自动增量修改,地址指针自动增量修改,DF=1,地址指针自动减量修改。,地址指针自动减量修改。因此每次串操作指令执行前都要设置因此每次串操作指令执行前都要设置DI、SI,并把数组元素的个数并把数组元素的个数设置在设置在CX中中。串
30、操作指令格式各不相同,但有以下共同特点:串操作指令格式各不相同,但有以下共同特点:第第 3 3 章章.4 串操作指令串操作指令(4)有的串操作指令可以加重复前缀)有的串操作指令可以加重复前缀REP,可使串操作重复进行到结,可使串操作重复进行到结束,束,重复循环的次数由寄存器重复循环的次数由寄存器CX决定,其决定,其执行过程相当于一个循环程执行过程相当于一个循环程序的运行,重复执行后序的运行,重复执行后DI、SI都被都被自动自动修改。但修改。但指令指针指令指针IP仍保持指仍保持指向前缀的地址,直至寄存器向前缀的地址,直至寄存器CX的内容为的内容为0,则退出串操作指令。,则退出串操作指令。(5)串
31、操作汇编指令的格式可以)串操作汇编指令的格式可以 写上操作数,也可以在指令操作数写上操作数,也可以在指令操作数后加字母后加字母B或或“W”。加上字母。加上字母“B”“W”后指令助记符后面后指令助记符后面不允许不允许写操作数。写操作数。(6)串操作指令可以与重复前缀指令结合,进行多次重复操作。)串操作指令可以与重复前缀指令结合,进行多次重复操作。第第 3 3 章章.4 串操作指令串操作指令一、一、串传送指令串传送指令 MOVS (MOVE string)指令格式及操作:指令格式及操作:MOVS DST ,SCR;(;(ES:DI)(DS:SI)DF=0,增址;,增址;DF=1,减址;,减址;指令
32、功能:指令功能:将一个字节串或字串从将一个字节串或字串从DS段由段由SI指向存储器某指向存储器某一区域传送到位于一区域传送到位于ES由由DI所指向存储器的另一个区域,然所指向存储器的另一个区域,然后根据方向后根据方向DF自动自动修改地址指针修改地址指针SI和和DI。34h.89hXX.XX第第 3 3 章章.4 串操作指令串操作指令MOVSB ;字节传送操作,(;字节传送操作,(ES:DI)(DS:SI)SI SI+1,DI DI+1)MOVSW ;字节传送操作,(;字节传送操作,(ES:DI)(DS:SI)SI SI+1,DI DI+1)若方向标志位若方向标志位DF=0,取,取“+”号;号;
33、DF=1,取,取“”号。号。该指令不影该指令不影响标志位响标志位第第 3 3 章章.4 串操作指令串操作指令一、一、串传送指令串传送指令 MOVS (MOVE string)00H00H00H00H00H12H34H56H78H90H第第 3 3 章章.4 串操作指令串操作指令一、一、串传送指令串传送指令 MOVS (MOVE string)第一种方法第一种方法第第 3 3 章章.4 串操作指令串操作指令二、二、存储数据串指令存储数据串指令 STOS (store string)指令格式及操作:指令格式及操作:STOS SCR;(;(ES:DI)AX/AL也可以表示为字节或字存储形式:也可以表
34、示为字节或字存储形式:STOSB ;字节存储数据串指令及操作:;字节存储数据串指令及操作:(ES:DI)AL,DI DI+1STOSW ;字存储数据串指令及操作:;字存储数据串指令及操作:(ES:DI)AX,DI DI+2 第第 3 3 章章.4 串操作指令串操作指令指令功能:指令功能:将累加器将累加器AX或或AL的值送到的值送到ES段由段由DI所指字符串所指字符串的内存单元中,并且自动修改地址指针。若方向标志的内存单元中,并且自动修改地址指针。若方向标志DF=0,取取“+”号;号;DF=1,取,取“”号。号。注释:注释:1 1)经常用来初始化一段内存区域。)经常用来初始化一段内存区域。2 2
35、)串为目的操作数。)串为目的操作数。3 3)不影响标志。)不影响标志。第第 3 3 章章.4 串操作指令串操作指令第第 3 3 章章.4 串操作指令串操作指令 CLD MOV DI,0404H MOV CX,0080H MOV AX ,0000HLOPP:STOSW DEC CX JNZ LOPP;CX=0转移到转移到LOPP处处 HLT第第 3 3 章章.4 串操作指令串操作指令三、取字符串三、取字符串指令指令 LODS (load string)指令格式及操作:指令格式及操作:LODS SCR;AX/AL (DS:SI)也可以表示为字节或字存储形式:也可以表示为字节或字存储形式:LODSB
36、 ;字节形式取字符串指令及操作:;字节形式取字符串指令及操作:AL DS:SI,SI SI AL DS:SI,SI SI 1 1LODSW ;字形式取字符串指令及操作:;字形式取字符串指令及操作:AX DS:SI,SI SI AX DS:SI,SI SI 2 2 注释:数据串为源操作数;不影响标志注释:数据串为源操作数;不影响标志。第第 3 3 章章.4 串操作指令串操作指令三、取字符串三、取字符串指令指令 LODS (load string)第第 3 3 章章DATA SEGMENTBLOCK db 100 DUP(?)PLUS-DATA DB 100 DUP(?)MINUS-DATA DB
37、 100 DUP(?)DATA ENDScode segment assume cs:code,ds:data start:mov ax,data mov ds,ax MOV AH,4CH INT 21HCODE ENDS END START第第 3 3 章章.4 串操作指令串操作指令三、取字符串三、取字符串指令指令 LODS (load string)第第 3 3 章章.4 串操作指令串操作指令四、四、串比较指令串比较指令 CMPS (compare string)指令格式及操作:指令格式及操作:CMPSCMPS SCR,DST;(;(DS:SI)(ES:DI)也可以表示为:也可以表示为:C
38、MPSBCMPSB;DS:SI-ES:DI,SISIDS:SI-ES:DI,SISI1,DIDI1,DIDI1 1 CMPSW CMPSW;DS:SI-ES:DI,SISIDS:SI-ES:DI,SISI2,DIDI2,DIDI2 2 第第 3 3 章章.4 串操作指令串操作指令四、四、串比较指令串比较指令 CMPS (compare string)指令功能:指令功能:将两个字符串相应的元素逐个进行比较(即将两个字符串相应的元素逐个进行比较(即相减),但比较的结果不回送目标操作数,而反映在标志位相减),但比较的结果不回送目标操作数,而反映在标志位上。上。CMPS指令对大多数的标志位有影响如:指
39、令对大多数的标志位有影响如:ZF、SF、AF、PF、CF和和OF。若方向标志若方向标志DF=0,取,取“+”号;号;DF=1,取,取“”号号。注释:注释:1 1)比较两个数据串是否相等。)比较两个数据串是否相等。2 2)按减法设置标志。)按减法设置标志。第第 3 3 章章.4 串操作指令串操作指令五、五、串搜索指令串搜索指令 SCAS (scan string)指令格式及操作:指令格式及操作:SCAS SCAS DST也可以表示为:也可以表示为:SCASBSCASB;AL-ES:DI,DI DI AL-ES:DI,DI DI 1 1(字节形式串搜索指令)(字节形式串搜索指令)SCASWSCAS
40、W;AX-ES:DI,DI DI AX-ES:DI,DI DI 2 2(字形式串搜索指令)(字形式串搜索指令)指令功能:指令功能:从数据串中搜索一个数据,被搜索的数据称为关键字,放从数据串中搜索一个数据,被搜索的数据称为关键字,放 入入ALAL或或AXAX寄存器。寄存器。若方向标志若方向标志DF=0,取,取“+”号;号;DF=1,取取“”号。号。注释:注释:按按减法减法规律设置标志。规律设置标志。第第 3 3 章章.4 串操作指令串操作指令六、六、重复前缀重复前缀三个重复前缀,分为两类:三个重复前缀,分为两类:1 1)REP 2REP 2)REPZ/REPE REPZ/REPE 和和REPNZ
41、/REPNE REPNZ/REPNE 不能单独使用,只能不能单独使用,只能附加在串操作指令前面附加在串操作指令前面,使串操作重,使串操作重复执行。复执行。重复前缀不影响标志位重复前缀不影响标志位。第第 3 3 章章.4 串操作指令串操作指令六、六、重复前缀重复前缀 1)REP:无条件重复前缀。(无条件重复前缀。(repeat)n与与MOVSMOVS、STOS STOS 配合使用。配合使用。(REP MOVSB/REP STOSWREP MOVSB/REP STOSW)n指令操作:指令操作:n如CX=0,退出串操作,CX0,做下一步nCXCX-1n执行后跟的串操作指令n回到第一步n重复次数由重复
42、次数由CXCX控制控制第第 3 3 章章 2)REPZ/REPE(相等相等/结果为结果为0时重复前缀)。时重复前缀)。两条常与两条常与CMPS、SCAS配合使用配合使用CX0CX0且且ZF=1ZF=1CXCX-1CXCX-1执行串操作执行串操作Y YN NREPZ/REPEREPZ/REPECX=0CX=0或或ZF=0ZF=0退出串操作退出串操作只有同时满足如下两个条件只有同时满足如下两个条件才能重复执行其后的比较或才能重复执行其后的比较或扫描指令。扫描指令。(1)CX=0,且,且ZF=1(表(表示两个操作数比较示两个操作数比较相等相等时)时)继续执行其后的指令。继续执行其后的指令。(2)CX
43、=0或或ZF=0(表示两(表示两个操作数比较个操作数比较不相等不相等时)则时)则停止执行其后的指令,结束停止执行其后的指令,结束该操作。该操作。第第 3 3 章章3、REPNZ/REPNE(不(不相等相等/结果结果不不为为0时重复前缀)。时重复前缀)。两条常与两条常与CMPS、SCAS配合使用。配合使用。只有同时满足如下两个条件只有同时满足如下两个条件才能重复执行其后的比较或才能重复执行其后的比较或扫描指令。扫描指令。(1)CX=0,且,且ZF=0(表(表示两个操作数比较示两个操作数比较不不相等相等时)时)继续执行其后的指令。继续执行其后的指令。(2)CX=0或或ZF=1(表示两(表示两个操作
44、数比较个操作数比较相等相等时)则停时)则停止执行其后的指令,结束该止执行其后的指令,结束该操作。操作。CX0CX0且且ZF=0ZF=0CXCX-1CXCX-1执行串操作执行串操作Y YN NREPNZ/REPNEREPNZ/REPNECX=0CX=0或或ZF=1ZF=1退出串操作退出串操作第第 3 3 章章REPZ/REPE 与与 REPNZ/REPNE 注释注释 注注 释:释:1)REPZ指令中的指令中的“Z”表示的是表示的是“ZF=1”,而且,而且“ZF=1”是重复是重复串操作的必要条件;串操作的必要条件;REPNZ中的中的“NZ”表示的是表示的是“ZF=0”,而且,而且“ZF=0”是重复
45、串操作的必要条件。是重复串操作的必要条件。2)REP指令使串操作重复指令使串操作重复CX规定的次数,规定的次数,REPZ、REPNZ使串使串操作的重复可能提前结束操作的重复可能提前结束(观察观察ZF)。3)注意重复前缀和循环控制指令的差别:)注意重复前缀和循环控制指令的差别:LOOP先做先做CX减减1,后判断;,后判断;REP先判断,后减先判断,后减1。第第 3 3 章章REPZ/REPE 与与 REPNZ/REPNE用途比较用途比较 REPZ/REPE:已知两个数据块的内容已知两个数据块的内容基本一致基本一致,若要找出若要找出不一致的不一致的地方,则应在地方,则应在CMPS指令前使用指令前使
46、用REPZ/REPE;REPNZ/REPNE:已知两个数据块的内容基本:已知两个数据块的内容基本是不同的是不同的,若要找出其中,若要找出其中相一致的相一致的地方,则应在地方,则应在CMPS指令前使指令前使REPNZ/REPNE;第第 3 3 章章PUSH DSPOP ESLEA SI ,STRING1LEA DI ,STRING2MOV CX,0064HREPZ CMPSBJNZ UNMATMOV AL,0JMP OUTUNMAT:MOV AL,0FFHOUT:MOV RESULT ,ALHLT重复运行串比较指令的几种情况重复运行串比较指令的几种情况1)CX=0,ZF=1:1)CX=0,ZF=
47、1:全比完,相同全比完,相同2)CX=0,ZF=0:2)CX=0,ZF=0:全比完,有数据不同全比完,有数据不同3)CX0,ZF=0:3)CX0,ZF=0:未比完,遇到不同未比完,遇到不同4)CX0,ZF=1:4)CX0,ZF=1:未比完,继续比较未比完,继续比较例例3.16 比较两个字符串数据,如果都相等,则把比较两个字符串数据,如果都相等,则把RESULT单元设置为单元设置为0,若不等设置为若不等设置为0FFH后。第一个字符串放在后。第一个字符串放在STRING1开始的的单元,第二开始的的单元,第二个数据放在个数据放在STRING2开始的单元,共开始的单元,共100个字节。个字节。ZF=0
48、ZF=0,两串不同,两串不同第第 3 3 章章串操作指令的重复前缀、操作数和地址指针串操作指令的重复前缀、操作数和地址指针指令指令重复前缀重复前缀操作数操作数地址指针寄存器地址指针寄存器MOVSMOVSRER目标目标ES:DI源源DS:SICMPSREPE/REPNE源源DS:SI目标目标ES:DISCASREPE/REPNE目标目标ES:DILODS无无源源DS:SISTOSSTOSREP目标目标ES:DI第第 3 3 章章第第 3 3 章章.5 控制转移指令(控制转移指令(contol transfer)控制转移类控制转移类指令功能是改变程序的执行顺序。指令功能是改变程序的执行顺序。808
49、6/8088指令执行的地址由指令执行的地址由代码寄存器代码寄存器 CS和指令指和指令指针针IP来提供来提供。为了使程序的执行转移到新的地址去执行,。为了使程序的执行转移到新的地址去执行,可改变可改变CS和和IP的值,或改变偏移量的值,或改变偏移量IP的值。的值。同时改变同时改变CS和和IP的值称的值称段间转移,段间调用,段间转移,段间调用,用用far表示。表示。只改变只改变IP的值称的值称段内调用,段内转移用段内调用,段内转移用near表示。表示。为进一步节省目标码的长度,对短距离的段内转移,为进一步节省目标码的长度,对短距离的段内转移,(-128+127)称为)称为短转移,用短转移,用sho
50、rt表示表示。第第 3 3 章章.5 控制转移指令(控制转移指令(contol transfer)无论段内转移还是段间转移,都有无论段内转移还是段间转移,都有直接转移直接转移与与间接转间接转移移之分。之分。直接转移:直接转移:转移的目标地址信息直接出现在转移的目标地址信息直接出现在机器码机器码中。中。间接转移:间接转移:转移的目标地址信息间接的出现在某一个转移的目标地址信息间接的出现在某一个寄寄存器存器中或某一个中或某一个内存变量内存变量中,当寄存器进行中,当寄存器进行间接转移时间接转移时因为因为寄存器寄存器是是16位的,所以只能进行位的,所以只能进行段内的段内的转移。转移。第第 3 3 章章