《33 算术运算指令-精品文档资料系列.ppt》由会员分享,可在线阅读,更多相关《33 算术运算指令-精品文档资料系列.ppt(43页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、12. . 输入输出(输入输出(I/OI/O)指令)指令l80868086通过通过I/OI/O指令与外设交换数据;呈现给指令与外设交换数据;呈现给程序员的外设是程序员的外设是端口端口(PortPort)即)即I/OI/O地址地址l80868086用于寻址外设端口的地址线为用于寻址外设端口的地址线为1616条,条,端口最多为端口最多为2 216166553665536(64K64K)个,端口号)个,端口号为为0000H0000HFFFFHFFFFHl每个端口用于传送一个每个端口用于传送一个字节字节的外设数据的外设数据只限于用累加器只限于用累加器ALAL或或AXAX来传送信息。来传送信息。功能功能
2、: (: (累加器累加器)I/OI/O端口端口2输入输出寻址方式输入输出寻址方式l80868086的的端口有端口有64K64K个,无需分段,设计有两个,无需分段,设计有两种寻址方式种寻址方式v直接寻址直接寻址:只用于寻址只用于寻址00H00HFFHFFH前前256256个端个端口,操作数口,操作数(8(8位二进制数位二进制数) )表示端口号表示端口号v间接寻址间接寻址:可用于寻址全部:可用于寻址全部64K64K个端口,个端口,DXDX寄存器的值就是端口号寄存器的值就是端口号l对大于对大于FFHFFH的端口只能采用间接寻址方式的端口只能采用间接寻址方式3(1)输入指令输入指令IN格式格式: IN
3、 acc,PORT ;PORT端口号端口号0255H IN acc,DX ;DX表示的端口范围达表示的端口范围达64K例例:IN AL,80H ;(AL)(80H端口端口) ;从从80H号端口输入一个字节号端口输入一个字节 IN AL,DX ;(AL)(DX) ;从从16位端口地址输入一个字位端口地址输入一个字4例:输入字量1.直接寻址,字节量输入直接寻址,字节量输入 in al,21h mov ah,al in al,20h功能相同功能相同 字量数据传送字量数据传送实际上实现了连实际上实现了连续的两个端口地续的两个端口地址的字节量传送址的字节量传送2.直接寻址,字节量输入直接寻址,字节量输入
4、 in ax,20h3.间接寻址,字量输入间接寻址,字量输入 mov dx,20h in ax,dx5例:例: OUT 68H,AX ;(69H,68H)(AX) OUT DX,AL ;(DX)(AL)在使用间接寻址的在使用间接寻址的IN/OUT指令时,要事先用传送指令时,要事先用传送指令把指令把I/O端口号设置到端口号设置到DX寄存器:寄存器: MOV DX,220H IN AL,DX ;将将220H端口内容读入端口内容读入AL(2) (2) 输出指令输出指令OUTOUT格式格式:OUT port , acc OUT DX , acc63. 地址传送指令用途:用于传送操作数的地址用途:用于传
5、送操作数的地址 而不是获取存储器单元的内容而不是获取存储器单元的内容l装入有效地址指令(装入有效地址指令(Load Effective AddressLoad Effective Address)格式:格式:LEA reg,mem ; ; 将指定内存单元的偏移地址将指定内存单元的偏移地址 送到指定寄存器送到指定寄存器要求:要求: 1) 1) 源操作数源操作数必须是一个必须是一个存储器操作数存储器操作数; 2) 2) 目的操作数必须是一个目的操作数必须是一个1616位的通用寄存器。位的通用寄存器。7例:例:LEA BX,SI+10H设:(设:(SI)=1000H则执行该指令后,(则执行该指令后,
6、(BX)=1010H例:例:LEA BX,SI则执行该指令后,(则执行该指令后,(BX)=1000H例:例:LEA BX,10H则执行该指令后,(则执行该指令后,(BX)=10H8 LEA BX,BUFFER MOV BX,BUFFER注意二条指令差别:注意二条指令差别:前者表示将符号地址为前者表示将符号地址为BUFFERBUFFER的存储单元的偏的存储单元的偏移地址取到移地址取到 BXBX中中; ;后者表示将后者表示将BUFFERBUFFER存储单元中的内容取存储单元中的内容取到到 BXBX中中. .9下面两条指令等效:下面两条指令等效: LEA BX,BUFFER MOV BX, OFFS
7、ET BUFFER 其中其中OFFSET BUFFEROFFSET BUFFER表示存储器单元表示存储器单元BUFFERBUFFER的偏移地址。的偏移地址。 二者都可用于取存储器单元的偏移地址,二者都可用于取存储器单元的偏移地址,但但LEALEA指令可以取动态的地址,指令可以取动态的地址,OFFSETOFFSET只能只能取静态的地址。取静态的地址。10l装入数据段寄存器指令装入数据段寄存器指令(Load Data Segment Register)格式:格式:LDS dst,src功能:将内存中的双字数据(功能:将内存中的双字数据(4个字节)装入个字节)装入通用寄存器通用寄存器dst和和数据段
8、寄存器数据段寄存器DS。 src给出的给出的是有效地址,是有效地址,低字送到低字送到dst ,高字送到高字送到DS。例:设例:设 DS = 1000H,(11500H)= 2345H,(,(11502H)= ABCDH执行执行 LDS SI,1500H后,后,SI=?DS=?数据段数据段45H23HCDHABH11500H11501H11502H11503H解:解:SI = 2345H,DS = ABCDH11l装入附加段寄存器(装入附加段寄存器(Load Extra Segment Register)格式:格式:LES dst,src功能:将内存中的双字数据装入通用寄存器和功能:将内存中的双
9、字数据装入通用寄存器和附附加段寄存器加段寄存器。 src给出的是有效地址,给出的是有效地址,低字送到低字送到dst ,高字送到高字送到ES。12小结:数据传送指令小结:数据传送指令重点掌握:重点掌握:n 通用传送通用传送:MOV,PUSH,POP,XCHGn 目标地址传送目标地址传送: :LEA,LDS,LESn 标志传送标志传送n 输入输出输入输出: :IN,OUT名名 称称举举 例例通用数据传送指令通用数据传送指令MOVMOV AX,BXMOV DX,CX装入有效地址指令装入有效地址指令LEALEA AX,BXLEA AX,1000H交换指令交换指令XCHGXCHG CX,DXXCHG D
10、X,BX堆栈操作指令堆栈操作指令PUSH、POPPUSH CXPOP BX输入输出指令输入输出指令IN、OUTIN AL,80HOUT 68H,AX143.3 算术运算指令1.加法指令2.减法指令3.乘法指令4.除法指令15加法、减法运算操作数加法、减法运算操作数通用寄存器通用寄存器通用寄存器通用寄存器立即数立即数存储器存储器立即数立即数通用寄存器通用寄存器存储器存储器目的操作数目的操作数源操作数源操作数16(1) ADD(1) ADD:不带进位的加法指令:不带进位的加法指令 格式:ADD mem/reg,data ADD mem/reg1, reg2/mem 1.加法指令如:如: ADD A
11、X,3A5FH ;AX + 3A5FH AX ADD AL,BX ;将;将EA=BX的内存单元的的内存单元的 ;内容;内容+ALAL ADD BX,AX ;将;将EA=BX的内存单元的的内存单元的 ;内容;内容+AX 该内存单元该内存单元17 ADDADD指令对指令对6 6个状态标志均产生影响个状态标志均产生影响 例:已知例:已知(BX)=D75FH(BX)=D75FH 指令指令 ADD BX,8046H ADD BX,8046H 执行后,状态标志各是多少?执行后,状态标志各是多少?结果:结果:C=1, Z=0, P=1, A=1, O=1, S=0 源和目的操作数不能同时为存储器操作数源和目
12、的操作数不能同时为存储器操作数立即数不能作为目的操作数立即数不能作为目的操作数 D75FH = 1110 0111 0101 1111D75FH = 1110 0111 0101 1111 8046H = 1000 0000 0100 0110 8046H = 1000 0000 0100 0110 1 1 11 111 1 11 11 0110 0111 1010 0101 0110 0111 1010 010118(2) (2) ADC:带进位位的加法指令带进位位的加法指令 ADCADC指令在形式上和功能上与指令在形式上和功能上与ADDADD类似,只是相类似,只是相加时还要包括进位标志加时
13、还要包括进位标志CFCF的内容,的内容,例如:例如: ADC AL,68H ;AL(AL)+68H+(CF) ADC AX,CX ;AX(AX)+(CX)+(CF) ADC BX,DI ;BX(BX)+DI+1DI +(CF)例例1:设:设AL = 79H,BH = 0B3H,求执行指令,求执行指令ADD AL, BH后,后,AL = ?,BH = ?,各个标志位的值各个标志位的值= ? 。解解: 79H = 0111 1001 B = 121+) B3H = 1011 0011 B = -77 1 0010 1100 B = 44所以,所以,AL = 0010 1100B = 2CH,BH
14、= 0B3HSF = 0, ZF = 0, AF = 0CF = 1, OF = 0, PF = 0例例2:求两个双字数据的和。:求两个双字数据的和。数据数据1在在DX(高字高字)和和AX(低字低字)内,为内,为12345678H;数据数据2在在BX(高字高字)和和CX(低字低字)内,为内,为6789ABCDH。AX = 5 6 7 8 H+) CX = ABCD HAX = 0 2 4 5 H CF = 1解:因为解:因为8088的指令只能进行字的指令只能进行字/字节运算,所以字节运算,所以对于双字运算必须分两步进行。对于双字运算必须分两步进行。第一步,低字和低字相加:第一步,低字和低字相加
15、:ADD AX,CX第二步,高字和高字相加,同时要考虑低字之和的第二步,高字和高字相加,同时要考虑低字之和的进位:进位: ADC DX,BXDX = 1 2 3 4 HBX = 6 7 8 9 H+) CF = 1DX = 7 9 B E H CF= 0所以双字之和是所以双字之和是79BE 0245H22例例: :有两个有两个4 4字节的无符号数相加:字节的无符号数相加:2C56F8AC+309E47BE=2C56F8AC+309E47BE=?ADC指令用于多字节加法运算中 设被加数、加数分别存放在设被加数、加数分别存放在BUFFER1BUFFER1及及BUFFER2BUFFER2开始的两个存
16、储区内,结果放回开始的两个存储区内,结果放回BUFFER1BUFFER1存储区。存储区。 而两个内存单元不能直接相加减,为此需要借而两个内存单元不能直接相加减,为此需要借助助CPUCPU内部寄存器如内部寄存器如AX,AX,作为桥梁。作为桥梁。 又因又因CPUCPU只能进行只能进行8 8位或位或1616位的加法运算,为此位的加法运算,为此可将两数分成低字和高字分别相加。可将两数分成低字和高字分别相加。多字节加法多字节加法示意图示意图56H2CHBEH47HBUFFER1BUFFER2ACHF8H9EH30H被被加加数数加加数数数数据据段段 .BUFFER1+2BUFFER2+2MOV AXMOV
17、 AX,BUFFER2BUFFER2 ADDADD BUFFER1 BUFFER1,AX AX ; ;低字相加低字相加 MOV AXMOV AX,BUFFER2+2BUFFER2+2 ADCADC BUFFER1+2 BUFFER1+2 ,AX AX ; ;高字相加,包括低高字相加,包括低字的进位字的进位24(3) (3) 加加1 1指令指令INCINC(单操作数指令(单操作数指令)格式:格式:INC dstINC dst功能:(功能:(dstdst)+ 1 + 1 (dstdst) 对操作数加对操作数加1,1,再送回到该操作数再送回到该操作数 CFCF不受影响,其他标志位随运算结果变化。不受
18、影响,其他标志位随运算结果变化。 INC AX;AX + 1 AX INC CL ;CL + 1 CL INC BX ;将;将EA=BX的内存单元内容的内存单元内容 ; +1 该内存单元该内存单元25(4 4)压缩的)压缩的BCDBCD码加法调整指令码加法调整指令DAADAA格式:格式:DAA 功能:对功能:对AL中的压缩中的压缩BCD数加法结果调整。数加法结果调整。分两种情况进行。分两种情况进行。 当当AL低低4位位9或或AF=1时,时,AL+06HAL,1AF 当当AL高高4位位9或或CF=1时,时,AL+60HAL,1CF例:已知两个压缩例:已知两个压缩BCDBCD码码AL=38AL=3
19、8和和BL=24BL=24,对其求和。对其求和。显然,执行结果显然,执行结果与实际结果不符与实际结果不符合。合。62BCD = 0101 1100 B (=5CH) 38BCD = 0011 1000 B +) 24BCD = 0010 0100 B第二步第二步 DAA(注意隐含操作,只对(注意隐含操作,只对AL) 0101 1100B (=5CH,则低,则低4位位9)+) 0110B (=06H)0110 0010B (=62H即为即为62BCD)对于压缩对于压缩BCD码,码,在进行加法运算在进行加法运算后,必须紧跟一后,必须紧跟一条调整指令条调整指令DAA。解:第一步解:第一步 ADD A
20、L,BL 27(5 5)非压缩的)非压缩的BCDBCD码加法调整指令码加法调整指令AAAAAA格式:格式:AAA 功能:对功能:对AL中的两个非压缩中的两个非压缩BCD码加法结果进行调码加法结果进行调整,使之成为正确的结果。整,使之成为正确的结果。对于非压缩对于非压缩BCD码,在进行加法运算后,必须紧跟码,在进行加法运算后,必须紧跟一条调整指令一条调整指令AAA。28(1) (1) 不考虑借位的减法指令不考虑借位的减法指令SUBSUB 格式:格式: SUB dst, src 操作:操作: dst(dst)-(src)2. 2. 减法指令减法指令类似ADD指令指令指令例子:指令例子: SUB A
21、L,60H SUB BX+20H,DX SUB AX,CX29SBB指令主要用于多字节的减法。指令主要用于多字节的减法。格式:格式: SBB dst, src操作:操作: dst(dst)-(src)-(CF)(2) (2) 考虑借位的减法指令考虑借位的减法指令SBBSBB类似ADC指令指令指令例子: SBB AX,CX SBB WORD PTRSI,2080H SBB SI , DX30作用类似于作用类似于C语言中的语言中的”操作符。操作符。格式:格式:DEC opr 操作:操作:opr(opr)-1(3) (3) 减减1 1指令指令DECDEC类似INC指令指令指令例子: DEC CL D
22、EC BYTE PTR DI+2 DEC SI 31格式:格式: CMP dst, src操作:操作: (dst)(src)CMP也是执行两个操作数相减也是执行两个操作数相减, ,但结果不送但结果不送目标操作数目标操作数, ,其结果只反映在标志位上。其结果只反映在标志位上。指令例子: CMP AL,0AH CMP CX,SI CMP DI,BX+03比较指令在使用时,一般在其后紧跟一条条件转移指令,判断比较结果的转向。(4) (4) 比较指令比较指令CMPCMP32根据标志位来判断比较的结果根据标志位来判断比较的结果1)1)根据根据ZF判断两个数是否相等。判断两个数是否相等。若若ZF=1,=1
23、,则两数相等。则两数相等。2)2)若两个数不相等若两个数不相等, ,则分两种情况考虑则分两种情况考虑: : 比较的是两个无符号数比较的是两个无符号数 若若CF=0,=0,则则dstdstsrcsrc; ; 若若CF=1,=1,则则dstdstsrcsrc。 比较的是两个有符号数比较的是两个有符号数 若若OF SF=0(=0(相同相同),),则则dstdstsrcsrc; ; 若若OF SF=1(=1(相反相反) ),则则dstdstsrcsrc。33(5)求补指令 NEG NEG AL ;(AL)=03H ;(AL)=03H (AL)=0FDH(AL)=0FDH格式:格式: NEG reg/m
24、em操作:操作: opr 0opr或或将操作数按位取反后末位加将操作数按位取反后末位加134(6)压缩)压缩BCD码减法调整指令码减法调整指令DAS格式:格式:DAS 功能:对功能:对AL中两个压缩的中两个压缩的BCD码相减后的结果进码相减后的结果进行调整。行调整。(7)非压缩)非压缩BCD码减法调整指令码减法调整指令AAS格式:格式:AAS 功能:对功能:对AL中两个非压缩中两个非压缩BCD码相减的结果进码相减的结果进行调整。行调整。35小结:小结:算术运算指令l比较指令比较指令 CMPl加加/ /减减1 1指令指令INC,DECl不带进位的加不带进位的加/ /减法指令减法指令 ADD,SU
25、Bl带进位的加带进位的加/ /减法指令减法指令 ADC,SBB名名 称称举举 例例加法指令加法指令ADDADD AL,BX带进位加法指令带进位加法指令ADCADC AX,BX加加1指令指令INCINC CL减法指令减法指令SUBSUB AX,BX带借位的减法指令带借位的减法指令SBBSBB AX,CX减减1指令指令DECDEC CX比较指令比较指令CMPCMP AX,BX例例1、根据以下要求,写出指令。、根据以下要求,写出指令。 把把BX寄存器的内容和寄存器的内容和DX寄存器的内容相加,寄存器的内容相加,结果存入结果存入BX寄存器中。寄存器中。答:答:ADD BX,DX 用寄存器用寄存器BX和
26、和SI的基址变址寻址方式把存储的基址变址寻址方式把存储器中一个字节与器中一个字节与AL寄存器的内容相加,并把结寄存器的内容相加,并把结果送回到果送回到AL中。中。答:答:ADD AL,BX+SI答:答:ADD BX + 0B2H,CX 用寄存器用寄存器BX和位移量和位移量0B2H的寄存器相对寻址的寄存器相对寻址方式,把存储器中的一个字和方式,把存储器中的一个字和CX相加,并把结果相加,并把结果送回到存储器中。送回到存储器中。MOV AX,Y ;将;将EA=Y的内存字数据送的内存字数据送AX例例2、写出执行、写出执行Z Y + (ZX)计算的指令序列。其计算的指令序列。其中中X、Y、Z均为存放均
27、为存放16位带符号数单元的地址。位带符号数单元的地址。ADD Z,AX ;求得结果;求得结果 解:解: MOV AX,X ;将;将EA=X的内存字数据送入的内存字数据送入AXSUB Z,AX ;将;将EA=Z的内存字数据减的内存字数据减AX后后 ;再送回该内存;再送回该内存例例3、x、y、z均为均为32位数,分别存放在地址为位数,分别存放在地址为X, X+2;Y,Y+2;Z,Z+2的存储单元中,用指令序列实现的存储单元中,用指令序列实现wxy24z,结果放在,结果放在W, W+2单元中。单元中。 MOV AX, X MOV DX, X+2 ADD AX, Y ADC DX, Y+2 ; x+y
28、 ADD AX, 24 ADC DX, 0 ; x+y+24 SUB AX, Z SBB DX, Z+2; x+y+24-z MOV W, AX MOV W+2, DX ; 结果存入结果存入W, W+2单元单元40*3、乘法指令(1)无符号数乘法指令)无符号数乘法指令MUL (Unsigned Multiple)格式:格式:MUL src功能:(功能:(src) AL AX (src是字节数据)是字节数据) (src) AX DX,AX (src是字数据)是字数据)如:如:MUL BL ;BLALAX MUL BX ;BXAXDX,AX MUL BYTE PTRSI;将;将EA=SI的内存单元
29、的的内存单元的 ;内容;内容ALAX(2)带符号数乘法指令)带符号数乘法指令IMUL (Signed Multiple)格式:格式:IMUL src功能:当参加运算的数据是带符号数时,用此命功能:当参加运算的数据是带符号数时,用此命令,所有功能与令,所有功能与MUL相同。相同。(3)非压缩)非压缩BCD码乘法调整指令码乘法调整指令格式:格式:AAM 功能:对功能:对AX内两个非压缩内两个非压缩BCD码相乘结果进行调整。码相乘结果进行调整。42*4、除法指令(1)无符号数除法指令)无符号数除法指令DIV (Unsigned Divide)格式:格式:IDIV src功能:两个带符号数相除:功能:
30、两个带符号数相除: src是字节是字节 AX/(src) AL(商商),AH(余数余数) src是字是字 DX,AX/(src) AX(商商),DX(余数余数)格式:格式:DIV src功能:两个无符号数相除:功能:两个无符号数相除: src是字节是字节 AX/(src) AL(商商),AH(余数余数) src是字是字 DX,AX/(src) AX(商商),DX(余数余数)(2)带符号数除法指令)带符号数除法指令IDIV (Signed Divide)43格式:格式:AAD 功能:对功能:对AX中非压缩中非压缩BCD码的被除数进行调整,码的被除数进行调整,保证结果正确。(在除法指令保证结果正确。(在除法指令DIV前)。前)。(3)非压缩BCD码除法调整指令AAD