汇编 算术运算指令._第1页
汇编 算术运算指令._第2页
汇编 算术运算指令._第3页
汇编 算术运算指令._第4页
汇编 算术运算指令._第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、3.3.2 数据运算类 加法指令加法指令 减法指令减法指令 乘法指令乘法指令 除法指令除法指令 十进制调整指令十进制调整指令一、加法指令一、加法指令 加法指令:加法指令: ADD DST, SRC ; (DST) (SRC) + (DST) 带进位加法指令:带进位加法指令: ADC DST, SRC ; (DST) (SRC) + (DST) + CF 加加1指令:指令: INC OPR ; (OPR) (OPR) + 1注意注意: * 加法指令对条件标志位(加法指令对条件标志位(CF/OF/ZF/SF)有影响)有影响 * 除除INC指令指令不影响不影响CF标志外,均对条件标志位标志外,均对条

2、件标志位 有影响。有影响。3CF:最高位向上是否有进位,如有则CF=0,否则CF=1OF:溢出标志,如有溢出则OF=0,否则OF=1,当具有相同符号的 两个数相加,结果与其相反,则溢出SF:符号标志,结果为负则SF=1,为正则SF=0ZF:零标志,用于判断结果是否为零,如果是零则ZF=1,不是零则 ZF=041 ADD DX , F0F0H 执行前: (DX)=4652H 则指令执行后(DX),CF,OF,ZF,SF各为多少?执行后: (DX)=3742H ZF=0,SF=0,CF=1,OF=02、 ADD AX,BX 执行前: (AX)=9568H,(BX)=1000H ,(DS)=2000

3、H (21000)=A3B4则指令执行后(AX),CF,OF,ZF,SF各为多少?执行后: (AX)=391CH ,CF=1,OF=1,ZF=0, SF=0如: 将22000H和23000H开始的4个字节相加,和送存24000H开始的单元。(高位对应高地址,低位对应低地址) MOV AX,2000H ;置段地址 MOV DS,AXMOVES,AXMOVSI,2000H ;置被加数首址MOVDI,3000H ;置加数首址MOVBX,4000H ;置和首址MOVAX,SI ;取被加数低16位ADDAX,DI ;低16位部分和MOVBX,AX ;存低16位部分和MOVAX,SI+2;高16位计算AD

4、CAX,DI+2MOVBX+2,AXMOVAX,0 ;取高位进位ADCAX,0MOVBX+4,AX例:双精度数的加法 DX= 0002H AX= 0F365H BX= 0005H CX= 0E024H 指令序列 (1) ADD AX, CX (2) ADC DX, BX (1) 执行后, AX= 0D389H CF=1 OF=0 SF=1 ZF=0 (2) 执行后, DX= 0008H CF=0 OF=0 SF=0 ZF=07交换并相加指令 格式: XADD DST,SRC 操作:( TEMP) (SRC)+(DST) (SRC) (DST) (DST) (TEMP)注意:源操作数只能用寄存器

5、寻址方式,目的操作数可用寄存器和存储器寻址方式中的任何一种寻址方式。例: XADD BL,DL执行前: (BL)=12H ,(DL)=02H执行后: (BL)=14H, (DL)=12H二、减法指令二、减法指令 减法指令:减法指令: SUB DST, SRC ;(DST) (DST) - (SRC) 带借位减法指令:带借位减法指令: SBB DST, SRC ;(DST) (DST) - (SRC) - CF减减1指令:指令: DEC OPR ; (OPR) (OPR) - 1求补指令:求补指令: NEG OPR ; (OPR) (OPR+1)比较指令:比较指令: CMP OPR1, OPR2

6、 ;(OPR1) - (OPR2)注意注意: * 减法指令对条件标志位(减法指令对条件标志位(CF/OF/ZF/SF)有影响)有影响 * 除除DEC指令指令不影响不影响CF标志外,均对条标志外,均对条 件标志位有影响。件标志位有影响。91、对OF标志位的判断,当具有不同符号的两个数相减,结果的符号与减数符号相同则溢出,否则不溢出2、对于求补指令,只有当操作数为0时,求补结果使得CF=0,其他情况均为1101 SUB SI+14H,0136H 执行前: (DS)=3000H,(SI)=0040H,(30054H)=4336H 则指令执行后(30054H),CF,OF,ZF,SF各为多少?执行后:

7、 (30054)=4200H ZF=0,SF=0,CF=0,OF=02、 SUB DH ,BP+4 执行前: (DH)=41H,(SS)=0000H ,(BP)=00E4H (00E8)=5AH则指令执行后(00E8),CF,OF,ZF,SF各为多少?执行后: (00E8)=0E7H ,CF=1,OF=0,ZF=0, SF=111例:双精度数的减法 DX= 0012H AX= 0F365H BX= 0005H CX= 0E024H 指令序列 (1) SUB AX,CX (2) SBB DX, BX (1) 执行后, AX=1341H CF=0 OF=0 SF=0 ZF=0 (2) 执行后, D

8、X= 0006H CF=0 OF=0 SF=0 ZF=012设:X,Y,Z均为双精度数,他们分别存放在X,X+2,Y,Y+2,Z,Z+2的存储单元,高地址存放高字,低地址存放低字,用指令序列实现w X+Y+24-ZMOV AX,X ;MOV DX,X+2 ;ADD AX,Y ;ADC DX,Y+2 ;ADD AX,24 ;ADC DX,0 ;SUB AX,Z ;SBB DX,Z+2 ;MOV W ,AX ;MOV W+2 DX ;X+Y+24-Z结果存W13比较并交换指令格式: CMPXCHG DST,SRC操作:如(AC)=(DST) 则ZF 1,(DST) (SRC) 否则 ZF 0,(A

9、C) (DST)注意:源操作数只能是寄存器,目的操作数可用寄存器和存储器寻址方式中的任何一种寻址方式。三、三、 乘法指令乘法指令 无符号数乘法指令:无符号数乘法指令: MUL SRC ;字节操作数 AX AL (SRC) ;字操作数 DX, AX AX (SRC) 带符号数乘法指令:带符号数乘法指令: IMUL SRC注意注意: * AL(AX)为隐含的乘数寄存器。 * AX(DX,AX)为隐含的乘积寄存器。 * SRC不能为立即数。 * 除CF和OF外,对条件标志位无定义。例:例:AX = 16A5H,BX = 0611H (1) IMUL BL ; AX AL BL ; A5H 11H 5

10、BH 11H=060B F9F5H ; AX = 0F9F5H CF=OF=1说明:乘积高一半是低一半的符号扩展说明:乘积高一半是低一半的符号扩展 CF=OF=0;否则;否则CF=OF=1 (2) MUL BX ; DX, AX AX BX ; 16A5H 0611H=0089 5EF5H ; DX = 0089H AX = 5EF5H CF=OF=1说明:乘积高一半为说明:乘积高一半为0 CF=OF=0;否则;否则CF=OF=1A5H对应原码的绝对值再求补码16例:如(AL)=0B4H,(BL)=11H,求执行指令IMUL BL,和MUL BL之后的乘积。(AL)=0B4H,为无符号数的18

11、0D,带符号数的-76D(BL)=11H,为无符号数的17D,带符号数的17D 1、 IMUL BL 执行后: (AX)=0FAF4H=-1292D ,CF=OF=1 2、MUL BL 执行后: (AX)=0BF4H=3060D,CF=OF=1四、除法指令四、除法指令 无符号数除法指令:无符号数除法指令: DIV SRC ; 字节操作 AL AX / (SRC) 的商 AH AX / (SRC) 的余数 字操作 AX DX, AX / (SRC) 的商 DX DX, AX / (SRC) 的余数 带符号数除法指令:带符号数除法指令: IDIV SRC注意注意: * AX (DX,AX)为隐含的

12、被除数寄存器。 * AL (AX)为隐含的商寄存器。 * AH (DX)为隐含的余数寄存器。 * SRC不能为立即数。 * 对所有条件标志位均无定义。18例:设(AX)=0400H,(BL)=0B4H,求执行DIV BL和IDIV BL后寄存器的变化。(AX)为无符号数的1024D,带符号数的+1024D (BL)为无符号数的180D,带符号数的-76D1、DIV BL执行后: (AL)=05H=5D 商 (AH)=7CH=124D 余数2、IDIV BL执行后: (AL)=0F3H=-13D 商 (AH)=24H=36D19例:算术运算综合计算: (V-(X*Y+Z-540)/X,其中X,Y

13、,Z,V均为16位带符号数,已分别装入X,Y,Z,V存储单元,要求计算上式结果的商存入AX,余数存入DX。MOV AX,XIMUL YMOV CX,AXMOV BX,DXMOV AX,ZCWDADD CX,AXADC BX,DXSUB CX,540SBB BX,0MOV AX,VCWDSUB AX,CXSBB DX,BXIDIV X五、十进制调整指令五、十进制调整指令 压缩的BCD码:用4位二进制数表示1位十进制数 例:(59)10 (0101 1001)BCD非压缩的BCD码:用8位二进制数表示1位十进制数 例:(59)10 (0000 0101 0000 1001)BCD数字的ASCII码

14、是一种非压缩的BCD码DIGIT ASCII BCD0 30H0000 00001 31H0000 00012 32H0000 0010 9 39H0000 1001加法的十进制调整指令:加法的十进制调整指令:DAA ;(AL) (AL)压缩压缩BCD减法的十进制调整指令:减法的十进制调整指令:DAS ;(AL) (AL)压缩压缩BCD注意注意: * 隐含的操作寄存器为AL * 紧接在加减指令之后使用 * 影响条件标志位(对OF无定义)(1)MOV AL, 34H ;AL=34H ADD AL, 89H ;AL=34H+89H=BDH DAA ; AL=BDH+60H+06H=23H AF=C

15、F=1 (2)MOV AL, 34H ;AL=34H SUB AL, 89H ;AL=34H-89H=ABH DAS ;AL=ABH-60H-06H=45H AF=CF=122DAA指令执行的操作: (AL) 把把AL中的和调整到压缩的中的和调整到压缩的BCD码格式,这条指令之码格式,这条指令之前必须执行前必须执行ADD或或ADC指令,加法指令必须把两个压缩的指令,加法指令必须把两个压缩的BCD码相加,并把结果存放在码相加,并把结果存放在AL寄存器中。寄存器中。 如果如果AF标志(辅助进位位)为标志(辅助进位位)为1,或者,或者AL寄存器的低寄存器的低4位是十位是十六进制的六进制的AF,则寄存

16、器内容加,则寄存器内容加06H,且将,且将AF置置1 如果如果CF标志为标志为1,或者,或者AL寄存器的高寄存器的高4位是十六进制的位是十六进制的AF,则则AL寄存器内容加寄存器内容加60H,并将,并将CF置置1例: ADD AL,BL DAA执行前: (AL)=28 (BL)=68ADD执行后:(AL)=90HAF=1,CF=0 0010 1000+ 0110 1000 1001 0000AF=1,执行DAA后低4位加06H 1001 0000 + 0000 0110 1001 011023DAS执行的操作:(AL) 把把AL中的差调整到压缩的中的差调整到压缩的BCD码格式,这条指令之前必码

17、格式,这条指令之前必须执行须执行SUB或或SBB指令,减法指令必须把两个压缩的指令,减法指令必须把两个压缩的BCD码相减,码相减,并把结果存放在并把结果存放在AL寄存器中。寄存器中。 如果如果AF标志(辅助进位位)为标志(辅助进位位)为1,或者,或者AL寄存器的低寄存器的低4位是十六位是十六进制的进制的AF,则寄存器内容减去,则寄存器内容减去06H,且将,且将AF置置1 如果如果CF标志为标志为1,或者,或者AL寄存器的高寄存器的高4位是十六进制的位是十六进制的AF,则则AL寄存器内容减去寄存器内容减去60H,并将,并将CF置置1例: SUB AL,AH DAS执行前: (AL)=86 (BL

18、)=07SUB执行后:(AL)=7FHAF=1,CF=0 1000 0110- 0000 0111 0111 1111AF=1,执行DAS后低4位减06H 0111 1111 - 0000 0110 0111 100124例:如(BCD1)=1834,(BCD2)=2789要求执行(BCD3) (BCD1)+(BCD2)和均为用压缩的码表示的十进制数,由于他们都是4位数,所以每个数占2个字节,高位数占有高位字节,其存放方式如下:(BCD1)=34 (BCD1+1)=18 (BCD2)=89 (BCD2+1)=27 MOV AL,BCD1 ADD AL,BCD2 DAA MOV BCD3,AL

19、MOV AL,BCD1+1 ADC AL,BCD2+1 DAA MOV BCD3+1 ,AL25例:如(BCD1)=1234,(BCD2)=4612要求执行(BCD3) (BCD1)-(BCD2)和均为用压缩的码表示的十进制数,由于他们都是4位数,所以每个数占2个字节,高位数占有高位字节,其存放方式如下:(BCD1)=34 (BCD1+1)=12 (BCD2)=12 (BCD2+1)=46 MOV AL,BCD1 SUB AL,BCD2 DAS MOV BCD3,AL MOV AL,BCD1+1 SBB AL,BCD2+1 DAS MOV BCD3+1 ,AL非压缩的非压缩的BCD调整指令调整

20、指令 加法调整指令:加法调整指令:AAA ;(AL) (AL)非压缩非压缩BCD减法调整指令:减法调整指令:AAS ;(AL) (AL)非压缩非压缩BCD注意注意: * 隐含的操作寄存器为AL * 紧接在加减指令之后使用 * 除AF、CF外,对其它条件标志位无定义乘法调整指令:乘法调整指令: AAM ; (AL) (AX)非压缩非压缩BCD除法调整指令:除法调整指令: AAD27AAA执行的操作:(AL) 把把AL中的和调整到非压缩的中的和调整到非压缩的BCD码格式码格式 (AH) (AH)+调整产生的进位值调整产生的进位值这条指令之前必须执行这条指令之前必须执行ADD或或ADC指令,加法指令

21、必须把两个非指令,加法指令必须把两个非压缩的压缩的BCD码相加,并把结果存放在码相加,并把结果存放在AL寄存器中。调整步骤如下:寄存器中。调整步骤如下: 1、 如如AL寄存器的低寄存器的低4位是位是09之间,且之间,且AF=0,则跳过第,则跳过第2步,执步,执行第行第3步。步。 2、 如如AL寄存器的低寄存器的低4位是十六进制的位是十六进制的AF或或AF=1,则,则AL寄存器寄存器内容加内容加6,AH寄存器的内容加寄存器的内容加1,并将,并将AF位置位置1;3、清除、清除AL寄存器的高寄存器的高4位;位;4、AF位的值送位的值送CF位。位。28AAS执行的操作:(AL) 把把AL中的差和调整到

22、非压缩的中的差和调整到非压缩的BCD码格式码格式 (AH) (AH)- 调整产生的进位值调整产生的进位值这条指令之前必须执行这条指令之前必须执行SUB或或SBB指令,加法指令必须把两个非压指令,加法指令必须把两个非压缩的缩的BCD码相减,并把结果存放在码相减,并把结果存放在AL寄存器中。调整步骤如下:寄存器中。调整步骤如下: 1、 如如AL寄存器的低寄存器的低4位是位是09之间,且之间,且AF=0,则跳过第,则跳过第2步,执步,执行第行第3步。步。 2、 如如AL寄存器的低寄存器的低4位是十六进制的位是十六进制的AF或或AF=1,则,则AL寄存器寄存器内容减去内容减去6,AH寄存器的内容减寄存

23、器的内容减1,并将,并将AF位置位置1;3、清除、清除AL寄存器的高寄存器的高4位;位;4、AF位的值送位的值送CF位。位。4-4 逻辑指令 逻辑运算逻辑运算指令指令 移位移位指令指令一、逻辑运算指令一、逻辑运算指令逻辑非指令:逻辑非指令:NOT OPR ;(OPR) (OPR)取反逻辑与指令:逻辑与指令:AND DST, SRC ; (DST) (DST) (SRC)逻辑或指令:逻辑或指令:OR DST, SRC ; (DST) (DST) (SRC)异或指令:异或指令: XOR DST, SRC ;(DST) (DST) (SRC)测试指令:测试指令: TEST OPR1, OPR2;(O

24、PR1) (OPR2)注意注意: * AND、OR、XOR、TEST对标志位产生下列影响 CF OF SF ZF PF AF 0 0 * * * 无定义无定义 * NOT不影响标志位。 例:屏蔽AL的0、1两位 AND AL, 0FCH例:置AL的第5位为1 OR AL, 20H 例:使AL的0、1位变反 XOR AL, 3例:测试某些位是0是1 TEST AL, 1 JZ EVEN * * * * * * * * AND 1 1 1 1 1 1 0 0 * * * * * * 0 0 * * * * * * * * OR 0 0 1 0 0 0 0 0 * * 1 * * * * * 1 1

25、 1 1 0 0 0 1 XOR 0 0 0 0 0 0 1 1 1 1 1 1 0 0 1 0321、用AND指令可以使操作数的某些位被屏蔽,只需要把AND指令的源操作数设置成一个立即数,并把需要屏蔽的位置0,这样就可把操作数的相应位置0,其他各位保持不变。2、OR指令可以使操作数的某些位置1,其他位不变。3、TEST指令可测试某些位是0或14、XOR指令可将操作数的某些位变反,也可用来判别两个操作数是否相等。二、循环移位指令:二、循环移位指令:循环左移 ROL OPR, CNT循环右移 ROR OPR, CNT带进位循环左移 RCL OPR, CNT带进位循环右移 RCR OPR, CNT

26、 CF CF CF CF移位指令移位指令 CF 0逻辑左移逻辑左移 SHL OPR, CNT逻辑右移逻辑右移 SHR OPR, CNT算术左移算术左移 SAL OPR, CNT(同逻辑左移)(同逻辑左移)算术右移算术右移 SAR OPR, CNT 0 CF CF注意注意: * OPR可用立即数以外的任何寻址方式 * CNT=1,SHL OPR, 1 CNT1,MOV CL, CNT SHL OPR, CL ; 以SHL为例*条件标志位: CF = 移入的数值 移位指令: SF、ZF、PF 根据移位结果设置, AF无定义 循环移位指令: 不影响 SF、ZF、PF、AF例:AX= 0012H,BX

27、= 0034H,把它们装配成AX= 1234H MOV CL, 8 ROL AX, CL ;AX=1200H ADD AX, BX例:BX=84F0H (1) BX为无符号数,求BX/2 SHR BX, 1 ;BX = 4278H (2) BX为带符号数,求BX/2 SAR BX, 1 ;BX = 0C278H五五 处理机控制指令处理机控制指令标志处理指令: CLC CF0 CMC CFCF STC CF1 CLD DF0 STD DF1 CLI IF0 STI IF1 注意: * 只影响本指令指定的标志其他处理机控制指令: NOP 无操作 (机器码占一个字节) HLT 暂停机 (等待一次外中

28、断,之后继续执行程序) WAIT 等待 (等待外中断,之后仍继续等待) ESC mem 换码 ( (mem) 数据总线 ) LOCK 封锁 (维持总线的锁存信号,直到其后的指令执行完) 注意: * 不影响条件标志 4-5 4-5 串(数据块)处理指令串(数据块)处理指令 串传送指令串传送指令 存入串指令存入串指令 从串取指令从串取指令 串比较指令串比较指令 串扫描指令串扫描指令配合使用的前缀有: REP 重复 REPE/REPZ 相等/为零则重复 REPNE/REPNZ 不相等/不为零则重复一、一、 串传送指令串传送指令MOVSMOVSB (字节)(字节)/ MOVSW (字)(字)执行操作:

29、执行操作:(1) (DI) (SI) (2) 字节操作:字节操作:SISI1, DIDI1 字操作:字操作: SISI2, DIDI2 方向标志方向标志 DF=0时用时用 +,DF=1时用时用 - 。 REP MOVS:将数据段中的整串数据传送到附加段中。:将数据段中的整串数据传送到附加段中。 源串(数据段)源串(数据段) 目的串(附加段)目的串(附加段) 执行执行REP MOVS之前,应先做好:之前,应先做好:(1)源串首地址(末地址)源串首地址(末地址) SI(2)目的串首地址(末地址)目的串首地址(末地址) DI(3 3)串长度)串长度 CX(4 4)建立方向标志建立方向标志(CLD使使

30、DF=0,STD使使DF=1)如:将DS段2000H开始的数据串(100个字节)传送到ES段3000H开始的单元。 MOV SI,2000H MOV DI,3000H MOV CX,100 CLD ;增址传送 MOVSBMOVSB. 100 条= REP MOVSB.MOVSBMOVSBSTOSB (字节)(字节)/STOSW (字)(字) 执行操作: 字节操作:(DI)AL, DIDI1 字操作: (DI+1)、 (DI) AX, DIDI2二、二、存入串指令存入串指令 STOSSTOS例:把附加段中BUF开始的100个字节缓冲区清零。lea di, BUFmov al, 0mov cx,

31、100 ; mov cx, 50 cldrep stosb ; rep stoswLODSB (字节)(字节)/ LODSW (字)(字) 执行操作: 字节操作:AL(SI), SISI1 字操作: AX (SI)、 (SI+1), SISI2三、从串取指令三、从串取指令LODS注意注意: * LODS指令一般不与REP联用 * 源串必须在数据段中,目的串必须在附加段中, 但源串允许使用段跨越前缀来修改。 * 不影响条件标志位四、串比较指令四、串比较指令CMPSCMPSB (字节)(字节)/ CMPSW (字)(字) 执行操作: (1) (SI) - (DI) 根据比较结果设置条件标志位:相等

32、 ZF=1 不等 ZF=0 (2) 字节操作:SISI1, DIDI1 字操作: SISI2, DIDI2 由DF确定“+”或“-”。 SCASB (字节)(字节)/ SCASW (字)(字) 执行操作: 字节操作:AL - (DI), DIDI1 字操作: AX - (DI)(DI+1), DIDI2五、串扫描指令五、串扫描指令SCAS* REPZ (REPNZ) CMPS / SCAS 执行操作:(1) 如CX=0或ZF=0 (ZF=1)则退出,否则转(2) (2) CXCX-1 (3) 执行CMPS / SCAS (4) 重复(1) (3)COMPUTER(di) COMPUTER(di

33、) 例: 从一个字符串中查找一个指定的字符。 mess db COMPUTERlea di, messmov al, Tmov cx, 8cldrepne scasb指令执行前指令执行后4-6 控制转移指令 无条件转移指令无条件转移指令* 条件转移指令条件转移指令* 循环指令循环指令* 子程序调用和返回指令子程序调用和返回指令* 中断指令中断指令 * 不影响条件标志位不影响条件标志位一、无条件转移指令一、无条件转移指令 JMPJMP 无条件转移指令: JMP OPR (1)段内段内直接近转移: IPIP+16位位移量 (2)段内段内直接短转移 : IPIP+8位位移量(-128127) (3)段内段内间接转移: IPEA (4)段间段间直接(远)转移:IPOPR的段内偏移地址 CSOPR所在段的段地址 (5)段间段间间接转移: IPEA CSEA+2例: . JMP HELLO HELLO: MOV AL, 3二、条件转移指令二、条件转移指令 1、根据单个条件标志的设置情况转移:格式 测试条件 JZ(JE) OPR ZF=1 JNZ(JNE) OPR ZF=0 JS OPR SF=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论