lec08 算术逻辑运算类指令_第1页
lec08 算术逻辑运算类指令_第2页
lec08 算术逻辑运算类指令_第3页
lec08 算术逻辑运算类指令_第4页
lec08 算术逻辑运算类指令_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

1、第第 08 讲讲 8086 / 8088指令系统指令系统 算术运算算术运算&逻辑运算类指令逻辑运算类指令1.数据传送类指令数据传送类指令2.算术运算类指令算术运算类指令3.逻辑运算逻辑运算类类指令指令4.串处理串处理类类指令指令5.控制转移控制转移类类指令指令6.处理机控制指令处理机控制指令8086/8088的指令系统的指令系统重点关注重点关注: 指令的指令的汇编格式汇编格式 指令的指令的基本功能基本功能 指令指令支持的寻址方式支持的寻址方式 指令的执行指令的执行对标志位的影响对标志位的影响 指令的指令的特殊要求特殊要求算术运算类指令:算术运算类指令: 加法指令加法指令 ADD、ADC、INC

2、 减法指令减法指令 SUB、SBB、DEC、NEG、CMP 乘法指令乘法指令 MUL、IMUL 除法指令除法指令 DIV、IDIV 十进制调整指令十进制调整指令 DAA、DAS、 AAA、AAS、AAM、AAD 加法指令加法指令 加法指令:加法指令: ADD DST, SRC 执行操作:执行操作: (DST) (SRC) + (DST) 带进位加法指令:带进位加法指令: ADC DST, SRC 执行操作:执行操作: (DST) (SRC) + (DST) + CF 加加1指令:指令: INC OPR 执行操作:执行操作: (OPR) (OPR) + 1注意注意: * 都影响状态标志位,但都影

3、响状态标志位,但 INC指令指令不影响不影响CF标志位。标志位。 减法指令减法指令减法指令:减法指令: SUB DST, SRC 执行操作:执行操作: (DST) (DST) - (SRC)带借位减法指令:带借位减法指令: SBB DST, SRC 执行操作:执行操作: (DST) (DST) - (SRC) - CF减减1指令:指令: DEC OPR 执行操作:执行操作: (OPR) (OPR) - 1求补指令:求补指令: NEG OPR 执行操作:执行操作: (OPR) - (OPR)比较指令:比较指令: CMP OPR1, OPR2 执行操作:执行操作: (OPR1) - (OPR2)注

4、意注意: * 除除DEC指令指令不影响不影响 CF标志外,均对状标志外,均对状 态标志位有影响态标志位有影响。【例例 2 17】 试分析如下指令执行结果及标志位的状态试分析如下指令执行结果及标志位的状态MOV BX,0 ; (BX)=0,不影响标志位,不影响标志位DEC BX ; (BX)=0FFFFH,CF不影响、不影响、PF=1、AF=1、ZF=0、SF=1、OF=0INC BX ; (BX)=0,CF不影响、不影响、PF=1、AF=1、ZF=1、SF=0、OF=0SUB BX,1 ; (BX)=0FFFFH,CF=1、PF=1、AF=1、ZF=0、SF=1、OF=0NEG BX ; (B

5、X)=1,CF=1、PF=0、AF=1、ZF=0、SF=0、OF=0例:例:x、y、z 均为双字数据,分别存放在地址为均为双字数据,分别存放在地址为X, X+2; Y, Y+2;Z, Z+2的存储单元中,用指令序列实现的存储单元中,用指令序列实现 w x + y + 24 - z ,并用,并用W, W+2单元存放单元存放wMOV AX, XMOV AX, XMOV DX, X+2MOV DX, X+2ADD AX, YADD AX, YADCADC DX, Y+2 ; x+y DX, Y+2 ; x+yADD AX, 24ADD AX, 24ADC DX, 0 ; x+y+24ADC DX,

6、0 ; x+y+24SUB AX, ZSUB AX, ZSBBSBB DX, Z+2 ; x+y+24-z DX, Z+2 ; x+y+24-zMOV W, AXMOV W, AXMOV W+2, DX ; MOV W+2, DX ; 结果存入结果存入W, W+2W, W+2单元单元 乘法指令乘法指令 无符号数乘法指令:无符号数乘法指令: MUL SRC 带符号数乘法指令:带符号数乘法指令: IMUL SRC 执行操作:字节操作数执行操作:字节操作数 (AX) (AL) * (SRC) 字操作数字操作数 (DX, AX) (AX) * (SRC)注意注意: * AL (AX) 为隐含的乘数。为

7、隐含的乘数。 AX (DX,AX) 为隐含的乘积。为隐含的乘积。* src若为存储器操作数时,注意用若为存储器操作数时,注意用ptr明确类型。明确类型。 如:如:MUL WORD PTR BPDI ; 字乘,乘积送字乘,乘积送DX:AX* SRC不能为立即数和段寄存器不能为立即数和段寄存器。除除CF和和OF外,对外,对其它状态其它状态标志位标志位无定义无定义。乘法指令对乘法指令对 CF/OF 的影响:的影响:例例 2 19 : 已知(已知(AL)=0FFH,(,(BL)=2, MUL BL;乘积乘积(AX)= 01FEH,(2552 = 510), CF=OF=1IMUL BL;乘积乘积(AX

8、)= 0FFFEH,(-12 = -2), CF=OF=0 00 乘积的高一半为零乘积的高一半为零11 否则否则MUL指令指令: CF,OF =00 乘积的高一半是低一半的符号扩展乘积的高一半是低一半的符号扩展11 否则否则 IMUL指令指令: CF,OF = 对标志对标志没有定义没有定义:指令执行后这些标志是任意的、:指令执行后这些标志是任意的、不可预测(就是不知道是不可预测(就是不知道是0还是还是1) 对标志对标志没有影响没有影响:指令执行不改变标志状态:指令执行不改变标志状态 除法指令除法指令 无符号数除法指令:无符号数除法指令: DIV SRC 带符号数除法指令:带符号数除法指令: I

9、DIV SRC 执行操作:执行操作: 字节操作字节操作 (AL) (AX) / (SRC) 的商的商 (AH) (AX) / (SRC) 的余数的余数 字操作字操作 (AX) (DX, AX) / (SRC) 的商的商 (DX) (DX, AX) / (SRC) 的余数的余数注意注意: * AX (DX,AX) 为隐含的被除数寄存器。为隐含的被除数寄存器。 * AL (AX) 为隐含的商寄存器。为隐含的商寄存器。 * AH (DX) 为隐含的余数寄存器。为隐含的余数寄存器。 * SRC不能为立即数不能为立即数。 * 对所有对所有状态状态标志位标志位均无定义均无定义。 * 两个两个N位操作数相除

10、,应首先把被除数符号扩展为位操作数相除,应首先把被除数符号扩展为2N位。位。 * src若为存储器操作数时,注意用若为存储器操作数时,注意用ptr明确类型。明确类型。如:如:IDIV BYTE PTR DI ;AX除以除以8 位存储器操作数位存储器操作数例例 2-20:已知(已知(AX)=0410H,(,(BL)= 0B8H。DIV BL ;商商AL=05H ,余数,余数AH=78H IDIV BL ;商商AL=F2H(即即14),余数,余数AH=20H(即即32) ;有符号数有符号数0410H真值为真值为1040,B8H 真值为真值为72。 ;注意注意DIV和和I DIV的区别。的区别。【例

11、【例 2-21】X、Y、Z、V、W均为均为16位有符号数,位有符号数,计算计算W(V-(X*Y+Z-1234)/X确定计算顺序如下确定计算顺序如下: X*Y 暂存中间结果。暂存中间结果。 X*Y+Z X*Y+Z-1234 暂存中间结果。暂存中间结果。 V-(X*Y+Z-1234) (V-(X*Y+Z-1234)/X 保存最终结果。保存最终结果。确定各次运算的数据类型确定各次运算的数据类型: X*Y 乘积为乘积为32位。位。 X*Y结果为结果为32位,位,Z进行符号扩展成进行符号扩展成32位,位, X*Y+Z-1234 结果为结果为32位。位。 X*Y+Z-1234的结果是的结果是32位,位,V

12、需扩展到需扩展到32位位,(V-(X*Y+Z-1234)结果为结果为32位,位,X为为16位,因此,位,因此,(V-(X*Y+Z-1234)/X最终结果为最终结果为16位。位。表达式计算表达式计算 MOV AX, X IMUL Y ; X*Y MOV CX, AX ; X*Y(32位位)暂存入暂存入BX:CX。DX:AX需用于需用于Z的符号扩展的符号扩展 MOV BX, DX MOV AX, Z ; Z置入置入AX进行符号扩展至进行符号扩展至DX:AX,扩展为,扩展为32位位 CWD ADD CX, AX ADC BX, DX ; X*Y+Z SUB CX, 1234 SBB BX, 0 ;

13、X*Y+Z-1234 MOV AX, V ; V置入置入AX进行符号扩展至进行符号扩展至DX:AX,扩展为,扩展为32位位 CWD SUB AX, CX SBB DX, BX ; V-(X*Y+Z-1234) IDIV X ; (V-(X*Y+Z-1234)/X,商在,商在AX中,余数在中,余数在DX中。中。 MOV W, AX; 保存最终结果保存最终结果2.7.3 逻辑运算类指令:逻辑运算类指令: 逻辑运算指令逻辑运算指令 AND、OR、NOT、XOR、TEST 移位指令移位指令 SHL、SHR 、 SAL 、SAR、 ROL、ROR、RCL、RCR逻辑非指令:逻辑非指令:NOT OPR *

14、 OPR不能为立即数不能为立即数执行操作:执行操作: (OPR) (OPR) * 不影响标志位不影响标志位 逻辑与指令:逻辑与指令:AND DST, SRC执行操作:执行操作: (DST) (DST) (SRC)逻辑或指令:逻辑或指令:OR DST, SRC执行操作:执行操作: (DST) (DST) (SRC)异或指令:异或指令: XOR DST, SRC执行操作:执行操作: (DST) (DST) (SRC)测试指令:测试指令: TEST OPR1, OPR2执行操作:执行操作: (OPR1) (OPR2)CF OF SF ZF PF AF 0 0 * * * 无定义无定义 根据运算结果设

15、置根据运算结果设置 逻辑运算指令逻辑运算指令例:例:屏蔽屏蔽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 * * * * * * * * OR 0 0 1 0 0 0 0 0 * * 1 * * * * * * * * * * * 0 1 XOR 0 0 0 0 0 0 1 1 * * * * * * 1 0 * * * * * * * * AND 1 1 1 1 1 1 0 0 * *

16、* * * * 0 0 * * * * * * * * AND 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 *nAND指令一般用来屏蔽、保留一些位,其中指令一般用来屏蔽、保留一些位,其中要屏蔽的位可以和要屏蔽的位可以和“0 ”进行逻辑进行逻辑“与与”,而,而要保留的位可以和要保留的位可以和“1 ”进行逻辑进行逻辑“与与”。 n【例例 2 23】 将将AX中的最高位和最低位保留中的最高位和最低位保留,其余位清零,可用下面的指令:,其余位清零,可用下面的指令: AND AX, 8001H nOR指令常用来将某些位置位,同时使其余位指令常用来将某些位置位,同时使其余位保持不变,其中需

17、要置位的位可以和保持不变,其中需要置位的位可以和“1”进行进行逻辑逻辑“或或”,而保持不变的位可以和,而保持不变的位可以和“0”进行进行逻辑逻辑“或或”。 n【例例 2 24】 将将BX中的低中的低4 位置位,而其余位置位,而其余位不变,可以使用下面的指令:位不变,可以使用下面的指令: OR BX, 000FH nXOR指令常用来将某些特定位指令常用来将某些特定位“求反求反”,而其余位则保持,而其余位则保持不变,其中要不变,其中要“求反求反”的位和的位和“1 ”进行逻辑进行逻辑“异或异或”,要保持不变的位和要保持不变的位和“0 ”进行逻辑进行逻辑“异或异或”。 n【例例 2 25】 假设(假设

18、(BH)= 10110010B,分析以下指令,分析以下指令执行后执行后BH中的内容。中的内容。 XOR BH,01011011B 指令执行后,指令执行后,(BH)=11101001B。 nXOR指令的另一个重要应用是,一个寄存器操作数自身与指令的另一个重要应用是,一个寄存器操作数自身与自身进行逻辑自身进行逻辑“异或异或”实现清零,例如:实现清零,例如:qXOR BH,BH ;BH清零清零qXOR SI,SI ;SI清零清零n当然,使用其他指令也能实现寄存器内容的清零,例如:当然,使用其他指令也能实现寄存器内容的清零,例如:qMOV SI,0 ;SI清零清零qSUB SI,SI ;SI清零清零q

19、AND SI,0 ;SI清零清零nTEST 指令常常用于位测试,并与条件转移指令一起共同完成对特指令常常用于位测试,并与条件转移指令一起共同完成对特定位的判断,并实现相应的程序转移。定位的判断,并实现相应的程序转移。这与比较指令这与比较指令 CMP类似,不类似,不过过TEST指令只比较某些特定的位,而指令只比较某些特定的位,而CMP指令比较整个操作数。指令比较整个操作数。n例如:例如: n若要检测若要检测AL中的最低位是否为中的最低位是否为1,若为,若为1则转移,可用以下指令:则转移,可用以下指令: TEST AL,01H JNZ NEXT NEXT: n若要检测若要检测BX中的内容是否为中的

20、内容是否为0,若为,若为0则转移,可用以下指令:则转移,可用以下指令: TEST BX,0FFFFH JZ NEXT NEXT:逻辑左移逻辑左移 SHL OPR, CNT逻辑右移逻辑右移 SHR OPR, CNT算术左移算术左移 SAL OPR, CNT(同逻辑左移)(同逻辑左移)算术右移算术右移 SAR OPR, CNT CF 0 0 CFCF 移位指令移位指令循环左移循环左移 ROL OPR, CNT循环右移循环右移 ROR OPR, CNT带进位循环左移带进位循环左移 RCL OPR, CNT带进位循环右移带进位循环右移 RCR OPR, CNTCF CFCFCF注意注意: * OPR可

21、用除立即数以外的任何寻址方式可用除立即数以外的任何寻址方式 * CNT=1,SHL OPR, 1 CNT1,MOV CL, CNT SHL OPR, CL ; 以以SHL为例为例* 状态标志位:状态标志位: CF = 移出的数值移出的数值 1 CNT=1时,最高有效位的值发生变化时,最高有效位的值发生变化 0 CNT=1时,最高有效位的值不变时,最高有效位的值不变当移位次数大于当移位次数大于1时,时,OF不确定不确定* 移位指令:移位指令: SF、ZF、PF 根据移位结果设置,根据移位结果设置,AF无定义无定义* 循环移位指令:循环移位指令: 不影响不影响 SF、ZF、PF、AFOF =例:例

22、:(AX)= 0012H,(BX)= 0034H,把它们装配成,把它们装配成(AX)= 1234H 例:例:(BX) = 84F0H (1) (BX) 为无符号数,求为无符号数,求 (BX) / 2 SHR BX, 1SHR BX, 1 ; (BX) = 4278H; (BX) = 4278H (2) (BX) 为带符号数,求为带符号数,求 (BX) 2 SAL BX, 1SAL BX, 1 ; (BX) = 09E0H, OF=1; (BX) = 09E0H, OF=1 (3) (BX) 为带符号数,求为带符号数,求 (BX) / 4 MOV CL, 2 MOV CL, 2 SAR BX, CL SAR BX, CL ; (BX) = 0E13CH ; (BX) = 0E13CHMOV CL, 8MOV CL, 8ROL AX, CLROL AX, CLADD AX, BXADD AX, BX 逻辑左移一位相当于无符号

温馨提示

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

评论

0/150

提交评论