微机原理及接口技术,第二级,第三级,第四级,第五级,微机原理及接口技术,第2章,第2章,第2章:2.4 算术运算类指令,算术运算类指令用来执行二进制的算术运算:,加减乘除,。,这类指令会根据运算结果影响,状态标志,,有时要利用某些标志才能得到正确的结果;使用他们时请留心有关状态标志,重点掌握,加法指令:ADD、ADC、INC,减法指令:SUB、SBB、DEC、CMP、NEG,第2章:2.4 算术运算类指令算术运算类指令用来执行二进制,第2章:2.4.1 加法和减法指令,加法指令,:ADD,ADC和INC,减法指令,:SUB,SBB,DEC,NEG和CMP,他们分别执行字或字节的加法和减法运算,除,INC,和,DEC,不影响CF标志外,其他按定义影响全部状态标志位,操作数组合:,运算指令助记符 reg,imm/reg/mem,运算指令助记符 mem,imm/reg,第2章:2.4.1 加法和减法指令加法指令:ADD,AD,第2章:1.加和减指令,ADD,dest,src,;,加法:,destdestsrc,;ADD指令使目的操作数加上源操作数,和的结果送到目的操作数,SUB,dest,src,;,减法:,destdestsrc,;SUB指令使目的操作数减去源操作数,差的结果送到目的操作数,第2章:1.加和减指令 ADD dest,src,第2章:例题2.7 加法,mov,ax,7348h,;AX7348H,add,al,27h,;AL48H27H6FH,AX736FH,;OF0,SF0,ZF0,PF1,CF0,add,ax,3fffh,;AX736FH3FFFHB36EH,;OF1,SF1,ZF0,PF0,CF0,第2章:例题2.7 加法mov ax,7348h;AX7,第2章:例题2.7 减法,sub,ah,0f0h,;AHB3HF0HC3H,AXC36EH,;OF0,SF1,ZF0,PF1,CF1,mov,word ptr200h,0ef00h,;200HEF00H,标志不变,sub,200h,ax,;200HEF00HC36EH2B92H,;OF0,SF0,ZF0,PF0,CF0,sub,si,si,;SI0,;OF0,SF0,ZF1,PF1,CF0,第2章:例题2.7 减法sub ah,0f0h,第2章:2.带进位加和减指令,ADC,dest,src,;加法:destdestsrcCF,;ADC指令除完成ADD加法运算外,还要加上进位CF,结果送到目的操作数,SBB,dest,src,;,减法:destdestsrcCF,;SBB指令除完成SUB减法运算外,还要减去借位CF,结果送到目的操作数,第2章:2.带进位加和减指令 ADC dest,src,第2章:例2.8 无符号双字加法和减法,mov ax,7856h;AX7856H,mov dx,8234h;DX8234H,add ax,8998h;AX01EEH,CF1,adc dx,1234h;DX9469H,CF0,sub ax,4491h;AXBD5DH,CF1,sbb dx,8000h;DX1468H,CF0,DX.AX8234 7856H1234 8998H8000 4491H,1468 BD5DH,第2章:例2.8 无符号双字加法和减法mov ax,7856,第2章:3.比较指令CMP(compare),CMP,dest,src,;做减法运算:destsrc,;,CMP指令将目的操作数减去源操作数,但差值,不回送,目的操作数,比较指令通过减法运算影响,状态标志,,用于比较两个操作数的大小关系,cmp ax,bx,cmp al,100,第2章:3.比较指令CMP(compare)CMP des,第2章:4.增量和减量指令,INC,reg/mem,;增量(加1):reg/memreg/mem1,DEC,reg/mem,;减量(减1):reg/memreg/mem1,INC指令和DEC指令是单操作数指令,与加法和减法指令实现的加1和减1不同的是:INC和DEC不影响CF标志,inc si;sisi1,dec byte ptr si;si,si1,第2章:4.增量和减量指令INC reg/meminc,第2章:5.求补指令NEG(negtive),NEG reg/mem,;reg/mem0reg/mem,NEG指令对操作数执行,求补运算,,即用零减去操作数,然后结果返回操作数,求补运算也可以表达成:,将操作数按位取反后加1,NEG指令对标志的影响与用零作减法的SUB指令一样,NEG指令也是一个单操作数指令,第2章:5.求补指令NEG(negtive)NEG reg,第2章:例题2.9 求补运算,mov ax,0ff64h,neg al,;AL064H9CH,AXFF9CH,;OF0SF1,ZF0,PF1,CF1,sub al,9dh,;AL9CH9DHFFH,AXFFFFH,;OF0,SF1,ZF0,PF1,CF1,neg ax,;AX0FFFFH0001H,;OF0,SF0,ZF0,PF0,CF1,dec al,;AL01H10,AX0000H,;OF0,SF0,ZF1,PF1,CF1,neg ax,;AX000,;OF0,SF0,ZF1,PF1,CF0,第2章:例题2.9 求补运算mov ax,0ff64h,第2章:2.4.2 符号扩展指令,符号扩展是指用一个操作数的符号位(最高位)形成另一个操作数,后一个操作数的高位是全0(正数)或全1(负数),符号扩展虽然使数据位数加长,但数据大小并没有改变,扩展的高部分仅是低部分的符号扩展,符号扩展指令有两条,用来将字节转换为字,字转换为双字,CBW,;,AL符号扩展成AX,CWD,;,AX符号扩展成DX,第2章:2.4.2 符号扩展指令符号扩展是指用一个操作数的,第2章:例题2.10 符号扩展,mov al,64h,;,AL64H,(机器数),,表示10进制数100,(真值),cbw,;,将符号0扩展,AX,00,64H,仍然表示100,mov ax,0ff00h,;,AXFF00H,表示有符号10进制数256,cwd,;,将符号位“1”扩展,DX.AX,FFFF,FF00H,;仍然表示256,第2章:例题2.10 符号扩展mov al,64h,第2章:2.4.3 乘法和除法指令,乘法指令分,无符号,和,有符号,乘法指令,MUL reg/mem;无符号乘法,IMUL reg/mem;有符号乘法,除法指令分,无符号,和,有符号,除法指令,DIV reg/mem;无符号除法,IDIV reg/mem;有符号,除法,第2章:2.4.3 乘法和除法指令乘法指令分无符号和有符号乘,第2章:2.4.4 十进制调整指令,十进制数调整指令对二进制运算的结果进行十进制调整,以得到十进制的运算结果,以此实现十进制BCD码运算,8088指令系统支持两种BCD码调整运算,压缩BCD码,就是通常的8421码;它用4个二进制位表示一个十进制位,一个字节可以表示两个十进制位,即0099,非压缩BCD码,用8个二进制位表示一个十进制位,只用低4个二进制位表示一个十进制位09,高4位任意,通常默认为0,第2章:2.4.4 十进制调整指令 十进制数调整指令对二进制,第2章:编码的比较,真值(十进制)864,二进制编码08H40H,压缩BCD码08H64H,非压缩BCD码08H0604H,ASCII码38H3634H,压缩BCD码加减法调整指令,DAA DAS,非压缩BCD码加减乘除法调整指令,AAA AAS AAM AAD,第2章:编码的比较真值(十进制)864压缩BCD码加减法,第2章:2.5 位操作类指令,位操作类指令以,二进制位,为基本单位进行数据的操作,当需要对字节或字数据中的各个二进制位操作时,可以考虑采用位操作类指令,注意这些指令对标志位的影响,1.逻辑运算指令,AND OR XOR NOT TEST,2.移位指令,SHL SHR SAR,3.循环移位指令,ROL ROR RCL RCR,第2章:2.5 位操作类指令 位操作类指令以二进制位为基本,第2章:2.5.1 逻辑运算指令,双操作数逻辑指令,AND、OR、XOR,和,TEST,设置CFOF0,根据结果设置SF、ZF和PF状态,而对AF未定义;它们的操作数组合与ADD、SUB等一样:,运算指令助记符 reg,imm/reg/mem,运算指令助记符 mem,imm/reg,单操作数逻辑指令,NOT,不影响标志位,操作数与INC、DEC和NEG一样:,NOT reg/mem,第2章:2.5.1 逻辑运算指令双操作数逻辑指令AND、O,第2章:逻辑与指令AND,对两个操作数执行逻辑与运算,结果送目的操作数,AND dest,src,;destdest,src,只有相“与”的两位都是1,结果才是1;否则,“与”的结果为0,第2章:逻辑与指令AND对两个操作数执行逻辑与运算,结果送目,第2章:逻辑或指令OR,对两个操作数执行逻辑或运算,结果送目的操作数,OR dest,src,;destdest,src,只要相“或”的两位有一位是1,结果就是1;否则,结果为0,第2章:逻辑或指令OR对两个操作数执行逻辑或运算,结果送目的,第2章:逻辑异或指令XOR,对两个操作数执行逻辑异或运算,结果送目的操作数,XOR dest,src,;destdest,src,只有相“异或”的两位不相同,结果才是1;否则,结果为0,第2章:逻辑异或指令XOR对两个操作数执行逻辑异或运算,结果,第2章:测试指令TEST,对两个操作数执行逻辑与运算,结果并不送目的操作数,仅按AND指令影响标志,TEST dest,src,;dest,src,AND,与,TEST,指令的关系,,同,SUB,与,CMP,指令的关系一样,第2章:测试指令TEST对两个操作数执行逻辑与运算,结果并不,第2章:逻辑非指令NOT,对一个操作数执行逻辑非运算,NOT reg/mem,;reg/mem,reg/mem,按位取反,原来是“0”的位变为“1”;原来是“1”的位变为“0”,第2章:逻辑非指令NOT对一个操作数执行逻辑非运算NOT r,第2章:例2.6 逻辑运算,mov,al,75h;,AL75H,and,al,32h,;,AL30H,;CFOF0,SF0,ZF0,PF1,or,al,71h,;,AL71H,;CFOF0,SF0,ZF0,PF1,xor,al,0f1h,;,AL80H,;CFOF0,SF1,ZF0,PF0,not,al,;,AL7FH,标志不变,第2章:例2.6 逻辑运算mov al,75h;AL75,第2章:例2.17 逻辑运算指令的应用,and,bl,11110110b,;BL中D0和D3清0,其余位不变,or,bl,00001001b,;BL中D0和D3置1,其余位不变,xor,bl,00001001b,;BL中D0和D3求反,其余位不变,AND指令可用于复位某些位(同0相与),不影响其他位,OR指令可用于置位某些位(同1相或),不影响其他位,XOR指令可用于求反某些位(同1相异或),不影响其他位,第2章:例2.17 逻辑运算指令的应用and bl,11,第2章:2.5.2 移位指令,将操作数移动一位或多位,分成逻辑移位和算术移位,分别具有左移或右移操作,移位指令的,第一个操作数,是指定的被移位的操作数,可以是寄存器或存储单元;,后一个操作数,表示移位位数:,该操作数,为1,,表示移动一位,该操作数,为CL,,CL寄存器值表示移位位数(移位位数,大于1只能CL表示,),按照移入的位设置进位标志CF,根据移位后的结果影响SF、ZF、PF,第2章:2.5.2 移位指令将操作数移动一位或多位,分成逻,第2章:逻辑左移指令SHL,SHL,reg/mem,1/CL,;reg/mem左移1或CL位,;最低位补0,最高位进入CF,演示,第2章:逻辑左移指令SHLSHL reg/mem,1/CL演,第2章:逻辑右移指令SHR,SHR