好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

lec08算术逻辑运算类指令.ppt

29页
  • 卖家[上传人]:今***
  • 文档编号:106993451
  • 上传时间:2019-10-17
  • 文档格式:PPT
  • 文档大小:465KB
  • / 29 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 第 08 讲 8086 / 8088指令系统 ——算术运算&逻辑运算类指令,,数据传送类指令 算术运算类指令 逻辑运算类指令 串处理类指令 控制转移类指令 处理机控制指令,8086/8088的指令系统,重点关注: 指令的汇编格式 指令的基本功能 指令支持的寻址方式 指令的执行对标志位的影响 指令的特殊要求,,算术运算类指令:  加法指令 ADD、ADC、INC  减法指令 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,注意: * 都影响状态标志位,但 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),注意: * 除DEC指令不影响 CF标志外,均对状 态标志位有影响。

      例 2‑17】 试分析如下指令执行结果及标志位的状态,MOV BX,0 ; (BX)=0,不影响标志位 DEC BX ; (BX)=0FFFFH,CF不影响、PF=1、AF=1、ZF=0、SF=1、OF=0 INC BX ; (BX)=0,CF不影响、PF=1、AF=1、ZF=1、SF=0、OF=0 SUB BX,1 ; (BX)=0FFFFH,CF=1、PF=1、AF=1、ZF=0、SF=1、OF=0 NEG BX ; (BX)=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单元存放w,MOV AX, X MOV DX, X+2 ADD AX, Y ADC DX, Y+2 ; x+y ADD AX, 24 ADC DX, 0 ; x+y+24 SUB AX, Z SBB DX, Z+2 ; x+y+24-z MOV W, AX MOV W+2, DX ; 结果存入W, W+2单元, 乘法指令 无符号数乘法指令: MUL SRC 带符号数乘法指令: IMUL SRC 执行操作:字节操作数 (AX)  (AL) * (SRC) 字操作数 (DX, AX)  (AX) * (SRC),注意: * AL (AX) 为隐含的乘数。

      AX (DX,AX) 为隐含的乘积 * src若为存储器操作数时,注意用ptr明确类型 如:MUL WORD PTR [BP][DI] ; 字乘,乘积送DX:AX * SRC不能为立即数和段寄存器除CF和OF外,对其它状态标志位无定义 乘法指令对 CF/OF 的影响:,例 2‑19 : 已知(AL)=0FFH,(BL)=2, MUL BL ;乘积(AX)= 01FEH,(255×2 = 510), CF=OF=1 IMUL BL ;乘积(AX)= 0FFFEH,(-1×2 = -2), CF=OF=0,00 乘积的高一半为零 11 否则,MUL指令: CF,OF =,,00 乘积的高一半是低一半的符号扩展 11 否则,IMUL指令: CF,OF =,,对标志没有定义:指令执行后这些标志是任意的、不可预测(就是不知道是0还是1) 对标志没有影响:指令执行不改变标志状态, 除法指令 无符号数除法指令: DIV SRC 带符号数除法指令: IDIV SRC 执行操作: 字节操作 (AL)  (AX) / (SRC) 的商 (AH)  (AX) / (SRC) 的余数 字操作 (AX)  (DX, AX) / (SRC) 的商 (DX)  (DX, AX) / (SRC) 的余数,注意: * AX (DX,AX) 为隐含的被除数寄存器。

      * AL (AX) 为隐含的商寄存器 * AH (DX) 为隐含的余数寄存器 * SRC不能为立即数 * 对所有状态标志位均无定义 * 两个N位操作数相除,应首先把被除数符号扩展为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的区别例 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需扩展到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:CXDX: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 ; 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 * 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 * * * 无定义,根据运算结果设置, 逻辑运算指令,,,例:屏蔽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 * * * * * * 0 0,,* * * * * * * * AND 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 *,,,AND指令一般用来屏蔽、保留一些位,其中要屏蔽的位可以和“0 ”进行逻辑“与”,而要保留的位可以和“1 ”进行逻辑“与”。

      【例 2‑23】 将AX中的最高位和最低位保留,其余位清零,可用下面的指令: AND AX, 8001H,,OR指令常用来将某些位置位,同时使其余位保持不变,其中需要置位的位可以和“1”进行逻辑“或”,而保持不变的位可以和“0”进行逻辑“或” 【例 2‑24】 将BX中的低4 位置位,而其余位不变,可以使用下面的指令: OR BX, 000FH,,XOR指令常用来将某些特定位“求反”,而其余位则保持不变,其中要“求反”的位和“1 ”进行逻辑“异或”,要保持不变的位和“0 ”进行逻辑“异或” 【例 2‑25】 假设(BH)= 10110010B,分析以下指令执行后BH中的内容 XOR BH,01011011B 指令执行后,(BH)=11101001B XOR指令的另一个重要应用是,一个寄存器操作数自身与自身进行逻辑“异或”实现清零,例如: XOR BH,BH ;BH清零 XOR SI,SI ;SI清零 当然,使用其他指令也能实现寄存器内容的清零,例如: MOV SI,0 ;SI清零 SUB SI,SI ;SI清零 AND SI,0 ;SI清零,,TEST 指令常常用于位测试,并与条件转移指令一起共同完成对特定位的判断,并实现相应的程序转移。

      这与比较指令 CMP类似,不过TEST指令只比较某些特定的位,而CMP指令比较整个操作数 例如: 若要检测AL中的最低位是否为1,若为1则转移,可用以下指令: TEST AL,01H JNZ NEXT …… NEXT: 若要检测BX中的内容是否为0,若为0则转移,可用以下指令: TEST BX,0FFFFH JZ NEXT …… NEXT:,逻辑左移 SHL OPR, CNT 逻辑右移 SHR OPR, CNT 算术左移 SAL OPR, CNT(同逻辑左移) 算术右移 SAR OPR, CNT,,,,,,,,CF 0,,,,,,0 CF,CF,,,,,,,,,,,,, 移位指令,循环左移 ROL OPR, CNT 循环右移 ROR OPR, CNT 带进位循环左移 RCL OPR, CNT 带进位循环右移 RCR OPR, CNT,CF,,,,,CF,,,,,,,CF,,,,,,,,,,,,,,,CF,,,注意: * OPR可用除立即数以外的任何寻址方式 * CNT=1,SHL OPR, 1 CNT1,MOV CL, CNT SHL OPR, CL ; 以SHL为例 * 状态标志位: CF = 移出的数值 1 CNT=1时,最高有效位的值发生变化 0 CNT=1时,最高有效位的值不变 当移位次数大于1。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.