书签 分享 收藏 举报 版权申诉 / 47
上传文档赚钱

类型汇编语言程序设计-第3章 80x86指令系统课件.ppt

  • 上传人(卖家):晟晟文业
  • 文档编号:4298983
  • 上传时间:2022-11-27
  • 格式:PPT
  • 页数:47
  • 大小:180.50KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《汇编语言程序设计-第3章 80x86指令系统课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    汇编语言程序设计_第3章 80x86指令系统课件 汇编语言 程序设计 80 x86 指令系统 课件
    资源描述:

    1、2022-11-2780 x86汇编语言程序设计第3章 80 x86指令系统 讲授要点 3种操作数(立即数、寄存器和内存操作数)的形式。常用指令的格式、功能以及对CF、OF、SF、ZF的影响。使用指令时容易犯的错误。2022-11-2780 x86汇编语言程序设计3.1 指令格式 1指令的书写格式指令的书写格式 标号:指令助记符操作数;注释2操作数的操作数的3种形式:种形式:立即操作数:指令的操作数是立即数,并直接出现在指令中。寄存器操作数:操作数是寄存器的值,指令中使用寄存器名。内存操作数:操作数是某个内存单元的值,指令中给出有效地址EA,段地址在某个段寄存器中。2022-11-2780 x

    2、86汇编语言程序设计3.2 操作数的形式 3.2.1 8086指令的操作数形式1.1.立即数立即数:8位或16位立即数。2.2.寄存器操作数寄存器操作数:8位/16位通用寄存器和段寄存器(除了FS和GS)。3.3.内存操作数内存操作数 包括下列几种形式。Variable 或 Variable regdispregbaseindexdispbaseindex说明说明:Variable是变量名或变量名 整数表达式。reg为BX、BP、SI、DI。disp可以是常量或变量,汇编后为一个常数,若是变量,则取其偏移地址。base为BX或BP,index为SI或DI。有效地址为各项之和。如dispbase

    3、index形式,EA=base+index+disp。若使用了BP,则隐含段地址在SS,否则在DS。当段地址不在隐含的段寄存器时,可使用段超越前缀,形式为:段寄存器名:2022-11-2780 x86汇编语言程序设计3.2.2 32位CPU扩展的操作数形式 1.1.立即数立即数:32位立即数。2.2.寄存器操作数寄存器操作数:32位通用寄存器以及FS和GS。3.3.内存操作数内存操作数 包括下列几种形式。base dispbasebaseindex dispbaseindexindex*ndispindex*n baseindex*n dispbaseindex*n说明说明:base、inde

    4、x为任一32位通用寄存器(index不能取ESP)。n为比例因子,取1、2、4或8。若包含base且base为EBP或ESP,则隐含段地址在SS;否则,隐含段地址在DS。若在16位CPU上编程,则不能使用这些寻址方式。2022-11-2780 x86汇编语言程序设计3.3 指令系统 介绍设计完整程序所需的常用指令,对于其余指令,一部分在后续章节中讲授,一部分自学。介绍常用指令的格式、功能以及对CF、OF、SF、ZF的影响。2022-11-2780 x86汇编语言程序设计为了描述方便,采用下列符号约定:dest 目的操作数src 源操作数oprdn 第n个操作数,如oprd1,oprd2,opr

    5、d3=赋值/或者reg8 8位通用寄存器AH/AL/BH/BL/CH/CL/DH/DLreg16 16位通用寄存器AX/BX/CX/DX/SI/DI/BP/SPreg32 32位通用寄存器EAX/EBX/ECX/EDX/ESI/EDI/EBP/ESPreg reg8/reg16/reg32seg 段寄存器CS/DS/SS/ES/FS/GSmem8 8位内存操作数mem16 16位内存操作数mem32 32位内存操作数mem mem8/mem16/mem32 mem64 64位内存操作数imm8 8位立即数imm16 16位立即数imm32 32位立即数imm imm8/imm16/imm322

    6、022-11-2780 x86汇编语言程序设计3.3.1 数据传送指令 1.MOV(Move):传送:传送 一般形式:MOVdest,src;dest=src。将源操作数src复制到目的操作数dest,src不变。语法格式:MOVreg/mem/seg,reg/mem/seg/imm 对标志位的影响:无。说明:dest与src不能作如下搭配:MOVmem,mem;错误MOVseg,seg;错误MOVseg,imm;错误 dest不能是CS。dest与src必须类型匹配,即同时是字节、字或双字类型。2022-11-2780 x86汇编语言程序设计3.3.1 数据传送指令 2.XCHG(Excha

    7、nge):交换:交换一般形式:XCHGoprd1,oprd2;交换oprd1与oprd2的内容语法格式:XCHGreg/mem,reg/mem 对标志位的影响:无。说明:oprd1与oprd2不能作如下搭配:XCHGmem,mem;错误oprd1与oprd2类型必须匹配。、【例】xchgebx,edxxchgebpeax*4,edx2022-11-2780 x86汇编语言程序设计3.3.1 数据传送指令 3.LEA(Load Effective Address):装入有效地址:装入有效地址语法格式:LEAreg16,mem;reg16=mem的有效地址对标志位的影响:无。【例】设BX=5678

    8、H,EAX=1,EDX=2。leasi,2bx;执行后,SI=567AHleasi,2eaxedx;执行后,SI=54.LDS、LES 语法格式:LDS reg16,mem32;reg16=mem32的低字,DS=mem32的高字 LES reg16,mem32;reg16=mem32的低字,ES=mem32的高字对标志位的影响:无。2022-11-2780 x86汇编语言程序设计3.3.1 数据传送指令 5.堆栈操作指令堆栈操作指令 80 x86系统的堆栈具有如下特点:堆栈是在内存的堆栈段中,具有“先进后出”的特点。堆栈只有一个出入口,即当前栈顶。当堆栈为空时,栈顶和栈底指向同一内存单元。堆

    9、栈有两个基本操作:PUSH(进栈)和POP(出栈)。PUSH操作使栈顶向低地址方向移动,而POP操作则刚好相反。堆栈操作只能以字或双字为单位。SS:SP指向栈顶。2022-11-2780 x86汇编语言程序设计3.3.1 数据传送指令(1 1)PUSHPUSH与与POPPOP:进栈与出栈:进栈与出栈 语法格式:PUSHreg16/seg/mem16/reg32/mem32 POPreg16/seg/mem16/reg32/mem32;操作数不能是CSPUSHimm;286新增 功能描述:PUSH指令(16位):SP=SP-2SS:SP=16位操作数POP指令(16位):16位操作数=SS:SP

    10、SP=SP+2PUSH指令(32位):SP=SP-4SS:SP=32位操作数POP指令(32位):32位操作数=SS:SPSP=SP+4 对标志位的影响:无。2022-11-2780 x86汇编语言程序设计3.3.1 数据传送指令(2)PUSHF与与POPF:标志寄存器进栈和出栈:标志寄存器进栈和出栈 语法格式:PUSHF;FLAGS进栈POPF;栈顶字出栈到FLAGS对标志位的影响:只有POPF指令会以弹出值设置标志寄存器。【例】设SP=100H,EBX=12345678H,给出下列指令依次执行后的结果。pushbx;ss:00ffh=56h,ss:00feh=78h,sp=0fehpopa

    11、x;ax=5678h,sp=100hpushebx;ss:00feh=1234h,ss:00fch=5678h,sp=0fchpopax;ax=5678h,sp=0fehpopax;ax=1234h,sp=100h 【例】交换AX与CX的值。pushaxpushcxpopaxpopcx2022-11-2780 x86汇编语言程序设计3.3.1 数据传送指令 6.标志寄存器传送指令标志寄存器传送指令(1)LAHF(Load AH from Flags)语法格式:LAHF;AH=FLAGS的低8位对标志位的影响:无。(2)SAHF(Store AH into Flags)语法格式:SAHF;FLA

    12、GS的低8位=AH对标志位的影响:由新装入值确定。2022-11-2780 x86汇编语言程序设计3.3.1 数据传送指令 7.符号扩展与零扩展指令符号扩展与零扩展指令对标志位的影响:无。(1)CBW、CWD、CWDE与CDQ语法格式:CBW;AL符号扩展为AX CWD;AX符号扩展为32位数DX:AX CWDE;AX符号扩展为EAX;386新增CDQ;EAX符号扩展为64位数EDX:EAX;386新增【例】设AL=0FEH,给出依次执行下列指令后的结果。cbw;ax=0fffehcwd;dx=0ffffh,ax不变,即dx:ax=-2cwde;eax=0fffffffeh(-2)cdq;ed

    13、x=0ffffffffh,eax不变,即edx:eax=-22022-11-2780 x86汇编语言程序设计3.3.1 数据传送指令(2)MOVSX 一般形式:MOVSXdest,src;src符号扩展为dest;386新增 语法格式:MOVSXreg16,reg8/mem8MOVSXreg32,reg8/mem8/reg16/mem16 功能描述:MOVSX是CBW、CWD和CWDE的一般形式,用来将8位数符号扩展为16位或32位数,或者将16位数符号扩展为32位数。【例】CBW和CWDE的功能可由MOVSX指令实现。movsxax,al;等价于cbw movsx eax,ax;等价于cwd

    14、e movsx eax,al;等价于顺序执行cbw与cwde2022-11-2780 x86汇编语言程序设计3.3.1 数据传送指令(3)MOVZX 一般形式:MOVZXdest,src;src零扩展为dest;386新增 语法格式:MOVZXreg16,reg8/mem8MOVZXreg32,reg8/mem8/reg16/mem162022-11-2780 x86汇编语言程序设计3.3.1 数据传送指令 8.XLAT(Translate):换码):换码 语法格式:XLAT;AL=DS:BX+AL 功能描述:将DS:BX所指内存区中、由AL指定位移处的一个字节赋给AL。对标志位的影响:无。2

    15、022-11-2780 x86汇编语言程序设计3.3.2 算术指令 1.1.加法加法 一般形式:ADDdest,src;dest=dest+srcADCdest,src;dest=dest+src+CF INCdest;dest=dest+1 语法格式:ADDreg/mem,reg/mem/immADCreg/mem,reg/mem/immINCreg/mem 对标志位的影响:ADD、ADC:按一般规则影响CF、OF、SF和ZF。INC:不影响CF,其它同ADD。说明:ADD与ADC的2个操作数必须类型匹配,且不能同时是内存操作数。2022-11-2780 x86汇编语言程序设计3.3.2 算

    16、术指令 2.2.减法减法 一般形式:SUBdest,src;dest=dest srcSBBdest,src;dest=dest-src CFCMPdest,src;dest src。与SUB的区别在于,不将减法结果存入dest。DECdest;dest=dest-1NEGdest;dest=0 dest 语法格式:SUBreg/mem,reg/mem/imm SBBreg/mem,reg/mem/immCMPreg/mem,reg/mem/immDECreg/memNEGreg/mem 对标志位的影响:SUB、SBB、CMP、NEG:按一般规则影响CF、OF、SF和ZF。CF表示借位。DEC

    17、:不影响CF,其它同SUB。说明:2个操作数必须类型匹配,且不能同时是内存操作数。2022-11-2780 x86汇编语言程序设计3.3.2 算术指令 3.3.乘法乘法(1)MUL(Unsigned Multiplication):无符号乘法一般形式:MULsrc语法格式:MULreg8/mem8;AX=AL srcMULreg16/mem16;DX:AX=AX srcMULreg32/mem32:EDX:EAX=EAX src对标志位的影响:若8位8位、16位16位或32位32位的结果分别能由8、16或32位容纳(即结果的高一半为0),则CF=OF=0,否则,CF=OF=1;其余标志无定义。

    18、说明:由于2个n位数的乘积可能需要2n位,因此,若操作数是8位,则结果为16位;同样,16位操作数相乘结果为32位,32位数相乘结果为64位。2022-11-2780 x86汇编语言程序设计3.3.2 算术指令(2)IMUL(Integer Multiplication):带符号乘法一般形式:IMULsrc语法格式:IMULreg8/mem8;AX=AL src。执行带符号乘法,下同。IMULreg16/mem16;DX:AX=AX srcIMULreg32/mem32:EDX:EAX=EAX src对标志位的影响:若结果的高一半为低一半的符号扩展,则CF=OF=0,否则,CF=OF=1;其余

    19、标志无定义。说明:由于2个n位数的乘积可能需要2n位,因此,若操作数是8位,则结果为16位;同样,16位操作数相乘结果为32位,32位数相乘结果为64位。【例】对于同一个二进制数,采用 MUL与IMUL执行的结果可能不同。设AL=0FFH,BL=1,分别执行下列指令,会得出不同结果。mulbl;ax=0ffh(255)imulbl;ax=0ffffh(-1)2022-11-2780 x86汇编语言程序设计3.3.2 算术指令 4.4.除法除法一般形式:DIVsrc;无符号数除法IDIV src;带符号数除法语法格式:DIVreg/mem IDIVreg/mem功能描述:src是8位:AXsrc

    20、,结果商在AL、余数在AH。src是16位:DX:AXsrc,结果商在AX、余数在DX。src是32位:EDX:EAXsrc,结果商在EAX、余数在EDX。对标志位的影响:无定义。2022-11-2780 x86汇编语言程序设计3.3.2 算术指令 5.5.十进制调整指令十进制调整指令 (1)压缩BCD码调整指令语法格式:DAA;调整AL中的和为压缩BCD码DAS;调整AL中的差为压缩BCD码功能描述:DAA:通常先执行ADD/ADC指令,将2个压缩BCD码相加,结果存放在AL中。然后使用该指令将AL调整为压缩BCD码格式。DAS:通常先执行SUB/SBB指令,将2个压缩BCD码相减,结果存放

    21、在AL中。然后使用该指令将AL调整为压缩BCD码格式。对标志位的影响:OF不确定;CF反映压缩BCD码相加/相减的进位/借位状态;按一般规则影响SF和ZF。说明:若使用DAA/DAS指令,则参加加法/减法运算的操作数应该是压缩BCD码。如果将任意2个二进制数相加/减,然后调整,将得不到正确结果。2022-11-2780 x86汇编语言程序设计3.3.2 算术指令 DAA的调整算法如下:if (AL低4位 9 或 AF=1)thenAL=AL+6;AF=1;endifif (AL高4位 9 或 CF=1)then AL=AL+60H;CF=1;endifDAS的调整算法如下:if (AL低4位

    22、9 或 AF=1)then AL=AL 6;AF=1;endifif (AL高4位 9 或 CF=1)then AL=AL-60h;CF=1;endif2022-11-2780 x86汇编语言程序设计3.3.2 算术指令(2)非压缩BCD码调整指令语法格式:AAA ;调整AL中的和为非压缩BCD码;调整后,AL高4位=0,AH=AH+产生的CFAAS;调整AL中的差为非压缩BCD码;调整后,AL高4位=0,AH=AH-产生的CFAAM ;AH=AX div 10,AL=AX mod 10AAD ;AL=AH 10+AL,AH=0功能描述:AAA:通常先执行ADD/ADC指令,以AL为目的操作数

    23、,将2个非压缩BCD码(高4位无关)相加。然后使用AAA将AL调整为非压缩BCD码格式,且高4位=0,同时将调整产生的进位加到AH中。AAS:通常先执行SUB/SBB指令,以AL为目的操作数,将2个非压缩BCD码(高4位无关)相减。然后使用AAS将AL调整为非压缩BCD码格式,且高4位=0,同时将调整产生的借位从AH中减去。AAM与AAD:略。对标志位的影响:AAA与AAS:CF反映非压缩BCD码加/减的进位/借位;OF、SF和ZF不确定。2022-11-2780 x86汇编语言程序设计3.3.2 算术指令 AAA的调整算法如下:if (AL低4位 9 或 AF=1)then AL=AL+6;

    24、AH=AH+1;AF=1;CF=1;else AF=0;CF=0;endifAL=AL AND 0FH ;AL高4位清0AAS的调整算法如下:if (AL低4位 9 或 AF=1)then AL=AL 6;AH=AH 1;AF=1;CF=1;else AF=0;CF=0;endifAL=AL AND 0FH ;AL高4位清02022-11-2780 x86汇编语言程序设计3.3.3 位操作指令 1.1.逻辑指令逻辑指令一般形式:ANDdest,src;dest=dest and srcORdest,src;dest=dest or srcXORdest,src;dest=dest xor sr

    25、cNOTdest;dest=not destTESTdest,src;dest and src,执行AND操作但不存储结果到dest语法格式:AND reg/mem,reg/mem/imm OR reg/mem,reg/mem/imm XOR reg/mem,reg/mem/imm NOT reg/mem TEST reg/mem,reg/mem/imm对标志位的影响:NOT:无。其它指令:CF=OF=0,按一般规则影响SF和ZF。2022-11-2780 x86汇编语言程序设计3.3.3 位操作指令 1.1.移位指令移位指令 移位指令包括:SHL(Shift Left):逻辑左移 SAL(S

    26、hift Arithmetic Left):算术左移 SHR(Shift Right):逻辑右移 SAR(Shift Arithmetic Right):算术右移其中,SHL与SAL完全相同,只是同一指令的不同助记符而已。一般形式:SHLdest,count;dest左移。其中,count为移位次数(下同)SALdest,count;同SHL SHR dest,count;dest逻辑右移 SAR dest,count;dest算术右移语法格式:SHLreg/mem,1/CL SHLreg/mem,imm8;286新增 SAL、SHR与SAR格式同SHL2022-11-2780 x86汇编语言

    27、程序设计3.3.3 位操作指令 功能描述:SHL/SAL:左移。最高位移出到CF,最低位移入0。SAR:算术右移。最低位移入CF,最高位不变。SHR:逻辑右移。最低位移入CF,最高位移入0。对标志位的影响:若移位后符号位发生了变化,则OF=1,否则OF=0;CF为最后移入位;按一般规则影响ZF与SF。然而,若移位次数为0,则不影响标志位;若移位次数 1,则OF无定义。【例】设AX的值为一个2字节非压缩BCD码,将其转换为1字节压缩BCD码存入AL。movcl,4shlah,cl;ah低4位移到高4位 andal,0fh ;al高4位清0 or al,ah 2022-11-2780 x86汇编语

    28、言程序设计3.3.3 位操作指令 2.2.循环移位循环移位循环移位指令包括:ROL(Rotate Left):循环左移 ROR(Rotate Right):循环右移 RCL(Rotate through Carry Left):带进位循环左移 RCR(Rotate through Carry Right):带进位循环右移一般形式:ROL dest,count;dest循环左移。其中,count为移位次数(下同)ROR dest,count;dest循环右移 RCLdest,count;dest带CF循环左移 RCRdest,count;dest带CF循环右移语法格式:ROLreg/mem,1/

    29、CLROLreg/mem,imm8;286新增 ROR、RCL、RCR格式同ROL2022-11-2780 x86汇编语言程序设计3.3.3 位操作指令 功能描述:ROL:循环左移。最高位移出到CF,并同时移入最低位。RCL:带进位循环左移。最高位移出到CF,原CF移入最低位。ROR:循环右移。最低位移出到CF,并同时移入最高位。RCR:带进位循环右移。最低位移出到CF,原CF移入最高位。对标志位的影响:若移位后符号位发生了变化,则OF=1,否则OF=0;CF为最后移入位;不影响ZF与SF。然而,若移位次数为0,则不影响标志位;若移位次数 1,则OF无定义。【例】将DX:AX中的32位数左移1

    30、位。shlax,1rcldx,12022-11-2780 x86汇编语言程序设计3.3.3 位操作指令 3.3.位测试指令位测试指令 位测试指令包括;BT(Bit Test):位测试 BTS(Bit Test and Set):位测试并置位 BTR(Bit Test and Reset):位测试并复位 BTC(Bit Test and Complement):位测试并取反)这些指令均为386新增指令。一般形式:BTdest,index;CF=dest的第index位,dest不变BTSdest,index;CF=dest的第index位,dest的第index位=1BTRdest,index;

    31、CF=dest的第index位,dest的第index位=0BTCdest,index;CF=dest的第index位,dest的第index位取反2022-11-2780 x86汇编语言程序设计3.3.3 位操作指令 语法格式:BTreg16/mem16,reg16/imm8 BTreg32/mem32,reg32/imm8 BTR、BTS、BTC格式同BT对标志位的影响:影响CF;其余标志无定义。【例】位测试。bteax,12;CF=eax的第12位btseax,12;CF=eax的第12位,eax的第12位=1btreax,12;CF=eax的第12位,eax的第12位=0btceax,

    32、12;CF=eax的第12位,eax的第12位取反2022-11-2780 x86汇编语言程序设计3.3.4 控制转移指令 1.JMP(Jump):无条件转移):无条件转移 一般形式:JMPtarget;转移到target指定的目标地址处 根据转移的距离,JMP指令可分为下列两类:段内转移:在同一代码段内进行,又称近(Near)转移,只要修改IP的值即可实现。段间转移:可在不同代码段之间进行,又称远(Far)转移,需要同时修改CS和IP的值。根据目标地址的指定方式,JMP指令又可分为直接转移和间接转移。所谓直接转移,是指转移的目标地址直接出现在指令中,在程序执行前就已确定。所谓间接转移,指转移

    33、的目标地址是寄存器或内存操作数的值,只有执行到该条指令时才能确定。因此,JMP指令共有下列4种转移方式:段内直接转移(Intrasegment/Direct Jump)段间直接转移(Intersegment/Direct Jump)段内间接转移(Intrasegment/Indirect Jump)段间间接转移(Intersegment/Indirect Jump)在汇编语言程序中,通常使用标号(Label)来指定直接转移的目标地址。2022-11-2780 x86汇编语言程序设计3.3.4 控制转移指令 语法格式:JMP label;若label与该指令位于同一代码段:IP=label的偏移

    34、地址;;若label与该指令不在同一代码段:CS:IP=label的分段地址JMP reg16/mem16;IP=reg16/mem16JMP mem32;CS=mem32+2,IP=mem32功能描述:JMP label ;段内/段间直接转移 ;目标地址:标号label处JMPreg16/mem16;段内间接转移 ;目标地址:同一代码段,偏移地址=reg16/mem16JMPmem32 ;段间间接转移 ;目标地址:段地址=mem32高字,偏移地址=mem32低字对标志位的影响:无。2022-11-2780 x86汇编语言程序设计3.3.4 控制转移指令 2.2.条件转移指令条件转移指令 为简

    35、化描述,用Jcc表示所有条件转移指令的助记符。一般形式:Jcc label;若条件成立,则IP=label的偏移地址。其中,label是标号功能描述:若条件成立,则转移到目标地址label;否则,CPU忽略该条件转移,继续执行下一条指令。对标志位的影响:无。Jcc指令包括下列3类:(1)测试单个标志位的Jcc指令。(2)用于带符号数比较的Jcc指令。常用在CMP指令之后,以判断带符号数的大小。(3)用于无符号数比较的Jcc指令。常用在CMP指令之后,以判断无符号数的大小。2022-11-2780 x86汇编语言程序设计3.3.4 控制转移指令 3.JCXZ/JECXZ3.JCXZ/JECXZ(

    36、Jump if CX/ECX is ZeroJump if CX/ECX is Zero)语法格式:JCXZlabel;若CX=0,则转移到labelJECXZlabel;若ECX=0,则转移到label;386新增对标志位的影响:无说明:label相对位移量必须在-128 127之间,所有80 x86 CPU都一样。2022-11-2780 x86汇编语言程序设计3.3.4 控制转移指令 4.循环指令循环指令循环指令包括:LOOP LOOPE/LOOPZ(Loop while Equal/Zero)LOOPNE/LOOPNZ(Loop while Not Equal/Not Zero)LOO

    37、PZ与LOOPE、LOOPNZ与LOOPNE完全等价,只是同一指令的不同助记符。语法格式:LOOPlabel;CX=CX 1,若CX0,则转移到label LOOPZ/LOOPElabel;CX=CX 1,若CX0且ZF=1,则转移到labelLOOPNZ/LOOPNElabel;CX=CX 1,若CX0且ZF=0,则转移到label对标志位的影响:无。2022-11-2780 x86汇编语言程序设计3.3.4 控制转移指令 5.中断指令中断指令INT 本章只简单引入软件中断调用指令INT。详细介绍参见第8章。语法格式:INTn;调用中断n的中断服务程序。n 为中断号,取值0 255。对标志位

    38、的影响:不影响CF、OF、SF、ZF。MS DOS使用中断号21H作为系统调用,为程序员提供了上百种系统服务功能,对这些功能的调用步骤如下:(1)由AH给出功能号。(2)根据相应功能的要求,设置入口参数。(3)INT 21H。(4)分析和使用出口参数。其中,最常用的是功能号4CH,用来实现程序退出、并返回DOS。使用方法如下:movah,4ch int 21h 2022-11-2780 x86汇编语言程序设计3.3.5 标志处理指令 标志处理指令包括CLC(Clear Carry Flag,CF清0)、STC(Set Carry Flag,CF置1)、CMC(Complement Carry

    39、Flag,CF取反)、CLD(Clear Direction Flag,DF清0)、STD(Set Direction Flag,DF置1)、CLI(Clear Interrupt Flag,关中断)和STI(Set Interrupt Flag,开中断)。语法格式:CLC;CF=0STC;CF=1CMC;CF=NOT CFCLD;DF=0STD;DF=1CLI;IF=0STI;IF=1 对标志位的影响:只影响指定标志。注意,在程序中应慎重使用CLI指令,错误的使用会导致系统无法正常工作。2022-11-2780 x86汇编语言程序设计3.3.6 处理器控制指令 1 1NOPNOP(No Op

    40、erationNo Operation):无操作):无操作语法格式:NOP功能描述:NOP指令不做任何事情,只占用1个字节,耗费1个指令执行周期。说明:程序员经常使用NOP作为占位符(Place Holder),以预留内存空间。当然,可以使用其它指令实现类似功能,如XCHG AX,AX 指令。事实上,NOP与XCHG AX,AX 的机器码完全一样,都是90H。对标志位的影响:无。2022-11-2780 x86汇编语言程序设计3.3.6 处理器控制指令 2 2HLTHLT(HaltHalt):暂停):暂停语法格式:HLT功能描述:使CPU进入暂停状态,这时CPU不执行任何操作,直到系统复位或发

    41、生外部中断为止。中断使CPU继续执行HLT后的下一条指令。说明:HLT不能用来终止程序。通常,应用程序不使用该指令。对标志位的影响:无。2022-11-2780 x86汇编语言程序设计3.4 容易犯的错误 1 1操作数类型不匹配操作数类型不匹配例如,将BL的值送AX。错误方法:movax,bl;类型不匹配正确方法:(1)作为无符号数。moval,blmovah,0(2)作为带符号数。moval,blcbw 2022-11-2780 x86汇编语言程序设计3.4 容易犯的错误 2.2.凭空构造指令凭空构造指令例如:(1)实现AX=AL*5。错误方法:mul5;MUL的操作数不能是立即数(2)将内

    42、存单元(段地址在DS,偏移地址在AX)的一个字节送BL。错误方法:movbl,ax;内存操作数不能用AX正确方法:movsi,axmovbl,si2022-11-2780 x86汇编语言程序设计3.4 容易犯的错误 3 3对标志位的错误使用对标志位的错误使用例如:判断AX的值,若AX=0FFFFH,则转移到标号L。错误方法:notax;NOT不影响标志位jzl正确方法:xorax,0ffffhjzl或cmpax,0ffffhjel2022-11-2780 x86汇编语言程序设计3.5 实例 举例说明指令的使用方法。如例3.41、3.42、3.43、3.46等。2022-11-2780 x86汇

    43、编语言程序设计本章小结 80 x86指令的操作数包括3种形式:立即数、寄存器(通用寄存器和段寄存器)与内存操作数。对于内存操作数,由操作数的形式可计算出有效地址。在缺省情况下,其段地址隐含在段寄存器DS或SS中,除非由段超越前缀明确给出。80386以下的16位CPU只能使用16位指令系统。32位80 x86 CPU在兼容16位指令系统的基础上,支持32位操作数与32位内存寻址方式。在实模式下,可以使用32位立即数、32位通用寄存器和扩展的内存操作数形式,但计算出的有效地址只能是16位。大多数指令(如传送类指令)的执行不影响标志位,某些指令(如算术指令)的执行按一般规则影响标志位,还有一部分指令(如逻辑指令)会按特定方式(清0、置1等)影响标志位。

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:汇编语言程序设计-第3章 80x86指令系统课件.ppt
    链接地址:https://www.163wenku.com/p-4298983.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库