汇编语言程序设计-第3章 80x86指令系统课件.ppt
- 【下载声明】
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位
展开阅读全文