收藏 分享(赏)

3.3 算术运算指令59034.ppt

上传人:dreamzhangning 文档编号:3257178 上传时间:2018-10-09 格式:PPT 页数:44 大小:257KB
下载 相关 举报
3.3 算术运算指令59034.ppt_第1页
第1页 / 共44页
3.3 算术运算指令59034.ppt_第2页
第2页 / 共44页
3.3 算术运算指令59034.ppt_第3页
第3页 / 共44页
3.3 算术运算指令59034.ppt_第4页
第4页 / 共44页
3.3 算术运算指令59034.ppt_第5页
第5页 / 共44页
点击查看更多>>
资源描述

1、1,练习:指出寻址方式, MOV SI, C MOV SI+3, AX XCHG BXSI, AL ADD CX, ES:10H MOV DL, BP+DI,2,2. 输入输出(I/O)指令,8086通过I/O指令与外设交换数据;呈现给程序员的外设是端口(Port)即I/O地址 8086用于寻址外设端口的地址线为16条,端口最多为21665536(64K)个,端口号为0000HFFFFH 每个端口用于传送一个字节的外设数据 只限于用累加器AL或AX来传送信息。功能: (累加器)I/O端口,3,输入输出寻址方式,8086的端口有64K个,无需分段,设计有两种寻址方式 直接寻址:只用于寻址00HF

2、FH前256个端口,操作数i8表示端口号 间接寻址:可用于寻址全部64K个端口,DX寄存器的值就是端口号 对大于FFH的端口只能采用间接寻址方式,4,(1)输入指令IN格式:IN acc,PORT ;PORT端口号0255HIN acc,DX ;DX表示的端口范围达64K,例: IN AL,80H ;(AL)(80H端口)IN AL,DX ;(AL)(DX),5,例:输入字量,1.直接寻址,字节量输入in al,21hmov ah,alin al,20h,功能相同字量数据传送实际上实现了连续的两个端口地址的字节量传送,2.直接寻址,字量输入in ax,20h,3.间接寻址,字量输入mov dx

3、,20hin ax,dx,6,例: OUT 68H,AX ;(69H,68H)(AX)OUT DX,AL ;(DX)(AL) 在使用间接寻址的IN/OUT指令时,要事先用传送指令把I/O端口号设置到DX寄存器:MOV DX,220HIN AL,DX ;将220H端口内容读入AL,(2) 输出指令OUT 格式: OUT port , acc OUT DX , acc,7,3. 地址传送指令用途:用于传送操作数的地址而不是获取存储器单元的内容 装入有效地址指令(Load Effective Address) 格式:LEA reg,mem ; 将指定内存单元的偏移地址送到指定寄存器 要求:1) 源操

4、作数必须是一个存储器操作数;2) 目的操作数必须是一个16位的通用寄存器。,8,例:LEA BX,SI+10H 设:(SI)=1000H 则执行该指令后,(BX)=1010H,例:LEA BX,SI 则执行该指令后,(BX)=1000H,例:LEA BX,10H 则执行该指令后,(BX)=10H,9,LEA BX,BUFFER MOV BX,BUFFER,注意二条指令差别:,前者表示将符号地址为BUFFER的存储单元的偏移地址取到 BX中;后者表示将BUFFER存储单元中的内容取到 BX中.,10,下面两条指令等效:LEA BX,BUFFERMOV BX, OFFSET BUFFER,其中OF

5、FSET BUFFER表示存储器单元BUFFER的偏移地址。 二者都可用于取存储器单元的偏移地址,但LEA指令可以取动态的地址,OFFSET只能取静态的地址。,11,装入数据段寄存器指令(Load Data Segment Register),格式:LDS dst,src 功能:将内存中的双字数据(4个字节)装入通用寄存器dst和数据段寄存器DS。 src给出的是有效地址,低字送到dst ,高字送到DS。,例:设 DS = 1000H, (11500H)= 2345H,(11502H)= ABCDH 执行 LDS SI,1500H后,SI=?DS=?,解:SI = 2345H,DS = ABC

6、DH,12,装入附加段寄存器(Load Extra Segment Register),格式:LES dst,src 功能:将内存中的双字数据装入通用寄存器和附加段寄存器。 src给出的是有效地址,低字送到dst ,高字送到ES。,13,小结:数据传送指令,重点掌握:通用传送:MOV,PUSH,POP,XCHG目标地址传送:LEA标志传送输入输出:IN,OUT,15,3.3 算术运算指令,1.加法指令 2.减法指令 3.乘法指令 4.除法指令,16,加法、减法运算操作数,17,(1) ADD:不带进位的加法指令格式:ADD mem/reg,dataADD mem/reg1, reg2/mem,

7、1.加法指令,如: ADD AX,3A5FH ;AX + 3A5FH AX, ADD AL,BX ;将EA=BX的内存单元的;内容+ALAL, ADD BX,AX ;将EA=BX的内存单元的 ;内容+AX 该内存单元,18,ADD指令对6个状态标志均产生影响例:已知(BX)=D75FH指令 ADD BX,8046H 执行后,状态标志各是多少?,结果:C=1, Z=0, P=1, A=1, O=1, S=0,源和目的操作数不能同时为存储器操作数 立即数不能作为目的操作数,19,(2) ADC:带进位位的加法指令,ADC指令在形式上和功能上与ADD类似,只是相加时还要包括进位标志CF的内容,例如:

8、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,+) B3H = 1011 0011 B,1 0010 1100 B,所以,AL = 0010 1100B = 2CH,BH = 0B3H,SF = 0, ZF = 0, AF = 0,CF = 1, OF = 0, PF = 0,= 121,=

9、-77,= 44,例2:求两个双字数据的和。 数据1在DX(高字)和AX(低字)内,为12345678H; 数据2在BX(高字)和CX(低字)内,为6789ABCDH。,AX = 5 6 7 8 H,+) CX = ABCD H,AX = 0 2 4 5 H,CF = 1,解:因为8088的指令只能进行字/字节运算,所以对于双字运算必须分两步进行。,第一步,低字和低字相加:ADD AX,CX,第二步,高字和高字相加,同时要考虑低字之和的进位: ADC DX,BX,DX = 1 2 3 4 H,BX = 6 7 8 9 H,DX = 7 9 B E H,CF= 0,所以双字之和是79BE 024

10、5H,23,例:有两个4字节的无符号数相加: 2C56F8AC+309E47BE=?,ADC指令用于多字节加法运算中,设被加数、加数分别存放在BUFFER1及BUFFER2开始的两个存储区内,结果放回BUFFER1存储区。而两个内存单元不能直接相加减,为此需要借助CPU内部寄存器如AX,作为桥梁。又因CPU只能进行8位或16位的加法运算,为此可将两数分成低字和高字分别相加。,多字节加法示意图,CLC MOV AX,BUFFER2 ADC BUFFER1,AX MOV AX,BUFFER2+2 ADC BUFFER1+2 ,AX,MOV AX,BUFFER2ADD BUFFER1,AX ;低字相

11、加MOV AX,BUFFER2+2ADC BUFFER1+2 ,AX ;高字相加,包括低字的进位,25,(3) 加1指令INC(单操作数指令),格式:INC dst 功能:(dst)+ 1 (dst)CF不受影响,其他标志位随运算结果变化。, INC AX ;AX + 1 AX, INC CL ;CL + 1 CL, INC BX ;将EA=BX的内存单元内容; +1 该内存单元,26,(4)压缩的BCD码加法调整指令DAA,格式:DAA (Decimal Adjust for Addition) 功能:对AL中的压缩BCD数加法结果调整。,分两种情况进行。 当AL低4位9或AF=1时,AL+

12、06HAL,1AF 当AL高4位9或CF=1时,AL+60HAL,1CF,例:已知两个压缩BCD码AL=38和BL=24,对其求和。,显然,执行结果与实际结果不符合。,第二步 DAA(注意隐含操作,只对AL),对于压缩BCD码,在进行加法运算后,必须紧跟一条调整指令DAA。,解:第一步 ADD AL,BL,28,(5)非压缩的BCD码加法调整指令AAA,格式:AAA (ASCII Adjust for Addition) 功能:对AL中的两个非压缩BCD码加法结果进行调整,使之成为正确的结果。对于非压缩BCD码,在进行加法运算后,必须紧跟 一条调整指令AAA。,29,(1) 不考虑借位的减法指

13、令SUB格式: SUB dst, src操作: dst(dst)-(src),2. 减法指令,类似ADD指令,指令例子: SUB AL,60HSUB BX+20H,DXSUB AX,CX,30,SBB指令主要用于多字节的减法。 格式: SBB dst, src 操作: dst(dst)-(src)-(CF),(2) 考虑借位的减法指令SBB,类似ADC指令,指令例子:SBB AX,CXSBB WORD PTRSI,2080HSBB SI , DX,31,作用类似于C语言中的”操作符。 格式:DEC opr 操作:opr(opr)-1,(3) 减1指令DEC,类似INC指令,指令例子:DEC C

14、LDEC BYTE PTR DI+2 DEC SI,32,格式: CMP dst, src 操作: (dst)(src)CMP也是执行两个操作数相减,但结果不送目标操作数,其结果只反映在标志位上。指令例子: CMP AL,0AHCMP CX,SICMP DI,BX+03比较指令在使用时,一般在其后紧跟一条条件转移指令,判断比较结果的转向。,(4) 比较指令CMP,33,根据标志位来判断比较的结果,1)根据ZF判断两个数是否相等。若ZF=1,则两数相等。 2)若两个数不相等,则分两种情况考虑:比较的是两个无符号数若CF=0,则dstsrc;若CF=1,则dstsrc。比较的是两个有符号数若OFS

15、F=0,则dstsrc; 若OFSF=1,则dstsrc。,34,(5)求补指令 NEG,CMP AX,0JGE EXIT ;(AX) 0,转EXITNEG AX ;(AX)0, 则求(AX)+1AX,求|负数|对应正数 EXIT: ;程序功能:|(AX)|,格式: NEG reg/mem 操作: 0opr或将操作数按位取反后末位加1,35,(6)压缩BCD码减法调整指令DAS,格式:DAS (Decimal Adjust for Subtraction) 功能:对AL中两个压缩的BCD码相减后的结果进行调整。,(7)非压缩BCD码减法调整指令AAS,格式:AAS (ASCII Adjust

16、for Subtraction) 功能:对AL中两个非压缩BCD码相减的结果进行调整。,36,小结:算术运算指令,比较指令 CMP 加/减1指令 INC,DEC 不带进位的加/减法指令 ADD,SUB 带进位的加/减法指令 ADC,SBB,例1、根据以下要求,写出指令。 把BX寄存器的内容和DX寄存器的内容相加,结果存入BX寄存器中。,答:ADD BX,DX, 用寄存器BX和SI的基址变址寻址方式把存储器中一个字节与AL寄存器的内容相加,并把结果送回到AL中。,答:ADD AL,BX+SI,答:ADD BX + 0B2H,CX, 用寄存器BX和位移量0B2H的寄存器相对寻址方式,把存储器中的一

17、个字和CX相加,并把结果送回到存储器中。,MOV AX,Y ;将EA=Y的内存字数据送AX,例2、写出执行Z Y + (ZX)计算的指令序列。其中X、Y、Z均为存放16位带符号数单元的地址。,ADD Z,AX ;求得结果,解: MOV AX,X ;将EA=X的内存字数据送入AX,SUB 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, XMOV DX, X+2ADD AX, YADC DX, Y+2 ; x+yADD

18、AX, 24ADC DX, 0 ; x+y+24SUB AX, ZSBB DX, Z+2 ; x+y+24-zMOV W, AXMOV W+2, DX ; 结果存入W, W+2单元,41,*3、乘法指令,(1)无符号数乘法指令MUL (Unsigned Multiple),格式:MUL src 功能:(src) AL AX (src是字节数据)(src) AX DX,AX (src是字数据),如:MUL BL ;BLALAXMUL BX ;BXAXDX,AXMUL BYTE PTRSI ;将EA=SI的内存单元的;内容ALAX,(2)带符号数乘法指令IMUL (Signed Multiple)

19、,格式:IMUL src 功能:当参加运算的数据是带符号数时,用此命令,所有功能与MUL相同。,(3)非压缩BCD码乘法调整指令,格式:AAM (ASCII Adjust for Multiplication) 功能:对AX内两个非压缩BCD码相乘结果进行调整。,43,*4、除法指令,(1)无符号数除法指令DIV (Unsigned Divide),格式:IDIV src 功能:两个带符号数相除: 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),44,格式:AAD (ASCII Adjust for Division) 功能:对AX中非压缩BCD码的被除数进行调整,保证结果正确。(在除法指令DIV前)。,(3)非压缩BCD码除法调整指令AAD,

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

当前位置:首页 > 实用文档 > 往来文书

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报