您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 微机原理与接口技术(楼顺天)-第3章4
1本教案内容第3章8086CPU指令系统1.汇编语言指令2.8086指令分类3.数据与转移地址的寻址方式4.数据传送类指令5.算术运算类指令6.逻辑运算类指令7.移位类指令8.标志位操作指令9.转移指令10.循环控制指令11.子程序调用返回指令12.中断调用返回指令13.字符串操作指令14.I/O输入输出指令15.其它指令16.宏指令23.5算术运算类指令数运算调整指令符号扩展指令乘除法指令增量减量指令比较指令加减法指令算术运算指令BCD●只要ALU涉及到运算,其运算结果会影响6个状态标志位。33.5算术运算类指令一、加减法指令(一)加法指令(ADD、ADC)(Addbyteorword/withcarry)格式:ADDDST,SRC;(DST)←(SRC)+(DST)ADCDST,SRC;(DST)←(SRC)+(DST)+(CF)SRC可以取立即数、通用寄存器和存储单元,DST可以取通用寄存器和存储单元,但SRC和DST不能同时取存储单元。53.5算术运算类指令ADD和ADC指令会影响PSW中的6个状态标志位:CF、AF、OF、SF、ZF和PF。例:(AX)=125AH,执行ADDAX,78C6H后(AX)=8B20H,CF=0,AF=1,OF=1,SF=1,ZF=0,PF=0。63.5算术运算类指令例3.2设在DVAR开始的连续8字节中分别存放着两个数A和B(每个数为32位),求C=A+B,并将结果C放到DVARC开始的内存中。解:设这两个数分别为A=00127654H、B=00049821H,则在数据段中有变量定义语句:DVARDD00127654HDD00049821HDVARCDD?73.5算术运算类指令LEADI,DVARMOVAX,4[DI];取低位字到(AX)ADDAX,[DI];低位字相加MOVWORDPTRDVARC,AXMOVAX,6[DI];取高位字到(AX)ADCAX,2[DI];高位字相加(带进位)MOVWORDPTRDVARC+2,AX83.5算术运算类指令(二)减法指令(SUB、SBB)Subtractbyteorword/withborrow格式:SUBDST,SRC;(DST)←(DST)-(SRC)SBBDST,SRC;(DST)←(DST)-(SRC)-(CF)指令中DST、SRC的说明与ADD指令相同。93.5算术运算类指令例如,设VAR1为字型变量,VAR2为字节变量,则有SUBAL,2CH;(AL)←(AL)-2CHSUBVAR1,2184H;(VAR1)←(VAR1)-2184HSBBDL,VAR2[SI];(DL)←(DL)-((OFFSETVAR2)+(SI))-(CF)103.5算术运算类指令减法指令SUB和SBB会影响PSW中的6个状态标志位:CF、AF、OF、SF、ZF和PF。例如:MOVAX,1734HSUBAX,5566H执行后有(AX)=0C1CEHCF=1,AF=1,OF=0,SF=1,ZF=0,PF=0113.5算术运算类指令例3.3设DVAR1和DVAR2保存有双字数,求DVAR1-DVAR2,并将结果保存在双字变量DVARR中。解:设在数据段中有变量定义语句:DVAR1DD78127654HDVAR2DD12349821HDVARRDD?123.5算术运算类指令MOVAX,WORDPTRDVAR1SUBAX,WORDPTRDVAR2MOVWORDPTRDVARR,AXMOVAX,WORDPTRDVAR1+2SBBAX,WORDPTRDVAR2+2MOVWORDPTRDVARR+2,AX133.5算术运算类指令(三)取负指令(NEG)Negatebyteorword格式:NEGDST;(DST)←0-(DST)说明:DST可以取通用寄存器和存储单元。NEG指令影响PSW中的6个状态标志位.143.5算术运算类指令例如,设(AL)=01H,则执行指令NEGAL后,(AL)=0FFH153.5算术运算类指令二、比较指令CMPComparebyteorword格式:CMPDST,SRC;(DST)-(SRC),并设置PSW中的状态标志位说明:CMP指令与减法指令类似,只是其结果不保存到DST。163.5算术运算类指令CMP指令将正常影响PSW中的6个状态标志位:CF、AF、OF、SF、ZF和PF。对两个数进行CMP运算,其主要目的是为了比较两数的大小、相等关系:(1)若两数相减结果为0,即两数相等,则ZF=1;(2)SF等同于最高位;(3)CF,OF视具体情况而定。173.5算术运算类指令当两个无符号数进行比较时,如果CF=0、ZF=0,则表示(DST)(SRC);如果CF=1,则表示(DST)(SRC)。当两个有符号数进行比较时,OF=1表示运算产生了溢出,但大小的比较要根据OF和SF共同来决定,当OFSF=0时,(DST)(SRC),当OFSF=1时,(DST)(SRC)。183.5算术运算类指令例:两个无符号数(AL)=49H、(BL)=28H进行大小比较。解:指令段为:MOVAL,49HMOVBL,28HCMPAL,BL执行后,CF=0,ZF=0,说明49H28H。如果采用CMPBL,AL语句,则CF=1,说明28H49H。193.5算术运算类指令例3.5两个有符号数-104、-113进行大小比较。解:当采用8位补码表示时,这两个有符号数分别为98H和8FH。程序段为:MOVAL,-104MOVBL,-113CMPAL,BL执行后,OF=0,SF=0,说明-104-113。如果采用CMPBL,AL语句,则OF=0,SF=1,这说明-113-104。213.5算术运算类指令三、增量减量指令格式:INCDST;(DST)←(DST)+1DECDST;(DST)←(DST)-1说明:INC和DEC指令可以正常影响PSW中的5个标志位:AF、OF、SF、ZF和PF,但它们不会影响CF位。223.5算术运算类指令四、乘法和除法指令(一)乘法指令MULSRC;无符号数相乘IMULSRC;有符号数相乘说明:指令的目的操作数隐含在AX(或AL)中,SRC可以取通用寄存器和存储单元,它必须有类型,而且只能是字节和字,它们决定了乘法操作的类型。233.5算术运算类指令乘法操作的类型:①当SRC为字节时,表示将AL中的数与(SRC)相乘,其结果放入(AX)中;AX(AL)×(SRC)积字节乘法SRC(乘数)DST(被乘数)243.5算术运算类指令乘法操作的类型:②当SRC为字时,表示将AX中的数与(SRC)相乘,其结果的高16位保存在(DX),低16位保存在(AX)。DX:AX(AX)×(SRC)积字乘法253.5算术运算类指令MUL和IMUL指令只对PSW的CF、OF位有影响,其规则为:即CF=0,OF=0表示字节←字节×字节字←字×字①对MUL指令字运算时,若结果的高字为0,则CF=0,OF=0;字节运算时,若结果的AH为0,则CF=0,OF=0;否则CF=1,OF=1。263.5算术运算类指令②对IMUL指令字运算时,若结果的DX为符号扩展,则CF=0,OF=0;否则CF=1,OF=1。字节运算时,若结果的AH为符号扩展,则CF=0,OF=0;否则CF=1,OF=1。27例1.下列指令是合法的。MULCX;(DX:AX)(AX)*(CX),为字操作IMULCL;(AX)(AL)*(CL),为字节操作3.5算术运算类指令下列指令是非法的。MULAL,BLIMUL05H〤DST(被乘数)应为隐含寻址〤SRC(乘数)不能为立即数寻址283.5算术运算类指令例3.7乘法的字节运算。要计算两个无符号数2CH、42H的乘积,结果保存在AX中。程序段如下:MOVAL,2CHMOVBL,42HMULBL结果(AX)=0B58H,CF=1,OF=1。293.5算术运算类指令例3.9字节×字运算。要计算两个有符号数15H、FB78H的乘积。有符号数FB78H为负数(-1160)。程序段为:MOVAL,15HCBWMOVBX,0FB78HIMULBX执行得到结果(DX)=FFFFH,(AX)=A0D8H,CF=0,OF=0。303.5算术运算类指令(二)除法指令格式:DIVSRC;无符号数的除法IDIVSRC;有符号数的除法说明:指令的目的操作数隐含在DX:AX(或AX)中,SRC可以取通用寄存器和存储单元,它必须有类型,而且只能是字节和字,它们决定了除法操作的类型。313.5算术运算类指令除法操作类型:①当SRC为字节时,表示将AX中的16位二进制数除以8位二进制数(SRC),其结果的商保存在(AL)中,余数保存在(AH)中;(AX)/(SRC)AL商字节除法余数AH323.5算术运算类指令②当SRC为字时,表示将DX与AX联合构成的32位二进制数除以16位二进制数(SRC),其结果的商保存在(AX)中,余数保存在(DX)中。(DX:AX)/(SRC)AX字除法DX商余数333.5算术运算类指令DIV和IDIV指令不影响PSW中的标志位.除法不允许出现除数为0或商溢出,若发生除数为0或商溢出则其结果没有意义,并引起中断。34例1.下列指令是合法的。DIVBLIDIVCXDIVWORDPTR[BX][SI]3.5算术运算类指令下列指令是非法的。DIV12DIV[SI]+02HIDIVAX,BL〤SRC(除数)不能为立即数寻址〤SRC类型不明确〤DST(被除数)应为隐含寻址353.5算术运算类指令例3.10字÷字节的除法运算。设要完成除法运算12345÷156。解:被除数12345可以用一个字表示,除数156可以用一个字节表示,因此可以直接采用除法的字节运算。程序段为:执行结果商(AL)=4FH余数(AH)=15HMOVAX,12345MOVBL,156DIVBL373.5算术运算类指令五、符号扩展指令格式:CBW;将AL中的符号扩展到AH中,形成一个字AXCWD;将AX中的符号扩展到DX中,形成双字(DX:AX)383.5算术运算类指令CBW(Convertbytetoword)为字节到字的符号扩展指令,将AL中的符号位D7扩展到AH:当D7=0时,AH=00H当D7=1时,AH=FFHCWD(Convertwordtodoubleword)为字到双字的符号扩展指令,将AX中的符号位D15扩展到DX:当D15=0时,DX=0000H当D15=1时,DX=FFFFH39应用场合:当两个长度不等的数进行加、减、乘法运算时,应将长度短的数的位数扩展,以使两数的长度一致。3.5算术运算类指令对于无符号数来说,这种扩展只要将其高位补“0”就可以;但对带符号数来说高位扩展时应该补符号位。40例:设在数据段定义变量如下:DAT1DB34H;34H为变量a的一个设定值DAT2DB56H;56H为变量b的一个设定值DAT3DB0E7H;0E7H为变量c的一个设定值DATYDW?;DATY单元存放结果3.5算术运算类指令试写出计算Y=a*b+c-18的程序41MOVAL,DAT1;取aMOVBL,DAT2;取bIMULBL;(AL)*(BL)(AX)MOVBX,AX;(AX)(BX)MOVAL,DAT3;取cCBW;扩展ALAXADDAX,BX;(AX)+(BX)(AX)SUBAX,18MOVDATY,AX…Y=a*b+c-183.5算术运算类指令
本文标题:微机原理与接口技术(楼顺天)-第3章4
链接地址:https://www.777doc.com/doc-4720584 .html