1、本教案内容,第3章 8086CPU指令系统汇编语言指令8086指令分类数据与转移地址的寻址方式数据传送类指令算术运算类指令逻辑运算类指令移位类指令标志位操作指令,转移指令循环控制指令子程序调用返回指令中断调用返回指令字符串操作指令I/O输入输出指令其它指令宏指令,5条逻辑运算类指令书写格式与完成的功能如下表所示。,3.6 逻辑运算类指令,指令的运算都是按位进行的。NOT指令是将操作数的各位取反,其它指令是两个操作数的对应位实行相应的逻辑运算。指令可以有字节操作,也可以有字操作。,3.6 逻辑运算类指令,指令执行后对标志位的影响情况:除NOT指令对标志位不产生影响外,其余指令将使CF、OF置0,
2、并以正常规则设置SF、ZF和PF的状态。,3.6 逻辑运算类指令,3.6 逻辑运算类指令,1.逻辑与指令(AND)格式:AND DST,SRC;(DST)(DST)(SRC),并置各标志位AND完成将DST、SRC的内容进行相与操作,其结果保存在DST中,并设置PSW中的标志位。指令中的DST可以取通用寄存器、存储单元,SRC可以取通用寄存器、存储单元和立即数,但DST和RSC不能同时为存储单元。,(“And”byte or word),3.6 逻辑运算类指令,例3.20 求两个操作数的逻辑与。解:设VAR1为字型变量,则有:ANDAX,BX;(AX)(AX)(BX)ANDAL,156;(AL
3、)(AL)1001 1100B(156=1001 1100B)ANDVAR1,78AAH;(VAR1)(VAR1)78AAHANDCX,SI;(CX)(CX)((SI)),3.6 逻辑运算类指令,2.逻辑测试指令(TEST)格式:TEST DST,SRC;(DST)(SRC),并置各标志位说明:TEST为逻辑测试指令,它与AND指令非常类似,完成将DST、SRC的内容进行相与操作,其结果不保存,并设置PSW中的标志位。指令中的DST和SRC的说明等同于AND指令。,(“Test”byte or word),3.6 逻辑运算类指令,例3.21 求两个操作数的逻辑测试。解:设VAR1为字型变量,则
4、有:TESTAL,156;(AL)1001 1100B(156=1001 1100B)TESTVAR1,78AAH;(VAR1)78AAHTESTAX,BX;(AX)(BX)TESTCX,SI;(CX)((SI)),3.6 逻辑运算类指令,3.逻辑或指令(OR)格式:OR DST,SRC;(DST)(DST)(SRC),并置各标志位说明:OR为逻辑或指令,它完成将DST、SRC的内容进行相或操作,其结果保存在DST中,并设置PSW中的标志位。指令中的DST和SRC的说明等同于AND指令。,(“Inclusive or”byte or word),3.6 逻辑运算类指令,例3.22 求两个操作数
5、的逻辑或。解:设VAR2为字节型变量,则有:ORAL,0110 0001B;(AL)(AL)0110 0001B ORVAR2,0FH;(VAR2)(VAR2)0FHORAX,BX;(AX)(AX)(BX)ORBX,DI;(BX)(BX)((DI)),3.6 逻辑运算类指令,4.逻辑异或指令(XOR)格式:XOR DST,SRC;(DST)(DST)(SRC),并置各标志位说明:XOR为逻辑异或指令,它完成将DST、SRC的内容进行异或操作,其结果保存在DST中,并设置PSW中的标志位。指令中的DST和SRC的说明等同于AND指令。,“Exclusive or”byte or word,例3.
6、23 求两个操作数的逻辑异或。解:设VAR2为字节型变量,则有:XORAL,0110 0001B;(AL)(AL)0110 0001B XORVAR2,0FH;(VAR2)(VAR2)0FHXORAX,BX;(AX)(AX)(BX)XORBX,DI;(BX)(BX)((DI)),3.6 逻辑运算类指令,3.6 逻辑运算类指令,5.逻辑非指令(NOT)格式:NOT DST;(DST)说明:NOT为逻辑非指令,它完成将DST的内容进行按位取反的操作,其结果保存在DST中,但NOT指令不影响PSW中的标志位。指令中的DST可以取通用寄存器和存储单元。,(“Not”byte or word),例3.2
7、4 求操作数的逻辑非。解:设VAR1为字型变量,则有:NOTAL;(AL)NOTVAR1;(VAR1),3.6 逻辑运算类指令,3.6 逻辑运算类指令,逻辑运算指令可以方便地对寄存器和存储单元中的数据进行逻辑操作。利用逻辑运算指令可通过适当选用源操作数的代码,使目的操作数的某些位进行清零、置位及取反操作,例如:,3.6 逻辑运算类指令,OR OL,03H;将CL的位0,1置1,其余位不变AND AL,0F5H;将AL的位1,位3清零XOR AH,0FH;将AH的低4位取反,高4位不变TEST AL,02H;测试AL的位1是否为0,JZ ZER1;若为0则转移到ZER1XOR AX,AX;AX清
8、0AND AL,5FH;将AL中字母的ASCII码变换成“大写”字母的ASCII码OR AL,20H;将AL中字母的ASCII码变换成“小写”字母的ASCII码,3.6 逻辑运算类指令,作业:10 13,3.7 移位类指令,在8086指令系统中,移位类指令有:逻辑右移SHR算术右移SAR逻辑/算术左移SHL/SAL循环右移ROR循环左移ROL带进位循环右移RCR带进位循环左移RCL,3.7 移位类指令,共同特点:正常影响PSW的SF、PF、ZF、CF和OF标志位,其中CF表示指令所移出的一位,OF1表示移位前后符号位发生了变化。移位类指令具有相同的指令格式 SHR DST,CNT,3.7 移位
9、类指令,DST可以取通用寄存器和存储单元,CNT为移位次数,它只有两种取值:CNT=1,表示指令移1位;CNT=CL,表示移位次数由CL的内容决定。在逻辑右移指令中,在最高位填入0;在算术右移指令中,在最高位填入符号位(即最高位);在逻辑/算术左移指令中,在最低位填入0;在循环右移指令中,在最高位填入其最低位的值,形成循环移位;在循环左移指令中,在最低位填入其最高位的值;在带进位循环右移和左移指令中,将DST和CF看成整体进行循环位操作。,1.移位指令,逻辑移位,左移 SHL DST,CNT,右移 SHR DST,CNT,D7 D1 D0,移位次数,3.7 移位类指令,右移1位操作相当于将DS
10、T除以2;左移1位操作相当于将DST乘以2。,例.,SHR AX,1;将AX的内容右移1位,最;高位补0SHL AL,CL;将AL的内容左移CL中指;定的次数,且每次移位;最低位补0,3.7 移位类指令,SHL DAT1SI,CL;将内存某单元的;内容左移CL中所;中指定的次数SHR BL,2 当移位次数1时,必 须用CL提供移位次数,3.7 移位类指令,算术移位,左移 SAL DST,CNT,右移 SAR DST,CNT,0,CF,DST,DST,CF,3.7 移位类指令,2.循环移位指令,不带CF的循环移位,左移 ROL DST,CNT,右移 ROR DST,CNT,3.7 移位类指令,带
11、CF的循环移位,左移 RCL DST,CNT,右移 RCR DST,CNT,3.7 移位类指令,例1.若(BL)=01110010B,(CL)=3,CF=1,则CPU执行:RCR BL,CL 指令后,,(BL)=10101110B=0AEH,3.7 移位类指令,0 1 1 1 0 0 1 0,1,D7 D6 D5 D4 D3 D2 D1 D0,1 0 1 1 1 0 0 1,0,D7 D6 D5 D4 D3 D2 D1 D0,0 1 0 1 1 1 0 0,1,D7 D6 D5 D4 D3 D2 D1 D0,1 0 1 0 1 1 1 0,0,D7 D6 D5 D4 D3 D2 D1 D0,一
12、次,二次,三次,例2.编程序实现5*10运算。(不能用MUL指令),5*10=5*(2+8)=5*2+5*8,算法:,3.7 移位类指令,MOV AL,05HSHL AL,1;(AL)=5*2MOV BL,AL;(BL)=5*2MOV CL,2SHL AL,CL;(AL)=5*8ADD AL,BL;(AL)=5*10,3.7 移位类指令,3.7 移位类指令,例3.28 将一个字(AX)的内容除2,并进行四舍五入操作。解:对(AX)右移1位等效于(AX)2,四舍五入操作可以表述成:当原(AX)最低位(即移出的1位)为1时,在结果中加1。因此可以编写出程序段:SHR AX,1 ADC AX,0,3.7 移位类指令,另外,四舍五入操作还可以表述成:其中方括号表示取整运算,这样可以在移位之前的最低位加上1,然后进行右移1位的操作。因此可以编写出程序段:INC AX SHR AX,1,3.8 标志位操作指令,作业:12 14 16 17,
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2