本教案内容第3章8086CPU指令系统1.汇编语言指令2.8086指令分类3.数据与转移地址的寻址方式4.数据传送类指令5.算术运算类指令6.逻辑运算类指令7.移位类指令8.标志位操作指令9.转移指令10.循环控制指令11.子程序调用返回指令12.中断调用返回指令13.字符串操作指令14.I/O输入输出指令15.其它指令16.宏指令助记符格式功能说明与ANDDST,SRC(DST)(DST)∧(SRC)或ORDST,SRC(DST)(DST)∨(SRC)异或XORDST,SRC(DST)(DST)(SRC)测试TESTDST,SRC(DST)∧(SRC)置各标志位非NOTDST(DST)中各位取反5条逻辑运算类指令书写格式与完成的功能如下表所示。≮3.6逻辑运算类指令指令的运算都是按位进行的。NOT指令是将操作数的各位取反,其它指令是两个操作数的对应位实行相应的逻辑运算。指令可以有字节操作,也可以有字操作。3.6逻辑运算类指令指令执行后对标志位的影响情况:除NOT指令对标志位不产生影响外,其余指令将使CF、OF置0,并以正常规则设置SF、ZF和PF的状态。3.6逻辑运算类指令3.6逻辑运算类指令1.逻辑与指令(AND)格式:ANDDST,SRC;(DST)←(DST)∧(SRC),并置各标志位AND完成将DST、SRC的内容进行相与操作,其结果保存在DST中,并设置PSW中的标志位。指令中的DST可以取通用寄存器、存储单元,SRC可以取通用寄存器、存储单元和立即数,但DST和RSC不能同时为存储单元。(“And”byteorword)3.6逻辑运算类指令例3.20求两个操作数的逻辑与。解:设VAR1为字型变量,则有:ANDAX,BX;(AX)←(AX)∧(BX)ANDAL,156;(AL)←(AL)∧10011100B(156=10011100B)ANDVAR1,78AAH;(VAR1)←(VAR1)∧78AAHANDCX,[SI];(CX)←(CX)∧((SI))3.6逻辑运算类指令2.逻辑测试指令(TEST)格式:TESTDST,SRC;(DST)∧(SRC),并置各标志位说明:TEST为逻辑测试指令,它与AND指令非常类似,完成将DST、SRC的内容进行相与操作,其结果不保存,并设置PSW中的标志位。指令中的DST和SRC的说明等同于AND指令。(“Test”byteorword)3.6逻辑运算类指令例3.21求两个操作数的逻辑测试。解:设VAR1为字型变量,则有:TESTAL,156;(AL)∧10011100B(156=10011100B)TESTVAR1,78AAH;(VAR1)∧78AAHTESTAX,BX;(AX)∧(BX)TESTCX,[SI];(CX)∧((SI))3.6逻辑运算类指令3.逻辑或指令(OR)格式:ORDST,SRC;(DST)←(DST)∨(SRC),并置各标志位说明:OR为逻辑或指令,它完成将DST、SRC的内容进行相或操作,其结果保存在DST中,并设置PSW中的标志位。指令中的DST和SRC的说明等同于AND指令。(“Inclusiveor”byteorword)3.6逻辑运算类指令例3.22求两个操作数的逻辑或。解:设VAR2为字节型变量,则有:ORAL,01100001B;(AL)←(AL)∨01100001BORVAR2,0FH;(VAR2)←(VAR2)∨0FHORAX,BX;(AX)←(AX)∨(BX)ORBX,[DI];(BX)←(BX)∨((DI))3.6逻辑运算类指令4.逻辑异或指令(XOR)格式:XORDST,SRC;(DST)←(DST)(SRC),并置各标志位说明:XOR为逻辑异或指令,它完成将DST、SRC的内容进行异或操作,其结果保存在DST中,并设置PSW中的标志位。指令中的DST和SRC的说明等同于AND指令。“Exclusiveor”byteorword例3.23求两个操作数的逻辑异或。解:设VAR2为字节型变量,则有:XORAL,01100001B;(AL)←(AL)01100001BXORVAR2,0FH;(VAR2)←(VAR2)0FHXORAX,BX;(AX)←(AX)(BX)XORBX,[DI];(BX)←(BX)((DI))3.6逻辑运算类指令3.6逻辑运算类指令5.逻辑非指令(NOT)格式:NOTDST;(DST)←说明:NOT为逻辑非指令,它完成将DST的内容进行按位取反的操作,其结果保存在DST中,但NOT指令不影响PSW中的标志位。指令中的DST可以取通用寄存器和存储单元。(“Not”byteorword)例3.24求操作数的逻辑非。解:设VAR1为字型变量,则有:NOTAL;(AL)←NOTVAR1;(VAR1)←3.6逻辑运算类指令)AL()VAR1(3.6逻辑运算类指令逻辑运算指令可以方便地对寄存器和存储单元中的数据进行逻辑操作。利用逻辑运算指令可通过适当选用源操作数的代码,使目的操作数的某些位进行清零、置位及取反操作,例如:3.6逻辑运算类指令OROL,03H;将CL的位0,1置1,其余位不变ANDAL,0F5H;将AL的位1,位3清零XORAH,0FH;将AH的低4位取反,高4位不变TESTAL,02H;测试AL的位1是否为0,JZZER1;若为0则转移到ZER1XORAX,AX;AX清0ANDAL,5FH;将AL中字母的ASCII码变换成“大写”字母的ASCII码ORAL,20H;将AL中字母的ASCII码变换成“小写”字母的ASCII码3.6逻辑运算类指令作业:10133.7移位类指令在8086指令系统中,移位类指令有:1.逻辑右移SHR2.算术右移SAR3.逻辑/算术左移SHL/SAL4.循环右移ROR5.循环左移ROL6.带进位循环右移RCR7.带进位循环左移RCL3.7移位类指令共同特点:正常影响PSW的SF、PF、ZF、CF和OF标志位,其中CF表示指令所移出的一位,OF=1表示移位前后符号位发生了变化。移位类指令具有相同的指令格式SHRDST,CNT3.7移位类指令DST可以取通用寄存器和存储单元,CNT为移位次数,它只有两种取值:CNT=1,表示指令移1位;CNT=CL,表示移位次数由CL的内容决定。在逻辑右移指令中,在最高位填入0;在算术右移指令中,在最高位填入符号位(即最高位);在逻辑/算术左移指令中,在最低位填入0;在循环右移指令中,在最高位填入其最低位的值,形成循环移位;在循环左移指令中,在最低位填入其最高位的值;在带进位循环右移和左移指令中,将DST和CF看成整体进行循环位操作。1.移位指令①逻辑移位左移SHLDST,CNT右移SHRDST,CNT0CFD7D1D0CF0D7D1D0移位次数3.7移位类指令右移1位操作相当于将DST除以2;左移1位操作相当于将DST乘以2。例.SHRAX,1;将AX的内容右移1位,最;高位补0SHLAL,CL;将AL的内容左移CL中指;定的次数,且每次移位;最低位补03.7移位类指令SHLDAT1[SI],CL;将内存某单元的;内容左移CL中所;中指定的次数SHRBL,2〤当移位次数1时,必须用CL提供移位次数3.7移位类指令②算术移位左移SALDST,CNT右移SARDST,CNT0CFDSTDSTCF3.7移位类指令2.循环移位指令①不带CF的循环移位左移ROLDST,CNT右移RORDST,CNTCFDSTCFDST3.7移位类指令②带CF的循环移位左移RCLDST,CNT右移RCRDST,CNTCFDSTCFDST3.7移位类指令例1.若(BL)=01110010B,(CL)=3,CF=1,则CPU执行:RCRBL,CL指令后,(BL)=10101110B=0AEH3.7移位类指令011100101D7D6D5D4D3D2D1D0101110010D7D6D5D4D3D2D1D0010111001D7D6D5D4D3D2D1D0101011100D7D6D5D4D3D2D1D0一次二次三次例2.编程序实现5*10运算。(不能用MUL指令)5*10=5*(2+8)=5*2+5*8算法:★3.7移位类指令MOVAL,05HSHLAL,1;(AL)=5*2MOVBL,AL;(BL)=5*2MOVCL,2SHLAL,CL;(AL)=5*8ADDAL,BL;(AL)=5*103.7移位类指令3.7移位类指令例3.28将一个字(AX)的内容除2,并进行四舍五入操作。解:对(AX)右移1位等效于(AX)÷2,四舍五入操作可以表述成:当原(AX)最低位(即移出的1位)为1时,在结果中加1。因此可以编写出程序段:SHRAX,1ADCAX,03.7移位类指令另外,四舍五入操作还可以表述成:其中方括号表示取整运算,这样可以在移位之前的最低位加上1,然后进行右移1位的操作。因此可以编写出程序段:INCAXSHRAX,1215.02xxy助记符格式功能说明CLC0CFSTC1CFCMCCFCFCLD0DFSTD1DF助记符格式功能说明CLI0IFSTI1IF3.8标志位操作指令作业:12141617