《指令系统传送算术运算指令.ppt》由会员分享,可在线阅读,更多相关《指令系统传送算术运算指令.ppt(117页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第 3 章80868086的指令系统的指令系统1第 3 章教学重点第3章是本课程的一个关键内容,是程序设计的基础基础是熟悉寄存器组难点是各种寻址方式重点是掌握8086常用指令的功能及应用2第 3 章什么是指令系统计算机的指令系统就是指该计算机能够执行的全部指令的集合每种计算机都有它支持的指令集合 16位8086指令系统是INTEL 80X86系列微处理器指令系统的基础3第 3 章学习指令的注意事项指令的功能指令的功能该指令能够实现何种操作。通常指令助记符就是指令功能的英文单词或其缩写形式指令支持的寻址方式指令支持的寻址方式该指令中的操作数可以采用何种寻址方式指令对标志的影响指令对标志的影响该指
2、令执行后是否对各个标志位有影响,以及如何影响其他方面其他方面该指令其他需要特别注意的地方,如指令执行时的约定设置、必须预置的参数、隐含使用的寄存器等4第 3 章汇编语言指令格式由4部分组成:标号标号:指令助记符指令助记符 目的操作数目的操作数,源操作数源操作数;注释;注释 标号表示该指令在主存中的逻辑地址标号表示该指令在主存中的逻辑地址 每个指令助记符就代表一种指令每个指令助记符就代表一种指令 目的和源操作数表示参与操作的对象目的和源操作数表示参与操作的对象 注释是对该指令或程序段功能的说明注释是对该指令或程序段功能的说明5第 3 章指令操作数的表达(1)r8任意一个8位通用寄存器AH AL
3、BH BL CH CL DH DLr16任意一个16位通用寄存器AX BX CX DX SI DI BP SPreg代表R8或r16Sreg段寄存器 CS/DS/ES/SS6第 3 章指令操作数的表达(2)m8一个8位存储器操作数单元(所有主存寻址方式)m16一个16位存储器操作数单元(所有主存寻址方式)mem代表m8或m167第 3 章指令操作数的表达(3)i8一个8位立即数i16一个16位立即数imm代表i8或i16dest目的操作数src源操作数8第 3 章8086指令系统概述INTEL 8086指令系统共有117条基本指令,可分成7个功能组 数据传送(DATA TRANSFER)类指令
4、 算术运算(ARITHMETIC)类指令 位操作类指令 串操作(STRINCG MANIPULATION)类指令 控制转移(CONTROL TRANSFER)类指令 处理器控制(PROCESSOR CONTROL)类指令 逻辑运算指令9第 3 章教学提示 全面而准确地理解每条指令的功能和应用,是编写汇编语言程序的关键10第 3 章1.数据传送类指令数据传送是计算机中最基本、最重要的一种操作传送指令也是最常使用的一类指令传送指令把数据从一个位置传送到另一个位置除标志寄存器传送指令外,均不影响标志位重点掌握MOV XCHG XLAT PUSH POP LEA11第 3 章3.1 通用数据传送指令提
5、供方便灵活的通用传送操作有3条指令MOVXCHGXLATMOVMOVXCHGXCHGXLATXLAT12第 3 章1.传送指令MOV(move)把一个字节或字的操作数从源地址传送至目的地址MOV reg/mem,immMOV reg/mem,imm;立即数送寄存器或主存立即数送寄存器或主存MOVMOVMOV reg/mem/Sreg,regMOV reg/mem/Sreg,reg;寄存器送(段)寄存器或主存寄存器送(段)寄存器或主存MOV reg/Sreg,memMOV reg/Sreg,mem;主存送(段)寄存器主存送(段)寄存器MOV Reg/mem,SregMOV Reg/mem,Sre
6、g;段寄存器送寄存器或主存段寄存器送寄存器或主存13例例1:立即数传送:立即数传送MOV AL,4;AL4,字节传送MOV CX,0FFH;CX00FFH,字传送MOV SI,200H;SI0200H,字传送MOV BYTE PTR SI,0AH;BYTE PTR 说明是字节操作MOV WORD PTR SI+2,0BH;WORD PTR 说明是字操作 注意立即数是字节量还是字量注意立即数是字节量还是字量 明确指令是字节操作还是字操作明确指令是字节操作还是字操作MOVMOV14例例2:寄存器传送:寄存器传送MOV AX,BX;AXBX,字传送MOV AH,AL;AHAL,字节传送MOV DS,
7、AX;DSAX,字传送MOV SI,AL;SIAL,字节传送MOVMOV15例例3:存储器传送:存储器传送MOV AL,BXMOV DX,BP;DXSS:BPMOV ES,SI;ESDS:SI 不存在存储器向存储器的传送指令不存在存储器向存储器的传送指令MOVMOV16例例2.5:段寄存器传送:段寄存器传送MOV SI,DSMOV AX,ES;AXESMOV DS,AX;DSAXES 对段寄存器的操作有一些限制对段寄存器的操作有一些限制MOVMOV17第 3 章MOV指令传送功能MOV也并非任意传送立即数立即数段寄存器段寄存器DS ES SSDS ES SS通用寄存器通用寄存器AX BX CX
8、 DXAX BX CX DXBP SP SI DIBP SP SI DI存存储储器器(1)IP和和CS不能出现不能出现(2)存储器之间不能传送)存储器之间不能传送(3)段寄存器之间不能传送)段寄存器之间不能传送(4)立即数和段寄存器之间)立即数和段寄存器之间 不能传送不能传送3、MOV的的“4不能不能”18第 3 章非法传送种种两个操作数的类型不一致例如源操作数是字节,而目的操作数是字;或相反两个操作数不能都是存储器传送指令很灵活,但主存之间的直接传送却不允许段寄存器的操作有一些限制段寄存器属专用寄存器,对他们的操作能力有限示例示例示例示例示例示例示例示例示例示例示例示例19第 3 章两个操作
9、数的类型要一致绝大多数双操作数指令,除非特别说明,目的操作数与源操作数必须类型一致,否则为非法指令MOV AL,050AH;非法指令:050AH为字,而AL为字节寄存器有明确的字节或字类型,有寄存器参与的指令其操作数类型就是寄存器的类型对于存储器单元与立即数同时作为操作数的情况,必须显式指明;ByTE PTR指示字节类型,WORD PTR指示字类型20第 3 章两个操作数不能都是存储器8086指令系统不允许两个操作数都是存储单元(除串操作指令),要实现这种传送,可通过寄存器间接实现MOV AX,BUFFER1;AXBUFFER1(将BUFFER1内容送AX)MOV BUFFER2,AX;BUF
10、FER2AX;这里BUFFER1和BUFFER2是两个字变量;实际表示直接寻址方式21第 3 章要小心段寄存器的操作不允许立即数传送给段寄存器MOV DS,100H;非法指令:立即数不能传送段寄存器不允许直接改变CS值MOV CS,SI;不允许使用的指令不允许段寄存器之间的直接数据传送MOV DS,ES;非法指令:不允许段寄存器间传送22第 3 章2.交换指令XCHG(EXCHANCGE)把两个地方的数据进行互换寄存器与寄存器之间对换数据寄存器与存储器之间对换数据不能在存储器与存储器之间对换数据XCHGXCHGXCHG reg,reg/memXCHG reg,reg/mem;reg reg r
11、eg/memreg/mem例题例题2例题例题123例例1:寄存器间交换:寄存器间交换MOV AX,1234H;AX=1234HMOV BX,5678H;BX=5678HXCHG AX,BX;AX=5678H,BX=1234HXCHG AH,AL;AX=7856HXCHGXCHG24例例2:寄存器与存储器交换:寄存器与存储器交换XCHG AX,2000H;字交换;等同于 XCHG 2000H,AXXCHG AL,2000H;字节交换;等同于 XCHG 2000H,AL XCHGXCHG25第 3 章执行XLAT时,会执行“(BX)+(AL)=EA”,EA为某一元素的代码存放地址,然后将(EA)放
12、入AL中。该指令对标志位没有影响。3.查表(代码)转换指令XLAT(TRANSLATE)指令的操作数都是隐含的,事先在BX中存放某一内存表格的首地址;在AL中为表中某一元素项与表格首地址之间的偏移量。XLATXLATXLATXLAT;ALDS:BX+ALALDS:BX+AL例题例题3该指令也是累加器专用累加器专用传送指令。26例例3:代码转换:代码转换MOV BX,100HMOV AL,03HXLAT 换换码码指指令令没没有有显显式式的的操操作作数数,但但使使用用了了BX和和AL;因因为为换换码码指指令令使使用用了了隐隐含含寻址方式寻址方式采用默认操作数采用默认操作数XLATXLAT27第 3
13、 章4.地址传送指令地址传送指令将存储器单元的逻辑地址送至指定的寄存器有效地址传送指令 LEA指针传送指令 LDS和LES注意不是获取存储器单元的内容28第 3 章有效地址传送指令LEA(LOAD EA)将存储器操作数的有效地址传送至指定的16位寄存器中例题例题6LEA r16,memLEA r16,mem;r16memr16mem的有效地址的有效地址EAEALEALEA29第 3 章例例6:获取有效地址:获取有效地址MOV BX,0400HMOV SI,3CHLEA BX,BX+SI+0F62H;BX0400H003CH0F62H139EH 获获得得主主存存单单元元的的有有效效地地址址;不不
14、是是物理地址,也不是该单元的内容物理地址,也不是该单元的内容 可以实现计算功能可以实现计算功能LEALEA30第 3 章指针传送指令LDS r16,mem;r16mem,;DSmem+2LDS指令将主存中mem指定的字送至r16,并将mem的下一字送DS寄存器LES r16,mem;r16mem,;ESmem+2LES指令将主存中mem指定的字送至r16,并将mem的下一字送ES寄存器例题例题7第 3 章31第 3 章例例7:地址指针传送:地址指针传送MOV WORD PTR 3060H,0100HMOV WORD PTR 3062H,1450HLES DI,3060H;ES=1450H,DI
15、=0100HLDS SI,3060H;DS=1450H,SI=0100H memmem指指定定主主存存的的连连续续4 4个个字字节节作作为为逻逻辑辑地地址址(3232位位的的地地址址指指针针),送入送入DS:r16DS:r16或或ES:r16ES:r16属性运算符属性运算符325.堆栈操作指令堆栈是一个“后进先出FILO”(或说“先进后出FILO”)的主存区域,位于堆栈段中;SS段寄存器记录其段地址堆栈只有一个出口,即当前栈顶;用堆栈指针寄存器SP指定栈顶是地址较小的一端(低端),栈底不变第 2 章33第 3 章堆栈和队列堆栈:按照后进先出(LIFO)的原则组织的存储器空间(栈)队列:按照先进
16、先出(FIFO)的原则组织的存储器空间LIFOFIFO34第 3 章堆栈的操作堆栈只有两种基本操作:压栈和出栈,对应两条指令PUSH和POPPUSHPUSH;压栈指令先使压栈指令先使堆栈指针堆栈指针SPSP减减2 2,然后把一个字操然后把一个字操作数存入堆栈顶作数存入堆栈顶部部POPPOP;出栈指令把栈顶出栈指令把栈顶的一个字传送至指的一个字传送至指定的目的操作数,定的目的操作数,然后堆栈指针然后堆栈指针SPSP加加2 235第 3 章压栈指令PUSHPUSH AXPUSH 2000HPUSH r16/m16/SECGPUSH r16/m16/SECG;SPSPSPSP2 2;SS:SPr16
17、/m16/SECGSS:SPr16/m16/SECGPUSHPUSH36第 2 章出栈指令POPPOP DXPOP 2000HPOP r16/m16/SECGPOP r16/m16/SECG;r16/m16/SECGSS:SPr16/m16/SECGSS:SP;SPSPSPSP2 2POPPOP37第 3 章堆栈的特点堆栈操作的单位是字,进栈和出栈只对字量字量数据从栈顶压入和弹出时,都是低地址字节送低字节,高地址字节送高字节堆栈操作遵循先进后出原则,但可用存储器寻址方式随机存取堆栈中的数据堆栈常用来临时存放数据传递参数保存和恢复寄存器例题例题438例例4:现场保护恢复:现场保护恢复PUSH A
18、X;进入子程序后PUSH BXPUSH DS.POP DS;返回主程序前POP BXPOP AX39第 3 章标志寄存器压/出堆栈指令PUSHFPUSHF;SPSP2;SS:SPFLAGSPUSHF指令将标志寄存器的内容压入堆栈,同时栈顶指针SP减2POPFPOPF;FLAGSSS:SP;SPSP2POPF指令将栈顶字单元内容送标志寄存器,同时栈顶指针SP加2例题例题5第 3 章40第 3 章 标志寄存器堆栈操作指令(标志寄存器堆栈操作指令(PUSHF/POPF)0FFFFFH000000HSS:0000HSP堆堆栈栈段段64KSP-1SP-1FHFL指令指令 PUSHF执行后:执行后:41第
19、 3 章例例5:置位单步标志:置位单步标志PUSHF;保存全部标志到堆栈POP AX;从堆栈中取出全部标志 放到AX中OR AX,0100H;设置D8=TF=1,;AX其他位不变PUSH AX;将AX压入堆栈POPF;FLAGSAX;将堆栈内容取到标志寄存器42第 3 章6.标志寄存器传送指令标志寄存器传送指令用来传送标志寄存器FLAGS的内容,方便进行对各个标志位的直接操作有2对4条指令低8位传送:LAHF和SAHF16位传送:PUSHF和POPF43标志低字节进出AH指令LAHF;AHFLAGS的低字节LAHF指令将标志寄存器的低字节送寄存器AHSF/ZF/AF/PF/CF状态标志位分别送
20、入AH的第7/6/4/2/0位,而AH的第5/3/1位任意SAHF;FLAGS的低字节AHSAHF将AH寄存器内容送FLAGS的低字节用AH的第7/6/4/2/0位相应设置SF/ZF/AF/PF/CF标志第 3 章44第 3 章标志寄存器传送指令标志寄存器传送指令设置标志指令(设置标志指令(LAHF/SAHF)D7D6D5D4D3D2D1D0SF ZFAFPFCFOF DF IF TFFLAGAH执行指令执行指令LAHFD7D6D5D4D3D2D1D0SF ZFAFPFCFOF DF IF TFFLAGAH执行指令执行指令SAHF45第 3 章7.输入/输出(I/O)指令8086通过输入输出指
21、令与外设进行数据交换;呈现给程序员的外设是端口(PORT)即I/O地址8086用于寻址外设端口的地址线为16条,端口最多为21665536(64K)个,端口号为0000HFFFFH每个端口用于传送一个字节的外设数据累加器专用专用的传送指令之一。46第 3 章I/O端口的寻址方式8086的端口有64K个,无需分段,设计有两种寻址方式v直接寻址:只用于寻址00HFFH前256个端口,操作数i8表示端口号vDX寄存器间接寻址:可用于寻址全部64K个端口,DX寄存器的值就是端口号对大于FFH的端口只能采用间接寻址方式47第 3 章IN AL,NIN AX,NIN AL,DXIN AX,DXOUT N,
22、ALOUT N,AXOUT DX,ALOUT DX,AX端口端口地址地址为为16位位端口端口地址地址为为8位位传送传送8位位数据数据传送传送16位位数据数据I/O指令(指令(IN/OUT)48第 3 章输入指令IN将外设数据传送给CPU内的AL/AXIN AL,i8IN AL,i8;字节输入:字节输入:ALI/OALI/O端口(端口(i8i8直接寻址)直接寻址)IN AL,DXIN AL,DX;字节输入:字节输入:ALI/OALI/O端口(端口(DXDX间接寻址)间接寻址)IN AX,i8IN AX,i8;字输入:字输入:AXI/OAXI/O端口(端口(i8i8直接寻址)直接寻址)IN AX,
23、DXIN AX,DX;字输入:字输入:AXI/OAXI/O端口(端口(DXDX间接寻址)间接寻址)ININ例题例题8演示演示演示演示49例例2.15:输入字量:输入字量;直接寻址,字节量输入IN AL,21HMOV AH,ALIN AL,20H;直接寻址,字量输入IN AX,20H;间接寻址,字量输入MOV DX,20HIN AX,DX 两段功能相同两段功能相同 字字量量数数据据传传送送实实际际上上实实现现了了连连续续的的两两个个端端口口地地址址的的字字节量传送节量传送ININ50第 3 章输出指令OUT将CPU内的AL/AX数据传送给外设OUT i8,ALOUT i8,AL;字节输出:字节输
24、出:I/OI/O端口端口ALAL(i8i8直接寻址)直接寻址)OUT DX,ALOUT DX,AL;字节输出:字节输出:I/OI/O端口端口ALAL(DXDX间接寻址)间接寻址)OUT i8,AXOUT i8,AX;字输出:字输出:I/OI/O端口端口AXAX(i8i8直接寻址)直接寻址)OUT DX,AXOUT DX,AX;字输出:字输出:I/OI/O端口端口AXAX(DXDX间接寻址)间接寻址)OUTOUT例题例题9演示演示演示演示51例例9:输出字节量:输出字节量;间接寻址,字节量输出MOV DX,3FCHMOV AL,80HOUT DX,ALOUTOUT52第 3 章小结小结1、基本传
25、送指令(、基本传送指令(MOV)2、堆栈操作指令(、堆栈操作指令(PUSH/POP)3、交换指令(、交换指令(XCHG)存储器存储器通用寄存器通用寄存器段寄存器(段寄存器(CS除外)除外)立即数立即数存储器存储器段寄存器(段寄存器(CS除外)除外)通用寄存器通用寄存器堆栈堆栈通用寄存器通用寄存器存储器存储器53第 3 章3、I/O指令(指令(IN/OUT)累加器累加器8位立位立即地址即地址DX间间接地址接地址4、LEA指令(指令(IN/OUT)16位位寄存器寄存器16位位存储器存储器OFFSET5、地址指针传送指令、地址指针传送指令(LDS/LES)16位位寄存器寄存器32位位存储器存储器低字
26、低字DS/ES高字高字54第 3 章作业作业1、设堆栈指针、设堆栈指针SP的初值为的初值为1000H,AX=2000H,BX=3000H,试问:试问:A、执行执行 PUSH AX 后,后,SP的值是多少?的值是多少?B、在执行在执行 PUSH BX 以及以及 POP AX 后,后,SP、AX和和BX的值各为多少?的值各为多少?2、要想完成把、要想完成把3000H送送2000H中,用指令:中,用指令:MOV 2000H,3000H是否正确?若不正确,请用正确的指令实现。是否正确?若不正确,请用正确的指令实现。3、试述指令、试述指令MOV AX,2010H和和MOV AX,DS:2010H的区别。
27、的区别。55第 3 章4、指出下列指令语法是否正确,若不正确,请说明原因。、指出下列指令语法是否正确,若不正确,请说明原因。(1)MOV DS,0100H (2)MOV BP,AL(2)XCHG AH,AL(4)OUT 310H,AL(5)MOV BX,BX(6)MOV AX,SI+DI(7)MOV SS:BX+SI+100H,BX5、若若SP2000H,AX3355H,BX4466H,试指出下列指试指出下列指令,或程序段执行后写出有关寄存器的内容。令,或程序段执行后写出有关寄存器的内容。(1)PUSH AX;执行后执行后 AX?SP?(2)PUSH AXPUSH BXPOP DX;执行后执行
28、后 AX?DX?SP?5657第 3 章2.2.算术运算指令算术运算指令学习任务学习任务重点注意重点注意1 1、掌握算术运算类指令的用法、掌握算术运算类指令的用法2 2、熟悉指令执行后对标志位的影响、熟悉指令执行后对标志位的影响1 1、带符号数的算术运算、带符号数的算术运算2 2、十进制调整指令的使用、十进制调整指令的使用58第 3 章2.算术运算类指令四则运算是计算机经常进行的一种操作。算术运算指令实现二进制(和十进制)数据的四则运算59第 3 章 算术运算类指令涉及两种类型数据两种类型数据:无符号数和有符号数。对加减法指令,无符号和有符号数可采用同一套指令,但应注意:l 参加的操作数必须都
29、是无符号数或都是有符号数。l 需使用不同的标志位来检查无符号数和有符号数的运算结果是否溢出。60第 3 章两个两个8 8位数相加时有位数相加时有4 4种情况:种情况:无符号数和有符号数均不溢出无符号数和有符号数均不溢出二进制相加 无符号数加 有符号数加 0000 1000 8 +8+0001 1110 +30 +(+30)0010 0110 38 +38 结果38 CF=0 OF=061第 3 章 无符号数溢出无符号数溢出 0000 1000 8 +8+1111 1101 +253 +(-3)10000 0101 261 +5 结果5 CF=1 OF=0 有符号数溢出有符号数溢出 0000 1
30、000 8 +8+0111 1101 +125 +(+125)1000 0101 133 +133结果-123 CF=0 OF=1(补码表示)62第 3 章 无符号数和有符号数均溢出无符号数和有符号数均溢出 1000 1000 136 -120+1111 0111 +247 +(-9)10111 1111 383 -129 结果127 CF=1 OF=1上面四种情况说明,CF标志可用来表示无符号数的溢出,OF标志可用来表示有符号数的溢出。有符号数的溢出是一种出错状态,在运算过程中应当避免。63第 3 章(一)加法指令不考虑进位加法指令ADD op1,op2考虑进位加法指令 ADC op1,op
31、2增量指令 INC op交换加法指令 XADD op1,op264第 3 章不考虑进位加法指令ADDADD指令将源与目的操作数相加,结果送到目的操作数,ADD指令按状态标志的定义相应设置ADDADDADD regADD reg,imm/reg/memimm/reg/mem;regregregregimm/reg/memimm/reg/memADD mem,imm/regADD mem,imm/reg;memmemmemmemimm/regimm/reg例题例题1ADD OPRD1,OPRD2;OPRD1OPRD1+OPRD2ADD OPRD1,OPRD2;OPRD1OPRD1+OPRD2 ;对
32、标志位产生影响对标志位产生影响65第 3 章加法指令(加法指令(ADD)NFOF DF IF TF SF ZFAFPFCFD15D14D13D12D11D10D9D8D7D6D5D4D3D2D1D0例例2:设:设AL=3AH,则执行则执行 ADD AL,7CH 后,后,AL=?各标志位如何?各标志位如何?AL=3AH00111010 7CH01111100AL=B6H 10110110PF=0、ZF=0、AF=1、OF=1、SF=1、CF=0ADDADD66第 3 章带进位加法指令ADCADC指令将源与目的操作数相加,再加上进位CF标志,结果送到目的操作数ADC指令按状态标志的定义相应设置AD
33、C指令主要与ADD配合,实现多字节加法运算ADCADCADC reg,imm/reg/memADC reg,imm/reg/mem;regregregregimm/reg/memimm/reg/memCFCFADC mem,imm/regADC mem,imm/reg;memmemmemmemimm/regimm/regCFCF例题例题367第 3 章加法指令(加法指令(ADC)例:设两个四字节数,分别放在自例:设两个四字节数,分别放在自FIRST和和SECOND开始的存储区中,每个数占四个存储单元,如图所示,开始的存储区中,每个数占四个存储单元,如图所示,试利用加法指令求出它们的和。试利用加
34、法指令求出它们的和。MOV AX,FIRSTADD AX,SECONDMOV THIRD,AXMOV AX,FIRST+2ADC AX,SECOND+2MOV THIRD+2,AX11H22H33H44H55H66H77H88H66H88HAAHCCHFIRSTFIRST+2SECONDSECOND+2THIRD例例3:双字加法双字加法68第 3 章增量指令INCINCINCINC reg/memINC reg/mem;reg/memreg/memreg/memreg/mem1 1INC BXINC BYTE PTR BXINC OPRD;完成对指定的操作数完成对指定的操作数OPRD加加1,然
35、后返回此操,然后返回此操作数。此指令主要用于在循环程序中修改地址作数。此指令主要用于在循环程序中修改地址指针和循环次数等。指针和循环次数等。这条指令执行的结果影响标志位这条指令执行的结果影响标志位AF、OF、PF、SF和和ZF,而而对进位标志对进位标志CF没有影响没有影响。(特别注特别注意意!)69第 3 章交换加法指令XADDXADD OP1,OP2 reg,reg mem,reg首先将OP1与OP2两数交换;然后完成OP1+OP2,其结果存入OP1中.结果会影响OF,SF,ZF,PF,CF如:XADD AX,CX;70第 3 章(二)减法指令v不考虑借位的减法指令SUB OP1,OP2v考
36、虑借位的减法指令 SBB OP1,OP2v减量指令 DEC OPRDv求补指令 NEG OPRDv比较指令 CMP OP1,OP271第 3 章不考虑借位的减法指令SUB(SUBTRACT)SUBSUB例题例题4SUB OPRD1,OPRD2 ;功能:功能:OPRD1OPRD1-OPRD2完成两个操作数相减,也即从完成两个操作数相减,也即从OPRD1中减去中减去OPRD2,结果放在,结果放在OPRD1中。中。例如例如:SUB CX,BX SUB BP,CLSUB reg,imm/reg/memSUB reg,imm/reg/mem;regregregregimm/reg/memimm/reg/
37、memSUB mem,imm/regSUB mem,imm/reg;memmemmemmemimm/regimm/reg72第 3 章带借位减法指令SBBSBBSBB例题例题5SBB OPRD1,OPRD2 ;功能:功能:OPRD1OPRD1-OPRD2-CF 这条指令与这条指令与SUB类似,只是在两个操作数相减时,类似,只是在两个操作数相减时,还要减去借位标志还要减去借位标志CF的现行值本指令对标志的现行值本指令对标志位位AF、CF、OF、PF、SF和和ZF都有影响。都有影响。同同ADC指令一样,本指令主要用于多字节操作数指令一样,本指令主要用于多字节操作数相减。相减。SBB reg,imm
38、/reg/memSBB reg,imm/reg/mem;regregregregimm/reg/memimm/reg/memCFCFSBB mem,imm/regSBB mem,imm/reg;memmemmemmemimm/regimm/regCFCF74第 3 章减量指令DEC(DECREMENT)DECDECDEC CXDEC WORD PTR SIDEC OPRD ;功能:功能:OPRDOPRD-1对指令的操作数减对指令的操作数减1,然后送回此操作数,然后送回此操作数,在相减时,把操作数作为一个无符号二进制数来在相减时,把操作数作为一个无符号二进制数来对待。指令执行的结果,影响标志对待
39、。指令执行的结果,影响标志AF、OF、PF、SF和和ZF但对但对CF标志不影响标志不影响(即保持此指令以前即保持此指令以前的值的值)。例如:例如:DEC SI DEC CL INC指令和指令和DEC指令都是单操作数指令指令都是单操作数指令 主要用于对计数器和地址指针的调整主要用于对计数器和地址指针的调整DEC reg/memDEC reg/mem;reg/memreg/memreg/memreg/mem1 1特别留意哦!76第 3 章NEG OPRD 功能:功能:(Negate)变补变补对操作数变补,连符号位一起逐位取反加对操作数变补,连符号位一起逐位取反加1运算,即运算,即0-OPRD,(一
40、般称此一般称此运算为变补运算,有的书上称为求补运算)再把结果送回操作数。运算为变补运算,有的书上称为求补运算)再把结果送回操作数。例如:例如:NEG AL NEG MULRE(AL00111100)则变补后为则变补后为11000100 即即000000000011110011000100若在字节操作时对若在字节操作时对-128(80h),或在字操作时对或在字操作时对-32768(8000h)变补,则变补,则操作数没变化,但标志操作数没变化,但标志OF置位置位1。此指令影响标志此指令影响标志AF、CF、OF、PF、SF和和ZF。此指令的结果一般总是此指令的结果一般总是使标志使标志CF=1。除非在
41、操作数为零时,才使除非在操作数为零时,才使CF=0。变补指令NEGNEGNEGNEG reg/memNEG reg/mem;reg/mem0reg/mem0reg/memreg/mem例题例题677CMP OPRD1,OPRD2 ;功能功能:比较指令完成两个操作数相减,使结果反映在标志位上,但并不比较指令完成两个操作数相减,使结果反映在标志位上,但并不送回结果送回结果(即不带回送的减法即不带回送的减法)。例如:例如:CMP AL,100 CMP DX,DI CMP CX,COUHTBP CMP COUNTSI,AX注:比较指令主要用于比较两个数之间的关系。在比较指令之后,根据注:比较指令主要用
42、于比较两个数之间的关系。在比较指令之后,根据ZF标志即可判断两者是否相等。标志即可判断两者是否相等。相等的比较:相等的比较:若两者相等,相减以后结果为零,若两者相等,相减以后结果为零,ZF标志为标志为1,否则为,否则为0。若两者不相等,则可在比较指令之后利用其它标志位的状态来确定两若两者不相等,则可在比较指令之后利用其它标志位的状态来确定两者的大小。者的大小。大小的比较:大小的比较:如果是两个如果是两个无符号数无符号数(如(如CMPAX,BX)进行比较,则可以根据进行比较,则可以根据CF标标志的状态判断两数大小。若结果没有产生借位志的状态判断两数大小。若结果没有产生借位(CF=0),显然显然A
43、XBX;若产若产生了借位(即生了借位(即CF1),),则则AXBX。比较指令CMP(COMPARE)CMP reg,imm/reg/memCMP reg,imm/reg/mem;regregimm/reg/memimm/reg/memCMP mem,imm/regCMP mem,imm/reg;memmemimm/regimm/reg例题例题7CMPCMP79第 3 章根据标志位来判断比较的结果1)根据ZF判断两个数是否相等。若ZF=1,则两数相等。2)若两个数不相等,则分两种情况考虑:比较的是两个无符号数 若CF=0,则destsrc;若CF=1,则destsrc。比较的是两个有符号数 若O
44、FSF=0,则destsrc;若OFSF=1,则destsrc。80(三)乘法指令MUL r8/m8;无符号字节乘法;AXALr8/m8MUL r16/m16;无符号字乘法;DX.AXAXr16/m16IMUL r8/m8;有符号字节乘法;AXALr8/m8IMUL r16/m16;有符号字乘法;DX.AXAXr16/m16例题例题8第 2 章82第 3 章乘法指令对标志的影响乘法指令如下影响OF和CF标志:MUL指令若乘积的高一半(AH或DX)为0,则OF=CF=0;否则OF=CF=1IMUL指令若乘积的高一半是低一半的符号扩展,则OF=CF=0;否则均为1乘法指令对其他状态标志没有定义 对
45、对标标志志没没有有定定义义:指指令令执执行行后后这这些些标标志志是是任任意的、不可预测(就是谁也不知道是意的、不可预测(就是谁也不知道是0还是还是1)对标志没有影响:指令执行不改变标志状态对标志没有影响:指令执行不改变标志状态84第 3 章例例8(2):求:求 0A7H*85H=?MOV AL,0A7HMOV BL,85HMUL BL结果:结果:AX=56C3H由于由于AH不为零,所以不为零,所以CF=1、OF=186第 3 章例例8(3):设):设AX=04E8H,BX=0088H,DS=2000H,存存储单元储单元20088H中的字内容为中的字内容为4E20H,问执行指令:问执行指令:IM
46、UL WORD PTR BX后,后,DX=?,AX=?,CF=?,OF=?结果:结果:DX=017FH,AX=4D00H由于由于DX不为零,不为零,所以所以CF=1、OF=187(四)除法指令DIV r8/m8;无符号字节除法:ALAXr8/m8的商,AHAXr8/m8的余数DIV r16/m16;无符号字除法:;AXDX.AXr16/m16的商,DXDX.AXr16/m16的余数IDIV r8/m8;有符号字节除法:ALAXr8/m8的商,AHAXr8/m8的余数IDIV r16/m16;有符号字除法:;AXDX.AXr16/m16的商,DXDX.AXr16/m16的余数例题例题9第 2 章
47、88第 3 章除法指令的功能除法指令分无符号和有符号除法指令除法指令的除数显式给出,隐含使用另一个操作数AX和DX作为被除数字节量除法:AX除以r8/m8,8位商存入AL,8位余数存入AH字量除法:DX.AX除以r16/m16,16位商存入AX,16位余数存入DX除法指令对标志没有定义除法指令会产生结果溢出89第 3 章除法错中断当被除数远大于除数时,所得的商就有可能超出它所能表达的范围。如果存放商的寄存器AL/AX不能表达,便产生溢出,8086CPU中就产生编号为0的内部中断除法错中断对DIV指令,除数为0,或者在字节除时商超过8位,或者在字除时商超过16位,则发生除法溢出对IDIV指令,除
48、数为0,或者在字节除时商不在-128127范围内,或者在字除时商不在-3276832767范围内,则发生除法溢出90例例9:除法运算:除法运算MOV AX,0400H;AX=400H=1024MOV BL,0B4H;BL=B4H=180DIV BLDIV BL;商AL05H5;余数AH7CH124MOV AX,0400H;AX=400H=1024MOV BL,0B4H;BL=B4H=76IDIV BLIDIV BL;商ALF3H13;余数AH24H3691符号扩展指令CBW;AL的符号扩展至AH;如AL的最高有效位是0,则AH00;AL的最高有效位为1,则AHFFH。AL不变CWD;AX的符号
49、扩展至DX;如AX的最高有效位是0,则DX00;AX的最高有效位为1,则DXFFFFH。AX不变什么是符号扩展符号扩展指令常用于获得倍长的数据 不影响标志位不影响标志位例题例题10例题例题11第 2 章92第 3 章符号扩展的概念符号扩展是指用一个操作数的符号位(即最高位)形成另一个操作数,后一个操作数的各位是全0(正数)或全1(负数)。符号扩展不改变数据大小对于数据64H(表示数据100),其最高位D7为0,符号扩展后高8位都是0,成为0064H(仍表示数据100)对于数据FF00H(表示有符号数256),其最高位D15为1,符号扩展后高16位都是1,成为FFFFFF00H(仍表示有符号数2
50、56)93例例10:符号扩展:符号扩展MOV AL,80H;AL=80HCBW;AX=FF80HADD AL,255;AL=7FHCBW;AX=007FH94例例11:AXBXCWD;DX.AXAXIDIV BX;AXDX.AXBX 利利用用符符号号扩扩展展指指令令得得到到除除法法指指令令所所需要的倍长于除数的被除数需要的倍长于除数的被除数 对对无无符符号号数数除除法法应应该该采采用用直直接接使使高高8位位或或高高16位位清清0的的方方法法,获获得得倍倍长长的的被除数被除数95第 3 章例例12.在内存的数据段中,前两个字节是一个在内存的数据段中,前两个字节是一个16位带符号的被除数,位带符号