《pentium指令系统之逻辑运算和移位指令.ppt》由会员分享,可在线阅读,更多相关《pentium指令系统之逻辑运算和移位指令.ppt(52页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、三、逻辑运算和移位指令三、逻辑运算和移位指令(一)逻辑运算指令(一)逻辑运算指令(一)逻辑运算指令(一)逻辑运算指令1、AND(Logical and )逻辑逻辑“与与”指令指令2、TEST(Test or non-destructive logical and)测试指令测试指令3、OR(Lgical inclusive or)逻辑逻辑“或或”指令指令4、XOR(Logical exclusive or)逻辑逻辑“异或异或”指令指令5、NOT(Logical not)逻辑逻辑“非非”指令指令特点:特点:特点:特点:逻辑运算是按位操作,操作数应该是位串而不是数。逻辑运算是按位操作,操作数应该是位
2、串而不是数。逻辑运算是按位操作,操作数应该是位串而不是数。逻辑运算是按位操作,操作数应该是位串而不是数。影响条件码:影响条件码:(NOT指令除外,其他指令同指令除外,其他指令同)SF ZF PF SF ZF PF 1 1、ANDAND(Logical and )Logical and )逻辑逻辑逻辑逻辑“与与与与”指令指令指令指令格式:格式:AND dest,src;B/W,(dest)(dest (src)src:src:立即数、寄存器、存储器。立即数、寄存器、存储器。立即数、寄存器、存储器。立即数、寄存器、存储器。dest:dest:寄存器、存储器。寄存器、存储器。寄存器、存储器。寄存器、
3、存储器。执行操作:按位进行执行操作:按位进行“与与”运算。运算。操作类型举例:操作类型举例:AND AL,0FH ;寄存器;寄存器 立即数立即数AND CX,DI ;寄存器寄存器 寄存器寄存器AND SI,MEM_NAME ;寄存器寄存器 存储器存储器AND ALPHA DI,AX ;存储器存储器 寄存器寄存器 AND word ptr BXSI,0FFFEH ;存储器存储器 立即数立即数 “与与”指令的用途指令的用途:对一个数据的指定位清对一个数据的指定位清0将指定位与将指定位与将指定位与将指定位与“0”“0”相与相与相与相与。例:例:若(若(AL)=43 3H AND AL,0F FH ;
4、(AL)=03H,(AL)(AL)0303不变不变不变不变;;(AL)(AL)4747=00H,=00H,屏蔽高屏蔽高屏蔽高屏蔽高4 4位位位位。“与与”指令应用举例:指令应用举例:例例1:将英文小写字母:将英文小写字母ASCII转换成大写。转换成大写。小写英文字母小写英文字母ASCII为:为:az 61H7AH大写英文字母大写英文字母ASCII为:为:AZ 41H5AH程序:程序:MOV AL,z ;AND AL,0DFDFH;例例2:判断键盘按下的字符是不是:判断键盘按下的字符是不是Y?MOV AH,7MOV AH,7INT INT 21H 21H ;键入无回显,(键入无回显,(AL)=输
5、入键的字符码输入键的字符码AND AL,0DFHCMP AL,YJE YES YES:0110 00010100 00011101 111161H41HDFH2 2、TEST TEST(Test or non_destructive logical and)测试指令测试指令测试指令测试指令 格式:格式:TEST dest ,src;(;(dest)(src)src:src:立即数、寄存器、存储器。立即数、寄存器、存储器。立即数、寄存器、存储器。立即数、寄存器、存储器。dest:dest:寄存器、存储器。寄存器、存储器。寄存器、存储器。寄存器、存储器。执行操作:执行操作:二个操作数相与的结果不存
6、入目的,只影响标志位二个操作数相与的结果不存入目的,只影响标志位。操作类型举例:操作类型举例:TEST BH,7 ;寄存器寄存器 立即数立即数TEST SI,BP ;寄存器;寄存器 寄存器寄存器TEST DI,TABLEBX ;寄存器寄存器 存储器存储器TEST SI,CH ;存储器;存储器 寄存器寄存器TEST word ptr BXDI,6ACEH ;存储器;存储器 立即数立即数例:判断例:判断A单元中数据的奇偶性单元中数据的奇偶性设:设:(A)=0AEH程序:程序:MOV AL,A;(AL)=0AEH TEST AL,01H JZ EVEN ;结果结果=0为偶数转为偶数转EVEN 奇数处
7、理奇数处理 EVEN:偶数处理偶数处理检测(检测(AL)的最低位是否为)的最低位是否为0,若为,若为0转转EVEN用途:用途:常常常常用来检测指定位是用来检测指定位是用来检测指定位是用来检测指定位是1/01/0,但又不希望改变原有的操,但又不希望改变原有的操作数的情况下,常在此指令后边加一条作数的情况下,常在此指令后边加一条 条件转移指令。条件转移指令。3 3、OROR(Lgical inclusive or)Lgical inclusive or)逻辑逻辑逻辑逻辑“或或或或”指令指令指令指令格式:格式:OR dset,src;(;(dset)(dset)(src)dest:dest:寄存器、
8、存储器。寄存器、存储器。寄存器、存储器。寄存器、存储器。src:src:立即数、寄存器、存储器。立即数、寄存器、存储器。立即数、寄存器、存储器。立即数、寄存器、存储器。执行操作:执行操作:进行按位进行按位“或或”运算运算用途:用途:将操作数的指定将操作数的指定位位位位置置置置1 1。操作类型举例:操作类型举例:OR BL,0F6H;寄存器寄存器 立即数立即数OR AH,BL;寄存器;寄存器 寄存器寄存器OR CL,BETABXDI;寄存器寄存器 存储器存储器OR GAMMASI,DX;存储器;存储器 寄存器寄存器OR BYTE PTR MEM_BYTE,80H;存储器;存储器 立即数立即数4
9、4、XORXOR(Logical exclusive or)Logical exclusive or)逻辑逻辑逻辑逻辑“异或异或异或异或”指令指令指令指令格式:格式:XOR dset,src ;B/W(dset)(dset)(src)dest:dest:寄存器、存储器。寄存器、存储器。寄存器、存储器。寄存器、存储器。src:src:立即数、寄存器、存储器。立即数、寄存器、存储器。立即数、寄存器、存储器。立即数、寄存器、存储器。执行的操作:对指令的两个操作数进行按位执行的操作:对指令的两个操作数进行按位“异或异或”运算。运算。操作类型举例:操作类型举例:XOR DI,23F6HH ;寄存器寄存器
10、 立即数立即数XOR SI,DX ;寄存器;寄存器 寄存器寄存器XOR CL,BUFFER ;寄存器寄存器 存储器存储器XOR MEMBX,AX ;存储器;存储器 寄存器寄存器XOR byte ptrTABLEBPSI,3DH ;存储器存储器 立即数立即数用途:用途:a 对某些特定位求反,某些特定位与对某些特定位求反,某些特定位与对某些特定位求反,某些特定位与对某些特定位求反,某些特定位与“1”“1”其余位保持不变,保持不变与其余位保持不变,保持不变与其余位保持不变,保持不变与其余位保持不变,保持不变与“0”“0”。b b 初始化时将某个寄存器清初始化时将某个寄存器清初始化时将某个寄存器清初始
11、化时将某个寄存器清0 0应用举例:应用举例:例例1:将(将(AL)中的第中的第1、3、5、7位求反位求反 0、2、4、6位保持不变。位保持不变。MOV AL,0FHXOR AL,0AAH例例2:比较三条比较三条AX 清清“0”指令:指令:XOR AX,AX ;清清AX,清清CF,2个字节,个字节,3个个T。SUB AX,AX;清清AX,清清CF,2个字节,个字节,3个个T。MOV AX,0 ;清清AX,不影响标志位,不影响标志位,3个字节,个字节,4个个T。XOR清清“0”指令在多字节累加程序中十分有用。指令在多字节累加程序中十分有用。例例3:将存放在将存放在TABLE开始的开始的100个字节
12、的个字节的16进制数进行累加,进制数进行累加,和存于和存于SUM+1、SUM单元。单元。程序:程序:100个字节的个字节的16进制数进制数进行累加。进行累加。LEA BX,TABLEMOV CL,100XOR AX,AXLOOPER:ADD AL,BXJNC GOONINC AHGOON:INC BXDEC CLJNZ LOOPERMOV SUM,AXHLT流流程程图图5 5、NOTNOT(Logical not)Logical not)逻辑逻辑逻辑逻辑“非非非非”指令指令指令指令格式:格式:NOT dest ;B/W 指令操作数只有一个指令操作数只有一个,指令指令对操作数按位求反对操作数按位
13、求反对操作数按位求反对操作数按位求反。执行操作:执行操作:字节求反:(字节求反:(dest)0FFH-(dest)字求反:字求反:(dest 0FFFFH-(dest)源操作数:寄存器、存储器。不能是立即数。源操作数:寄存器、存储器。不能是立即数。源操作数:寄存器、存储器。不能是立即数。源操作数:寄存器、存储器。不能是立即数。影响标志位:对标志位无影响。影响标志位:对标志位无影响。操作类型举例:操作类型举例:NOT AH;8位寄存器求反位寄存器求反 NOT CX;16位寄存器求反位寄存器求反 NOT BYTE PTR BP;8位存储器求反位存储器求反 NOT WORD PTR COUNT ;1
14、6位存储器求反位存储器求反综合举例:综合举例:1使某些位置使某些位置“0”。IN AL,61H;(;(AL)=B 设备控制寄存器设备控制寄存器 想使此位为想使此位为0执行指令:执行指令:AND ALAND AL,0FDH0FDH 即可。即可。2.使某些位置使某些位置“1”。IN AL,61H;(;(AL)=执行指令:执行指令:OR ALOR AL,0202 想使此位为想使此位为“1”3.使某些位求反:使某些位求反:IN AL,61H ;(;(AL)=0 XOR ALXOR AL,02H02H 0 0 0 0 0 0 1 0 1 4.测试某些位(测奇偶性):测试某些位(测奇偶性):测试测试“奇奇
15、”“偶偶”性。性。见见TEST指令的用途例子。指令的用途例子。逻辑指令应用小结:逻辑指令应用小结:逻辑指令应用小结:逻辑指令应用小结:(1)AND指令用来对指令的指定位清指令用来对指令的指定位清“0”。(2)OR指令常用来对某些位置指令常用来对某些位置1。(3)XOR指令用在程序开头,使某个寄存器清指令用在程序开头,使某个寄存器清“0”。(4)NOT指令对某个数据取反,指令对某个数据取反,+1成补码。成补码。(5)TEST指令用来检测指定位为指令用来检测指定位为1,还是,还是0。1 1、算逻移位指令算逻移位指令算逻移位指令算逻移位指令(4条条):SHL,SHR,SHL,SHR,SAL,SAR
16、SAL,SAR。(1)、)、SHL/SAL(Shift logical left/shift arithmetic left)逻辑左移逻辑左移/算术左移指令算术左移指令(2)、)、SHR(Shift logical right)逻辑右移指令逻辑右移指令(3)、)、SAR(Shift arithmetic right )算术右移指令算术右移指令2 2 2 2、循环移位、循环移位、循环移位、循环移位(4 4条)条):ROL,ROR,RCL,RCRROL,ROR,RCL,RCRROL,ROR,RCL,RCRROL,ROR,RCL,RCR。(1 1)、)、ROL(Rotate left)ROL(Rot
17、ate left)不含不含CFCF循环左移指令循环左移指令(2 2)、)、ROR(Rotate right)ROR(Rotate right)不含不含CFCF循环右移指令循环右移指令(3 3)、)、RCL(Rotate left through carry)RCL(Rotate left through carry)含含CFCF循环左移指令循环左移指令(4 4)、)、RCR(Rotate right through carry)RCR(Rotate right through carry)含含CFCF循环右移指循环右移指令令(二)移位指令(二)移位指令共同点:共同点:所有移位指令都可以作所有移
18、位指令都可以作B/W/DW操作。操作。指令中的指令中的 destdest:寄存器、存储器寻址方式。寄存器、存储器寻址方式。寄存器、存储器寻址方式。寄存器、存储器寻址方式。cnt:表示移位次数表示移位次数 cnt=131,移位的位数可直接在指令中写出,移位的位数可直接在指令中写出 cnt31,用用CL存放移位次数存放移位次数,不能是其他寄存器。不能是其他寄存器。如:如:SAL AX,1 MOV CL,4 SAL AX,CL 利用移位指令编制利用移位指令编制 *,/程序,程序,执行时间比直接用执行时间比直接用*,/指令快,指令快,速度可提高速度可提高5-6倍。倍。1 1、算逻移位指令算逻移位指令算
19、逻移位指令算逻移位指令(4条条):SHL,SHR,SHL,SHR,SAL,SAR SAL,SAR(1)、)、SHL/SAL(Shift logical left/shift arithmetic left)逻辑左移逻辑左移/算术左移指令算术左移指令格式:格式:SHL dest,cnt;逻辑左移指令;逻辑左移指令,B/W SAL dest,cnt ;算术左移指令;算术左移指令,B/W dest:寄存器、存储器寻址方式。寄存器、存储器寻址方式。cnt:表示移位次数表示移位次数 cnt=131,常数可写在指令中。,常数可写在指令中。cnt31,用,用CL存放移位次数存放移位次数。执行操作:执行操作:
20、相当于无符号数的相当于无符号数的2功能。功能。SHL/SAL指令操作示意图如下图所示:指令操作示意图如下图所示:指令格式举例:指令格式举例:SHL AH,1 SAL SI,CL SAL WORD PTR BX+5,1 SHL BYTE PTR,CL0CFdest(2)、)、SHR(Shift logical right)逻辑右移指令逻辑右移指令格式:格式:SHR dest,cnt;逻辑右移指令;逻辑右移指令,B/W执行操作:执行操作:相当于无符号数的相当于无符号数的2功能。功能。SHR指令操作示意图如下图所示:指令操作示意图如下图所示:dest:寄存器、存储器寻址方式。寄存器、存储器寻址方式。
21、指令格式举例:指令格式举例:SHR BL,1SHR AX,CLSHR BYTE PTR DI+BP,1SHR WORD PTR BLOCK ,CLdestCF0(3 3)、)、)、)、SARSAR(Shift arithmetic right )算术右移指令算术右移指令算术右移指令算术右移指令格式:格式:SAR dest,cnt;算术右移指令;算术右移指令,B/W执行操作:执行操作:SAR指令操作示意图如下图所示指令操作示意图如下图所示dsetdest:dest:寄存器、存储器寻址方式。寄存器、存储器寻址方式。寄存器、存储器寻址方式。寄存器、存储器寻址方式。指令格式举例:指令格式举例:SAR
22、AL,1SHR DL,CLSHR WORD PTR TABLESI,1SHR BYTE PTR STATUS ,CL2 2、循环移位、循环移位、循环移位、循环移位(4条)条):ROL,ROR,RCL,RCRROL,ROR,RCL,RCR。共同点:共同点:ROLROL、RORROR 不含不含CF循环移位指令,循环移位指令,操作数移动操作数移动操作数移动操作数移动8 8次后还原次后还原次后还原次后还原。RCLRCL、RCRRCR 含含CF循环移位指令,循环移位指令,操作数移动操作数移动操作数移动操作数移动9 9次后还原次后还原次后还原次后还原。影响标志影响标志OF、CF (1 1)、)、)、)、R
23、OLROL(Rotate left)不含不含不含不含CFCF循环左移指令循环左移指令循环左移指令循环左移指令格式:格式:ROL dest,cnt;不含;不含CF循环左移指令循环左移指令,B/W执行操作:执行操作:ROL指令操作示意图如下图所示指令操作示意图如下图所示 移动移动移动移动8 8次后操作数还原。次后操作数还原。次后操作数还原。次后操作数还原。CFdest指令格式举例:指令格式举例:ROL BH,1ROL DX,CLROL WORD PTR TABLEDI,1ROL BYTE PTR ALPHA ,CL影响标志影响标志OF、CF 情况:情况:左循环移动左循环移动左循环移动左循环移动1
24、1次后次后次后次后:移位后,最高有效位(符号位)是否发生变化:移位后,最高有效位(符号位)是否发生变化:如果移位后,如果移位后,最高有效位与最高有效位与最高有效位与最高有效位与CFCF不等不等不等不等 则:则:则:则:OF=1,OF=1,否则:(无变化时)否则:(无变化时)否则:(无变化时)否则:(无变化时)OF=0OF=0 CF根据各条指令的规定设置。根据各条指令的规定设置。左循环移动多次后左循环移动多次后左循环移动多次后左循环移动多次后:OF 值不定。值不定。CF=从目标操作数移出的最后一位。从目标操作数移出的最后一位。SF、ZF、PF、AF不影响。不影响。(2 2)、)、)、)、RORR
25、OR(Rotate right)不含不含不含不含CFCF循环右移指令循环右移指令循环右移指令循环右移指令格式:格式:ROR dest,cnt;不含;不含CF循环右移指令循环右移指令,B/W执行操作:执行操作:ROR指令操作示意图如下图所示指令操作示意图如下图所示 右移右移右移右移8 8次后操作数还原。次后操作数还原。次后操作数还原。次后操作数还原。CFdest指令格式举例:指令格式举例:ROR CX,1ROL BH,CLROL BYTE PTRBETA,1ROL WORD PTR COUNT,CL(3 3)、)、)、)、RCLRCL(Rotate left through carry)含含含含
26、CFCF循环左移指令循环左移指令循环左移指令循环左移指令格式:格式:RCR dest,cnt;含;含CF循环左移指令循环左移指令,B/W执行操作:执行操作:RCL指令操作示意图如下图所示指令操作示意图如下图所示 左移左移左移左移9 9次后操作数还原次后操作数还原次后操作数还原次后操作数还原。CFdest指令格式举例:指令格式举例:RCL BX,1RCL DL,CLRCL BYTE PTR ARRAYDI,1RCL WORD PTR SI+BP,CL影响标志:影响标志:影响标志:影响标志:RCL RCL 与与与与ROL ROL 影响标志影响标志影响标志影响标志OFOF、CFCF情况相同情况相同情
27、况相同情况相同(4 4)、)、)、)、RCRRCR(Rotate right through carry)含含含含CFCF循环右移指令循环右移指令循环右移指令循环右移指令格式:格式:RCR dest,cnt;含;含CF循环左移指令循环左移指令,B/W执行操作:执行操作:RCR指令操作示意图如下图所示指令操作示意图如下图所示 右移右移右移右移9 9次后操作数还原。次后操作数还原。次后操作数还原。次后操作数还原。CFdest指令格式举例:指令格式举例:RCR DI,1RCR SI,CLRCR WORD PTRSI+BX+3,1RCL BYTE PTRPORT,CL影响标志:影响标志:影响标志:影响
28、标志:RCR RCR 与与与与 ROR ROR 影响标志影响标志影响标志影响标志OFOF、CFCF情况相同情况相同情况相同情况相同带进位循环左移带进位循环左移移移9次还原次还原带进位循环左移带进位循环左移移移9次还原次还原循环右移(不带循环右移(不带CF)移移8次还原次还原循环左移(不带循环左移(不带CF)移移8次还原次还原算术右移算术右移(带符号数(带符号数2)逻辑右移逻辑右移(无(无 符号数符号数2)执行操作执行操作名称名称指令格式指令格式SHL oprd,1CL逻辑左移逻辑左移(无符号数(无符号数*2)0 CF 0 CF SAL oprd,1CL算术左移算术左移CF0 SHR oprd,
29、1CLCF SAR oprd,1CLCF ROL oprd,1CLCF ROR oprd,1CLCF RCL oprd,11CL1 CF RCR oprd,11CL1小结:小结:小结:小结:循环移位指令循环移位指令循环移位指令循环移位指令(Rotate)与移位指令与移位指令与移位指令与移位指令(Shift)不同点不同点不同点不同点:循环移位指令移位后,操作数中原来各数位的信息不会循环移位指令移位后,操作数中原来各数位的信息不会丢失,这是移动了位置,必要时可以恢复。丢失,这是移动了位置,必要时可以恢复。循环移位指令可以对操作数进行测试。循环移位指令可以对操作数进行测试。例:测试例:测试(AL)5
30、=0?MOV CL,3ROL AL,CLROL AL,CLJNC ZEROZERO:(3)双精度移位指令SHLD/SHRD格式:格式:SHLD/shrd dest,src,cnt;执行操作:目的操作数和源操作数连续左移执行操作:目的操作数和源操作数连续左移/右移右移cnt位,结果位,结果在目的操作数中,源操作数不变。在目的操作数中,源操作数不变。注意:源操作数必须在寄存器中,目的操作数可以是寄存器,也可以是内存单元例:SHLD EAX,EBX,3SHLD MEMWORD,DX,8SHRD ECX,EDX,19SHRD EAX,EBX,CL5种基本操作:种基本操作:1、MOVS(Move str
31、ing)串传送指令串传送指令 2、CMPS(Compare string)串比较指令串比较指令 3、SCAS(Scan string)串扫描指令串扫描指令(串检索)串检索)4、LODS(Load from string)从串取指令从串取指令 5、STOS(Store in to string)存入串指令存入串指令 6、INS/OUTS(In/Out string)I/O串操作指令串操作指令 四、串操作指令(四、串操作指令(String manipulation)“串串”就是内存中一段地址相连的字节或字。就是内存中一段地址相连的字节或字。串操作串操作串操作串操作对串中各单元进行操作,也叫数据块操
32、作对串中各单元进行操作,也叫数据块操作对串中各单元进行操作,也叫数据块操作对串中各单元进行操作,也叫数据块操作。共同点:共同点:共同点:共同点:可以只有源操作数,可以只有目标操作数,可能二者都有。可以只有源操作数,可以只有目标操作数,可能二者都有。源操作数用源操作数用SI 寻址,隐含寻址,隐含DS值为段地址,可以用段跨越前缀指定其它段。值为段地址,可以用段跨越前缀指定其它段。目标操作数用目标操作数用DI寻址,隐含寻址,隐含ES为段地址。为段地址。每次操作对每次操作对SI、DI 调整:调整:DF=1DF=1,DIDI、SISI自动自动自动自动-1 (-1 (字节)或字节)或字节)或字节)或-2-
33、2(字);(字);(字);(字);DF=0DF=0,DIDI、SISI自动自动自动自动+1+1(字节)或(字节)或(字节)或(字节)或+2+2(字)。(字)。(字)。(字)。与上述指令基本配合使用前缀有:与上述指令基本配合使用前缀有:REPREP(Repeat)重复。重复。重复。重复。REPE/REPZREPE/REPZ(Repeat while equal/zero)相等相等相等相等/为零则重复。为零则重复。为零则重复。为零则重复。REPNE/REPNZREPNE/REPNZ(Repeat while not equal/not zero)不相等不相等不相等不相等/不为零则重复不为零则重复不
34、为零则重复不为零则重复。下面分二种情况来讨论:下面分二种情况来讨论:(一一一一)与与与与REPREP相配合工作的相配合工作的相配合工作的相配合工作的MOVSMOVS、STOSSTOS、LODSLODS指令指令指令指令 REP REP 重复串操作直到(重复串操作直到(重复串操作直到(重复串操作直到(CXCX)=0=0为止为止为止为止(二二二二)与与与与REPE/REPZREPE/REPZ和和和和REPNE/REPNZREPNE/REPNZ联合工作的联合工作的联合工作的联合工作的CMPSCMPS和和和和SCASSCAS指指指指令令令令 REPE/REPZ REPE/REPZ 当相等当相等当相等当相
35、等/为零时重复串操作为零时重复串操作为零时重复串操作为零时重复串操作 REPNE/REPNZ REPNE/REPNZ 当不相等当不相等当不相等当不相等/不为零时重复串操作不为零时重复串操作不为零时重复串操作不为零时重复串操作(一一一一)与与与与REPREP相配合工作的相配合工作的相配合工作的相配合工作的MOVSMOVS、STOSSTOS、LODSLODS指令指令指令指令 REP REP 重复串操作直到(重复串操作直到(重复串操作直到(重复串操作直到(CXCX)=0=0为止为止为止为止 格式:格式:REP 串指令串指令串指令可为:串指令可为:MOVS、STOS、LODS。1.MOVS(Move
36、String)串传送串传送2.LODS(Load from String)从串取指令从串取指令3.STOS(Store into String)存入串指令存入串指令1.1.MOVSMOVS(Move stringMove string)串传送串传送串传送串传送2.2.串传送有串传送有串传送有串传送有3 3种格式:种格式:种格式:种格式:(1)MOVSB(字节)字节);执行操作:执行操作:(ES):(DI)((DS):(SI),(SI)(SI)1,(,(DI)(DI)1(2)MOVSW(字);字);执行操作:执行操作:(ES):(DI)((DS):(SI),(SI)(SI)2,(,(DI)(DI
37、)2当方向标志当方向标志当方向标志当方向标志 CLD ,DF=0CLD ,DF=0时时时时 用用用用“+”+”STD,DF=1 STD,DF=1时时时时 用用用用“-”-”该指令不影响条件码该指令不影响条件码。归纳在执行归纳在执行MOVS指令时,应该先做好以下准备工作:指令时,应该先做好以下准备工作:(1)数据段中数据段中源串首地址源串首地址源串首地址源串首地址(如反向传送到末地址)(如反向传送到末地址)存入存入存入存入SISI寄存器中寄存器中寄存器中寄存器中。(2)附加段中附加段中目的串首地址目的串首地址目的串首地址目的串首地址(或反向传送末地址)(或反向传送末地址)存入存入存入存入DIDI
38、寄存器中寄存器中寄存器中寄存器中。(3)数据串长度存入数据串长度存入数据串长度存入数据串长度存入CXCX寄存器寄存器寄存器寄存器。(4)建立方向标志建立方向标志建立方向标志建立方向标志 建立方向标志介绍两条指令:建立方向标志介绍两条指令:建立方向标志介绍两条指令:建立方向标志介绍两条指令:CLD(clear direction flag)功能:功能:DF=0DF=0,执行串处理指令时,执行串处理指令时 可以使地址可以使地址自动自动自动自动+1+1或或或或+2+2。STD(set direction flag)功能:功能:DF=1DF=1,执行串处理指令时可以使地址,执行串处理指令时可以使地址自
39、动自动自动自动-1-1或或或或-2-2。2.2.LODS(Load from string)LODS(Load from string)取字符串指令取字符串指令取字符串指令取字符串指令取字符串指令有取字符串指令有取字符串指令有取字符串指令有3 3种格式:种格式:种格式:种格式:(1)LODSB(字节)字节);(AL)(DS):(SI),(SI)(SI)1(2)LODSW(字)字);(AX)(DS):(SI),(SI)(SI)2(3)LODSD(双字)(双字);(EAX)(DS):(SI),(SI)(SI)4功能:功能:该指令把由该指令把由(SISI)指定的数据段中某单元内容指定的数据段中某单元
40、内容指定的数据段中某单元内容指定的数据段中某单元内容 (AL)(AL)或或或或 (AX)(AX)或(或(或(或(EAXEAX)中)中)中)中。DF=0,(,(SI)(SI)+1或或+2或或+4DF=1,(,(SI)(SI)-1或或-2或或-4LODSLODS应用注意:应用注意:应用注意:应用注意:(1)指令允许用段跨越前缀来指定非数据段的存储区。指令允许用段跨越前缀来指定非数据段的存储区。(2)该指令不影响条件码。该指令不影响条件码。(3)一般说来,一般说来,(4)它不与它不与REP联用联用,每重复一次,累加器的内容就改变一次。每重复一次,累加器的内容就改变一次。(AL)中只能保持最后一个元素
41、。中只能保持最后一个元素。有时有时缓冲区中的一串字符需要多次取出测试时可用本指令缓冲区中的一串字符需要多次取出测试时可用本指令缓冲区中的一串字符需要多次取出测试时可用本指令缓冲区中的一串字符需要多次取出测试时可用本指令。适用于在一个循环中,用基本串操作指令构成复杂串操作适用于在一个循环中,用基本串操作指令构成复杂串操作时很有用。时很有用。存入串指令有存入串指令有存入串指令有存入串指令有3 3种格式:种格式:种格式:种格式:(1)STOSB(字节)(字节);(ES):(DI)(AL),(DI)(DI)1(2)STOSW(字)字);(ES):(DI)(AX),(DI)(DI)2(3)STOSD(字
42、)(字);(ES):(DI)(AX),(DI)(DI)4用途:用途:与与REP联用时,(联用时,(CX)缓冲区长度。用来建立一串相同的缓冲区长度。用来建立一串相同的值值3 3 STOSSTOS(Store into stringStore into string)存入串指令存入串指令存入串指令存入串指令将将将将(AL)(AL)或(或(或(或(AX)AX)(ES):(DI)(ES):(DI),(,(,(,(DI)1DI)1或或或或22或或或或 4(DI)(DI)例:在附加段例:在附加段STORE开始存开始存5个空格个空格程序:程序:MOV AL,20H ;_ (AL)MOV CX,5 MOV D
43、I,offset STORE CLD REP STOSB ;(ES):(DI)(AL)(DI)(DI)+1学习学习学习学习LODSLODS,STOSSTOS指令应用指令应用指令应用指令应用例:内存中有一个首地址为例:内存中有一个首地址为BLOCK补码表示的有符号数的数据块补码表示的有符号数的数据块补码表示的有符号数的数据块补码表示的有符号数的数据块。要求将正、负数分开,分别存于二个缓冲区要求将正、负数分开,分别存于二个缓冲区要求将正、负数分开,分别存于二个缓冲区要求将正、负数分开,分别存于二个缓冲区:存放正数的缓冲区首址为存放正数的缓冲区首址为PLUS-DATA,存放负数的缓冲区首址为存放负数
44、的缓冲区首址为MINUS-DATA。设:设:源数据块用源数据块用SI寻址,寻址,正数的目的区用正数的目的区用DI寻址,寻址,负数的目的区用负数的目的区用BX寻址。寻址。循环次数循环次数 (CX)。传送过程:传送过程:传送过程:传送过程:用用LODS指令把源数据取入(指令把源数据取入(AL)中,中,检查其符号,确定正、负,检查其符号,确定正、负,若为正数用若为正数用STOS指令送至正数缓冲区,指令送至正数缓冲区,若是负数,把(若是负数,把(DI)与(与(BX)交换,仍使用交换,仍使用STOS传送,传送,传送传送 完后再完后再 将(将(DI)与(与(BX)交换,恢复原值。交换,恢复原值。程序:程序
45、:START:MOV SI,OFFSET BLOCKMOV DI,OFFSET PLUS-DATA;正数缓冲区正数缓冲区MOV BX,OFFSET MINUS-DATA;负数缓冲区;负数缓冲区MOV CX,COUNT CLDCLDGOON:LODSBLODSB TEST ALTEST AL,80H80H JNZ MINS ;若负数转;若负数转MINS STOSBSTOSB ;正数;正数,(,(DI)(AL),(),(DI)(DI)+1JMP AGAINMINS:XCHG BX,DI STOSBSTOSB ;负数;负数,(,(DI)(AL),(),(DI)(DI)+1XCHG BX,DI AGA
46、IN:DEC CX JNZ GOON HLT4 I/O4 I/O串操作指令(串操作指令(In/Out StringIn/Out String)INSB/OUTSBINSB/OUTSB、INSW/OUTSWINSW/OUTSW、INSD/OUTSDINSD/OUTSDINSB/INSW/INSD 从一个输入端口读一串数据送到有EDI或DI指出的连续存储单元OUTSB/OUTSW/OUTSD 从ESI或SI指出的连续存储单元输出一串数据到输出端口例:INSW 例:OUTSD(二二二二)与与与与REPE/REPZREPE/REPZ和和和和REPNE/REPNZREPNE/REPNZ联合工作的联合工作
47、的联合工作的联合工作的CMPSCMPS和和和和SCASSCAS指指指指令令令令 REPE/REPZ REPE/REPZ 当相等当相等当相等当相等/为零时重复串操作为零时重复串操作为零时重复串操作为零时重复串操作 格式:格式:REPE(或(或REPZ)string primitive 当相等重复前缀当相等重复前缀当相等重复前缀当相等重复前缀REPZREPZString primitive可为可为 :CMPS,SCASCMPS,SCAS 1、CMPS(Compare string )串比较指令串比较指令 2、SCAS (Scan string )串扫描指令,搜索指令串扫描指令,搜索指令 REPNE
48、/REPNZ REPNE/REPNZ 当不相等当不相等当不相等当不相等/不为零时重复串操作不为零时重复串操作不为零时重复串操作不为零时重复串操作格式:格式:REPNE(或(或REPNZ)string primitive 当不相等重复前缀当不相等重复前缀当不相等重复前缀当不相等重复前缀REPNZREPNZstring primitive可为可为 :CMPS,SCASCMPS,SCAS1、CMPS(Compare string )串比较指令串比较指令 2、SCAS (Scan string )串扫描指令,搜索指令串扫描指令,搜索指令注意:注意:注意:注意:两数相减,只影响标志,不影响操作数。两数相
49、减,只影响标志,不影响操作数。两数相减,只影响标志,不影响操作数。两数相减,只影响标志,不影响操作数。其它操作规定与其它操作规定与其它操作规定与其它操作规定与MOVSMOVS同。同。同。同。1 1 1 1、CMPSCMPSCMPSCMPS(Compare string )Compare string )Compare string )Compare string )串比较指令串比较指令串比较指令串比较指令 (SISI)作为源串地址,(作为源串地址,(DIDI)目的串地址目的串地址串比较指令有串比较指令有串比较指令有串比较指令有3 3 3 3种格式:种格式:种格式:种格式:(1)CMPSB(1)
50、CMPSB(字节)(字节);(SI);(SI)(SI)1(SI)1,(DI)(DI)1(DI)(DI)1(2)CMPSW(2)CMPSW(字);(字);(SI)(SI)(SI)2(SI)2,(DI)(DI)(DI)2(DI)2(3)CMPSD(3)CMPSD(双字);(双字);(SI)(SI)(SI)4(SI)4,(DI)(DI)(DI)4(DI)4执行操作:执行操作:(ES)(ES):(:(DI)DI)-(DS)DS):(SI),(SI),结果不存,置标志。结果不存,置标志。字节操作:字节操作:(SI)(SI)(SI)1(SI)1,(DI)(DI)1(DI)(DI)1字操作:字操作:(SI)