




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、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 ) 逻辑逻辑“非非”指令指令8088可以对可以对8位,或位,或16位操作数执行逻辑操作。位操作数执行逻辑操作。影响条件码:影响条件码: (NOT指令除外,其他指令同)指令除外,其他指令
2、同) 根据结果设置SF、ZF和PF,CF=OF=02格式:格式:AND dest, src ;B/W,(dest)(dest (src)执行操作:进行执行操作:进行“与与”运算,运算,两位中有一位为两位中有一位为0(或二位都为(或二位都为0),则结),则结 果果 为为0,否则为,否则为1。操作类型举例:操作类型举例:AND AL, 0FH ;寄存器;寄存器 立即数立即数AND CX, DI ; 寄存器寄存器 寄存器寄存器AND SI, MEM_NAME ; 寄存器寄存器 存储器存储器AND ALPHA DI, AX ; 存储器存储器 寄存器寄存器 AND word ptr BXSI, 0FFF
3、EH ; 存储器存储器 立即数立即数3注意:注意: 影响条件码:影响条件码: CF0F=0, A未定义未定义 ,根据结果设置SF、ZF和PF “与与”指令的用途指令的用途:(1) 例:例:AND AL ,AL ; 结果:结果:。 (2) 使使;而而。例:例: 若(若(AL)=4 H AND AL, 0 H ; (AL)=03H, ; ;。4“与与”指令应用举例:指令应用举例:例例1:将英文小写字母:将英文小写字母ASCII转换成大写。转换成大写。小写英文字母小写英文字母ASCII为:为:az 61H7AH大写英文字母大写英文字母ASCII为:为:AZ 41H5AH程序:程序:MOV AL, z
4、AND AL,0H;(AL)=5AH例例2:判断键盘按下的字符是不是:判断键盘按下的字符是不是Y? ;键入无回显,(键入无回显,(AL)=输入键的字符码输入键的字符码AND AL, 0DFHCMP AL, YJE YES YES: 0110 00010100 00011101 111161H41HFDH5(Test or non_destructive logical and ) 格式:格式: TEST dest , src;(;(dest)(src)执行操作:执行操作: 二个操作数相与的结果不存,置条件码。二个操作数相与的结果不存,置条件码。操作类型举例:操作类型举例:TEST BH, 7
5、; 寄存器寄存器 立即数立即数TEST SI , BP ;寄存器;寄存器 寄存器寄存器TEST DI ,TABLEBX ; 寄存器寄存器 存储器存储器TEST SI,CH ;存储器;存储器 寄存器寄存器TEST word ptr BXDI, 6ACEH ;存储器;存储器 立即数立即数6用途:用途:常常常常,但又不希望改变原有,但又不希望改变原有的操作数的情况下,常在此指令后边加一条的操作数的情况下,常在此指令后边加一条 条件转移指令。条件转移指令。例:判断例:判断A单元中数据的奇偶性单元中数据的奇偶性设:设: (A )= 0AEH程序:程序:MOV AL,A;(AL)=0AEH TEST AL
6、,01H JZ EVEN ; 结果结果=0为偶数转为偶数转EVEN 奇数处理奇数处理 EVEN:偶数处理偶数处理检测(检测(AL)的最低位是否为)的最低位是否为0,若为,若为0转转EVEN7格式:格式:OR dset, src;(;(dset)(dset) (src)执行操作:执行操作: 进行按位进行按位“或或”运算运算 两位操作数中任一位为两位操作数中任一位为1(或都为(或都为1),), 则该位(结果)则该位(结果)=1,否则为否则为0。操作类型举例:操作类型举例:OR BL,0F6H; 寄存器寄存器 立即数立即数OR AH, BL;寄存器;寄存器 寄存器寄存器OR CL ,BETABXDI
7、; 寄存器寄存器 存储器存储器OR GAMMASI ,DX;存储器;存储器 寄存器寄存器OR BYTE PTR MEM_BYTE , 80H;存储器;存储器 立即数立即数8注意:注意: “ 影响条件码:影响条件码: CF0F=0, A未定义未定义 , SF ZF PF 用途:用途:(1)清)清CF , 例:例: OR AL ;(;(AL)不变,)不变,CF=0(2)使某个操作数)使某个操作数 ; (3) 将两个操作数信息组合。将两个操作数信息组合。 若(若(AL)=03H 用用OR指令组合使(指令组合使(AL)=33H=3 。 OR AL,30H ;(;(AL)=33H 9格式:格式:XOR
8、dset , src ;B/W(dset) (dset) (src)执行的操作:对指令的两个操作数进行按位执行的操作:对指令的两个操作数进行按位“异或异或”运算。运算。操作类型举例:操作类型举例:XOR DI, 23F6HH ; 寄存器寄存器 立即数立即数XOR SI , DX ;寄存器;寄存器 寄存器寄存器XOR CL , BUFFER ; 寄存器寄存器 存储器存储器XOR MEMBX,AX ;存储器;存储器 寄存器寄存器XOR byte ptrTABLEBPSI, 3DH ; 存储器存储器 立即数立即数10注意:注意: 用途:用途:应用举例:应用举例:例例1: 将(将(AL)中的第中的第1
9、、3、5、7位求反位求反 0、2、4、6位保持不变。位保持不变。MOV AL, 0FHXOR AL,0AAH11例例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个字节的个字节的16进制数进行累加,进制数
10、进行累加,和存于和存于SUM+1、SUM单元。单元。12程序:程序:100个字节的个字节的16进制数进制数进行累加。进行累加。 LEA BX , TABLEMOV CL,100XOR AX ,AXLOOPER:ADD AL,BXJNC GOONINC AHGOON: INC BXDEC CLJNZ LOOPERMOV SUM , AXHLT流流程程图图开始开始初始化,置数据块地址指针初始化,置数据块地址指针置循环次数,清(AL)、(AH)置循环次数,清(AL)、(AH)累加1个字节送(AL)累加1个字节送(AL)有进位?有进位?地址指针1地址指针1循环次数1循环次数1 循环次数0? 循环次数0
11、?结束结束(AH)+1 (AH)(AH)+1 (AH)Y YN NN NY Y13格式:格式: NOT dest ;B/W 指令操作数只有一个指令操作数只有一个,指令指令。执行操作:执行操作: 字节求反:(字节求反:(dest)0FFH-(dest) 字求反:字求反: (dest 0FFFFH-(dest) 影响标志位:对标志位无影响。影响标志位:对标志位无影响。操作类型举例:操作类型举例: NOT AH; 8位寄存器求反位寄存器求反 NOT CX;16位寄存器求反位寄存器求反 NOT BYTE PTR BP;8位存储器求反位存储器求反 NOT WORD PTR COUNT ;16位存储器求反
12、位存储器求反14综合举例:综合举例:1使某些位置使某些位置“0”。 IN AL,61H;(;(AL)= B 设备控制寄存器设备控制寄存器 想使此位为想使此位为0执行指令:执行指令: 即可。即可。2. 使某些位置使某些位置“1”。 IN AL,61H;(;(AL)= 执行指令:执行指令: 想使此位为想使此位为“1”3. 使某些位求反:使某些位求反:IN AL,61H ;(;(AL)= 0 0 0 0 0 0 0 1 0 1 4. 测试某些位(测奇偶性):测试某些位(测奇偶性):测试测试 “奇奇”“”“偶偶”性。性。 见见TEST指令的用途例子。指令的用途例子。15(1)AND指令用来对指令的指定
13、位清指令用来对指令的指定位清“0”。(2)OR指令常用来对某些位置指令常用来对某些位置1。(3)XOR指令用在程序开头,使某个寄存器清指令用在程序开头,使某个寄存器清“0”。(4)NOT指令对某个数据取反,指令对某个数据取反,+1成补码。成补码。(5)TEST指令用来检测指定位为指令用来检测指定位为1,还是,还是0。16( 4条条 ): 。(1)、)、 SHL/SAL(Shift logical left/shift arithmetic left) 逻辑左移逻辑左移/算术左移指令算术左移指令(2)、)、SHR (Shift logical right ) 逻辑右移指令逻辑右移指令(3)、)、
14、SAR (Shift arithmetic right )算术右移指令算术右移指令( 4条)条): 。(1)、)、ROL (Rotate left ) 不含不含CF循环左移指令循环左移指令(2)、)、ROR (Rotate right ) 不含不含CF循环右移指令循环右移指令(3)、)、RCL (Rotate left through carry )含含CF循环左移指令循环左移指令(4)、)、RCR (Rotate right through carry )含含CF循环右移指令循环右移指令17共同点:共同点: 所有移位指令都可以作所有移位指令都可以作B/W操作。操作。 指令中的指令中的 cnt
15、 : 表示移位次数表示移位次数 cnt=1,1可写在指令中,不能是可写在指令中,不能是1以外的常数。以外的常数。 cnt1,用,用CL存放移位次数存放移位次数 ,不能是其他寄存器。不能是其他寄存器。 如:如:SAL AX,1 MOV CL,4 SAL AX,CL 利用移位指令编制程序,执行时间比直接用指令快,利用移位指令编制程序,执行时间比直接用指令快, 速度可提高速度可提高5-6倍。倍。18 条件码设置:条件码设置:算逻移位移位指令算逻移位移位指令:执行多次移位指令后对执行多次移位指令后对CF、OF的影响的影响:CF=从目标操作数移出的最后一位;从目标操作数移出的最后一位;OF不定。不定。执
16、行一次移位指令指令后对执行一次移位指令指令后对CF、OF的影响的影响: OF用于判断移位后最高有效位是否发生变化用于判断移位后最高有效位是否发生变化.最高位与最高位与CF不等,不等, 则:则: OF = 1, 否则:无变化时,否则:无变化时,OF = 0 CF根据各条指令的规定设置。根据各条指令的规定设置。 SF、ZF、PF,AF无定义。无定义。 循环移位指令:循环移位指令:SF、ZF、PF、AF不影响。不影响。 OF、CF影响情况在指令中讲影响情况在指令中讲: 19( 4条条 ) : (1)、)、 SHL/SAL(Shift logical left/shift arithmetic lef
17、t)逻辑左移逻辑左移/算术左移指令算术左移指令格式:格式: SHL dest ,cnt ;逻辑左移指令;逻辑左移指令, B/W SAL dest ,cnt ;算术左移指令;算术左移指令, B/W dest : 寄存器、存储器寻址方式。寄存器、存储器寻址方式。 cnt : 表示移位次数表示移位次数 cnt=1,1可写在指令中。可写在指令中。 cnt1,用,用CL存放移位次数存放移位次数 。 20执行操作:执行操作:相当于无符号数的相当于无符号数的2功能。功能。 SHL/SAL指令操作示意图如下图所示:指令操作示意图如下图所示:指令格式举例:指令格式举例: SHL AH,1 SAL SI, CL
18、SAL WORD PTR BX+5 ,1 SHL BYTE PTR , CL0CFdest21(2)、)、SHR (Shift logical right )逻辑右移指令逻辑右移指令格式:格式: SHR dest ,cnt ;逻辑右移指令;逻辑右移指令, B/W执行操作:执行操作:相当于无符号数的相当于无符号数的2功能。功能。 SHR指令操作示意图如下图所示:指令操作示意图如下图所示:dest : 寄存器、存储器寻址方式。寄存器、存储器寻址方式。指令格式举例:指令格式举例:SHR BL , 1SHR AX , CLSHR BYTE PTR DI+BP,1SHR WORD PTR BLOCK ,
19、CLdestCF022 (Shift arithmetic right )格式:格式: SAR dest ,cnt ;算术右移指令;算术右移指令, B/W执行操作:执行操作:相当于带符号数的相当于带符号数的2功能功能,对负数向下舍入对负数向下舍入 IDIV指令对负数向上舍入。指令对负数向上舍入。(下页解释)下页解释) SAR指令操作示意图如下图所示指令操作示意图如下图所示dset指令格式举例:指令格式举例:SAR AL , 1SHR DL , CLSHR WORD PTR TABLESI,1SHR BYTE PTR STATUS ,CLCF23用用SAR指令与用指令与用IDIV指令做除法的区别
20、:指令做除法的区别:用用SAR指令做除法指令做除法(对负数向下舍入)(对负数向下舍入):MOV AX , 81H; (AX) = -127SAR AX , 1; (AX)= - 64用用IDIV指令做除法指令做除法(IDIV指令对负数向上舍入)指令对负数向上舍入) :MOV AX , 81H;(AX)= -127MOV CL , 2IDIV CL;(AL)= -63 ,(AH)= -124应用举例:应用举例:(BX)=84F0H (1) 若若(BX)无符号数,求(无符号数,求(BX)/2SHR BX,1 ; (BX)=4278 CF=0,OF=1,SF=0,ZF=0 (2) 若(若(BX)带符
21、号数,求()带符号数,求(BX)/4 MOV CL,02H 或或SAR BX,1 SAR BX,CL SAR BX,1 ; CF=0,OF无意义,无意义, SF=1,ZF=01 11 11 11 10 00 00 00 00 01 12 23 34 45 56 67 70 00 01 10 00 00 00 01 18 89 91010111112121313141415150 01 11 11 11 10 00 00 00 01 12 23 34 45 56 67 70 01 10 00 00 00 01 10 08 89 910101111121213131414151525(3)每四位一
22、组存入堆栈(字操作)每四位一组存入堆栈(字操作) (BX)=84F0H (SS)=3000H (SP)=1000H MOV CH,4 MOV CL,4 NE : ROL BX,CL MOV AX,BX AND AX,000FH PUSH AX DEC CH JNZ,NE 1 11 11 11 10 00 00 00 00 01 12 23 34 45 56 67 70 00 01 10 00 00 00 01 18 89 9101011111212131314141515(CH)=4ROL BX,CLMOV AX,BX AND AX,000FH PUSH AX(BX)=4F08H(AX)=4F
23、08H(AX)=0008H(30FFEH)=0008H(CH)=3ROL BX,CLMOV AX,BX AND AX,000FH PUSH AX(BX)=F084H(AX)=F084H(AX)=0004H(30FFCH)=0004H(CH)=2ROL BX,CLMOV AX,BX AND AX,000FH PUSH AX(BX)=084FH(AX)=084FH(AX)=000FH(30FF8H)=000FH(CH)=1ROL BX,CLMOV AX,BX AND AX,000FH PUSH AX(BX)=84F0H(AX)=84F0H(AX)=0000H(30FF4H)=0000H26( 4条
24、)条): 。共同点:共同点: 不含不含CF循环移位指令,循环移位指令,。 含含CF循环移位指令,循环移位指令,。 影响标志影响标志OF、CF ROL、 RCL影响标志影响标志OF、CF情况相同情况相同 ; ROR 、 RCR影响标志影响标志OF、CF情况相同情况相同 。 SF、ZF、PF、AF不影响。不影响。27 (Rotate left )格式:格式: ROL dest ,cnt ;不含;不含CF循环左移指令循环左移指令, B/W执行操作:执行操作:ROL指令操作示意图如下图所示指令操作示意图如下图所示 CFdest指令格式举例:指令格式举例:ROL BH , 1ROL DX , CLROL
25、 WORD PTR TABLEDI,1ROL BYTE PTR ALPHA ,CL28影响标志影响标志OF、CF 情况:情况: : 移位后,最高有效位(符号位)是否发生变化:移位后,最高有效位(符号位)是否发生变化: 如果移位后,如果移位后, CF根据各条指令的规定设置。根据各条指令的规定设置。 OF 值不定。值不定。 CF=从目标操作数移出的最后一位。从目标操作数移出的最后一位。 SF、ZF、PF、AF不影响。不影响。29 (Rotate right )格式:格式: ROR dest ,cnt ;不含;不含CF循环右移指令循环右移指令, B/W执行操作:执行操作:ROR指令操作示意图如下图所
26、示指令操作示意图如下图所示 CFdest指令格式举例:指令格式举例:ROR CX , 1ROL BH , CLROL BYTE PTRBETA , 1ROL WORD PTR COUNT , CL30影响标志影响标志OF、CF 情况:情况: 如果移位后,如果移位后, CF根据各条指令的规定设置。根据各条指令的规定设置。 :OF 值不定。值不定。 CF=从目标操作数移出的最后一位。从目标操作数移出的最后一位。 SF、ZF、PF、AF不影响。不影响。31 (Rotate left through carry )格式:格式: RCR dest ,cnt ;含;含CF循环左移指令循环左移指令, B/W
27、执行操作:执行操作:RCL指令操作示意图如下图所示指令操作示意图如下图所示 。CFdest指令格式举例:指令格式举例:RCL BX , 1RCL DL , CLRCL BYTE PTR ARRAYDI , 1RCL WORD PTR SI+BP , CL32 (Rotate right through carry )格式:格式: RCR dest ,cnt ;含;含CF循环左移指令循环左移指令, B/W执行操作:执行操作:RCR指令操作示意图如下图所示指令操作示意图如下图所示 CFdest指令格式举例:指令格式举例:RCR DI, 1RCR SI , CLRCR WORD PTRSI+BX+3
28、, 1RCL BYTE PTRPORT, CL33带进位循环左移带进位循环左移移移9次还原次还原带进位循环左移带进位循环左移移移9次还原次还原循环右移(不带循环右移(不带CF) 移移8次还原次还原循环左移(不带循环左移(不带CF) 移移8次还原次还原算术右移算术右移(带符号数(带符号数2)逻辑右移逻辑右移(无(无 符号数符号数2)执行操作执行操作名称名称指令格式指令格式SHL oprd,1CL逻辑左移逻辑左移(无符号数(无符号数*2)0 CF 0 CF SAL oprd,1CL算术左移算术左移CF0 SHR oprd, 1CLCF SAR oprd, 1CLCF ROL oprd,1CLCF
29、ROR oprd, 1CLCF RCL oprd,1 1CL1 CF RCR oprd, 11CL134(Rotate)(Shift): 循环移位指令移位后,操作数中原来各数位的信息不会循环移位指令移位后,操作数中原来各数位的信息不会丢失,这是移动了位置,必要时可以恢复。丢失,这是移动了位置,必要时可以恢复。 循环移位指令可以对操作数进行测试。循环移位指令可以对操作数进行测试。例:测试例:测试(AL)5 =? 0MOV CL , 3JNC ZEROZERO:35 。例:例: 将将DX、AX组合起来构成组合起来构成32位寄存器向左移一位。位寄存器向左移一位。如下图所示:如下图所示:0 01515
30、0 01515DXDXAXAX程序:程序: SHL AX , 1 RCL DX , 132位寄存器向左移一位位寄存器向左移一位36四、串操作指令四、串操作指令(String manipulation ) “串串”就是内存中一段地址相连的字节或字。就是内存中一段地址相连的字节或字。 。 8088有有5种基本操作:种基本操作: 1、 MOVS(Move string) 串传送指令串传送指令 2、CMPS(Compare string) 串比较指令串比较指令 3、SCAS(Scan string) 串扫描指令串扫描指令 4、LODS(Load from string) 从串取指令从串取指令 5、ST
31、OS (Store in to string) 存入串指令存入串指令37 可以只有源操作数,可以只有目标操作数,可以二者都有。可以只有源操作数,可以只有目标操作数,可以二者都有。 源操作数用源操作数用SI 寻址,隐含寻址,隐含DS值为段地址,可以用段跨越前缀指定其它段。值为段地址,可以用段跨越前缀指定其它段。 目标操作数用目标操作数用DI寻址,隐含寻址,隐含ES为段地址。为段地址。 每次操作修改地址指针每次操作修改地址指针SI、DI 调整:调整: 与上述指令基本配合使用前缀有:与上述指令基本配合使用前缀有: 。38下面分二种情况来讨论:下面分二种情况来讨论: 39 格式:格式:REP Stri
32、ng Primitive 串指令串指令 String Primitive 可为:可为:MOVS、STOS、LODS。MOVS(Move String) 串传送串传送LODS(Load from String) 从串取指令从串取指令STOS(Store into String) 存入串指令存入串指令40 (1)当当(CX)= 0 ,结束,结束REP, 执行执行REP后的下一条指令。后的下一条指令。 (2) 当当(CX)0, (CX) (CX) -1 , (3) 执行执行REP后的串指令,后的串指令, (4) 重复重复(1)(3)。)。REP 执行流程图执行流程图( (C CX)X)=0?=0?Y
33、 Y(CX) (CX)-1(CX) (CX)-1执行下一条指令执行下一条指令执行REP后的串执行REP后的串指令指令N N41(1) MOVS dest,src;(;(ES):():(DI)(DS):():(SI)MOVSB (字节)(字节);(SI)(SI)1,(,(DI)(DI) 1MOVSW (字);(字);(SI)(SI)2,(,(DI)(DI)2 该指令不影响条件码该指令不影响条件码 。 *如:如: MOVS ES:BYTE PTR DI,DS:SI* 单指令不能完成单指令不能完成 ; 42例:将内存的数据段中以例:将内存的数据段中以AREA1为首地址的为首地址的100个数据,传送到
34、个数据,传送到附加段中的附加段中的AREA2为首地址的区域。为首地址的区域。用用MOVS串操作指令编程:串操作指令编程: MOV AX,SEG AREA1 ; SEG是段超越前缀指令是段超越前缀指令 取标号的段地址取标号的段地址 MOV DS,AX MOV AX,SEG AREA2MOV ES,AX ; DF=0,增址传送,增址传送LOOP1:43: MOV AX,SEG AREA1 MOV DS,AX MOV AX,SEG AREA2 MOV ES,AX LOOP1: ; (AL)(DS):():(SI) ;(;(ES):():(DI)(AL) INC SI INC DI DEC CX ;C
35、X=CX 1 JNE LOOP1 ;若;若CX=0,则跳转到,则跳转到LOOP144归纳在执行归纳在执行MOVS指令时,应该先做好以下准备工作:指令时,应该先做好以下准备工作:(1) 数据段中数据段中(如反向传送到末地址)(如反向传送到末地址)。(2) 附加段中附加段中(或反向传送末地址)(或反向传送末地址)。(3) 。(4) CLD(clear direction flag) 功能:使功能:使,执行串处理指令时,执行串处理指令时 可以使地址可以使地址。 STD(set direction flag)功能:功能:,执行串处理指令时可以使地址,执行串处理指令时可以使地址45LODS src;(字
36、节)(字节)(AL) (DS):(SI), (SI) (SI) 1 (字(字)(AX) (DS):(SI),(SI) (SI)2LODS B (字节)(字节);(AL) (DS):(SI),(SI) (SI) 1LODS W (字)(字) ;(AX) (DS):(SI),(SI) (SI)2功能:把由功能:把由。DF=0,(,(SI) (SI)+1或或+2DF=1,(,(SI) (SI)-1或或-2 例例 P6546(1) 指令允许用段跨越前缀来指定非数据段的存储区。指令允许用段跨越前缀来指定非数据段的存储区。(2) 该指令不影响条件码。该指令不影响条件码。一般说来,一般说来,它不与它不与RE
37、P联用联用,每重复一次,累加器的内容就改变一次。每重复一次,累加器的内容就改变一次。 (AL)中只能保持最后一个元素。中只能保持最后一个元素。有时有时。(3) 适用于在一个循环中,用基本串操作指令构成复杂串操作适用于在一个循环中,用基本串操作指令构成复杂串操作时很有用。时很有用。47 STOS dest;(字节)(字节) (ES):(DI) (AL) , (DI) (DI) 1 (字(字) (ES):(DI) (AX) , (DI) (DI) 2(2) STOS B (字节)(字节); (ES):(DI) (AL) , (DI) (DI) 1(3) STOS W (字)(字) ; (ES):(
38、DI) (AX) , (DI) (DI) 2用途:用途:与与REP联用时,(联用时,(CX)缓冲区长度。用来建立一串相同的值。缓冲区长度。用来建立一串相同的值。 例例 P6548例:内存中有一个首地址为例:内存中有一个首地址为BLOCK。 存放正数的缓冲区首址为存放正数的缓冲区首址为PUOS-DATA, 存放负数的缓冲区首址为存放负数的缓冲区首址为MINUS-DATA。设:设: 源数据块用源数据块用SI寻址,寻址, 正数的目的区用正数的目的区用DI寻址,寻址, 负数的目的区用负数的目的区用BX寻址。寻址。 循环次数循环次数 ( CX )。49用用LODS指令把源数据装入指令把源数据装入AL或或
39、AX中,中, 检查其符号,确定正、负,检查其符号,确定正、负,若为正数用若为正数用STOS指令送至正数缓冲区,指令送至正数缓冲区,若是负数,把(若是负数,把(DI)与()与(BX)交换,仍使用)交换,仍使用STOS传送,传送,传送传送 完后再完后再 将(将(DI)与()与(BX)交换,恢复原值。)交换,恢复原值。50程序:程序:START: MOV SI,OFFSET BLOCKMOV DI,OFFSET PUOS-DATA ; 正数缓冲区正数缓冲区MOV BX,OFFSET MINUS-DATA ;负数缓冲区;负数缓冲区MOV CX,COUNT ; COUNT 数组的个数数组的个数 GOON
40、: JNZ MINS ;若负数转;若负数转MINS ;正数;正数 ,(,(DI)(AL),(),(DI)(DI)+1JMP AGAINMINS: XCHG BX,DI ;负数;负数 ,(,(DI)(AL),(),(DI)(DI)+1XCHG BX,DI AGAIN:DEC CX JNZ,GOON HLT51 格式:格式:REPE(或(或REPZ)string primitive String primitive可为可为 : 1、CM PS(Compare string ) 串比较指令串比较指令 2、SCAS (Scan string ) 串扫描指令,搜索指令串扫描指令,搜索指令52执行过程:执
41、行过程:当当(CX)= 0 , 结束结束REPZ, 执行执行REPZ下一条指令;下一条指令;(2) 当当(CX)0,将,将CX 的内容减的内容减1,执行执行REPZ后的串指令;后的串指令;(3) 当当ZF = 1, 返回返回 (1) ;(4) 当当ZF1, 则结束则结束REPZ 执行执行REPZ下一条指令。下一条指令。REPZ执行流程执行流程( (C CX)X)=0?=0?Y Y(CX) (CX)-1(CX) (CX)-1执行下一条指令执行下一条指令执行REZ后的串执行REZ后的串指令指令N NZF=1?ZF=1?N NY Y53 格式:格式:REPNE(或(或REPNZ)string pri
42、mitive string primitiveString primitive可为可为 : 1、CMPS(Compare string ) 串比较指令串比较指令 2、SCAS (Scan string ) 串扫描指令,搜索指令串扫描指令,搜索指令54执行过程:执行过程:当当(CX )= 0 , 结束结束REPNZ, 执行执行REPNZ下一条指令。下一条指令。(2) 当当(CX)0,将,将CX 的内容减的内容减1, 执行执行REPNZ后的串指令。后的串指令。 当当ZF = 0, 返回返回(1); 当当ZF0, 则结束则结束REPNZ, (4) 执行执行REPNZ下一条指令。下一条指令。注意:注意
43、: REPNZ执行流程执行流程( (C CX)X)=0?=0?Y Y(CX) (CX)-1(CX) (CX)-1执行下一条指令执行下一条指令执行RENZ后的串执行RENZ后的串指令指令N NZF=0?ZF=0?N NY Y55 (SI)作为源串地址,(作为源串地址,(DI)目的串地址目的串地址(1) CMPS dest,src;(ES) :(DI) -(DS):(SI),CMPS B (字节)(字节);(SI) (SI)1,(DI)(DI) 1CMPS W (字);(字);(SI) (SI)2,(DI) (DI)2执行操作:执行操作:(ES) :(DI) -(DS):(SI),结果不存,置标志。结果不存,置标志。字节操作:字节操作:(SI) (SI)1,(D
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年军队文职人员招聘之军队文职公共科目综合检测试卷B卷含答案
- 2024河北省中考英语真题【原卷版】
- 重大事件公关管理合同(2篇)
- 金子抵押合同(2篇)
- (一诊)2025年兰州市高三诊断考试历史试卷(含答案)
- 电子商务平台交易额及客户评价统计表
- 小学生自然科学小故事解读
- 果苗购销合同种苗购销合同
- 生物化学基础理论知识练习题集
- 江西省宜春市丰城市第九中学2024-2025学年高三(复读班)上学期期末考试地理试题(含答案)
- 高考数学总复习第八章平面解析几何教案
- Module1Unit1Touchandfeel单元整体(教学设计)-沪教牛津版(深圳用)英语四年级下册
- 信息系统运行维护技术规范
- (高清版)DZT 0282-2015 水文地质调查规范(1:50000)
- 婴幼儿二便,三浴等
- 文物古迹保护遗址环境和安全远程监控系统
- 销售外包方案
- 既有建筑混凝土结构改造设计规范DBJ-T 15-182-2020
- 2024春苏教版《亮点给力大试卷》 数学一年级下册(全册有答案)
- 早期康复治疗
- 2024中国罕见病行业趋势观察报告
评论
0/150
提交评论