80 x86汇编语言程序设计.ppt
《80 x86汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《80 x86汇编语言程序设计.ppt(47页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、2019/10/23,80x86汇编语言程序设计,第3章 80x86指令系统,讲授要点,3种操作数(立即数、寄存器和内存操作数)的形式。 常用指令的格式、功能以及对CF、OF、SF、ZF的影响。 使用指令时容易犯的错误。,2019/10/23,80x86汇编语言程序设计,3.1 指令格式,1指令的书写格式 标号:指令助记符操作数; 注释2操作数的3种形式: 立即操作数:指令的操作数是立即数,并直接出现在指令中。 寄存器操作数:操作数是寄存器的值,指令中使用寄存器名。 内存操作数:操作数是某个内存单元的值,指令中给出有效地址EA,段地址在某个段寄存器中。,2019/10/23,80x86汇编语言
2、程序设计,3.2 操作数的形式,3.2.1 8086指令的操作数形式,1.立即数: 8位或16位立即数。2.寄存器操作数: 8位/16位通用寄存器和段寄存器(除了FS和GS)。3.内存操作数 包括下列几种形式。 Variable或 Variable regdispregbaseindexdispbaseindex,说明: Variable是变量名或变量名 整数表达式。 reg为BX、BP、SI、DI。 disp可以是常量或变量,汇编后为一个常数,若是变量,则取其偏移地址。 base为BX或BP,index为SI或DI。 有效地址为各项之和。如dispbaseindex形式,EA = base
3、+ index + disp。 若使用了BP,则隐含段地址在SS,否则在DS。 当段地址不在隐含的段寄存器时,可使用段超越前缀,形式为:段寄存器名:,2019/10/23,80x86汇编语言程序设计,3.2.2 32位CPU扩展的操作数形式,1.立即数: 32位立即数。2.寄存器操作数: 32位通用寄存器以及FS和GS。3.内存操作数 包括下列几种形式。 base dispbasebaseindex dispbaseindexindex*ndispindex*n baseindex*n dispbaseindex*n,说明: base、index为任一32位通用寄存器(index不能取ESP)
4、。 n为比例因子,取1、2、4或8。 若包含base且base为EBP或ESP,则隐含段地址在SS;否则,隐含段地址在DS。 若在16位CPU上编程,则不能使用这些寻址方式。,2019/10/23,80x86汇编语言程序设计,3.3 指令系统,介绍设计完整程序所需的常用指令,对于其余指令,一部分在后续章节中讲授,一部分自学。 介绍常用指令的格式、功能以及对CF、OF、SF、ZF的影响。,2019/10/23,80x86汇编语言程序设计,为了描述方便,采用下列符号约定:dest 目的操作数src 源操作数oprdn 第n个操作数,如oprd1, oprd2, oprd3= 赋值/ 或者reg8
5、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/imm32,2019/10/23,8
6、0x86汇编语言程序设计,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必须类型匹配,即同时是字节、字或双字类型。,2019/10/23,80x86汇编语言程序设计,3.3.1 数据传送指令,2. X
7、CHG ( Exchange ):交换一般形式:XCHGoprd1, oprd2; 交换oprd1与oprd2的内容语法格式:XCHGreg/mem, reg/mem 对标志位的影响:无。说明:oprd1与oprd2不能作如下搭配:XCHGmem, mem; 错误oprd1与oprd2类型必须匹配。、【例】xchgebx, edxxchgebpeax*4, edx,2019/10/23,80x86汇编语言程序设计,3.3.1 数据传送指令,3. LEA (Load Effective Address ) :装入有效地址语法格式:LEAreg16, mem; reg16 = mem的有效地址对标
8、志位的影响:无。【例】设BX = 5678H,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的高字对标志位的影响:无。,2019/10/23,80x86汇编语言程序设计,3.3.1 数据传送指令,5. 堆栈操作指令 80x86系统的堆栈具有如下特点:堆栈是在内存的堆栈段中,具有“先进后出
9、”的特点。堆栈只有一个出入口,即当前栈顶。当堆栈为空时,栈顶和栈底指向同一内存单元。堆栈有两个基本操作:PUSH(进栈)和POP(出栈)。PUSH操作使栈顶向低地址方向移动,而POP操作则刚好相反。堆栈操作只能以字或双字为单位。SS:SP指向栈顶。,2019/10/23,80x86汇编语言程序设计,3.3.1 数据传送指令,(1)PUSH与POP:进栈与出栈 语法格式:PUSHreg16/seg/mem16/ reg32/mem32 POPreg16/seg/mem16/ reg32/mem32; 操作数不能是CSPUSHimm; 286新增 功能描述:PUSH指令(16位): SP = SP
10、 - 2SS:SP = 16位操作数POP指令(16位): 16位操作数 = SS:SPSP = SP + 2PUSH指令(32位): SP = SP - 4SS:SP = 32位操作数POP指令(32位): 32位操作数 = SS:SPSP = SP + 4 对标志位的影响:无。,2019/10/23,80x86汇编语言程序设计,3.3.1 数据传送指令,(2)PUSHF与POPF:标志寄存器进栈和出栈 语法格式:PUSHF; FLAGS进栈POPF; 栈顶字出栈到FLAGS对标志位的影响:只有POPF指令会以弹出值设置标志寄存器。 【例】设SP = 100H, EBX = 12345678
11、H, 给出下列指令依次执行后的结果。pushbx; ss:00ffh = 56h, ss:00feh = 78h, sp = 0fehpopax; ax = 5678h, sp = 100hpushebx; ss:00feh = 1234h, ss:00fch = 5678h, sp = 0fchpopax; ax = 5678h, sp = 0fehpopax; ax = 1234h, sp = 100h 【例】交换AX与CX的值。pushaxpushcxpopaxpopcx,2019/10/23,80x86汇编语言程序设计,3.3.1 数据传送指令,6. 标志寄存器传送指令(1)LAHF(
12、Load AH from Flags)语法格式:LAHF; AH = FLAGS的低8位对标志位的影响:无。(2)SAHF(Store AH into Flags)语法格式:SAHF; FLAGS的低8位 = AH对标志位的影响:由新装入值确定。,2019/10/23,80x86汇编语言程序设计,3.3.1 数据传送指令,符号扩展与零扩展指令对标志位的影响:无。(1)CBW、CWD、CWDE与CDQ语法格式:CBW; AL符号扩展为AX CWD; AX符号扩展为32位数DX:AX CWDE; AX符号扩展为EAX;386新增CDQ; EAX符号扩展为64位数EDX:EAX;386新增【例】设A
13、L = 0FEH,给出依次执行下列指令后的结果。cbw; ax = 0fffehcwd; dx = 0ffffh, ax不变,即dx:ax = -2cwde; eax = 0fffffffeh(-2)cdq; edx = 0ffffffffh, eax不变,即edx:eax = -2,2019/10/23,80x86汇编语言程序设计,3.3.1 数据传送指令,(2)MOVSX 一般形式:MOVSXdest, src; src符号扩展为dest;386新增 语法格式: MOVSXreg16, reg8/mem8MOVSXreg32, reg8/mem8/reg16/mem16 功能描述:MOVS
14、X是CBW、CWD和CWDE的一般形式,用来将8位数符号扩展为16位或32位数,或者将16位数符号扩展为32位数。 【例】 CBW和CWDE的功能可由MOVSX指令实现。movsxax, al ; 等价于cbw movsx eax, ax ; 等价于cwde movsx eax, al; 等价于顺序执行cbw与cwde,2019/10/23,80x86汇编语言程序设计,3.3.1 数据传送指令,(3)MOVZX 一般形式:MOVZXdest, src; src零扩展为dest;386新增 语法格式: MOVZXreg16, reg8/mem8MOVZXreg32, reg8/mem8/reg1
15、6/mem16,2019/10/23,80x86汇编语言程序设计,3.3.1 数据传送指令,8. XLAT(Translate):换码 语法格式:XLAT; AL = DS: BX +AL 功能描述:将DS:BX所指内存区中、由AL指定位移处的一个字节赋给AL。 对标志位的影响:无。,2019/10/23,80x86汇编语言程序设计,3.3.2 算术指令,1. 加法 一般形式:ADDdest, src; dest = dest + srcADCdest, src; dest = dest + src + CF INCdest; dest = dest + 1 语法格式:ADDreg/mem,
16、reg/mem/immADCreg/mem, reg/mem/immINCreg/mem 对标志位的影响: ADD、ADC:按一般规则影响CF、OF、SF和ZF。 INC:不影响CF,其它同ADD。 说明:ADD与ADC的2个操作数必须类型匹配,且不能同时是内存操作数。,2019/10/23,80x86汇编语言程序设计,3.3.2 算术指令,2. 减法 一般形式:SUBdest, src; dest = dest srcSBBdest, src; dest = dest - src CFCMPdest, src; dest src。 与SUB的区别在于,不将减法结果存入dest。DECdest
17、; 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:不影响CF,其它同SUB。 说明:2个操作数必须类型匹配,且不能同时是内存操作数。,2019/10/23,80x86汇编语言程序设计,3.3.2 算术指令,3. 乘法(1)MUL(Unsigned Multiplic
18、ation):无符号乘法一般形式: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;其余标志无定义。说明:由于2个n位数的乘积可能需要2n位,因此,若操作数是8位,则结果为16位;同样,16位操作数相乘结果为32位,32位数相乘结果为64位。,2019/10/23,80x86汇编语言
19、程序设计,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;其余标志无定义。说明:由于2个n位数的乘积可能需要2n位,因此,若操作数是8位,则结果为16位;同样,16位操作数相乘结果为32位,32位数相乘结果
20、为64位。 【例】对于同一个二进制数,采用 MUL与IMUL执行的结果可能不同。设AL = 0FFH,BL = 1,分别执行下列指令,会得出不同结果。mulbl; ax = 0ffh(255)imulbl; ax = 0ffffh(-1),2019/10/23,80x86汇编语言程序设计,3.3.2 算术指令,4. 除法一般形式:DIVsrc; 无符号数除法IDIV src; 带符号数除法语法格式:DIVreg/mem IDIVreg/mem功能描述: src是8位:AXsrc,结果商在AL、余数在AH。 src是16位:DX:AXsrc,结果商在AX、余数在DX。 src是32位:EDX:E
21、AXsrc,结果商在EAX、余数在EDX。对标志位的影响:无定义。,2019/10/23,80x86汇编语言程序设计,3.3.2 算术指令,5.十进制调整指令 (1)压缩BCD码调整指令语法格式:DAA; 调整AL中的和为压缩BCD码DAS; 调整AL中的差为压缩BCD码功能描述: DAA:通常先执行ADD/ADC指令,将2个压缩BCD码相加,结果存放在AL中。然后使用该指令将AL调整为压缩BCD码格式。 DAS:通常先执行SUB/SBB指令,将2个压缩BCD码相减,结果存放在AL中。然后使用该指令将AL调整为压缩BCD码格式。对标志位的影响:OF不确定;CF反映压缩BCD码相加/相减的进位/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 80 x86 汇编 语言程序设计
限制150内