黄老师 发表于 2013-8-25 07:23:36

大工13春汇编语言程序设计辅导资料五

大工13春汇编语言程序设计辅导资料五
主    题:第三章80x86指令系统和寻址方式(第3节)
学习时间:2013年4月29日-5月5日
内    容:
第三章第3节概述
这周我们继续学习第三章中的第3节,指令系统。上周课程我们学习了寻址方式和六大类指令系统中的数据传送指令和算术指令,本节课程我们学习逻辑指令、串处理指令、控制转移指令等几类指令系统。这些指令整体构成了80x86指令系统的集合。因此学好这些指令将为学好汇编语言打下坚实的基础。
第3节几类指令系统
1、逻辑指令
1)逻辑运算指令:AND、OR、NOT、XOR、TEST
说明:这几种逻辑运算指令比较容易理解,需要注意的是测试指令TEST是将两个操作数进行与操作,只是与的结果并不保存,只设置条件码;NOT指令不影响标志位,NOT指令不允许使用立即数寻址方式。
2)位测试并修改指令:
    BT DST,SRC
      执行的操作是:把目的操作数中由源操作数所指定位的值送往标志位CF
          BTS DST,SRC
      执行的操作是:把目的操作数中由源操作数所指定位的值送往标志位CF,并把目的操作数该位置1
          BTR DST,SRC
      执行的操作是:把目的操作数中由源操作数所指定位的值送往标志位CF,并把目的操作数该位置0
          BTC DST,SRC
      执行的操作是:把目的操作数中由源操作数所指定位的值送往标志位CF,并把目的操作数该位变反
      说明:本组指令除影响CF位的值,其他标志位无定义,源操作数可以使用寄存器方式或立即数方式。
3)位扫描指令:
    BSF             正向位扫描
    BSR             负向位扫描
4)移位指令:
   SHL             逻辑左移
   SAL             算术左移
   SHR             逻辑右移
   SAR             算术右移
   ROL             循环左移
   ROR             循环右移
   RCL             带进位循环左移
   RCR            带进位循环右移
说明:逻辑左移和算术左移指令功能是等效的,但是逻辑右移指令和算术右移指令是不同的,逻辑右移,只需要在最高位补0即可,而算术右移需要使用最高位的符号位进行补充,比如最高位为0则移位后最高位补0,最高位为1则移位后最高位补1;一般逻辑移位指令用于无符号数移位, 而算术移位指令多用于带符号数移位;一位移位情况时,SHR相当于除2,SHL相当于乘2,,SAR相当于除2,SAL相当于乘2;多位移位指令在有进位或溢出情况时,这种乘除2关系不正确;移位指令移出位存放于CF标志位中,因此也多用于位检测,这时只需要检测CF内容即可。
移位指令对CF和OF位有影响,其中OF位只有在一位移位时才有效,移位后最高有效位发生变化则OF置1,否则置0。
循环移位指令可以改变操作数中所有位的位置,在程序中很有用。
2、串处理指令:
   MOVS             串传送
   CMPS             串比较
   SCAS             串扫描
   LODS             从串取
   STOS             存入串
   INS            串输入
   OUTS             串输出
说明:串扫描指令格式如下
      SCAS DST
参与比较的目的串都在附加段中,而被比较的数在AL(字节操作)AX(字操作)EAX(双字操作)中。
以上串处理指令都可以和前缀REP/REPE/REPNE配合使用,只需要注意一个典型的重复串处理指令的操作过程其他类似重复串指令即可对比理解了,如下指令:
REPNESCASB      不等重复字节串扫描指令
执行的操作过程如下:计数器内容是0或ZF=1退出指令,否则往下执行
CX-1 CX,
                  DI与AL内容比较
DI 1 DI
重复第一步
       串处理指令中可以使用 REP MOVS指令将数据段中的数据(源串)传送到附加段(目的串)中去。还需要注意方向标志位DF以及两条指令CLD和STD的作用,STD使DF置1,串处理指令可使地址自动减量,CLD使DF置0,串处理指令可使地址自动增量。
   3、控制转移指令
1)无条件转移指令:又分为段内直接短转移,段内直接近转移,段内间接近转移,段间直接远转移,段间间接远转移。无条件地转移到指令指定的地址去执行指令。
2)条件转移指令:又分为3种转移指令,包括单个标志位状态转移指令、无符号数间比较结果转移指令、带符号数间比较结果转移指令。
   JZ/JNZ                  ZF位跳转
   JS/JNS                  SF位跳转
   JO/JNO                  OF位跳转
   JP/JNP                  PF位跳转
   JB/JNB                  CF位跳转
   JB/JNB                  小于转移
   JBE/JNBE                  小于等于转移
JL/JNL                  大于转移
JLE/JNLE                  大于等于转移
3)条件设置指令:是根据上一条刚执行完的指令所设置的条件码情况,来判断是否产生程序分支的。有时并不希望在这一点就产生程序分支,而是希望在其后运行的程序的另一个位置,根据这一点条件码设置来产生程序分支,这样就要求把这一点的条件码情况保存下来,以便在其后使用。
   根据单个条件标志的值把目的字节置1
   SETZ(SETE) DST         测试条件:ZF=1
   SETNZ(SETNE) DST         测试条件:ZF=0
   SETS DST               测试条件:SF=1
   SETNS DST                测试条件:SF=0
   SETO DST               测试条件:OF=1
   SETNO DST                测试条件:OF=0
   SETP DST               测试条件:PF=1
   SETNP DST                测试条件:PF=0
   SETC(SETB、SETNAE) DST   测试条件:CF=1
   SETNC(SETNB、SETAE) DST测试条件:CF=0
   比较两个无符号数,并根据比较的结果把目的字节置1
   SETB(SETNAE、SETC)低于或不高于或等于或进位位为1则目的字节置1
   SETNB(SETAE、SETNC)不低于或高于或等于或进位位为0则目的字节置1
   SETBE(SETNA)低于或等于或不高于则目的字节置1
   SETNBE(SETA)不低于或等于或高于则目的字节置1
   比较两个带符号数,并根据比较的结果把目的字节置1
   SETL(SETNGE)小于,或不大于或等于则目的字节置1
   SETNL(SETGE)不小于,或大于或等于则目的字节置1
   SETLE(SETNG)小于,或等于或不大于则目的字节置1
   SETNLE(SETG)不小于,或等于或大于则目的字节置1
    4)循环指令:
LOOP循环指令
LOOPZ/LOOPNZ指令
   执行的过程:(CX) (CX)-1
                  检查是否满足条件,如满足,则
                  (IP) (IP)+8位位移量,实行循环
                   不满足则IP不变,退出循环
说明:循环程序不可能太多,因此循环指令跳转偏移量不应太大(-128到+128字节范围内)。

本周要求掌握的内容如下:
基本概念:逻辑运算指令、位扫描指令、移位指令、控制转移指令、循环指令
基本理论:了解5种逻辑运算指令,熟练使用8种移位指令,熟悉几种控制转移指令,会用循环指令,熟悉几种串处理指令操作过程,注意指令禁用寻址方式和寻址范围情况以及默认寄存器操作数情况。
习题:
1、SCASW DX执行的过程描述正确的是(DF=1):(   )
(1)(AL)-(DX)   (2)(AX)-(DX)   (3) (DX) (DX)-2   (DX) (DX)-1
(4)(DX) (DX)+1(5)(DX) (DX)-2   
                                                      
2、指令SAL 51H 3执行后的结果是:(   )
   (A)88H   (B) 648D   (C)44H(D)A2H      
                                                   
3、上例指令执行后CF寄存器内容为:(0)
                                                   
4、判断:一条循环指令可以代替修改计数器和判断转移条件两条指令。
                                                   (√)   
5、下列指令正确的是:(   )
(A)SCAS DX,AX    (B) REPNEMOVS   (C) ROR21H(D)NOT 5CH
                                                      
页: [1]
查看完整版本: 大工13春汇编语言程序设计辅导资料五