微机原理-第3章第4节.ppt

上传人:牧羊曲112 文档编号:6572749 上传时间:2023-11-13 格式:PPT 页数:65 大小:233.50KB
返回 下载 相关 举报
微机原理-第3章第4节.ppt_第1页
第1页 / 共65页
微机原理-第3章第4节.ppt_第2页
第2页 / 共65页
微机原理-第3章第4节.ppt_第3页
第3页 / 共65页
微机原理-第3章第4节.ppt_第4页
第4页 / 共65页
微机原理-第3章第4节.ppt_第5页
第5页 / 共65页
点击查看更多>>
资源描述

《微机原理-第3章第4节.ppt》由会员分享,可在线阅读,更多相关《微机原理-第3章第4节.ppt(65页珍藏版)》请在三一办公上搜索。

1、本教案内容,第3章 8086CPU指令系统汇编语言指令8086指令分类数据与转移地址的寻址方式数据传送类指令算术运算类指令逻辑运算类指令移位类指令标志位操作指令,转移指令循环控制指令子程序调用返回指令中断调用返回指令字符串操作指令I/O输入输出指令其它指令宏指令,3.5 算术运算类指令,算术运算指令可以完成两个操作数的各种算术运算:加、减、乘、除及其BCD数运算的调整运算。属于这一类的指令有:ADD、ADC、SUB、SBB、NEG、CMP、INC、DEC、MUL、IMUL、DIV、IDIV、CBW、CWD、AAA、DAA、AAS、DAS、AAM、AAD。它们又可以分成6个子类:,3.5 算术运

2、算类指令,只要ALU涉及到运算,就不能使用段REG;只要ALU涉及到运算,其运算结果会影响6个状态标志位。,3.5 算术运算类指令,一、加减法指令(一)加法指令(ADD、ADC)(Add byte or word/with carry)格式:ADD DST,SRC;(DST)(SRC)+(DST)ADC DST,SRC;(DST)(SRC)+(DST)(CF),SRC可以取立即数、通用寄存器和存储单元,DST可以取通用寄存器和存储单元,但SRC和DST不能同时取存储单元。,3.5 算术运算类指令,例如,设变量VAR1为字型变量,VAR2为字节变量,则有ADD AX,56A0H;(AX)(AX)

3、+56A0HADC VAR1,127FH;(VAR1)(VAR1)127FH(CF)ADC AX,BX;(AX)(AX)+(BX)(CF)ADD AX,VAR1;(AX)(AX)+(VAR1)ADD BX,VAR1DI;(BX)(BX)+(VAR1)+(DI))ADD BL,VAR2;(BL)(BL)+(VAR2)ADD BYTE PTR VAR1,AL;(VAR1的低位字节)(VAR1的低位)(AL),3.5 算术运算类指令,ADD和ADC指令会正常影响PSW中的6个状态标志位:CF、AF、OF、SF、ZF和PF。例如,设(AX)125AH,则执行ADD AX,78C6H后,(AX)8B00

4、H,CF=0,AF=1,OF=1,SF=1,ZF=0,PF=1。,3.5 算术运算类指令,例3.2 设在DVAR开始的连续8字节中分别存放着两个数A和B(每个数为32位),求C=A+B,并将结果C放到DVARC开始的内存中。解:设这两个数分别为A=00127654H、B=00049821H,则在数据段中有变量定义语句:DVAR DD00127654H DD 00049821HDVARC DD?,3.5 算术运算类指令,为完成双字相加运算,应该先利用ADD指令完成低位字的加法运算,再利用ADC指令完成高位字的带进位加法运算。这样在代码段中可以编写下列程序,完成题目指定的说明:LEA DI,DVA

5、R;MOV AX,4DI;取低位字到(AX)ADD AX,DI;低位字相加MOV WORD PTR DVARC,AX;保存结果的低位字MOV AX,6DI;取高位字到(AX)ADC AX,2DI;高位字相加(带进位)MOV WORD PTR DVARC+2,AX;保存结果的高位字,3.5 算术运算类指令,(二)减法指令(SUB、SBB)Subtract byte or word/with borrow 格式:SUB DST,SRC;(DST)(DST)(SRC)SBB DST,SRC;(DST)(DST)(SRC)(CF),指令中DST、SRC的说明与ADD指令相同。,3.5 算术运算类指令,

6、例如,设VAR1为字型变量,VAR2为字节变量,则有SUB AL,2CH;(AL)(AL)2CHSBB AX,BX;(AX)(AX)(BX)(CF)SUB AX,VAR1;(AX)(AX)(VAR1)SUB VAR1,2184H;(VAR1)(VAR1)2184HSBB DL,VAR2SI;(DL)(DL)-(VAR2)(SI)-(CF),3.5 算术运算类指令,减法指令SUB和SBB指令会正常影响PSW中的6个状态标志位:CF、AF、OF、SF、ZF和PF。例如:MOV AX,1734H SUB AX,5566H执行后有(AX)=0C1CEH CF=1,AF=1,OF=0,SF=1,ZF=0

7、,PF=0,3.5 算术运算类指令,例3.3 设DVAR1和DVAR2保存有双字数,求DVAR1DVAR2,并将结果保存在双字变量DVARR中。解:设在数据段中有变量定义语句:DVAR1DD78127654HDVAR2DD 12349821HDVARRDD?,3.5 算术运算类指令,为完成双字相减运算,应该先利用SUB指令完成低位字的减法运算,再利用SBB指令完成高位字的带进位减法运算。这样在代码段中可以编写下列程序,完成题目指定的说明:MOV AX,DVAR1;取被减数的低位字到(AX)SUB AX,DVAR2;低位字相减MOV DVARR,AX;保存结果的低位字MOV AX,DVAR12;

8、取被减数的高位字到(AX)SBB AX,DVAR22;高位字相减(带借位相减)MOV DVARR+2,AX;保存结果的高位字,3.5 算术运算类指令,(三)取负指令(NEG)Negate byte or word格式:NEG DST;(DST)0(DST)说明:取负指令NEG为一类特殊的减法运算,其被减数为0,相减结果存放在DST中。DST可以取通用寄存器和存储单元。求负数的补码表示可以直接利用NEG指令完成。NEG指令将正常影响PSW中的6个状态标志位.,3.5 算术运算类指令,例如,设VAR1为字型变量,则有下列指令:NEG BX;(BX)0(BX)NEG VAR1;(VAR1)0(VAR

9、1)NEG BYTE PTR 2BX;(BX)2)0(BX)2),3.5 算术运算类指令,二、比较指令CMP Compare byte or word 格式:CMP DST,SRC;(DST)(SRC),并 设置PSW中的状态标志位说明:CMP指令与减法指令类似,完成DST的内容减去SRC的内容,设置PSW中的状态标志位(简称FLAG),但其结果不保存到DST。指令中的SRC、DST的说明与ADD指令相同。,3.5 算术运算类指令,例如,设VAR1为字型变量,VAR2为字节变量,则有CMP CX,2000;(CX)2000,并置FLAGCMP BX,DX;(BX)(DX),并置FLAGCMP

10、AL,VAR2;(AL)(VAR2),并置FLAGCMP VAR1SI,AX;(VAR1)(SI)(AX),并置FLAG,3.5 算术运算类指令,CMP指令将正常影响PSW中的6个状态标志位:CF、AF、OF、SF、ZF和PF。对两个数进行CMP运算,其主要目的是为了比较两数的大小、相等关系:(1)若两数相减结果为0,即两数相等,则ZF1;(2)SF等同于最高位;(3)CF,OF视具体情况而定。,3.5 算术运算类指令,当两个无符号数进行比较时,如果CF0、ZF0,则表示(DST)(SRC);如果CF1,则表示(DST)(SRC),当OF SF1时,(DST)(SRC)。,3.5 算术运算类指

11、令,例3.4 两个无符号数(AL)49H、(BL)28H进行大小比较。解:指令段为:MOVAL,49HMOV BL,28HCMPAL,BL执行后,CF0,说明49H28H。如果采用CMP BL,AL语句,则CF1,说明28H49H。,3.5 算术运算类指令,例3.5 两个有符号数104、113进行大小比较。解:当采用8位补码表示时,这两个有符号数分别为98H和8FH。程序段为:MOVAL,104MOV BL,113CMPAL,BL执行后,OF0,SF0,说明104113。如果采用CMP BL,AL语句,则OF0,SF1,这说明113104。,3.5 算术运算类指令,例3.6 两个有符号数57、

12、113进行大小比较。解:当采用8位补码表示时,这两个有符号数分别为39H和8FH。程序段为:MOVAL,57MOV BL,113CMPAL,BL执行后,OF1,SF1,说明57113。如果采用CMP BL,AL语句,则OF1,SF0,这说明11357。,3.5 算术运算类指令,三、增量减量指令格式:INC DST;(DST)(DST)1DEC DST;(DST)(DST)1说明:INC(Increment byte or word by 1)为增量指令,每次对DST的内容增加1;DEC(Decrement byte or word by 1)为减量指令,每次对DST的内容减去1。DST可以取通

13、用寄存器和存储单元。INC和DEC指令可以正常影响PSW中的5个标志位:AF、OF、SF、ZF和PF,但它们不会影响CF位。,3.5 算术运算类指令,例如,设VAR1为字型变量,则有 DEC AX;(AX)(AX)1 INC DL;(DL)(DL)1 INC VAR1;(VAR1)(VAR1)1 DEC WORD PTR BX;(BX)(BX)1,3.5 算术运算类指令,四、乘法和除法指令(一)乘法运算两个无符号二进制数的乘法运算与十进制数的乘法类似,可以采用列竖式的方法计算,只是在相加运算时,按逢二进一的规则。而两个有符号二进制数进行乘法运算时,先将负数采用变补的方法变换成正数,进行两个正数

14、相乘,然后统一考虑符号。,3.5 算术运算类指令,(二)乘法指令格式:MUL SRC;无符号数相乘IMUL SRC;有符号数相乘说明:MUL为无符号数乘法指令,IMUL为有符号数乘法指令,指令的目的操作数隐含在AX(或AL)中,SRC可以取通用寄存器和存储单元,它必须有类型,而且只能是字节和字,它们决定了乘法操作的类型。,(Multiply byte or word unsigned)(Integer multiply byte or word),3.5 算术运算类指令,乘法操作的类型:当SRC为字节时,MUL和IMUL为字节运算,这时表示将AL中的数与(SRC)相乘,其结果放入(AX)中;,

15、3.5 算术运算类指令,乘法操作的类型:当SRC为字时,MUL和IMUL为字运算,这时表示将AX中的数与(SRC)相乘,其结果的高16位保存在(DX),低16位保存在(AX)。,3.5 算术运算类指令,MUL和IMUL指令只对PSW的CF、OF位有影响,其规则为:当采用MUL运算时,字运算结果的DX为0时,CF=0,OF0,表示两个字相乘其结果也为一个字;字节运算结果的AH为0时,CF=0,OF0,表示两个字节相乘其结果也为一个字节;否则CF=1,OF1。,CF=0OF=0表示:,字节字节字节字 字 字,3.5 算术运算类指令,当采用IMUL运算时,字运算结果的DX为符号扩展时,CF=0,OF

16、0,表示两个字相乘其结果可以用一个字表示;字节运算结果的AH为符号扩展时,CF=0,OF0,表示两个字节相乘其结果也可以用一个字节表示;否则CF=1,OF1。,CF=0OF=0表示:,字节字节字节字 字 字,例1.下列指令是合法的。MUL CX;(DX:AX)(AX)*(CX),为字操作IMUL CL;(AX)(AL)*(CL),为字节操作 下列指令是非法的。MUL AL,BL DST(被乘数)应为隐含寻址 IMUL 05H SRC(乘数)不能为立即数寻址,3.5 算术运算类指令,3.5 算术运算类指令,例3.7 乘法的字节运算。要计算两个无符号数2CH、42H的乘积,结果保存在AX中。解:程

17、序段如下:MOV AL,2CHMOV BL,42HMUL BL结果(AX)0B58H,CF1,OF1。,3.5 算术运算类指令,例3.8 乘法的字运算。要计算两个有符号数1000、12345的乘积。解:程序段如下:MOVAX,1000MOV BX,-12345IMULBX执行得到结果(DX)FF43H,(AX)A158H,CF1,OF1,3.5 算术运算类指令,例3.9 字节字运算。要计算两个有符号数15H、FB78H的乘积。解:实际上,有符号数FB78H为负数(-1160)。程序段为:MOVAL,15HCBWMOV BX,0FB78HIMULBX执行得到结果(DX)FFFFH,(AX)A0D

18、8H,CF0,OF0,这表示相乘结果只需要用一个字表示。,3.5 算术运算类指令,(三)除法运算两个无符号二进制数的除法运算与十进制数的除法类似。而两个有符号二进制数进行除法运算时,先将负数采用变补的方法变换成正数,进行两个正数相除,然后统一考虑符号,这可以分成四种情况:被除数为正,除数为正,则商为正,余数为正;被除数为正,除数为负,则商为负,余数为正;被除数为负,除数为正,则商为负,余数为负;被除数为负,除数为负,则商为正,余数为负。,3.5 算术运算类指令,(四)除法指令格式:DIV SRC;无符号数的除法 IDIV SRC;有符号数的除法说明:DIV为无符号数除法指令,IDIV为有符号数

19、除法指令,指令的目的操作数隐含在DX:AX(或AX)中,SRC可以取通用寄存器和存储单元,它必须有类型,而且只能是字节和字,它们决定了除法操作的类型。,(Divide byte or word unsigned)(Integer divide byte or word),3.5 算术运算类指令,除法操作类型:当SRC为字节时,DIV和IDIV为字节运算,这时表示将AX中的16位二进制数除以8位二进制数(SRC),其结果的商保存在(AL)中,余数保存在(AH)中;,3.5 算术运算类指令,除法操作类型:当SRC为字时,DIV和IDIV为字运算,这时表示将DX与AX联合构成的32位二进制数除以16

20、位二进制数(SRC),其结果的商保存在(AX)中,余数保存在(DX)中。,3.5 算术运算类指令,DIV和IDIV指令不影响PSW中的标志位.但除法不允许出现除数为0或商溢出,若发生除数为0或商溢出则其结果没有意义,并引起中断(关于中断的概念以后再作介绍)。,例1.下列指令是合法的。DIV BL IDIV CX DIV WORD PTR BXSI 下列指令是非法的。DIV 12 SRC(除数)不能为立即数寻址 DIV SI+02H SRC类型不明确 IDIV AX,BL DST(被除数)应为隐含寻址,3.5 算术运算类指令,3.5 算术运算类指令,例3.10 字字节的除法运算。设要完成除法运算

21、12345156。解:被除数12345可以用一个字表示,除数156可以用一个字节表示,因此可以直接采用除法的字节运算。程序段为:MOVAX,12345MOVBL,156DIVBL执行结果商(AL)4FH 余数(AH)15H,3.5 算术运算类指令,例3.11 双字字的除法运算。设要完成除法运算28901240H(6528H)。解:这是有符号数的除法运算,被除数应该用一个双字表示,除数可以用一个字表示,程序段为:MOVAX,1240HMOVDX,2890HMOVBX,-6528HIDIVBX执行结果商(AX)9959H,余数(DX)2528H。,3.5 算术运算类指令,例3.12 双字字节的除法

22、运算。设要完成无符号除法运算00011240H0A0H。解:这是无符号数的除法运算,被除数应该用一个双字表示,除数本身可以用一个字节表示,但除法运算只能采用双字字,因此除数应该变换成字。对无符号数来说,这种由字节变换成字的过程,非常简单,只需要将高位字节填0。程序段为:MOVAX,1240HMOVDX,0001HMOVBL,0A0HMOVBH,0DIVBX执行结果商(AX)01B6H,余数(DX)0080H。,3.5 算术运算类指令,五、符号扩展指令格式:CBW;将AL中的符号扩展到AH中,形成一个字AX CWD;将AX中的符号扩展到DX中,形成双字(DX:AX),CBW(Convert by

23、te to word)CWD(Convert word to doubleword),3.5 算术运算类指令,CBW(Convert byte to word)为字节到字的符号扩展指令,表示将AL中的有符号数扩展到AH,即根据AL中的符号位D7来扩展:当D70时,AH00H当D71时,AHFFH这样可以保证有符号数AL与有符号数AX所表示的值相同。,3.5 算术运算类指令,CWD(Convert word to doubleword)为字到双字的符号扩展指令,表示将AX中的有符号数扩展到DX,即根据AX中的符号位D15来扩展:当D150时,DX0000H当D151时,DXFFFFH这样可以保证

24、有符号数AX与有符号数DX:AX所表示的值相同。,应用场合:,在算术运算中,有时会遇到两个长度不等的数进行加、减运算,此时,应将长度短的数的位数扩展,以使两数的长度一致,只有这样,才能保证参加运算的两个操作数的类型是一致的。对于一个无符号数来说,这种扩展是简单的,只要将其高位补“0”就可以;但对一个带符号数来说就不一样了,高位扩展时,补“0”还是补“1”就取决于该数的符号位。,3.5 算术运算类指令,例2.写出计算Y=a*b+c-18的程序(P102),;在数据段定义变量如下:DAT1 DB 34H;34H为变量a的一个设定值 DAT2 DB 56H;56H为变量b的一个设定值 DAT3 DB

25、 0E7H;0E7H为变量c的一个设定值 DATY DW?;DATY单元存放结果,3.5 算术运算类指令,;在代码段编写程序 MOV AL,DAT1;取a MOV BL,DAT2;取b IMUL BL;(AL)*(BL)(AX)MOV BX,AX;(AX)(BX)MOV AL,DAT3;取c CBW;扩展AL AX ADD AX,BX;(AX)+(BX)(AX)SUB AX,18 MOV DATY,AX,Y=a*b+c-18,3.5 算术运算类指令,3.5 算术运算类指令,六、BCD数运算调整指令BCD码(数)是用四位二进制码来表示一位十进制数。利用BCD码可进行加、减、乘、除运算,但为了得到

26、正确的结果,必须进行修正。BCD码表示可分为两类:分离BCD码:8位的寄存器中只包含一位BCD码(D0D3);组合BCD码:8位的寄存器中包含了两位BCD码。在这两种情况下,修正的方法是不同的,其调整指令也不同。,BCD数调整指令共有6条,如下所示:,3.5 算术运算类指令,3.5 算术运算类指令,1.加法调整指令格式:AAA;加法分离BCD码调整DAA;加法组合BCD码调整AAA(ASCII adjust for addition)DAA(Decimal adjust for addition),3.5 算术运算类指令,AAA(ASCII adjust for addition)为分离BCD

27、码加法运算后的调整指令,表示对相加结果AL的低4位进行加6修正。根据运算结果及修正结果的AF有无进位,进行下列操作:AF有进位,则AH1,CF1,AF1;AF无进位,则AH0,CF0,AF0。并清掉AL中的高4位。,3.5 算术运算类指令,DAA(Decimal adjust for addition)为组合BCD码加法运算后的调整指令,表示对相加结果AL的低4位和高4位分别进行加6修正。DAA指令对PSW中的AF、CF、SF、ZF、PF都有影响,其效果等同于ADD指令。,3.5 算术运算类指令,例3.13 计算十进制数的加法运算,设要计算48。解:当通过键盘输入这两个十进制数时,我们得到的是

28、其ASCII码,如果将其看作为分离BCD码,则高4位为无效部分,因此不需要将高4位清除。MOV AL,4 MOV BL,8 ADD AL,BL AAA AAA指令调整之前,(AL)0CH,执行AAA指令后,其结果为(AX)0102H,CF1,AF1;这说明“4812”。,3.5 算术运算类指令,例3.14 计算十进制数的加法运算,设要计算3428。解:采用组合BCD表示数34,这时应将“34H”送入某寄存器。程序段如下:MOV AL,34H MOV BL,28H ADD AL,BL DAA DAA指令调整之前,(AL)5CH,执行DAA指令后,其结果为(AL)62H,CF0,AF1,SF=0,

29、PF0,ZF0,这说明“342862”。,3.5 算术运算类指令,2.减法调整指令格式:AAS;减法分离BCD码调整 DAS;减法组合BCD码调整说明:AAS(ASCII adjust for subtraction)DAS(Decimal adjust for subtraction),3.5 算术运算类指令,AAS(ASCII adjust for subtraction)为分离BCD码减法运算后的调整指令,表示对相减结果AL的低4位进行减6修正。根据运算结果及修正结果的AF有无借位,进行下列操作:AF有借位,则CF1,AF1;AF无借位,则CF0,AF0。并清掉AL中的高4位。,3.5

30、算术运算类指令,DAS(Decimal adjust for subtraction)为组合BCD码减法运算后的调整指令,表示对相减结果AL的低4位和高4位分别进行减6修正。DAS指令对PSW中的AF、CF、SF、ZF、PF都有影响,其效果等同于SUB指令。,3.5 算术运算类指令,例3.16 计算十进制数的减法运算,设要计算59。解:程序段如下:MOV AL,05H MOV BL,09H SUB AL,BL AAS AAS指令调整之前,(AL)0CH,AF1,执行AAS指令后,其结果为(AL)06H,CF1,AF1;这说明调整结果为负数,因此结果为4。,3.5 算术运算类指令,3乘法分离BC

31、D码调整格式:AAM;乘法分离BCD码调整说明:AAM为分离BCD码乘法的调整指令,两个分离BCD码相乘之后,需用AAM调整,调整方法是将结果(AL)除以10(0AH),其商为(AH)的低4位,余数为(AL)的低4位。AAM指令会影响PSW的SF、ZF:使SF0,这是因为AL的高4位为0;当余数为0,即AL0时,ZF1;当余数不为0时,ZF0。,(ASCII adjust for multiply),3.5 算术运算类指令,例3.18 计算十进制数的乘法运算,设要计算78。解:程序段如下:MOVAL,7MOV BL,8MULBLAAMAAM指令执行之前,(AX)38H,AAM指令执行后,(AX

32、)0506H,SF0,ZF0,3.5 算术运算类指令,4.除法分离BCD码调整格式:AAD;除法分离BCD码调整说明:AAD为分离BCD码除法的调整指令,两个分离BCD码除法指令之前应采用AAD进行调整。被除数AH和AL中分别保存有一位分离BCD码,AAD指令进行除法调整:(AL)(AH)10(AL),并使(AH)0,然后进行正常的除法运算。AAD指令会影响PSW的PF、SF、ZF标志位。,(ASCII adjust for division),3.5 算术运算类指令,例3.19 计算十进制数的除法运算,设要计算274。解:程序段如下:MOV AX,0207HMOV BL,4AAD;(AX)001BHDIV BL执行结果为AL=06H,AH=03H,这说明十进制数的除法运算274的商为6,余数为3。,3.5 算术运算类指令,作业:7 9,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号