第3章8086的寻址方式和指令系统(3)剖析

上传人:今*** 文档编号:107861395 上传时间:2019-10-21 格式:PPT 页数:52 大小:896KB
返回 下载 相关 举报
第3章8086的寻址方式和指令系统(3)剖析_第1页
第1页 / 共52页
第3章8086的寻址方式和指令系统(3)剖析_第2页
第2页 / 共52页
第3章8086的寻址方式和指令系统(3)剖析_第3页
第3页 / 共52页
第3章8086的寻址方式和指令系统(3)剖析_第4页
第4页 / 共52页
第3章8086的寻址方式和指令系统(3)剖析_第5页
第5页 / 共52页
点击查看更多>>
资源描述

《第3章8086的寻址方式和指令系统(3)剖析》由会员分享,可在线阅读,更多相关《第3章8086的寻址方式和指令系统(3)剖析(52页珍藏版)》请在金锄头文库上搜索。

1、第三章 8086的寻址方式 和指令系统(3),3.4.2 算术运算指令(Arithmetic),8086提供的算术运算指令可分为以下几类: 1、加法指令:ADD ADC INC 2、减法指令:SUB SBB DEC 3、乘法指令:MUL IMUL 4、除法指令:DIV IDIV 5、变补指令、比较指令:NEG CMP 6、十进制调整指令:DAA DAS AAA AAS AAM AAD 7、符号扩展指令:CBW CBD,特点: 大部分都影响标志位,不同指令影响不同: (1) 加、减法指令影响 SF,ZF,AF,PF,CF,OF; (2) 加1和减1指令不影响CF; (3) 乘法指令影响CF,OF

2、; (4) 除法指令使大部分标志位的状态不确定; (5) 对BCD码调整指令对标志位的影响不同; (6) 转换指令对标志位无影响 都可以用于字节、字的运算; 双操作数指令除源操作数为立即数外,其余必须有一个操作数为寄存器;单操作数指令不能为立即数。,指令格式:ADD dst ,src ;(dst) (dst)+(src) 指令功能:两个操作数相加,结果送至目的操作数dst src :立即数,寄存器,存储器。 dst:寄存器,存储器。 注:不能两个操作数都是存储器数,且寄存器不能为段寄存器。 例: ADD CL,10H ;寄存器+立即数 ADD DX,SI ;寄存器+寄存器 ADD AX, ME

3、M ;寄存器+存储器 ADD BX+DATA, AL ;存储器+寄存器 ADD DI+DATA,30H ;存储器+立即数,1、ADD 不带进位的加法指令,一、加法指令,指令格式:ADC dst,src ;(dst)(dst)+(src)+CF CF: 进位标志CF的现行值(上条指令CF值) 指令功能:两个操作数相加再加上进位标志CF,结果送至目的操作数dst 用途:主要用于多字节运算中。 例: ADC CX, 300 ;寄存器+立即数+CF ADC AL, BL ;寄存器+寄存器+CF ADC DX, SI+COUNT ;寄存器+存储器CF ADC DI+1234H, BX ;存储器+寄存器+

4、CF ADC MEM, 1234H ;存储器+立即数+CF,2、ADC(Add With Carry) 带进位加法指令,MOV SI, 2000H ;第一个数的首址 MOV DI,3000H ;第二个数的首址 MOV AX,SI ;第一个数的低16位取到AX ADD AX,DI ;两个数的低16位相加 MOV SI,AX ;低16位相加的结果送到2000H字单元 MOV AX,SI+2 ;取第一个数的高16位到AX中 ADC AX,DI+2 ;两个高16位数相加,再加CF MOV SI+2,AX ;高16位的结果送到2002H和2003H单元,例:将两个四字节的无符号数相加,两个数分别放在20

5、00H、3000H开始的单元,要求结果放在2000H开始的单元,指令格式: INC dst ;(B/W), (dst)(dst)+1 dst : 寄存器、存储器。不能是段寄存器。 指令功能:对指定的目标操作数+1 。 用途:用于在循环程序中修改地址指针和循环次数。 标志位影响情况:影响SF,ZF,AF,PF,OF,不影响CF。,3、INC (Increment by 1 ) 加1指令,例: INC DL ; 8位寄存器1 INC SI ;16位寄存器1 INC BYTE PTR BXSI ;存储器1(字节操作) INC WORD PTR DI ;存储器1(字操作) INC DS ; 错,例:

6、MOV AL,7EH ;(AL)=7EH MOV BL, 5BH ;(BL)=5BH ADD AL,BL ;(AL)=7EH+5BH=D9H 影响标志位的情况: SF=1 , 结果最高位1 ZF=0 ,结果不等于0 AF=1 ,D3 位向D4 有进位 PF=0 ,”1”的个数为奇数 CF=0 ,无进位 OF=1 ,和超过127,指令格式:SUB dst,src ;(dst)(dst)-(src) Src:立即数,寄存器,存储器。 dst:寄存器,存储器。 例: SUB AL,37H ;寄存器-立即数 SUB BX,DX ;寄存器-寄存器 SUB CX, VAR1 ;寄存器-存储器 SUB SI

7、, AX ;存储器-寄存器 SUB DI,0512H ;存储器减立即数 这种指令影响标志位: AF、CF、OF、PF、SF、ZF标志。 CF=1,无符号数小减大,运算结果溢出; OF=1,带符号数运算溢出。,1、SUB 减法指令,二、减法指令,指令格式:SBB dst,src ;(dst)(dst)-(src)-CF CF: 借位标志CF的现行值(上条指令CF值) Src:立即数,寄存器,存储器; dst:寄存器,存储器。 指令影响标志位、B/W数运算情况同SUB。 用途:用于多字节数相减。 例: SBB BX,100H ;寄存器-立即数 -CF SBB CX,DX ;寄存器-寄存器-CF S

8、BB AL, DATA1SI ;寄存器-存储器-CF SBB DISPBP, BL ;存储器-寄存器-CF SBB BYTE DISPSI+6, 96H;存储器-立即数-CF,2、SBB 带借位减法指令,指令格式: DEC dst ;(B/W) (dst)(dst)-1 dst : 寄存器、存储器。不能是段寄存器。 指令功能:对指定的目标操作数-1 操作数单元。 用途:用于在循环程序中修改地址指针和循环次数。 标志位影响情况:影响SF,ZF,AF,PF,OF。 不影响CF。,3、DEC 减1指令,指令格式: NEG dst ;B/W, (dst) 0 - (dst) dst : 寄存器、存储器

9、。 指令功能:对操作数取补码。即相当于用0减去目的操作数,并将结果再送回目的操作数。可利用NEG指令得到补码表示的负数的绝对值。 操作: 把操作数按位求反后末位+1。 影响标志:AF、CF、OF、PF、SF、ZF。,1、NEG (Negate) 求补指令,三、取补指令NEG、比较指令CMP,指令格式:CMP dst,src ; B/W (dst)-(src) src:立即数,寄存器,存储器。 dst:寄存器,存储器。 指令功能:将dst减src,执行完后dst、src保持不变,结果不送回,只置标志。 影响标志: AF、CF、OF、PF、SF、ZF 。 例: CMP AL,0AH ;寄存器与立即

10、数比较 CMP CX, DI ;寄存器与寄存器比较 CMP AX, AREA1 ;寄存器与存储器比较 CMP BX+1234H, SI ;存储器与寄存器比较 CMP DI, 10H ;存储器与立即数比较,2、CMP(Compare) 比较指令,用途: 用比较指令来比较两个数之间的关系: 两者是否相等,两个数中哪个大。 (1) 根据ZF标志,判断两者是否相等; (2) 根据CF标志, 判断两个无符号数的大小; (3) 用SF、OF标志,判断二个带符号数的大小。,根据相应标志,可判断两数的大小 例: CMP AX, BX ZF=1, (AX) = (BX),两者相等 ZF=0, (AX) (BX)

11、,两者不相等 无符号数比较: CF=0 ,(AX) (BX); CF=1, (AX) (BX) 带符号数比较: OFSF=0 ,(AX) (BX); OFSF=1, (AX) (BX),四、乘法指令(Multiplication),可对字节、字进行操作;两个8位数相乘,结果为16位数; 两个16位数相乘,结果为32位数; 可对无符号整数或有符号整数进行操作;对应有两条乘法指令。,指令格式: MUL src 指令功能:如果src是字节操作数,则AL的内容与src相乘 16位结果送到AX中。 如果src是字操作数,则AX的内容与src相乘32位 结果送到DX和AX中,DX中是高16位,AX中是低1

12、6位。,如果乘积结果的高半部分(字节相乘时为AH,字相乘时 为DX)不等于零,则标志CF=1,OF=1;否则CF=0, OF=0,对其它标志,该指令无定义,1、MUL(Multiply) 无符号数乘法指令,例: 假设(AL)=B4H,(BL)=11H,求执行MUL BL的乘积值,无符号数: (AL)=B4H=190D (BL)=11H=17D,190D 17D,3060D,3060D=0BF4H,执行 MUL BL 后 (AX)=0BF4H AH0 CF=OF=1,2、IMUL(Integer Multiply) 有符号数乘法指令 指令格式:IMUL src ; 指令功能:执行的操作同MUL,

13、只是处理的数据是带符号的。,B4H=10110100B 取补码=-4CH = - 76D,-1292D= -10100001100B =FAF4H(补码),同上例,求执行IMUL BL 的乘积值,五、除法指令(Division),除法与乘法指令一样 可对字节、字进行操作;但字节除法是用16位数除以8位数,字除法是用32位数除以16位数。 可对无符号整数或有符号整数进行操作;对应有两条除法指令。,指令格式: DIV src 指令功能:如果src是字节操作数,则AX的内容除以src 8位的商送到AL中,8位余数送到AH中; 如果src是字操作数,则DX中(高16位)和AX中 (低16位)的内容除以

14、src ,16位的商送到AX中, 16位的余数送到DX中。,除法指令对标志位的影响无定义,注意:如果除数为0,或者8位数除时商超过8位,或者 16位除时商超过16位,则认为是溢出,处理器 会产生中断。,1、DIV(Division) 无符号数除法指令,2、IDIV (Integer Division) 有符号数除法指令 指令格式:IDIV src ; 指令功能:执行的操作同DIV ,只是处理的数据是带符号的,商和余数均为有符号数,余数符号同被除数符号。,为了适应人们使用十进制数的习惯,8086指令系统专门提供了一组相应的十进制调整指令:DAA、DAS、AAA、AAS、AAM和AAD。 BCD码

15、总是作为无符号数看待的。 BCD码有两种形式:压缩BCD码和非压缩BCD码。,压缩BCD码就是通常的8421码;它用4个二进制位表示一个十进制位,一个字节可以表示两个十进制位,即0099,非压缩BCD码用8个二进制位表示一个十进制位,只用低4个二进制位表示一个十进制位09,高4位任意,通常默认为0,六、十进制调整指令(BCD码调整指令),1、压缩BCD码调整指令 DAA (decimal adjust for addition)加法的十进制调整指令 指令格式:DAA 指令功能:该指令之前必须先执行ADD或ADC指令,加法指令将两个压缩的BCD码相加,并将结果存放在AL寄存器中,而后DAA将AL中的和调整到压缩的BCD格式。 方法:检测CPU中AL的高4位、低4位是否为有效的BCD码。 若AF=1 or (AL)低4位9,则(AL)加06H,且自动置AF=1; 若CF=1 or (AL)高4位9,则(AL)加60H,且自动置CF=1。 若(AL)高低4位均9,则(AL)加66H,且置AF=1,CF=1.,例:计算1+8的值 0 0 0 1 + 1 0 0 0 1 0 0 1,1+8=9正确,例:计算5+7的值 0 1 0 1 + 0 1 1 1 1 1

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号